勉強の記録

機械学習、情報処理について勉強した事柄など

機械学習モデルの判断基準を可視化する:SHAP

SHAP関連のarticleとしては2本 上が2017年でKernelSHAP, DeepSHAPなどについて. 下が2018年でTree ensembleモデルについてのもの.今回のメモは下のTree SHAPについての論文. A Unified Approach to Interpreting Model Predictions https://arxiv.org/abs/1802.03888

具体的な使い方については上記論文の筆者でpythonのpackageを公開してくれているScott Lundberg氏のblogが詳しい.非線形構造や2つの特徴量の交互作用の可視化に用いることもできるよう.理解を助ける美しいグラフも数多く載っているので,論文とあわせて是非. Interpretable Machine Learning with XGBoost – Towards Data Science

SHAPとは

特徴量重要度が満たすべき基準として, ・consistency モデルにある特徴量をより重視するような変更が加わった際に,特徴量重要度が低下しない ・accuracy モデル内の全特徴量の特徴量重要度の和がモデル全体の重要度の和になる が挙げられ,SHAPはこれを満たしているらしい.論文内やtowardsdatascienceに具体例が図とともに示されている.

SHAPとはゲーム理論におけるシャプレー値をもとにした値で,(特徴量を1,0の2値の特徴量として),目的の特徴量を除いた特徴量のすべての部分集合に対して目的の特徴量を加えた(0→1に変化させた)ときのモデルアウトプット変化量の平均. なお,このSHAPはあくまで個々のサンプルに対して算出されることに注意.サンプル全体での特徴量の傾向をみるためには最後に平均をとったり,散布図で表したりする.

また,この時点でモデルのアウトプットを得るためには,まだ加えられていない特徴量に何らかの値を入れないと計算できない気がするのだけど,そこはmissingとしているか,デフォルト値があるのか読み解けなかった.おそらくXGBoostなどの欠損値処理そのもので,欠損値の時にどちらに分岐するかの学習結果に沿っているのだと思う.(XGBoostでは学習データに欠損値がない場合はdefaultでは全例右分岐になると思うのだけどそれは悪さしないのかな.)

additive feature attribution methods

モデルのアウトプットを特徴量の線形モデルとして説明するような方法をadditive feature attirbution methodsと呼び,多くの機械学習解釈モデルはこのモデルに落とし込めるとのこと.SHAPもこの一つらしい.

Tree SHAP

上記は理論的なSHAP valueの定義で,exactに計算しようとすると特徴量に対してO(en)の計算量がかかってくる.これを近似的にO(TLD2) (T:木の数,L:葉の数,D:木の深さ)で解くのがTree SHAP algorithmで,現実的な時間で解を見つけることができ,前述のpython packageの元になっている. 全通りの組み合わせを試すのではなく,そのうちどの割合が各ノードを通って葉にたどり着くかのみを追うことで計算量を圧縮しているらしいが理解できていない(3.1, 3.2 section).有用そうなので,一度しっかり理解しておきたいが..

SHAP interaction values

2017の論文ではSHAPを計算するときにfeature independenceを仮定していたと思うのだけど,今回のTree SHAPではそこはモデルの側に任されているので特に問題ではないよう. 2つの特徴量について一方だけ加えたときの変化量と,もう一方を加えてから加えたときの変化量の差をSHAP interaction valueとしている.これによって個々の特徴量の主効果を取り除いた交互作用のみをうまく取り出すことに成功している.論文では,血圧と年齢の死亡リスクへの交互作用を見るのに血圧をX軸,SHAP valueをY軸として年齢をカラーマップで表した散布図で表現している.

私見

あくまで構築済みのモデル上での特徴量重要度なので,モデルに依存する.変数選択などに使いたい場合は,検証用モデルを構築するときに・学習率を下げる,・col_samplingを低めに設定したり、・num_parallel_treeを設定したり、などしてensembleの要素が強くなるようにした方が安定して推定できるかもしれない(未検証).