AIインフォグラフィックス集

AI Infographics Collection

モデル解釈 & 説明可能性 (XAI) 入門

モデル解釈 & 説明可能性 (XAI) 入門

『その予測、どうして?』に答えられる AI だけがビジネスで生き残る。グローバル/ローカル解釈、モデル固有/モデル非依存手法、SHAP・LIME から Counterfactual まで、基礎と実装フローを初学者向けに整理

📅 2025-04-28
📌

🔍 なぜ説明可能性が必要か?

視点 具体シナリオ リスク
法規制 EU AI Act
米国金融モデルリスク管理 (SR 11-7)
"ブラックボックス"は使用禁止/罰金
ビジネス 融資審査・医療診断 理由を説明できないと意思決定者が採用しない
技術 データバイアス・リーク 本番で精度暴落・差別的判断
格言:「精度が信頼を保証しない。説明が信頼を保証する。」
📝

🧩 解釈の2×2マトリクス

グローバル
(モデル全体)
ローカル
(個々の予測)
モデル固有 決定木のルール可視化
線形回帰の係数
KNN の近傍例
モデル非依存 Permutation Importance
Partial Dependence Plot
SHAP / LIME / Counterfactual

モデル固有構造自体が理解しやすい (線形・ツリー)。

モデル非依存どんなブラックボックスでも 入力 ↔ 出力 の振る舞いを観察。

📊

📚 主要手法カタログ

Feature Importance

何を示す?変数の寄与度

適用モデル任意

Pros / Cons直感的 / 相互作用は捉えにくい

Partial Dependence (PDP)

何を示す?特徴量と予測平均の関係

適用モデル任意

Pros / Consグローバル傾向○ / 高次元×

SHAP・LIME

何を示す?各特徴の貢献・近傍説明

適用モデル任意

Pros / Cons理論保証 / 計算コスト大

💻

🐍 Python 実装フロー (SHAP例)

import shap, xgboost, pandas as pd X, y = load_boston(return_X_y=True, as_frame=True) model = xgboost.XGBRegressor().fit(X, y) explainer = shap.Explainer(model, X) shap_values = explainer(X.iloc[:100]) # ① グローバル:重要度バー shap.plots.bar(shap_values) # ② ローカル:水泳図(force plot) shap.plots.waterfall(shap_values[0])

* Tip:大規模データは shap.sample(X, 5000) で速度改善

* 解釈:正方向(赤)・負方向(青)寄与、合計が予測値

🎯

🧪 ユースケース別おすすめ手法

ドメイン 問題 推奨
融資スコアリング 公平性検証 SHAP + Counterfactual (性別入替)
医用画像 病変部位の可視化 Grad-CAM / Score-CAM
マーケ施策 変数の感度分析 PDP + ICE
IoT 異常検知 アラート根因分析 LIME (高速)
LLM 出力 出典確認 RAG + Citation + SHAP-text
📏

📈 評価指標とテスト

指標 目的
Faithfulness 重要度≒性能低下度? シャッフル前後の MSE 差
Stability サンプルor初期値に頑健? 再計算して順位一致率
Complexity 説明の長さ適切? ルール数、平均深さ

🔄 検証を繰り返す

説明性と精度のバランスを最適化

🧪 実務家評価を含める

技術指標だけでなく理解度も確認

📋 実務導入チェックリスト

  • ビジネス&規制要件で必要説明粒度を定義
  • グローバル vs ローカル の両輪を用意
  • UI/レポート:ビジネス部門向けに自然言語+可視化
  • モデル更新時は 再解釈 → drift 監視
  • セキュリティ/プライバシー:説明に個人情報が漏れないか

運用プロセス化が重要! 説明可能性は一度きりの分析ではなく継続的な活動

🏁

💡 まとめ

  1. バケツリスト:Feature Importance → PDP → SHAP が王道
  2. グローバル・ローカル をセットで把握すると意思決定が楽
  3. 理論だけでなく 評価指標・運用ガバナンス まで含めて XAI
  4. "説明のためのモデル"ではなく"目的達成のための説明"を忘れずに

手元のモデルで shap.Explainer を一度動かし、バー図+水泳図の二枚をチームへ共有してみましょう!

🔮

🧠 補足:Counterfactual事例

Counterfactualとは?

"もし〜だったら?"の反事実で予測を変える最小変化を探索

例:ローン拒否→承認に変わる最小の収入増加額は?
# DiCE ライブラリ使用例 from dice_ml import DiCE # モデルとデータを準備 d = dice_ml.Data(...) m = dice_ml.Model(model, backend="tf2") exp = dice_ml.Dice(d, m) # 反事実例を生成 counterfactuals = exp.generate_counterfactuals( query_instance, total_CFs=3, desired_class="approved" )

* ActionableなCounterfactualは介入検討に直結 → 本質的XAI