SHAP の可視化

Pythonで学ぶExplainable AI

Fouad Trad

Machine Learning Engineer

データセット

age gender bmi children smoker charges
19 0 27.900 0 1 16884.92
18 1 33.770 1 0 1725.55
28 1 33.000 3 0 4449.46
33 1 22.705 0 0 21984.47
32 1 28.880 0 0 3866.85

model: 請求額を予測するランダムフォレスト回帰器

import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
Pythonで学ぶExplainable AI

特徴量重要度プロット

  • 各特徴量のモデル出力への寄与を表示
shap.summary_plot(shap_values, X, plot_type="bar")

喫煙状況が最重要特徴量であることを示す特徴量重要度プロット。

Pythonで学ぶExplainable AI

ビースウォームプロット

  • SHAP 値の分布を表示
  • 各特徴量が予測に与える影響の「方向」と「大きさ」を示す
    • 赤 → 特徴量の値が高い
    • 青 → 特徴量の値が低い
    • SHAP 値 > 0 → 予測値を増加
    • SHAP 値 < 0 → 予測値を減少

各特徴量の SHAP 値分布を示すビースウォームプロット。色は特徴量の値を示す。

Pythonで学ぶExplainable AI

ビースウォームプロット

  • SHAP 値の分布を表示
  • 各特徴量が予測に与える影響の「方向」と「大きさ」を示す
    • 赤 → 特徴量の値が高い
    • 青 → 特徴量の値が低い
    • SHAP 値 > 0 → 予測値を増加
    • SHAP 値 < 0 → 予測値を減少

「smoker」特徴量の高い値で SHAP 値が正になることを示す同じビースウォームプロット。

Pythonで学ぶExplainable AI

ビースウォームプロット

  • SHAP 値の分布を表示
  • 各特徴量が予測に与える影響の「方向」と「大きさ」を示す
    • 赤 → 特徴量の値が高い
    • 青 → 特徴量の値が低い
    • SHAP 値 > 0 → 予測値を増加
    • SHAP 値 < 0 → 予測値を減少
shap.summary_plot(shap_values, X, 
                  plot_type="dot")

「smoker」特徴量の低い値で SHAP 値が負になることを示す同じビースウォームプロット。

Pythonで学ぶExplainable AI

部分依存プロット

  • 「特徴量」と「予測結果」の関係を表示
  • 特徴量の全範囲での影響を表示
  • 関係が想定どおりか確認

特徴量と目的変数の関係が減少関数として示された一般的な部分依存プロット。

Pythonで学ぶExplainable AI

部分依存プロット

  • 各サンプルで:
    • 選択した特徴量の値を変化
    • 他の特徴量は固定
    • 予測を実行
  • 全サンプルで平均化
shap.partial_dependence_plot("age", 
                             model.predict, 
                             X)

age 特徴量の部分依存プロット。年齢が上がると予測値が上がることを示す。

Pythonで学ぶExplainable AI

部分依存プロット

  • 各サンプルで:

    • 選択した特徴量の値を変化
    • 他の特徴量は固定
    • 予測を実行
  • 全サンプルで平均化

shap.partial_dependence_plot("age", 
                             model.predict, 
                             X)

同じ部分依存プロット。データセット内の age の分布を強調表示。

Pythonで学ぶExplainable AI

練習しましょう!

Pythonで学ぶExplainable AI

Preparing Video For Download...