SHAP の説明可能性

Pythonで学ぶExplainable AI

Fouad Trad

Machine Learning Engineer

SHAP の概要

  • SHAPSHapley Additive exPlanations
  • モデル非依存の手法
  • ゲーム理論のシャープレイ値を利用
  • SHAP 値 → 予測への各特徴量の寄与を定量化

SHAP のロゴ

Pythonで学ぶExplainable AI

メンバー間の利益配分

音楽バンドの写真。

Pythonで学ぶExplainable AI

SHAP の Explainer

 

  • SHAP 値を計算
  • ツリー Explainer → ツリーモデル向け

SHAP の Explainer は、任意モデルに使える汎用型と、特定モデルに最適化されたタイプ別に分かれることを示す図。

Pythonで学ぶExplainable AI

入学審査データセット

GRE スコア TOEFL スコア 大学評価 SOP LOR CGPA 合格確率 合否
337 118 4 4.5 4.5 9.65 0.92 1
324 107 4 4 4.5 8.87 0.76 1
316 104 3 3 3.5 8 0.72 1
322 110 3 3.5 2.5 8.67 0.8 1
314 103 2 2 3 8.21 0.45 0

 

  • rf_reg: 合格確率を予測
  • rf_class: 合否を予測
  • X: 特徴量のデータフレーム
Pythonで学ぶExplainable AI

SHAP 値の導出

import shap
回帰
explainer_reg = shap.TreeExplainer(rf_reg)

shap_values_reg = explainer_reg.shap_values(X)
分類
explainer_class = shap.TreeExplainer(rf_class)

shap_values_class = explainer_class.shap_values(X)
Pythonで学ぶExplainable AI

SHAP 出力の理解

回帰
print(shap_values_reg.shape)  
(400, 6)

SHAP 値は X データフレーム(サンプル数×特徴量数)と同じ次元の表として出力される

Pythonで学ぶExplainable AI

SHAP 出力の理解

回帰
print(shap_values_reg.shape)  
(400, 6)

SHAP 値は X データフレーム(サンプル数×特徴量数)と同じ次元の表として出力される

分類
print(shap_values_class.shape)
(400, 6, 2)

陽性クラスの値を抽出

positive_values = shap_values_class[:,:,1]
Pythonで学ぶExplainable AI

特徴量重要度

mean_shap_values_class = np.abs(shap_values_class[:, :, 1]).mean(axis=0)
mean_shap_values_reg = np.abs(shap_values_reg).mean(axis=0)

plt.bar(X_train.columns, mean_shap_values_class) plt.bar(X_train.columns, mean_shap_values_reg)

回帰と分類の特徴量重要度。CGPA と GRE スコアが合否予測で最も影響が大きいことを示す。

Pythonで学ぶExplainable AI

¡Vamos a practicar!

Pythonで学ぶExplainable AI

Preparing Video For Download...