Accuracy, Precision, Recall, F1,ROC曲線,PR曲線などは、モデルの予測精度、識別性能を評価する指標。だが、高い予測精度を求めて複雑なモデルを使うほど、「なぜその予測になったのか」「モデルがどのような特徴量を利用しているのか」がわかりにくくなる。そこで、**モデルを解釈するための技術**が必要になってくる。

表すもの 何のためか
PFI 特徴量の値をシャッフルしたとき、モデルの予測精度がどれだけ低下するか 特徴量の重要度を知る
SHAP 特徴量が予測をどの方向に、どれくらい動かしたか 予測の理由を考える、理解する
PDP / ICE ある特徴量を変化させると、平均的に予測がどう変化するか / その変化が個々のデータではどう異なるか 特徴量と予測値の関係を知る

いずれも、モデルのチューニング、特徴量の見直し、その後の施策への提案、仮説の構築 などに役立てることができる。

サンプル事例

    Python 3.11.15
    OS macOS-26.5.1-arm64-arm-64bit
    pandas 3.0.2
    numpy 2.4.3
    matplotlib 3.10.9
    seaborn 0.13.2
    scikit-learn 1.8.0
    shap 0.51.0
    lightgbm 4.6.0
    

PFI(Permutation Feature Importance)

特徴量の重要度を知る

pfiグラフ

モデルの評価指標は、scoringで指定する。それに応じて「重要」の意味合いは変わる。

PFIの注意点

特徴量が相関している場合に弱い: 特徴量同士に強い相関がある場合、片方をシャッフルしても、もう一方が補ってしまうため、どちらの特徴量も重要度が低く出ることがある(重要度を過小評価してしまう)。

非現実的なデータが生成される可能性: データをランダムにシャッフルするため、「雪が降っているのに気温35度」みたいな、現実にはあり得ないデータの組み合わせで評価してしまうことがある。

これらへの対処策の一つとして、強く相関する特徴量や、セットにした方が解釈しやすくなる特徴量をグループとしてまとめて、一緒にシャッフルして重要度を見る、Grouped Permutation Feature Importanceという方法もある。

Feature Importance(feature_importances_)について。

Random ForestやGBDT系の決定木モデルでは、分割に使われた回数や、分割による目的関数の改善度合いなどから、(PFIとは違う意味合いでの)モデル内部の特徴量重要度を算出できる。

便利な一方で、モデル内部の学習プロセスに依存した指標のため、必ずしも予測性能への寄与と一致しないという弱点が指摘されている。

PFIではわからないこと

PFIはモデルの全体像を把握するのに便利な一方で、わからないこともある。

これらに応えるのが次の指標。

SHAP(SHapley Additive exPlanations)

予測の理由を考える、理解する

SHAP bar

各特徴量の予測値への平均的な寄与度を表す。

※SHAP値が何をどの尺度で表しているかは、モデルやExplainerの設定によって異なる。二値分類モデルでは、設定によって予測確率そのものではなく、log-odds上の変化として表される場合がある。

サンプル事例では、特徴量の値の変化が、モデルの予測対数オッズ(log-odds 確率の対数比)に与える影響度合い。

shap_barグラフ

PFIは予測誤差の悪化度合いを重要度としており、SHAP barは各観測値における予測への寄与の絶対値を集計したもの。見ているものが異なるため、特徴量の順位が一致するとは限らない。

SHAP beeswarm

各特徴量について、値が高い場合・低い場合に、予測がどちらの方向へ動きやすいか。また、その影響にどの程度ばらつきがあるか(SHAP値の分布)を表す。

shap_beeswarmグラフ

SHAP waterfall

ある顧客が「ラテを購入する確率が高い」と予測されたのは、どの特徴量が予測を押し上げ、どの特徴量が押し下げたのかを表す。

下図の場合は「赤が長いほど買う確率を大きく上げ、青が長いほど下げる」と読む。

shap_waterfallグラフ

SHAP Dependence Plot

特徴量の値とSHAP値の関係を散布図(scatter)で表す。

shap_scatterグラフ

SHAPの注意点

では、もしもその特徴量の値を変化させたら、モデルの予測はどう変わるのか?これに応えるのが次の指標。

PDPとICE

特徴量と予測値の関係を知る

PDPとICEの加工手順

  1. あるインスタンスを取り出して、hoge以外の特徴量は固定して、hogeの値を変化させながらモデルに予測させる。
  2. 予測値の推移を線でつなげる。これがICE(kind='individual')。
  3. 多数のインスタンスについて繰り返し、その平均を取ったものがPDP(kind='average')。
  4. kind='both' を指定すると、ICEとPDPを同じグラフに重ねて表示できる。
SHAP PDP
基本的な問い この予測に何がどれだけ寄与したか この特徴量を変えると予測はどう変わるか
見るもの 実際の観測値における予測への寄与度 モデルの仮想的な反応(シミュレーション)
基本単位 各インスタンスの観測値 特徴量の値
全体を見る方法 SHAP値を集約 全観測値の予測を平均
個別を見る方法 Waterfallなど ICE

PDPの注意点

PDPは、他の特徴量は各観測値の値をそのまま維持したまま、注目する特徴量だけを「仮想的に」変更している(その予測値を平均化している)。

これにより、特徴量間に強い相関がある場合には、特に特徴量の分布の端やデータ密度の低い領域では、現実にはほとんど存在しない特徴量の組み合わせに基づく予測が含まれる可能性がある。

つまり、実際にはインスタンスが数件しか存在しない、データ密度が低く、実際の観測データによる裏付けが弱い領域があっても、PDPは1本の線で表現してしまう。

→ グラフ下部のRug plot(データの密度を表すヒゲ)も参照しながら解釈する。

また、平均化によって個体差が消える。例えば、若年層とシニア層で反応が真逆になるような重要な交互作用(不均一性)は見えない。

→ SHAPの散布図(Dependence Plot)で縦の広がりがないかを見たり、後述のICEを見るなどで回避する。

この平均的な変化は、すべてのインスタンスに共通しているのか?を把握するにはICEを見る。

ICEを眺める意義

以下の3つの重要な異常やインサイトを見抜くために使う。

  1. インスタンスによって反応が異なるかどうかを確認する
  2. 特徴量間の相互作用の可能性を見る
  3. 局所的な不自然な挙動を発見する

PDPとICEの使い分け

  1. まずは、SHAP上位hoge個について、PDPで全体の傾向を見る。
  2. 次に、気になる特徴量はICEを重ねて、インスタンスごとの差や相互作用の可能性を確認する。