KernelSHAP 計算 Shapley value 需要枚舉 2ⁿ 個特徵子集 — 30 個特徵就有 10 億種組合。TreeSHAP 利用樹結構,把這個指數級的計算壓縮成多項式時間,且結果完全精確。這頁帶你看懂這個 10⁶ 倍速差的祕密。
前面那篇 LIME vs SHAP 提到,SHAP 要算每個特徵的「平均邊際貢獻」 — 必須對所有可能的特徵子集都跑一次模型。問題是:n 個特徵會有 2ⁿ 個子集。
把每個特徵想成「在 / 不在」聯盟兩種狀態,n 個特徵就有 2ⁿ 種可能聯盟。對每個聯盟都要跑模型 → 計算量隨 n 指數成長。
現實的金融或醫療模型動輒 50~200 個特徵。KernelSHAP 即使用採樣近似,也無法兼顧速度與精確度。這就是 TreeSHAP 出現的契機。
決策樹的預測是「分段常數」 — 從根節點走到葉節點的那條路徑,決定了預測值。路徑上用了哪些特徵?沒用到的特徵根本不會影響這次預測。這是 TreeSHAP 的第一塊基石。
關鍵體會:負債比這個特徵從來沒被這棵樹的任何節點使用。對單棵樹而言,它的 SHAP 值就是 0。模型的「特徵重要性」其實寫在樹的結構裡。
Shapley value 要算「有這個特徵 vs 沒有這個特徵」的預測差。KernelSHAP 真的去跑所有子集;TreeSHAP 換一招 — 用訓練資料在每個節點的流量分佈(cover)來近似「特徵不存在」時的預測。
比較兩種情境下,根節點的預期輸出
這個「揭露 − 隱藏」差值就是該特徵在這個節點上對預測的邊際影響。TreeSHAP 把這個比較沿著樹遞迴展開,並用 Shapley 組合權重精確加總 — 完全不需要枚舉 2ⁿ 個子集。
下面把上面的概念變成具體的演算法步驟。同一棵樹,同一個樣本,按下「下一步」一步步看 TreeSHAP 怎麼累積每個特徵的 SHAP 值:
把 KernelSHAP 與 TreeSHAP 套到三個常見規模的模型上,看實際 operation 數差距:
KernelSHAP 的曲線在 n=20 之後就「飛出畫面」 — 對特徵維度有指數敏感性。
TreeSHAP 對 n 幾乎無感,只在意樹的數量與深度。
TreeSHAP 實際上有兩種估計「特徵不存在」的方式,差別在於用哪種分佈來邊際化:
| 變體 | 邊際化方式 | 適合場景 | 備註 |
|---|---|---|---|
| Path-dependent | 用訓練資料在每個節點的 cover 來估計流量 | 速度優先、特徵之間有相關性 | shap 套件預設、不需要背景資料集 |
| Interventional | 用外部 background 資料真的去算 E[f | x_S] | 需要嚴格因果語義、特徵獨立性假設成立時 | 需提供 background dataset、稍慢但更符合 SHAP 原始定義 |
TreeSHAP 是針對樹模型的高效 SHAP 演算法,iPAS 可解釋 AI 進階考點(中級科目三)。重點:一般 SHAP 計算量隨特徵數指數成長,TreeSHAP 利用樹結構把複雜度降到多項式時間,讓隨機森林、XGBoost 也能快速算出特徵貢獻。易混點:它是加速的精確解、非近似;適用對象是樹模型,神經網路要用其他方法。情境:大型樹模型的快速可解釋分析。
想練情境題與詳解 → AI 學習與考證地圖
一般 SHAP 要對特徵子集做大量組合運算、成本指數級;TreeSHAP 利用樹結構把樹模型的精確 Shapley 值計算降到多項式時間,實用得多。
樹的路徑與分裂結構讓貢獻可沿樹有效率地累加,不必窮舉所有特徵組合,就能直接算出精確值。
樹系模型:決策樹、隨機森林、GBDT、XGBoost、LightGBM 等;深度網路則用其他近似(如 DeepSHAP、KernelSHAP)。
TreeSHAP 給精確 Shapley 值;KernelSHAP 等對任意模型用取樣近似(較慢、有誤差)。能用 TreeSHAP 就用,又快又準。
高相關特徵的歸因要小心解讀;大資料時仍可能慢、可抽樣;解釋是相關非因果,需結合領域知識。