PDP/ICEを使用した回帰問題の機械学習モデルの大局的解釈方法
pdpboxライブラリを使用して、回帰問題を解いた機械学習モデルの大局的解釈を行う。
1.データセット
今回はsklearnのボストン住宅価格データセットを例に実装してみる。データセットの概要は以下の通り。
- 目的変数:ボストンの地域別住宅価格
- 説明変数:以下13個の特徴量1
特徴の名前 | 説明 |
---|---|
CRIM | 人口 1 人当たりの犯罪発生数 |
ZN | 25,000 平方フィート以上の住居区画の占める割合=「広い家の割合」 |
INDUS | 小売業以外の商業が占める面積の割合 |
CHAS | チャールズ川に関わるダミー変数 (1: 川の周辺, 0: それ以外) |
NOX | 一酸化窒素の濃度 |
RM | 住居の平均部屋数 |
AGE | 1940 年より前に建てられた物件の割合 =「古い家の割合」 |
DIS | ボストン市の5 つの雇用施設からの距離 (重み付け済) =「主要施設への距離」 |
RAD | 高速道路へのアクセスのしやすさ |
TAX | $10,000 ドルあたりの固定資産税率 |
PTRATIO | 町毎の生徒と教師の比率 |
B | 町毎の黒人 (Bk) の比率 |
LSTAT | 低所得者人口の割合 |
2.実装
2.1.Lightgbmを用いた簡易的なモデルを作成
from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split import pandas as pd import lightgbm as lgb boston = load_boston() x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.3) #LGB用のデータに変形 lgb_train = lgb.Dataset(x_train, y_train) lgb_eval = lgb.Dataset(x_test, y_test) params = { 'objective': 'regression', 'boosting_type': 'gbdt', 'metric': 'mae' } model = lgb.train( params = params, train_set = lgb_train, valid_sets= [lgb_eval,lgb_train], )
2.2.PDP/ICEの実装
# pdpboxはpandas.DataFrameしか受け付けない test_df = pd.DataFrame(x_test, columns=boston.feature_names) # 特徴量毎にpdp/iceを描画 for col in train_df.columns: pdp_boston = pdp.pdp_isolate( model=model, dataset=test_df, model_features=test_df.columns, feature=col ) fig, axes = pdp.pdp_plot(pdp_boston, col, plot_lines=True, frac_to_plot=1.0, plot_pts_dist=True)
特徴量毎に以下のような図が描画される。
上図より、一酸化窒素の濃度が0.7までは住宅価格にあまり影響がなく、0.7以上あたりから住宅価格を下げる要因と機械学習モデルが判断していることが分かる。
2.3.PDP(2変数)の実装
ついでに2変数の相互作用を等高線として図示する方法もまとめておく。
import itertools columns = test_df.columns combinations = itertools.combinations(columns, 2) for combination in combinations: interaction = pdp.pdp_interact(model=model, dataset=test_df, model_features=test_df.columns, features=combination) fig, axes = pdp.pdp_interact_plot(pdp_interact_out=interaction, feature_names=combination)
特徴量の組み合わせ毎に以下のような図が描画される。
上図より、固定資産税率が350を超えたあたりから住宅価格にあまり影響がなく、犯罪発生率の方が影響していることが分かる。
- ボストンデータセットの特徴量の説明:【初心者】ネコでも分かる「scikit-learnのサンプルデータ」まとめ【Python】を引用↩