[{"data":1,"prerenderedAt":1139},["ShallowReactive",2],{"navigation_docs":3,"-data-analysis-shap-model-interpretation-complete-guide":352,"-data-analysis-shap-model-interpretation-complete-guide-surround":1134},[4,54,83,116,125,161,179,200],{"title":5,"path":6,"stem":7,"children":8},"Ai","/ai","ai",[9,12,42,46,50],{"title":10,"path":6,"stem":11},"AI 技術探索","ai/index",{"title":13,"path":14,"stem":15,"children":16,"page":41},"Rag","/ai/rag","ai/RAG",[17,21,25,29,33,37],{"title":18,"path":19,"stem":20},"BM25 演算法深入解析：從 TF-IDF 到現代搜尋引擎的核心技術","/ai/rag/bm25-deep-dive-from-tf-idf-to-rag","ai/RAG/bm25-deep-dive-from-tf-idf-to-rag",{"title":22,"path":23,"stem":24},"Dense Retrieval（向量檢索）深入解析","/ai/rag/dense-retrieval-deep-dive","ai/RAG/dense-retrieval-deep-dive",{"title":26,"path":27,"stem":28},"RAG（Retrieval-Augmented Generation）原理與實作入門","/ai/rag/rag-intro-principles-and-implementation","ai/RAG/rag-intro-principles-and-implementation",{"title":30,"path":31,"stem":32},"RAG Retrieval Strategy 深入解析","/ai/rag/rag-retrieval-strategy-deep-dive","ai/RAG/rag-retrieval-strategy-deep-dive",{"title":34,"path":35,"stem":36},"Reciprocal Rank Fusion（RRF）教學：打造更穩定的檢索融合策略","/ai/rag/rrf-reciprocal-rank-fusion-guide","ai/RAG/rrf-reciprocal-rank-fusion-guide",{"title":38,"path":39,"stem":40},"TF-IDF（Term Frequency–Inverse Document Frequency）深入解析","/ai/rag/tf-idf-deep-dive","ai/RAG/tf-idf-deep-dive",false,{"title":43,"path":44,"stem":45},"Docus AI 功能完整實作指南","/ai/docus-ai-implementation","ai/docus-ai-implementation",{"title":47,"path":48,"stem":49},"llms.txt 是什麼？在 Nuxt 中控制 AI 與搜尋引擎爬蟲的新方式","/ai/llms-txt","ai/llms-txt",{"title":51,"path":52,"stem":53},"MCP（Model Context Protocol）是什麼？用「AI 的 USB-C」理解模型如何安全連接工具與資料","/ai/mcp_concept","ai/mcp_concept",{"title":55,"path":56,"stem":57,"children":58,"page":41},"Data Analysis","/data-analysis","data-analysis",[59,63,67,71,75,79],{"title":60,"path":61,"stem":62},"Exploratory Data Analysis（EDA）資料探索分析入門","/data-analysis/exploratory-data-analysis-eda","data-analysis/exploratory-data-analysis-eda",{"title":64,"path":65,"stem":66},"PR-AUC 深入解析：不平衡分類問題的重要評估指標","/data-analysis/pr-auc-for-imbalanced-classification","data-analysis/pr-auc-for-imbalanced-classification",{"title":68,"path":69,"stem":70},"ROC-AUC 深入解析：理解分類模型的判斷能力","/data-analysis/roc-auc-complete-guide","data-analysis/roc-auc-complete-guide",{"title":72,"path":73,"stem":74},"SHAP（SHapley Additive exPlanations）模型解釋方法深入解析","/data-analysis/shap-model-interpretation-complete-guide","data-analysis/shap-model-interpretation-complete-guide",{"title":76,"path":77,"stem":78},"Social Network Analysis（SNA）深入解析","/data-analysis/social-network-analysis-sna","data-analysis/social-network-analysis-sna",{"title":80,"path":81,"stem":82},"Time-based Split：為什麼時間序列資料不能使用 Random Split？","/data-analysis/time-based-split-vs-random-split","data-analysis/time-based-split-vs-random-split",{"title":84,"path":85,"stem":86,"children":87,"page":41},"MachineLearning","/machine_learning","machine_learning",[88,92,96,100,104,108,112],{"title":89,"path":90,"stem":91},"Confusion Matrix（混淆矩陣）完整解析","/machine_learning/confusion-matrix","machine_learning/confusion-matrix",{"title":93,"path":94,"stem":95},"Decision Tree 模型完整教學：從原理到 Python 實作","/machine_learning/decision-tree-complete-guide","machine_learning/decision-tree-complete-guide",{"title":97,"path":98,"stem":99},"為什麼 Decision Tree 在 Tabular Data 上常常勝過 Deep Learning？","/machine_learning/decision-tree-vs-deep-learning-on-tabular-data","machine_learning/decision-tree-vs-deep-learning-on-tabular-data",{"title":101,"path":102,"stem":103},"LightGBM 模型入門：理解高效能的 Gradient Boosting 演算法","/machine_learning/lightgbm-intro-for-tabular-data","machine_learning/lightgbm-intro-for-tabular-data",{"title":105,"path":106,"stem":107},"Logistic Regression（Logit 回歸）完整教學","/machine_learning/logistic-regression-complete-guide","machine_learning/logistic-regression-complete-guide",{"title":109,"path":110,"stem":111},"為什麼模型訓練需要 Train / Validation / Test Dataset？","/machine_learning/train-validation-test-dataset","machine_learning/train-validation-test-dataset",{"title":113,"path":114,"stem":115},"XGBoost 原理與實務教學","/machine_learning/xgboost-complete-guide","machine_learning/xgboost-complete-guide",{"title":117,"path":118,"stem":119,"children":120,"page":41},"Network","/network","network",[121],{"title":122,"path":123,"stem":124},"DNS 設定入門：CNAME vs A Record 完整解析","/network/dns-cname-vs-a-record-guide","network/dns-cname-vs-a-record-guide",{"title":126,"path":127,"stem":128,"children":129},"Nuxt","/nuxt","nuxt",[130,133,137,141,145,149,153,157],{"title":131,"path":127,"stem":132},"Nuxt 實戰指南","nuxt/index",{"title":134,"path":135,"stem":136},"Abstraction Layer 與 Adapter 的差別，一次搞懂設計角色","/nuxt/adapter_abstraction_layer","nuxt/adapter_abstraction_layer",{"title":138,"path":139,"stem":140},"Nuxt 4 全面理解 — 專案檔案結構解析","/nuxt/directory_structure","nuxt/directory_structure",{"title":142,"path":143,"stem":144},"Nuxt 前端 build 流程完整解析","/nuxt/frontend_build","nuxt/frontend_build",{"title":146,"path":147,"stem":148},"Nitro 是什麼？從 Nuxt 專案到 Server 與 Edge 的關鍵引擎","/nuxt/nitro","nuxt/nitro",{"title":150,"path":151,"stem":152},"深入理解 Nuxt 的 .nuxt 與 .output：為什麼部署時一定要分清楚？","/nuxt/nuxt_and_output","nuxt/nuxt_and_output",{"title":154,"path":155,"stem":156},"Nuxt 中 dev、build、preview 的差異一次搞懂","/nuxt/nuxt_dev_build_preview","nuxt/nuxt_dev_build_preview",{"title":158,"path":159,"stem":160},"Nuxt Image vs \u003Cimg>：為什麼 Nuxt 3 專案幾乎都該用 \u003CNuxtImg>？","/nuxt/nuxt_image","nuxt/nuxt_image",{"title":162,"path":163,"stem":164,"children":165},"Python 程式開發","/python","python/index",[166,167,171,175],{"title":162,"path":163,"stem":164},{"title":168,"path":169,"stem":170},"如何在 FastAPI 中調用記憶體 Buffer 回傳圖片 (附實例)","/python/memory_buffer","python/memory_buffer",{"title":172,"path":173,"stem":174},"Python 單元測試教學：如何為你的程式撰寫 Test","/python/python-unit-testing-unittest-pytest","python/python-unit-testing-unittest-pytest",{"title":176,"path":177,"stem":178},"如何使用 uv 取代 pip：改善 Python 專案的開發流程","/python/uv","python/uv",{"title":180,"path":181,"stem":182,"children":183,"page":41},"Statistic","/statistic","statistic",[184,188,192,196],{"title":185,"path":186,"stem":187},"卡方檢定（Chi-Square Test）入門教學","/statistic/chi-square-test-intro","statistic/chi-square-test-intro",{"title":189,"path":190,"stem":191},"常見抽樣方法（Sampling Methods）教學：Stratified、Quota、Convenience、Systematic、Simple Random","/statistic/common-sampling-methods-guide","statistic/common-sampling-methods-guide",{"title":193,"path":194,"stem":195},"Cramér’s V 指標介紹：如何衡量兩個類別變數之間的關聯","/statistic/cramers-v-for-categorical-association","statistic/cramers-v-for-categorical-association",{"title":197,"path":198,"stem":199},"Mann–Whitney U 與 Kolmogorov–Smirnov（KS）檢定：非參數統計檢定的入門指南","/statistic/mann-whitney-u-and-ks-test-intro","statistic/mann-whitney-u-and-ks-test-intro",{"title":201,"path":202,"stem":203,"children":204},"WebDev","/web_dev","web_dev",[205,208,234,248,282,312,334],{"title":206,"path":202,"stem":207},"Web 前端開發","web_dev/index",{"title":209,"path":210,"stem":211,"children":212},"瀏覽器與渲染","/web_dev/browser","web_dev/browser/index",[213,214,218,222,226,230],{"title":209,"path":210,"stem":211},{"title":215,"path":216,"stem":217},"瀏覽器儲存空間完整解析：Cookie、localStorage、IndexedDB 到 Cache Storage","/web_dev/browser/browser-storage-comprehensive-guide","web_dev/browser/browser-storage-comprehensive-guide",{"title":219,"path":220,"stem":221},"DOM (Document Object Model) 深入解析","/web_dev/browser/dom","web_dev/browser/dom",{"title":223,"path":224,"stem":225},"Service Worker Request Flow 深入解析","/web_dev/browser/service-worker-request-flow","web_dev/browser/service-worker-request-flow",{"title":227,"path":228,"stem":229},"CSR、SSR 與 SSG 是什麼？前端渲染策略完整比較","/web_dev/browser/ssr_csr_ssg","web_dev/browser/ssr_csr_ssg",{"title":231,"path":232,"stem":233},"Virtual DOM 深入解析：為什麼它能優化前端效能？","/web_dev/browser/virtual_dom","web_dev/browser/virtual_dom",{"title":235,"path":236,"stem":237,"children":238},"圖形技術","/web_dev/graphics","web_dev/graphics/index",[239,240,244],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"為什麼 Three.js 專案幾乎都選擇 CSR？從 SSR 問題談起","/web_dev/graphics/threejs_csr","web_dev/graphics/threejs_csr",{"title":245,"path":246,"stem":247},"WebGL 是什麼？為什麼前端 3D 幾乎都靠它？","/web_dev/graphics/webgl","web_dev/graphics/webGL",{"title":249,"path":250,"stem":251,"children":252},"架構與配置","/web_dev/infrastructure","web_dev/infrastructure/index",[253,254,258,262,266,270,274,278],{"title":249,"path":250,"stem":251},{"title":255,"path":256,"stem":257},"Zeabur + K3s + Nuxt 部署架構完整解析","/web_dev/infrastructure/k3s-zeabur","web_dev/infrastructure/K3s-zeabur",{"title":259,"path":260,"stem":261},"ECS vs Docker vs Kubernetes：從部署堆疊理解三層架構","/web_dev/infrastructure/ecs-docker-kubernetes-stack","web_dev/infrastructure/ecs-docker-kubernetes-stack",{"title":263,"path":264,"stem":265},"ECS vs VPS 是什麼？從部署網站的角度一次搞懂差別","/web_dev/infrastructure/ecs-vs-vps","web_dev/infrastructure/ecs-vs-vps",{"title":267,"path":268,"stem":269},"Zeabur 內網服務連線完整入門指南","/web_dev/infrastructure/k3s-internal-networking","web_dev/infrastructure/k3s-internal-networking",{"title":271,"path":272,"stem":273},"使用 Microservices 架構設計系統的優勢解析","/web_dev/infrastructure/microservices-architecture-advantages","web_dev/infrastructure/microservices-architecture-advantages",{"title":275,"path":276,"stem":277},"Nginx 入門教學：從反向代理到與 Kubernetes 的架構比較","/web_dev/infrastructure/nginx-intro","web_dev/infrastructure/nginx-intro",{"title":279,"path":280,"stem":281},"YAML 配置是什麼？為什麼現代開發都在用它","/web_dev/infrastructure/yaml-configuration","web_dev/infrastructure/yaml-configuration",{"title":283,"path":284,"stem":285,"children":286},"網絡與通訊","/web_dev/network","web_dev/network/index",[287,288,292,296,300,304,308],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"HTTP Request 結構完整解析：從 Request Line 到 Header 一次看懂","/web_dev/network/http-request-structure","web_dev/network/http-request-structure",{"title":293,"path":294,"stem":295},"OSI 模型（Open Systems Interconnection Model）完整解析","/web_dev/network/osi-model","web_dev/network/osi-model",{"title":297,"path":298,"stem":299},"RESTful API 設計原則與實務解析","/web_dev/network/restful-api","web_dev/network/restful-api",{"title":301,"path":302,"stem":303},"RESTful API 五大設計原則深入解析","/web_dev/network/restful-api-principles","web_dev/network/restful-api-principles",{"title":305,"path":306,"stem":307},"Server-Sent Events (SSE) 深入解析與實作教學","/web_dev/network/sse-introduction","web_dev/network/sse-introduction",{"title":309,"path":310,"stem":311},"WebSocket 入門教學：從概念到 Node.js 實作","/web_dev/network/websocket-introduction","web_dev/network/websocket-introduction",{"title":313,"path":314,"stem":315,"children":316},"認證與安全","/web_dev/security","web_dev/security/index",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"使用 Cookie 與 Session 建立使用者驗證（完整新手教學）","/web_dev/security/cookie-session-authentication","web_dev/security/cookie-session-authentication",{"title":323,"path":324,"stem":325},"JWT 驗證機制完整解析：從登入流程到實務應用","/web_dev/security/jwt-authentication","web_dev/security/jwt-authentication",{"title":327,"path":328,"stem":329},"Secret Key 簽名是什麼？從零理解資料簽名的本質","/web_dev/security/secret-key-signing","web_dev/security/secret-key-signing",{"title":331,"path":332,"stem":333},"SSH（Secure Shell）是什麼？從遠端登入到安全通道的核心概念","/web_dev/security/ssh","web_dev/security/ssh",{"title":335,"path":336,"stem":337,"children":338},"SEO 與規範","/web_dev/seo","web_dev/seo/index",[339,340,344,348],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Canonical URL 是什麼？用生活化方式搞懂前端 SEO 的基本保命符","/web_dev/seo/canonical_link","web_dev/seo/canonical_link",{"title":345,"path":346,"stem":347},"robots.txt 是什麼？SEO 的第一道守門員","/web_dev/seo/robot_txt","web_dev/seo/robot_txt",{"title":349,"path":350,"stem":351},"Nuxt SEO 中的 Meta 與 SEO 工具是如何運作的？","/web_dev/seo/seo","web_dev/seo/seo",{"id":353,"title":72,"body":354,"description":1122,"extension":1123,"links":1124,"meta":1125,"navigation":847,"path":73,"seo":1132,"stem":74,"__hash__":1133},"docs/data-analysis/shap-model-interpretation-complete-guide.md",{"type":355,"value":356,"toc":1107},"minimark",[357,362,371,374,377,399,406,413,416,420,431,434,440,443,455,458,461,505,511,513,517,520,523,526,540,546,553,599,602,613,616,635,638,640,644,647,652,655,663,666,677,680,684,687,695,698,704,707,715,718,722,728,731,739,741,747,753,755,759,762,765,788,791,927,930,955,958,967,970,978,980,984,987,994,1001,1009,1012,1023,1025,1029,1032,1038,1041,1048,1058,1061,1063,1066,1069,1076,1078,1081,1103],[358,359,361],"h2",{"id":360},"為什麼機器學習模型需要解釋","為什麼機器學習模型需要解釋？",[363,364,365,366,370],"p",{},"在許多機器學習應用中，我們通常不只關心「模型預測是否準確」，還希望知道 ",[367,368,369],"strong",{},"模型是如何做出決策的","。",[363,372,373],{},"例如在金融詐欺偵測、信用評分或醫療診斷等場景中，模型的預測結果往往會影響重要決策，因此必須能夠解釋。",[363,375,376],{},"舉例來說，如果一個模型判定某筆交易是「高風險詐欺交易」，我們通常會希望知道：",[378,379,380,387,393],"ul",{},[381,382,383,384],"li",{},"是因為 ",[367,385,386],{},"交易金額太高",[381,388,389,390],{},"還是因為 ",[367,391,392],{},"交易頻率異常",[381,394,395,396],{},"或者是 ",[367,397,398],{},"帳戶之間的交易關係可疑",[363,400,401,402,405],{},"傳統模型（例如 Linear Regression）通常比較容易解釋，因為每個變數都有明確的係數。但在像 ",[367,403,404],{},"Random Forest、XGBoost、LightGBM"," 這類複雜模型中，預測過程往往包含大量非線性關係，因此很難直接理解每個特徵的影響。",[363,407,408,409,412],{},"為了解決這個問題，研究者提出了 ",[367,410,411],{},"SHAP（SHapley Additive exPlanations）","，用來解釋模型預測結果中各個特徵的貢獻。",[414,415],"hr",{},[358,417,419],{"id":418},"shap-的核心概念shapley-value","SHAP 的核心概念：Shapley Value",[363,421,422,423,426,427,430],{},"SHAP 的理論基礎來自 ",[367,424,425],{},"賽局理論（Game Theory）"," 中的 ",[367,428,429],{},"Shapley Value"," 概念。",[363,432,433],{},"Shapley Value 最早用於計算多人合作遊戲中，每個玩家對最終收益的「公平貢獻」。",[363,435,436,437],{},"假設有三個玩家共同合作完成任務，獲得 100 元報酬。問題是：",[367,438,439],{},"這 100 元應該如何公平分配給三個人？",[363,441,442],{},"Shapley Value 的做法是：",[444,445,446,449,452],"ol",{},[381,447,448],{},"列舉所有玩家加入合作的順序",[381,450,451],{},"計算每個玩家加入後所帶來的「邊際貢獻」",[381,453,454],{},"對所有可能情況取平均",[363,456,457],{},"最後得到每個玩家的公平貢獻值。",[363,459,460],{},"在機器學習中，這個概念被轉換為：",[462,463,464,477],"table",{},[465,466,467],"thead",{},[468,469,470,474],"tr",{},[471,472,473],"th",{},"Game theory",[471,475,476],{},"Machine learning",[478,479,480,489,497],"tbody",{},[468,481,482,486],{},[483,484,485],"td",{},"玩家",[483,487,488],{},"特徵（feature）",[468,490,491,494],{},[483,492,493],{},"總收益",[483,495,496],{},"模型預測值",[468,498,499,502],{},[483,500,501],{},"玩家貢獻",[483,503,504],{},"特徵對預測的影響",[363,506,507,508,370],{},"換句話說，",[367,509,510],{},"SHAP value 就是衡量每個 feature 對模型預測結果的貢獻程度",[414,512],{},[358,514,516],{"id":515},"shap-如何解釋模型預測","SHAP 如何解釋模型預測？",[363,518,519],{},"在 SHAP 框架中，一個模型預測可以被拆解為：",[363,521,522],{},"$$\nPrediction = Base\\ Value + \\sum SHAP\\ Value_i\n$$",[363,524,525],{},"其中：",[378,527,528,534],{},[381,529,530,533],{},[367,531,532],{},"Base Value","：模型在整體資料上的平均預測",[381,535,536,539],{},[367,537,538],{},"SHAP Value","：每個特徵對該筆預測的貢獻",[363,541,542,543,370],{},"舉例來說，假設一個詐欺偵測模型預測某筆交易的詐欺機率為 ",[367,544,545],{},"0.72",[363,547,548,549,552],{},"模型的平均預測（Base Value）為 ",[367,550,551],{},"0.10","，而各個特徵的 SHAP value 如下：",[462,554,555,565],{},[465,556,557],{},[468,558,559,562],{},[471,560,561],{},"Feature",[471,563,564],{},"SHAP value",[478,566,567,575,583,591],{},[468,568,569,572],{},[483,570,571],{},"transaction_amount",[483,573,574],{},"+0.35",[468,576,577,580],{},[483,578,579],{},"account_age",[483,581,582],{},"-0.08",[468,584,585,588],{},[483,586,587],{},"transaction_frequency",[483,589,590],{},"+0.20",[468,592,593,596],{},[483,594,595],{},"device_risk",[483,597,598],{},"+0.15",[363,600,601],{},"因此：",[603,604,610],"pre",{"className":605,"code":607,"language":608,"meta":609},[606],"language-text","Prediction = 0.10 + 0.35 - 0.08 + 0.20 + 0.15 = 0.72\n","text","",[611,612,607],"code",{"__ignoreMap":609},[363,614,615],{},"這代表：",[378,617,618,624,630],{},[381,619,620,623],{},[367,621,622],{},"高交易金額"," 大幅提高詐欺風險",[381,625,626,629],{},[367,627,628],{},"帳戶年齡較長"," 降低詐欺風險",[381,631,632,634],{},[367,633,392],{}," 提高詐欺風險",[363,636,637],{},"透過 SHAP，我們就能清楚知道模型為何做出這個預測。",[414,639],{},[358,641,643],{"id":642},"shap-的三種常見視覺化","SHAP 的三種常見視覺化",[363,645,646],{},"在實務上，SHAP 通常搭配視覺化圖表來幫助理解模型。",[648,649,651],"h3",{"id":650},"_1-shap-summary-plot","1. SHAP Summary Plot",[363,653,654],{},"Summary plot 可以同時呈現：",[378,656,657,660],{},[381,658,659],{},"每個 feature 的重要性",[381,661,662],{},"feature 值大小與預測影響方向",[363,664,665],{},"常見的圖形會像這樣：",[378,667,668,671,674],{},[381,669,670],{},"每一列代表一個 feature",[381,672,673],{},"顏色表示 feature 值大小",[381,675,676],{},"橫軸表示 SHAP value",[363,678,679],{},"如果一個 feature 的 SHAP value 分布很廣，代表它對模型影響很大。",[648,681,683],{"id":682},"_2-shap-dependence-plot","2. SHAP Dependence Plot",[363,685,686],{},"Dependence plot 用來觀察：",[688,689,690],"blockquote",{},[363,691,692],{},[367,693,694],{},"某個 feature 的數值如何影響預測結果",[363,696,697],{},"例如：",[603,699,702],{"className":700,"code":701,"language":608,"meta":609},[606],"x 軸：transaction amount\ny 軸：SHAP value\n",[611,703,701],{"__ignoreMap":609},[363,705,706],{},"這樣可以觀察：",[378,708,709,712],{},[381,710,711],{},"金額越高，SHAP value 是否越大",[381,713,714],{},"是否存在非線性關係",[363,716,717],{},"這對於理解模型行為非常有幫助。",[648,719,721],{"id":720},"_3-shap-force-plot","3. SHAP Force Plot",[363,723,724,725,370],{},"Force plot 可以用來解釋 ",[367,726,727],{},"單一預測結果",[363,729,730],{},"圖形通常會呈現：",[378,732,733,736],{},[381,734,735],{},"紅色：增加預測值的特徵",[381,737,738],{},"藍色：降低預測值的特徵",[363,740,697],{},[603,742,745],{"className":743,"code":744,"language":608,"meta":609},[606],"Base value → feature contributions → final prediction\n",[611,746,744],{"__ignoreMap":609},[363,748,749,750],{},"這樣可以快速了解：",[367,751,752],{},"是哪些 feature 把預測推高或拉低。",[414,754],{},[358,756,758],{"id":757},"python-實作使用-shap-解釋模型","Python 實作：使用 SHAP 解釋模型",[363,760,761],{},"以下是一個簡單的 Python 範例，示範如何使用 SHAP 解釋模型。",[363,763,764],{},"首先安裝套件：",[603,766,770],{"className":767,"code":768,"language":769,"meta":609,"style":609},"language-bash shiki shiki-themes github-dark","pip install shap\n","bash",[611,771,772],{"__ignoreMap":609},[773,774,777,781,785],"span",{"class":775,"line":776},"line",1,[773,778,780],{"class":779},"svObZ","pip",[773,782,784],{"class":783},"sU2Wk"," install",[773,786,787],{"class":783}," shap\n",[363,789,790],{},"接著訓練一個模型：",[603,792,796],{"className":793,"code":794,"language":795,"meta":609,"style":609},"language-python shiki shiki-themes github-dark","import shap\nimport xgboost\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.datasets import load_breast_cancer\n\ndata = load_breast_cancer()\nX_train, X_test, y_train, y_test = train_test_split(\n    data.data, data.target, test_size=0.2, random_state=42\n)\n\nmodel = xgboost.XGBClassifier()\nmodel.fit(X_train, y_train)\n","python",[611,797,798,807,815,829,842,849,861,872,899,905,910,921],{"__ignoreMap":609},[773,799,800,804],{"class":775,"line":776},[773,801,803],{"class":802},"snl16","import",[773,805,787],{"class":806},"s95oV",[773,808,810,812],{"class":775,"line":809},2,[773,811,803],{"class":802},[773,813,814],{"class":806}," xgboost\n",[773,816,818,821,824,826],{"class":775,"line":817},3,[773,819,820],{"class":802},"from",[773,822,823],{"class":806}," sklearn.model_selection ",[773,825,803],{"class":802},[773,827,828],{"class":806}," train_test_split\n",[773,830,832,834,837,839],{"class":775,"line":831},4,[773,833,820],{"class":802},[773,835,836],{"class":806}," sklearn.datasets ",[773,838,803],{"class":802},[773,840,841],{"class":806}," load_breast_cancer\n",[773,843,845],{"class":775,"line":844},5,[773,846,848],{"emptyLinePlaceholder":847},true,"\n",[773,850,852,855,858],{"class":775,"line":851},6,[773,853,854],{"class":806},"data ",[773,856,857],{"class":802},"=",[773,859,860],{"class":806}," load_breast_cancer()\n",[773,862,864,867,869],{"class":775,"line":863},7,[773,865,866],{"class":806},"X_train, X_test, y_train, y_test ",[773,868,857],{"class":802},[773,870,871],{"class":806}," train_test_split(\n",[773,873,875,878,882,884,888,891,894,896],{"class":775,"line":874},8,[773,876,877],{"class":806},"    data.data, data.target, ",[773,879,881],{"class":880},"s9osk","test_size",[773,883,857],{"class":802},[773,885,887],{"class":886},"sDLfK","0.2",[773,889,890],{"class":806},", ",[773,892,893],{"class":880},"random_state",[773,895,857],{"class":802},[773,897,898],{"class":886},"42\n",[773,900,902],{"class":775,"line":901},9,[773,903,904],{"class":806},")\n",[773,906,908],{"class":775,"line":907},10,[773,909,848],{"emptyLinePlaceholder":847},[773,911,913,916,918],{"class":775,"line":912},11,[773,914,915],{"class":806},"model ",[773,917,857],{"class":802},[773,919,920],{"class":806}," xgboost.XGBClassifier()\n",[773,922,924],{"class":775,"line":923},12,[773,925,926],{"class":806},"model.fit(X_train, y_train)\n",[363,928,929],{},"接著計算 SHAP value：",[603,931,933],{"className":793,"code":932,"language":795,"meta":609,"style":609},"explainer = shap.TreeExplainer(model)\nshap_values = explainer.shap_values(X_test)\n",[611,934,935,945],{"__ignoreMap":609},[773,936,937,940,942],{"class":775,"line":776},[773,938,939],{"class":806},"explainer ",[773,941,857],{"class":802},[773,943,944],{"class":806}," shap.TreeExplainer(model)\n",[773,946,947,950,952],{"class":775,"line":809},[773,948,949],{"class":806},"shap_values ",[773,951,857],{"class":802},[773,953,954],{"class":806}," explainer.shap_values(X_test)\n",[363,956,957],{},"最後可以畫出 summary plot：",[603,959,961],{"className":793,"code":960,"language":795,"meta":609,"style":609},"shap.summary_plot(shap_values, X_test)\n",[611,962,963],{"__ignoreMap":609},[773,964,965],{"class":775,"line":776},[773,966,960],{"class":806},[363,968,969],{},"這張圖會顯示：",[378,971,972,975],{},[381,973,974],{},"哪些 feature 對模型最重要",[381,976,977],{},"feature 值如何影響預測結果",[414,979],{},[358,981,983],{"id":982},"shap-的優點","SHAP 的優點",[363,985,986],{},"SHAP 之所以在資料科學與機器學習領域廣泛使用，主要有幾個原因。",[363,988,989,990,993],{},"首先，SHAP 具有 ",[367,991,992],{},"理論基礎","。它建立在 Shapley Value 上，因此每個特徵的貢獻計算具有數學上的公平性。",[363,995,996,997,1000],{},"其次，SHAP 可以同時提供 ",[367,998,999],{},"global interpretation 與 local interpretation","：",[378,1002,1003,1006],{},[381,1004,1005],{},"Global：整體模型的重要特徵",[381,1007,1008],{},"Local：單一樣本的預測原因",[363,1010,1011],{},"最後，SHAP 與許多模型都可以搭配使用，包括：",[378,1013,1014,1017,1020],{},[381,1015,1016],{},"Tree models（XGBoost、LightGBM）",[381,1018,1019],{},"Linear models",[381,1021,1022],{},"Deep learning models",[414,1024],{},[358,1026,1028],{"id":1027},"shap-的限制","SHAP 的限制",[363,1030,1031],{},"雖然 SHAP 非常強大，但仍然有一些限制。",[363,1033,1034,1035,370],{},"首先，",[367,1036,1037],{},"計算成本較高",[363,1039,1040],{},"Shapley value 需要計算大量特徵組合，因此在特徵數量很多時，計算成本會變得很高。",[363,1042,1043,1044,1047],{},"其次，在 ",[367,1045,1046],{},"高度相關的特徵（correlated features）"," 情況下，SHAP 可能難以準確分配貢獻度。",[363,1049,1050,1051,1054,1055,370],{},"此外，SHAP 解釋的是 ",[367,1052,1053],{},"模型行為（model explanation）","，而不是 ",[367,1056,1057],{},"真實因果關係（causality）",[363,1059,1060],{},"換句話說，SHAP 告訴我們模型是如何做出決策，但不代表特徵真的造成了這個結果。",[414,1062],{},[358,1064,1065],{"id":1065},"結論",[363,1067,1068],{},"SHAP 是目前機器學習中最重要的模型解釋方法之一。它利用賽局理論中的 Shapley Value，將模型預測拆解為各個特徵的貢獻，使我們能夠理解複雜模型的決策過程。",[363,1070,1071,1072,1075],{},"透過 SHAP，我們不只可以知道模型是否準確，還可以理解 ",[367,1073,1074],{},"哪些特徵在影響模型決策、影響方向是什麼、以及單一預測是如何形成的","。在金融風險管理、詐欺偵測、醫療 AI 等需要高度可解釋性的應用中，SHAP 已經成為非常重要的工具。",[414,1077],{},[358,1079,1080],{"id":1080},"參考資料",[444,1082,1083,1086,1095],{},[381,1084,1085],{},"Lundberg, Scott M., and Su-In Lee. \"A Unified Approach to Interpreting Model Predictions.\" NeurIPS 2017.",[381,1087,1088,1089],{},"SHAP 官方文件：",[1090,1091,1092],"a",{"href":1092,"rel":1093},"https://shap.readthedocs.io",[1094],"nofollow",[381,1096,1097,1098,1102],{},"Molnar, Christoph. ",[1099,1100,1101],"em",{},"Interpretable Machine Learning",".",[1104,1105,1106],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":609,"searchDepth":809,"depth":809,"links":1108},[1109,1110,1111,1112,1117,1118,1119,1120,1121],{"id":360,"depth":809,"text":361},{"id":418,"depth":809,"text":419},{"id":515,"depth":809,"text":516},{"id":642,"depth":809,"text":643,"children":1113},[1114,1115,1116],{"id":650,"depth":817,"text":651},{"id":682,"depth":817,"text":683},{"id":720,"depth":817,"text":721},{"id":757,"depth":809,"text":758},{"id":982,"depth":809,"text":983},{"id":1027,"depth":809,"text":1028},{"id":1065,"depth":809,"text":1065},{"id":1080,"depth":809,"text":1080},"介紹 SHAP 指標的原理、 Shapley value 的概念，以及如何在機器學習模型中解釋特徵對預測結果的影響。","md",null,{"tags":1126,"category":57,"date":1131},[1127,1128,1129,1130],"machine learning","explainable ai","shap","model interpretation","2026-03-08",{"title":72,"description":1122},"kBdAOpuTD6dE16zFd1ssOcdPJCQ7U-J0OkwQBXksYXo",[1135,1137],{"title":68,"path":69,"stem":70,"description":1136,"children":-1},"介紹 ROC Curve 與 ROC-AUC 的概念、計算方式與實際應用，幫助理解分類模型在不同閾值下的表現。",{"title":76,"path":77,"stem":78,"description":1138,"children":-1},"介紹社會網路分析（Social Network Analysis, SNA）的基本概念、常見指標與應用場景，理解如何透過網路結構分析人際關係、資訊傳播與交易網路。",1776690841047]