説明可能なAI⑦(分類系モデルのSHAP値)

回帰モデルと同じように分類モデルでもSHAP値を確認することができます。

分類モデルを元に、SHAPモデルを作成して、SHAP値を確認します。

分類系モデル

乳がんの診断データセットを用いた分類モデルのランダムフォレストを利用します。

今回は説明変数をすべて利用します。(8行目)

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
load_data = load_breast_cancer()
tg_df = pd.DataFrame(load_data.data, columns = load_data.feature_names)
tg_df["y"] = load_data.target
X = tg_df[tg_df.columns[tg_df.columns != "y"]] # 全ての説明変数を使用
y = tg_df["y"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
print(len(X_train))
display(X_train.head(1))
print(len(X_test))
display(X_test.head(1))
print(len(tg_df))
print(tg_df["y"].unique())

rf_cls = RandomForestClassifier(max_depth=3,random_state=0).fit(X_train, y_train)

[実行結果(一部略)]

分類系のランダムフォレストモデルが作成できました。

SHAPモデル

分類系モデルを引数にして、SHAPモデルを作成します。(1行目)

決定木モデルのランダムフォレストに対してはshap.TreeExplainerを利用します。

[Google Colaboratory]

1
2
explainer = shap.TreeExplainer(rf_cls)
explainer

[実行結果]

これでSHAPモデルが作成できました。

SHAP値

SHAP値を確認します。

[Google Colaboratory]

1
2
3
shap_values = explainer.shap_values(X_test)
print(len(shap_values))
print(shap_values)

[実行結果]

分類系モデルをベースにした場合、SHAP値は各カテゴリごとの配列になり、各カテゴリに対するSHAP値を出力します。

乳がんの診断データセットは二値分類なので2つのSHAP値が出力されます。

次回は回帰系と同じように、グラフを描画してSHAP値の解釈をしていきます。