1. ホーム
  2. スクリプト・コラム
  3. パイソン

Python interpreted model libraryによる機械学習モデル出力の可視化 Shap

2022-01-02 07:46:23

機械学習モデルの説明は、そのブラックボックスの中でモデルがどのように動作しているのかが分からないため、難しい作業である。最適なモデルを選びつつ、ロバストなモデルを作るためには、説明が必要なのです。

さっそくですが...。

必要なライブラリのインストール

pipを使ってShapをインストールしてからスタートします。以下に示すコマンドで実行できます。

pip install shap


必要なライブラリのインポート

このステップでは、データの読み込み、モデルの作成、そのモデルのビジュアライゼーションの作成に必要なライブラリをインポートします。

df = pd.read_csv('/content/Diabetes.csv')
features = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age']
Y = df['Outcome']
X = df[features]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 1234)
xgb_model = xgb.XGBRegressor(random_state=42)
xgb_model.fit(X_train, Y_train)


モデルを作成する

このステップでは、機械学習モデルを作成します。今回はXGBoostのモデルを作成しますが、どのようなモデルでもかまいません。このモデルに使用するデータセットは、Kaggleからダウンロードできる、よく知られた糖尿病データセットです。

df = pd.read_csv('/content/Diabetes.csv')
features = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age']
Y = df['Outcome']
X = df[features]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 1234)
xgb_model = xgb.XGBRegressor(random_state=42)
xgb_model.fit(X_train, Y_train)


ビジュアライゼーションの作成

ここで、shapのインタプリタを作成し、モデルのshape値を求め、それを使ってビジュアライゼーションを作成する。

explainer = shap.Explainer(xgb_model)
shap_values = explainer(X_test)


1. バープロット

shap.plots.bar(shap_values, max_display=10)


2. キュー図

shap.plots.bar(shap_values.cohorts(2).abs.mean(0))


3. ヒートマップ

shap.plots.heatmap(shap_values[1:100])


4. ウォーターフォール図

shap.plots.waterfall(shap_values[0]) # For the first observation


5. フォースマップ

shap.initjs()
explainer = shap.TreeExplainer(xgb_model)
shap_values = explainer.shap_values(X_test)
def p(j):
    return(shap.force_plot(explainer.expected_value, shap_values[j,:], X_test.iloc[j,:]))
p(0)


6. 決定図

shap_values = explainer.shap_values(X_test)[1]
print("The expected value is ", expected_value)
print("The final prediction is ", xgb_model.predict(X_test)[1])
shap.decision_plot(expected_value, shap_values, X_test)


このように、Shapを使って機械学習モデルに関連するビジュアライゼーションを作成し、分析することができるのです。

以上、機械学習モデルの出力を可視化するためのPythonインタープリタ型モデルライブラリShapの詳細について説明しました。モデル出力を可視化するためのPythonインタープリタ型モデルライブラリShapの詳細については、スクリプトハウスの他の関連記事もご参照ください!