統計ロードマップ
2026-04-30·実装·⏱ 約 4

SHAP で AI の判断を説明する ─ XAI 実践入門

ブラックボックスな ML モデルの予測根拠を、ゲーム理論ベースの SHAP で可視化する方法。LIME との比較、実装、ビジネスでの活かし方まで。

SHAP(SHapley Additive exPlanations) は、ゲーム理論の Shapley 値 をベースに、ML モデルの予測に対する各特徴量の寄与を厳密に分解する手法。XGBoost・LightGBM・NN 何にでも使えます。

Shapley 値とは

協力ゲームの公平な利得分配

人で協力してゲームに勝ち、賞金 を獲得した。各人の貢献度はどう分けるべきか?

Shapley 値: あらゆる加入順序の組合せで『その人がいる時といない時の差』を平均した値。唯一の公平な分配 であることが理論的に証明されている(対称性・効率性・線形性・無効プレイヤー)。

ML への応用

特徴量を 1 つずつモデルに加えたとき、予測がどう変わるか』を全順序で平均することで、各特徴量の貢献値 を算出。これが SHAP 値。

TreeSHAP ─ 決定木向け高速版

上記の式は組合せ爆発で計算困難。TreeSHAP は決定木構造を利用して 多項式時間で厳密 に計算可能。XGBoost・LightGBM・CatBoost の標準機能。

Python で SHAP 値を計算
import shap
import xgboost as xgb
from sklearn.datasets import fetch_california_housing

data = fetch_california_housing()
X, y = data.data, data.target

model = xgb.XGBRegressor(n_estimators=100).fit(X, y)

# TreeSHAP で全特徴量の寄与を算出
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X[:100])

# 寄与度のサマリープロット
shap.summary_plot(shap_values, X[:100], feature_names=data.feature_names)
# 個別予測の Force プロット
shap.force_plot(explainer.expected_value, shap_values[0], X[0], matplotlib=True)

SHAP vs LIME

  • SHAP: 理論的裏付けあり、グローバル/ローカル両対応、決定木で高速
  • LIME: モデル非依存、特定サンプル周辺を線形近似、画像・テキストでも使える
  • 両方を組み合わせて使うのが実務の定石

ビジネスでの活かし方

  • 金融: 与信スコアの根拠を顧客に説明(GDPR の説明権対応)
  • 医療: 診断 AI が『なぜこの病気と判定したか』を医師に提示
  • 採用: 候補者選抜の理由を透明化(差別防止)
  • Kaggle: 自分の特徴量がどれだけ効いているかを可視化 → 改善
💡 SHAP は『局所 + 大域』を統一的に扱える

個別予測の寄与(Force プロット)もモデル全体の傾向(Summary プロット)も同じ枠組みで見られる。LIME は局所だけ、Permutation Importance は大域だけ。統一的に扱えるのが SHAP の強み

関連

  • [ブログ: モデル解釈性 入門](/blog/model-interpretability-shap)
  • [G 検定 教科書](/certs/g-test/textbook) ─ XAI を概念ベースで
  • [特徴量エンジニアリング](/blog/feature-engineering-101)
Related Articles

関連記事