🐡

SHAPによるモデル解釈 ── ゲーム理論ベースで“なぜその予測になったか”を説明する

に公開

Shapley Additive exPlanations(SHAP)は、ゲーム理論の Shapley 値を応用した機械学習モデルの説明手法。
複雑モデル でも公平かつ一貫” に特徴量寄与を数値化でき、豊富な可視化が魅力です。
本記事では

  1. なぜ SHAP が必要か(他手法との比較)
  2. SHAP 値の数学的定義
  3. 数式の直感的理解
  4. LightGBM × SHAP 実装 & 可視化
    をわかりやすく解説します。

目次

  1. SHAP とは?
  2. なぜ SHAP が必要か
    2.1 他手法との比較
  3. SHAP 値の数学的定義
  4. 数式の直感的理解
  5. LightGBM × SHAP 事例
    5.1 コード例
    5.2 可視化例
  6. SHAP の利点
  7. SHAP の限界・注意点
  8. まとめ
  9. 参考文献

SHAP とは

  • Shapley Additive exPlanations の略
  • ゲーム理論の Shapley 値 を応用し、
    • 各特徴量が「プレーヤー」
    • 予測値が「報酬」
      と見なして、誰がどれだけ貢献したかを“公正”に分配
  • ローカル(個別サンプル)とグローバル(全体傾向)の説明を 同一の枠組み で扱える

なぜ SHAP が必要か

  • 勾配ブースティングや DNN など高精度モデル ↔ ブラックボックス問題
  • 説明責任・透明性(XAI)への要求が高まる
  • 様々な説明手法があるが、多くは
    • グローバル or ローカルのどちらかのみ
    • 公平性・一貫性の理論保証が弱い

他手法との比較

手法 公平性 一貫性 グローバル ローカル 備考
Feature Importance 順序依存
PDP / ICE 相互作用無視
LIME 局所線形近似
SHAP 4 公理を満たす

ポイント:
SHAP は 唯一 「公平性」と「一貫性」を 数学的に保証 し、
さらにグローバル・ローカルをどちらも説明可能。


SHAP 値の数学的定義

対象となる特徴量集合を (M)((|M| = m))とし、
ある特徴量 i \in MSHAP 値 \phi_i(f,x) は次式で定義されます。

\phi_i(f,x)= \sum_{S \subseteq M \setminus \{i\}} \frac{|S|!\,\bigl(m-|S|-1\bigr)!}{m!}\, \Bigl[ f_{S \cup \{i\}}\!\bigl(x_{S \cup \{i\}}\bigr) \;-\; f_{S}\!\bigl(x_{S}\bigr) \Bigr]
  • S:特徴量 i含まない 任意の部分集合
  • f_{S}(x_{S}):集合 S の特徴量だけを入力したときのモデル予測
  • 重み \displaystyle \frac{|S|!\,\bigl(m-|S|-1\bigr)!}{m!} は、
    特徴量 i を挿入できる 全順列の平均 を取る係数

4 つの公理

  1. 効率性

    \sum_{i=1}^{m} \phi_i(f,x) \;=\; f(x) \;-\; \mathbb{E}[f(x)]

  2. 対称性
    寄与が常に同じ 2 つの特徴量 i,\,j については \phi_i = \phi_j

  3. 無関係ゼロ(Null player)
    予測に影響しない特徴量の寄与は 0

  4. 一貫性(Monotonicity)
    寄与が増えれば \phi_i も増える

これら 4 公理を 同時に満たす割り振りは一意 —— すなわち SHAP(Shapley 値) が最適解です


数式の直感的理解

八百屋ゲーム🛒

参加メンバー 得られた利益
A 100 円
B 0 円
C 50 円
A + B 150 円
A + C 200 円
B + C 60 円
A + B + C 250 円
  1. メンバーの並び順((3! = 6) 通り)をすべて列挙
  2. 「B が参加した瞬間の利益増分」を記録
  3. 平均すると B の Shapley 値 ≈ 26.7 円

直感

  • 順番の偏りを 完全に平均化 ⇒ 公平
  • 機械学習では「特徴量を順に追加したときの予測増分」を平均するだけ

LightGBM × SHAP 事例

データセット

  • UCI Adult:年収 > 50K か否か(二値分類)
  • 特徴量:Age, Education, Capital Gain, … ほか 13 項目

コード例

import lightgbm as lgb
from sklearn.model_selection import train_test_split
import shap

# 1. データ読み込み
X, y = shap.datasets.adult()
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=0)

# 2. LightGBM 学習
params = {
    "objective": "binary",
    "metric": "binary_logloss",
    "learning_rate": 0.1,
    "num_leaves": 31,
    "verbosity": -1
}
model = lgb.train(
    params,
    lgb.Dataset(X_train, y_train),
    valid_sets=[lgb.Dataset(X_test, y_test)],
    num_boost_round=100,
    callbacks=[lgb.early_stopping(10)]
)

# 3. SHAP 値計算
explainer = shap.TreeExplainer(model)
shap_vals = explainer.shap_values(X_test)[1]  # positive クラス
base = explainer.expected_value[1]

# 4. 可視化
shap.summary_plot(shap_vals, X_test)               # Summary
shap.summary_plot(shap_vals, X_test, plot_type="bar")   # Bar
shap.dependence_plot("Age", shap_vals, X_test)     # Dependence
shap.force_plot(base, shap_vals[0], X_test.iloc[0])      # Force
shap.decision_plot(base, shap_vals[:10], X_test.iloc[:10])  # Decision

可視化例

プロット 目的 使い所
Summary 全サンプル × 全特徴量を俯瞰 重要度 分布を同時確認
Bar 平均絶対 SHAP 値で重要度ランキング 手軽に重要特徴を把握
Force / Waterfall 個別サンプルの予測要因を可視化 1 件ずつの説明責任
Dependence 1 特徴量と SHAP の関係 相互作用 非線形・相互作用の洞察
Decision 特徴量が累積でどう効くか 複数サンプル比較
Heatmap Samples × Features の影響を色で表示 パターン探索

SHAP の利点

  • 理論保証:4 公理を満たす唯一の割り振り
  • 汎用性:KernelSHAP でどんなモデルでも適用可能
  • 高速化:TreeSHAP により木系モデルは線形時間
  • 豊富な可視化:Summary, Force, Dependence, … etc.
  • ローカル⇄グローバル 一貫性:粒度を変えても解釈がブレない

SHAP の限界・注意点

課題 解説 対策例
計算コスト 特徴量数が多いほど組合せ爆発 サンプリング・特徴量選択
特徴間相関 強い相関で寄与が分散 Group SHAP、相関考慮版
因果ではない モデル内寄与 ≠ 実世界の因果 因果推論と組み合わせ
解釈の習熟 可視化を読めるスキルが必要 ドメイン知識 × 可視化教育

まとめ

  • SHAP = Shapley 値 + Additive モデル
  • 「公平・一貫性」を 数学的に保証 しながら
    ローカル & グローバルを 同一の枠組み で説明
  • TreeSHAP で高速、可視化も多彩 → 実務投入しやすい
  • 計算コストや相関など限界も理解して使いこなそう!

参考文献

この記事が役に立ったら、いいね・コメントお待ちしています! 😊

Discussion