まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

各モデルで使われる変数重要度についてまとめる

はじめに

機械学習タスクにおいて、ブラックボックス性を減らし解釈性を上げるためにどの特徴量がどれくらい効いたかを示す必要性が増えている。また、特徴量選択やフィーチャーエンジニアリングの際にも参考になる。そのため、機械学習タスクをやるにあたって必須のスキルとなっているのでまとめてみる。

なお、構成や大まかな流れは以下のスライドからかなり引用しています(というか、下記スライドに個人的なメモを追加して書いただけに近い)。 speakerdeck.com

機械学習モデルに対しての特徴量解釈は主に以下の3つの観点がある、

  • どの特徴量が重要か
  • 各特徴量が予測にどう影響するか
  • ある予測結果に対して特徴量がどう寄与するか

各観点によって使う手法が変わり、以下でそれぞれの内容をまとめる。

どの特徴量が重要か

モデルが重要視している要因がわかる。

Feature Importance

モデルに使用する特徴量の重要度を数値化したもの。

モデルに合わせたアルゴリズム(Model Dependent)と、モデルに関わらないアルゴリズム(Model Independent)がある。

実際の使い方としては、意思決定においてどの特徴量に対して優先して改善を図るか、といった際に使用したり、Feature Enginiaringにおいてとりあえず特徴量を全部ぶち込んでから各特徴量を使うかどうかの指標にしたりする。

  • Model Dependent

    • Random Forest:評価指標をより改善する特徴量が重要
      • 分類系:Out-of-Bag(OOB)の誤り率、Gini imuprity 、エントロピー(特許の関係で使えないためGiniで代替)...などを識別基準にする
      • 回帰:MSE, RSSなどを判断基準にする
    • 勾配Boosting系(XGBoost , LightGBM, CatBoost...)
      • Gain, cover, weight(frequency)

    …など。

どの変数を分割したら上記判別基準がどう変わったかで重要度を計算する。 ちなみに、Scikit-learnのRandom ForestはGini imuprityベース。 それぞれの詳細は以下。

Random Forest

Random Forestで計算できる特徴量の重要度 - なにメモ

ランダムフォレスト — 苦労する遊び人の玩具箱 1 ドキュメント

www.slideshare.net

ランダムフォレスト 特徴量の重要度(C++の実装例つき) - じじいのプログラミング

XGboost

Xgboost : feature_importanceのimportance_type算出方法 - Qiita

Gradient Boosted Tree (Xgboost) の取り扱い説明書 - Qiita

  • Model Independent アルゴリズムがモデルに依存しないので作成した各モデルに対して統一的に重要度を見ることができる。

    • Permutation Important:ある特徴量をランダムに交換したとき、予測精度が大きく落ちる場合、重要度が高いと判定される。

Permutation Importance | Kaggle

Python: 特徴量の重要度を Permutation Importance で計測する - CUBE SUGAR CONTAINER

permutation importance 〜特徴量の重要度の測り方〜 - TJ Media Studies

https://bunseki-train.com/permutation_importance_and_eli5_1/

変数重要度とPartial Dependence Plotでブラックボックスモデルを解釈する - Dropout

各特徴量が予測にどのように影響しているか

ある特徴量を変化させたときに予測がどう変化するかという関係性がわかる。

例えば、特徴量X1の値が3を境にYへの貢献度が一気に増える、など。

実際の使い方としては、Feature Importanceを見たあとに、重要な特徴量のいくつかに対して改善を図ろうと考える。その際に例えば特徴量X1は値が変わってもあまり貢献度は変わらないが特徴量X2は値を変えると大きく貢献度が変わるという場合、特徴量X2に焦点を当てて改善していこう、といったことが考えられる。

Partial Dependence

特徴量を変化させたときの出力の平均的な変化。 Partial Dependence Plot(PDP)で可視化できる。 ただし、特徴量同士の相関が強い場合は信用できない。

平均ではなく、各レコードについて個別に関係を見ていくIndividual Conditional Expectation Plot(ICE plot)というものもある。
PDPでは、変数間の交互作用の影響がわからないがICE plotでは確認ができる。

5.1 Partial Dependence Plot (PDP) | Interpretable Machine Learning

Partial Dependence Plots • pdp

5.2 Individual Conditional Expectation (ICE) | Interpretable Machine Learning

機械学習モデルを解釈する方法 Permutation Importance / Partial Dependence Plot - 子供の落書き帳 Renaissance

ある予測結果に対して特徴量がどう寄与するか

何故その予測値だったかわかる。例えば、予測値Y1では特徴量X1が大きく寄与していたけど、予測値Y2では特徴量X2の寄与が大きかった、など。

SHAP, LIME

説明したい予測値に対してシンプルな局所的な分類器をつくり、以下の条件から貢献度を考える

  • 1.局所的正確性:データ点の直上では値が一致
  • 2.値がゼロの変数の無影響性:データ点で値が0の変数は貢献度0
  • 3.複数モデル比較での無矛盾性:簡単化の前後でモデル間の貢献度の大小関係が同じ

SHAP(SHapley Additive exPlanation) value

条件を全て満たす貢献度の組。

  • お互いの値次第で出力が変わるモデル
  • 最終的な出力への貢献を公平に変数に分配

複数の予測値の傾向の可視化も可能

Feature ImportanceやPartial Dependenceに近い使い方も可能

5.9 Shapley Values | Interpretable Machine Learning

機械学習モデルを解釈する指標SHAPについて – 戦略コンサルで働くデータサイエンティストのブログ

Shapを用いた機械学習モデルの解釈説明 - Qiita

SHAPでモデルの予測結果を説明する | orizuru

続・機械学習モデルを解釈する方法 SHAP value - 子供の落書き帳 Renaissance

LIME(Local Interpretable Model-agnostic Explanation)

最適化問題で貢献度を算出

5.7 Local Surrogate (LIME) | Interpretable Machine Learning

機械学習モデルの予測結果を説明するための力が欲しいか...? - クソして寝ろ

LIMEでXGBoostとLightGBMの結果を解釈する - Qiita

speakerdeck.com

Grad-CAM

画像系に使う?画像系は使う機会がなさそうなのであまりちゃんと調べてないです。

Class Active Mapping(CAM) Grad-CAM:勾配ベースのCAM DNNに対して、各判定クラスで予測への影響が強い部分を可視化