"特徴量が存在する"、に対応しています。できることを仮定します。線形モデルとなっています。対して満たしてほしい3つの性質を定めます。予測値が一致していてほしい、という気持ちを表しています。あってほしいという性質です。(Consistency)とします。values)もより大きくあってほしい気持ちを表現しています。以下の形式で一意に定まることが示せるようです。非ゼロ要素の部分集合の元すべて]、とします。して知られております。選択の仕方(順列)を考慮しています。番目の特徴量の有無で予測値がどの程度変化するかを計算しています。番目の特徴量の貢献度*2となります。番目の特徴量の貢献度)の期待値を計算していることになります。LIME[6]で提案されているものがベースになっているようです*3。関して、以下のような最小化問題を考えます*4。複雑さ)ただし、SHAPでは以下のように定めます。よって重みづけします。線形回帰で使われる最適化手法を用いて求めることができます。計算していることになります。SHAPの実装についてSHAPは、論文の著者が実装を公開しており、そのツールとしての完成度の高さが特徴です。PythonのAPIが公開されているため、以後特に宣言なくPythonを用いることとします。github.com以下のリポジトリで公開されているデータセットを用いて簡単にモデリングしつつ、どのようなツールなのかを簡単に紹介したいと思います。www.openml.org問題設定としては、個人の信用リスク(デフォルトしやすさ)の推定です。2値、説明変数は属性情報や過去の債権情報など20個です*5。今回使用されている特徴量は、メルペイで開発されている与信モデルで使用されている特徴量とは異なります。今回はあくまでもSHAPのデモ用途であるという点についてご理解ください。SHAP[9]を用いています。クラスと対応しています。explainer.shap_values(X_test)SHAPで提供されているメソッドをいくつか紹介したいと思います。X_test.iloc[32])上図はある予測対象のデータに対して、各特徴量がどのように予測値に対して寄与しているかを可視化しています。赤い特徴量がポジティブシフト(今回は信用リスクが増加する方向)、青い特徴量がネガティブシフト(今回は信用リスクが低下する方向)に寄与しています。credit_history(過去の債権情報)などが予測値に大きく寄与しているということがわかります。出力値を計算しています。2行目は学習したモデルの出力値です。それぞれほぼ同じ出力値が得られていることがわかりますね。X_test)上図は単一の特徴量が予測値にどのような影響を与えるを可視化したものです。特徴量の値の変化に対して予測値がどう変化するかを確認することができます。この機能はインタラクティブで、2軸を自由に変更することができます。この図では、延滞月数が長い人(横軸の右方向)は信用リスクが大きくなる傾向があることがわかります。すべてプロットしたものです。上位の特徴量は予測値に対してより大きな影響を与えているそれとなっています。有効な特徴量であることがわかります。最後に機械学習の解釈性について簡単にほんの一部だけですが紹介いたしました。この分野の研究は実際にそれが現場で使われることをある程度想定して進められていると思いますが、当然それら研究成果(ツール)によって現場の様々な問題が万事解決というわけではないと思います。しようとしているのです。説明可能モデルはあくまで近似モデルである説明可能モデルの出力をどのように解釈し、ステークホルダーの理解や納得が得られるかどうかは、依然として現場のエンジニアやデータサイエンティストに依存しているのは変わらない当たり前といえば当たり前ですが、ツールの特性や仮定を理解した上で、適切なコミュニケーションを取ることが重要である点はエンジニアとして常に意識しないといけない点であると、本エントリの執筆を通じて改めて感じました。最後までお付き合いいただきありがとうございました。Predictions*1:論文[7]の著者がこのことに言及しています。*2:協力ゲーム理論では限界貢献度と呼ばれています。*4:この最小化問題をテストデータセットの件数分解くことになります。*5:データセットに関して、目的変数の意味は特に記述されておりませんでした。どのようにラベル付けしたのかなど。SHAPは計算量が多いことが問題点として指摘されています。