こんにちは。kzです。

昔、kaggleから宿題メールみたいなものが届いたんですよね。
今回はこれをやっていきます。先に一言で言うと機械学習のfitを説明しよう、と言うことです。言い換えるとモデルがデータをどう扱ったか解釈しよう、と言うことです。なんとなくまとめを先に行っておくと次の通りです。

ブラックボックス

機械学習も僕の知っている2年前に比べて色々と賑やかになってきました。決定木だとLightGBMやXGBOOSTありますし、ニューラルネットだとStacked LSTMやGANとかですねえ。そんな優秀なアルゴリズム達をどうやって理解すればいいんだろう?と言うのがブラックボックス問題です。例えば「ニューラルネットで学習させたけどこの重みの意味って、、、?」とか「この入力と出力の間の関係は、、?」とか「この変数って予測にプラスに働いたのか、、、?」などです。

この記事ではそんなブラックボックスを少しでも理解するための方法をまとめます。

Permutation Importance

例えば決定木だとFeature Importanceがあります。これはモデルが使用する特徴量の重要度を数値化したものです。アルゴリズムに関してここでは触れませんがPlotはこんな感じです。
人間はやはり可視化が好きなんですよね、上のものは決定木から得られたんですがこれを別のアルゴリズム、例えばリッジとラッソとかでもやりたくないですか?そんな時に使うのがPermutation Importanceです。これはある列を選択しその列内の値をランダムに並び替えて再度予測することでその精度の変化から逆算的に、選択した列の重要度を測るアルゴリズムです。

Partial Dependence Plots

上でどの特徴量が重要か分かりました。ではその特徴量と出力の間の関係知りたくなりますよね?そこでpartial dependence plotの登場です。参考文献にあるLINEさんのスライド見てあまりにも感動したんです。なんでかと言いますとこのアルゴリズムは選択した特徴量以外を周辺化で消すんですよね、その周辺化がまさに積分なんです。ベイズで出てくる周辺分布と同じようなことをしてるんです。
とは言っても周辺分布(周辺確率)のイメージとは異なる気がします。具体的な計算は次のようになっているようです。
最後はこれらの平均をとるのですが加重平均もOKです。これを見て思ったのが着目する特徴量がカテゴリカルでない場合は計算量がえぐそうですね、、、

ではプロットを見てみます。データはirisです。
  • x軸は変数の値
  • y軸はbaseline(一番左の点)との予測(prediction)の比較
  • 青枠は信頼区間
となります。例えばpetal length(class 1)だと4cmの時に予測が最もうまく働いていますが4cmを超えてからは悪い影響を与えていると読み取ることができます。

SHapley Additive exPlanations Value

やっときましたSHAP値。これは予測値と特徴量の関係を与えます。例えばプラスに働いたのか、マイナスに働いたのかと言うことです。

LIME

SHAPアルゴリズムについてはLIMEというものがベースとなっているようです。
LIMEでは対象のデータ周辺で局所的にモデルを線形近似します。上の図において、赤・青のバックグラウンドで表現されているのがブラックボックスである関数fです。濃い目の赤が説明したいデータ(インスタンス)です。黒のダッシュが局所的に線形近似した分類モデルになります。その係数の大小で各特徴量の重みを測ります。ちなみにLIMEは以下の最小化を行うようです。
二乗誤差を重み付けして最小化していますね。なんか気持ちいいです。まあこんな感じです(これ以上はわからない、、)

SHAP

話が少しそれましたがSHAPのアルゴリズムに移ります。これが非常に難しかった。。

論文中にある「Simple Properties Uniquely Determine Additive Feature Attributions」の部分が肝です。LIMEに制約を設ける感じです。
はいまず制約その1です。ブラックボックスモデルと近似モデルが等しい。

制約その2です。存在しない説明変数の貢献度はゼロとします。まあそんなに気にしてくていいです。
制約その3です。重み\phiが大きくなる条件のようですがすいませんよくわかりません。
これらの制約をうまく満たしてくれるのが上のモデルになります。LIMEに比べて距離関数のところがかっこよくなりました。

これ以上は全くわからないのですいません、説明はここまでします。ここでは使えるようになることに集中します。 例えばwineのデータにかけてみると
SHAP値ではベースライン(データ全体の期待値)との比較を行っているようです。これがよくわかってないです、コメントください。
上のようにクラス別でも見れます。
上の図は目的変数との相関になります。(分類だとplotできなかったため回帰問題のデータに変えました)

横軸が目的変数の値で縦軸が特徴変数の貢献度の高さです。赤が正の値を、青が負の値となります。例えば、s5は目的変数が大きく(右側)なるほど赤い分布となり、目的変数が小さく(左側)なるほど青い分布となります。つまり、目的変数とs5は正の相関があることがわかります。
上のグラフにおいてs5は血清測定値5という特徴量です。s5の値が大きいほど目的変数である1年後の疾患進行状況指標が高いことがわかります。
一通りやってみました。ここでは触れてませんが画像処理において画像のどの部分が寄与したか、などもわかるようです。ぜひ参考リンクをご覧ください。

アルゴリズム勉強します。

Reference