BETA

shapで説明可能なAI

投稿日:2020-06-09
最終更新:2020-06-09

深層学習での話じゃないです。
前回で最適化したハイパーパラメータを使ってどの特徴量が効いているか可視化します。

インストール

$ pip install shap  

実行

import pandas as pd  
import shap  
from sklearn.datasets import load_boston  
from sklearn.model_selection import train_test_split  
import xgboost as xgb  

data = load_boston()  
x = pd.DataFrame(data.data, columns=data.feature_names)  
x_train, x_validation, y_train, y_validation = train_test_split(x, data.target, train_size=0.8, random_state=0)  

# 学習  
model = xgb.XGBRegressor(  
    objective="reg:linear",  
    eta=0.01401745708541502,  
    learning_rate=0.15386632585084642,  
    max_depth=78,  
    subsample=0.783278678137449,  
    colsample_bytree=0.8937905338743036)  
model.fit(x_train, y_train)  

# 予測  
y_pred = model.predict(x_validation)  

# 解釈  
shap.initjs()  
explainer = shap.TreeExplainer(model)  
shap_values = explainer.shap_values(x_train)  
shap.summary_plot(shap_values, x_train, plot_type="bar")  

グラフ

列名 説明
CRIM 1人当たりの犯罪発生数
ZN 25,000平方フィート以上の住居区域の割合
INDUS 小売業以外が占める面積の割合
CHAS ダミー変数 (1: チャールズ川沿い, 0: それ以外)
NOX NOxの濃度 (ppm)
RM 住居の平均部屋数
AGE 1940年より前に建てられた占有物件の割合
DIS 5つのボストン市の雇用センターへの距離の加重平均
RAD 環状高速道路へのアクセスしやすさ
TAX 10,000ドルあたりの固定資産税率
PTRATIO 町毎の児童と教師の比率
B 町毎の黒人の比率 1000 * (Bk – 0.63)^2
LSTAT 下層階級の割合 (%)

下層階級の割合や住居の平均部屋数が効いていることが分かります。

shap.summary_plot(shap_values, x_train)  

プロットの色は値が青<赤なので、下層階級の割合が低いほど、平均部屋数が多いほど、住宅価格が高いことが分かります。

xgb.plot_importance(model)  

XGBoostの組み込み関数を使うとまた違った結果になるので、なぜそうなるかはまた調べます。

また、最適化されてないデフォルトのハイパーパラメータで実行してみた結果は

3位以下がそこそこ変わっています。精度に影響するのはこの違いに原因があると推測されます。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@yoko8maの技術ブログ システムと人間について

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう