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

モデル解釈性 入門 ─ SHAP・LIME・Permutation Importance

ブラックボックス ML モデルの予測理由を説明する 3 大手法を実装と直感で解説。規制業界・社内説明・モデル改善に必須のスキル。

ML モデルが高精度でも、『なぜその予測になったか』が説明できない と実務では使えない場面が増えています。Explainable AI(XAI) はその課題に対する手法群。

なぜ解釈性が必要か

  • 規制対応: 金融(BIS)・医療(FDA)・EU AI Act
  • 社内説明: 経営層・現場担当・顧客への説明責任
  • バイアス検出: 性別・人種による不公平な予測の発見
  • モデル改善: 重要特徴量の特定 → 特徴量エンジニアリング
  • 信頼構築: ユーザーが意思決定に使える

1. SHAP(SHapley Additive exPlanations)

ゲーム理論の Shapley 値 に基づき、各特徴量の予測への貢献度を 公平に分配。理論的にきれい + 局所/全体の両方で使える。

SHAP の基本
import shap
import lightgbm as lgb

model = lgb.LGBMClassifier()
model.fit(X_train, y_train)

explainer = shap.TreeExplainer(model)
shap_values = explainer(X_test)

# 1 サンプルの説明
shap.plots.waterfall(shap_values[0])

# 全体の重要度
shap.plots.beeswarm(shap_values)

# 依存プロット(部分依存と相互作用)
shap.plots.scatter(shap_values[:, 'age'])
💡 Shapley 値の直感

あるチームの勝利貢献を、各メンバーが入る・抜けるパターンの平均で計算 ─ これが Shapley 値。ML では『この特徴量がモデルにあるとき/ないときの平均的な予測差』。

2. LIME(Local Interpretable Model-agnostic Explanations)

予測したい点の 近傍 で、予測モデルを 線形モデル で近似。局所的に解釈可能なモデルで説明。

LIME の例
import lime
import lime.lime_tabular

explainer = lime.lime_tabular.LimeTabularExplainer(
    X_train.values, feature_names=X_train.columns,
    class_names=['no', 'yes'], discretize_continuous=True,
)

exp = explainer.explain_instance(
    X_test.iloc[0].values, model.predict_proba, num_features=10
)
exp.show_in_notebook()

3. Permutation Importance

ある特徴量の値を シャッフル したときに精度がどれだけ下がるか。シンプルだが頑健。

scikit-learn で
from sklearn.inspection import permutation_importance

result = permutation_importance(
    model, X_test, y_test, n_repeats=10, random_state=42
)
importance = pd.DataFrame({
    'feature': X_test.columns,
    'importance': result.importances_mean,
}).sort_values('importance', ascending=False)

本質的に解釈可能なモデル

事後説明より、最初から解釈可能なモデルを使う選択肢:

  • 線形 / ロジスティック回帰: 係数 = 特徴量の重み
  • 決定木: 分岐ルールが直接読める
  • EBM(Explainable Boosting Machine): 高精度 + 解釈性
  • ルールベース: スコアカード方式

Deep Learning の解釈

  • Grad-CAM: 画像分類で『どこに注目したか』のヒートマップ
  • Attention 可視化: NLP の Transformer で関連語
  • Integrated Gradients: 入力勾配を積分
  • Captum(PyTorch): DL 解釈の総合ライブラリ

実務での使い方

  • 学習時: SHAP で重要特徴量を確認 → 不要なものを削除
  • 評価時: 偽陽性 ・ 偽陰性ケースを SHAP で深掘り
  • 本番運用: 個別予測の説明をユーザーに表示
  • 監査時: バイアスや漏洩がないかチェック
  • 改善時: 期待と異なる重要度 → モデル or データの問題

学習リソース

  • [scikit-learn 入門](/blog/sklearn-introduction)
  • [因果推論 入門](/blog/causal-inference-introduction)
  • [MLOps 基礎](/blog/mlops-basics)
  • [E 資格 ロードマップ](/certs/e-shikaku/roadmap)
Related Articles

関連記事