SHAPを使用した回帰問題の機械学習モデルの局所解釈方法
shapライブラリを使用して、回帰問題を解いた機械学習モデルの大局的解釈を行う。
1.SHAPとは
SHAP(SHapley Additive exPlanations)は、機械学習モデルの局所的な解釈可能性を提供するためのフレームワークです。SHAPは、個々の特徴量が予測にどのように寄与しているかを計算することにより、モデルの解釈性を高めます。
2.データセット
今回はsklearnのdiabetes(糖尿病)データセットを例に実装してみる。データセットの概要は以下の通り。
- 目的変数:1年後の糖尿病の進行に関する測定値
- 説明変数:11個の特徴量
特徴量 | 説明 |
---|---|
age | 患者の年齢 |
sex | 患者の性別 |
bmi | 患者のBMI |
bp | 患者の平均血圧 |
S1 | T-Cells (白血球の1種)の活性化に関与する化学物質 |
S2 | インスリンのレセプターの活性に関与する化学物質 |
S3 | グルコースの代謝に関与する化学物質 |
S4 | トリグリセリド (脂質の一種)の代謝に関与する化学物質 |
S5 | 血清アルブミン (タンパク質の一種)のレベル |
S6 | 銅の輸送に関与する化学物質 |
※S1~S6: 血清の6つの化学指標。
3.実装
3.1.Lightgbmを用いた簡易的なモデルを作成
from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split import lightgbm as lgb import pandas as pd import shap # データのロード diabetes = load_diabetes() x_train, x_test, y_train, y_test = train_test_split(diabetes.data, diabetes.target, test_size=0.3) # LightGBMモデルのトレーニング model = lgb.LGBMRegressor().fit(x_train, y_train)
3.2.SHAPの実装
# SHAP値の計算 df_x_test = pd.DataFrame(x_test, columns=diabetes.feature_names) explainer = shap.Explainer(model.predict, df_x_test) shap_values = explainer(df_x_test) # 特定のサンプルのSHAP値を表示(shap_values[x]:x番目のデータのSHAP値を表示、max_display=n:n個の特徴量を描画) shap.plots.waterfall(shap_values[0], max_display=10)
上記の結果、以下のような図が表示されます。
E[f(x)]は、モデルの期待出力値(期待値)を表しています。つまり、全体的な平均予測値です。 SHAP値は、個々の特徴量がこの期待値からどれだけ上下に影響を与えたかを表します。