SHAPとは?機械学習モデルの予測を説明する仕組みとPython実装

「このローン審査はなぜ否決されたのか」「このモデルはなぜこの患者を高リスクと判定したのか」 — 機械学習モデルが高精度になるほど、その中身は複雑なブラックボックスになり、一つひとつの予測の理由を人間が説明できなくなります。ところが現実には、予測の根拠を説明できないと困る場面が増えています。SHAP(SHapley Additive exPlanations)は、協力ゲーム理論のシャープレイ値を使って、「モデルの予測値を各特徴量の貢献にどう公平に分けるか」を厳密な理論に基づいて答える手法です。

SHAPを理解すると、次のような場面で役立ちます。

  • 説明責任が求められる予測 — 与信審査・医療診断・採用など、「なぜその結論か」を顧客や規制当局に示す必要がある場面
  • モデルのデバッグと信頼性チェック — モデルが「リークした特徴量」や「無関係なノイズ」に依存していないかを点検する

本記事の内容

  • なぜモデル解釈が必要か(ブラックボックス問題・説明責任・デバッグ)
  • 協力ゲーム理論のシャープレイ値からの導入(3人ゲームの手計算)
  • シャープレイ値を一意に定める4つの公理
  • 機械学習への対応(特徴量=プレイヤー、予測値=報酬)
  • 計算量の問題とTreeSHAP/KernelSHAPの考え方
  • summary/waterfall/dependence plotのPython実装と読み方
  • gain/permutation importanceとの違いと、相関する特徴量の注意点

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

なぜモデル解釈が必要なのか

ランダムフォレストや勾配ブースティングのような強力なモデルは、数百本の決定木を組み合わせるため、予測値がどの特徴量からどう作られたのかを人間が追えません。これがブラックボックス問題です。精度が高くても、次のような場面では「中身が見えない」こと自体が問題になります。

  • 説明責任 — ローンを否決された人に理由を説明できなければ、納得も改善もできません。法規制(説明を受ける権利)の観点でも求められます。
  • デバッグ — モデルが本来使うべきでない特徴量(たとえば「申込日時」のような無関係な情報やデータリーク)に頼っていないかを点検したい。
  • 信頼 — 専門家が「この予測は理にかなっている」と確認できて初めて、現場で使えます。

そこでSHAPは、「予測値を各特徴量の貢献に分解する」という形で説明を与えます。下の図がそのイメージです。

ブラックボックスモデルの予測を平均と各特徴量の貢献に分解して説明するSHAPの概念図

左でモデルは複数の特徴量を受け取り、不動産価格のような予測値を出します。しかし「なぜこの価格か」は見えません。SHAPは右のように、予測値を平均予測(基準値)+各特徴量の貢献の足し算に分解します。面積が価格を押し上げ、築年数が押し下げる、といった内訳が見えるのです。では、この「公平な分け方」はどう決めればよいのでしょうか。実はこの問いは、機械学習よりずっと古くから経済学で研究されてきました。

協力ゲーム理論とシャープレイ値

「全員で協力して得た利益を、各メンバーの貢献度に応じて公平に分けたい」 — これは協力ゲーム理論の中心的な問題です。1953年にロイド・シャープレイが提案したシャープレイ値は、この問題に対する唯一の公平な答えとして知られています。

イメージとしては、こう考えます。3人 A・B・C が組んでプロジェクトを行い、利益を生みました。ある人の「貢献」とは、その人がチームに加わった瞬間に増えた利益(限界貢献)です。ところが限界貢献は「何人目に加わったか」で変わります。最初に加わるのと、最後に加わるのとでは増分が違うからです。そこでシャープレイ値は、あらゆる参加順序を考え、その限界貢献を平均します。

数式で書くと、プレイヤー $i$ のシャープレイ値 $\phi_i$ は次のとおりです。

$$ \phi_i = \sum_{S \subseteq N \setminus \{i\}} \frac{|S|!\,(n – |S| – 1)!}{n!}\,\bigl[\,v(S \cup \{i\}) – v(S)\,\bigr] $$

この式の各部分の意味を押さえておきましょう。$N$ は全プレイヤーの集合($n$ 人)、$S$ は $i$ を除いたメンバーの部分集合(すでにチームにいる人たち)、$v(S)$ は集合 $S$ が生む利益(特性関数)です。角括弧の中 $v(S \cup \{i\}) – v(S)$ がまさに「$i$ が $S$ に加わったときの限界貢献」です。前の重み $\frac{|S|!\,(n-|S|-1)!}{n!}$ は、「ちょうどそのタイミング($|S|$ 人の後)で $i$ が加わる順序が、全 $n!$ 通りの順序のうち何通りあるか」の割合に当たります。つまりこの式全体は、全順序にわたる限界貢献の平均を表しています。

具体的な3人ゲームで手を動かしてみましょう。利益(単位:百万円)が次のように決まっているとします。

$$ v(\varnothing)=0,\ v(A)=6,\ v(B)=12,\ v(C)=0,\ v(AB)=24,\ v(AC)=12,\ v(BC)=18,\ v(ABC)=36 $$

3人なので参加順序は $3! = 6$ 通りです。たとえば順序 $A \to B \to C$ では、Aは $v(A)-v(\varnothing)=6$、Bは $v(AB)-v(A)=24-6=18$、Cは $v(ABC)-v(AB)=36-24=12$ を得ます。これを6通りすべてについて計算し、各人ごとに平均したものがシャープレイ値です。下の図に全6通りの限界貢献と、その平均を示します。

3人協力ゲームの全6通りの参加順序での限界貢献とその平均としてのシャープレイ値

左の棒グラフは、6通りの順序それぞれでA・B・Cが得た限界貢献です。順序によって各人の取り分は大きく変わりますが(Aは6〜18の間で揺れます)、横棒の合計は常に全体利益36になります。これを各人で平均した右のシャープレイ値は、A=12・B=18・C=6で、合計はちょうど36です。最も貢献の大きいBが最も多く受け取り、単独でもペアでも利益を増やさないCが最も少ない — 直感に合う公平な配分が得られました。

念のため、Aのシャープレイ値を定義式の重み付き和でも検算してみましょう。Aを除く部分集合 $S$ は $\varnothing$、$\{B\}$、$\{C\}$、$\{B,C\}$ の4つです。それぞれの限界貢献は、$v(A)-v(\varnothing)=6-0=6$、$v(AB)-v(B)=24-12=12$、$v(AC)-v(C)=12-0=12$、$v(ABC)-v(BC)=36-18=18$ です。重みは $|S|=0$ と $|S|=2$ では $\frac{0!\,2!}{3!}=\frac{1}{3}$、$|S|=1$ では $\frac{1!\,1!}{3!}=\frac{1}{6}$ なので、

$$ \phi_A = \tfrac{1}{3}\cdot 6 + \tfrac{1}{6}\cdot 12 + \tfrac{1}{6}\cdot 12 + \tfrac{1}{3}\cdot 18 = 2 + 2 + 2 + 6 = 12 $$

となり、全順序を平均して得た12と一致します。重みの分子 $|S|!\,(n-|S|-1)!$ は「Sの中の並べ方 × 残りの並べ方」で、ちょうどその提携サイズで対象が加わる順序の数を数えていることが、この検算からも見て取れます。

このシャープレイ値が「公平」と言える根拠は、満たすべき性質を公理として定めると、それを満たす配分がシャープレイ値ただ一つに決まるからです。

シャープレイ値を一意に決める4つの公理

シャープレイ値は、次の4つの公理をすべて満たす唯一の配分法であることが証明されています。

シャープレイ値の4公理(効率性・対称性・ダミー・加法性)の図解

各公理の意味を確認しましょう。

  • 効率性 — 全員の取り分の合計が、全員で協力したときの総利益にちょうど等しい($\sum_j \phi_j = v(N) – v(\varnothing)$)。SHAPでは「各特徴量の貢献の合計=予測値と平均予測の差」になります。過不足なく分配されるので、説明が予測値と必ず一致します。
  • 対称性 — どの提携に加わっても同じ限界貢献をする2人は、同じ取り分になる。公平さの根幹です。
  • ダミー — どの提携に加わっても利益を増やさない人の取り分は0。SHAPでは、予測に影響しない無関係な特徴量の貢献が0になることに対応します。
  • 加法性 — 2つのゲームを足し合わせたゲームでは、各人の取り分も足し算になる。これはアンサンブル(木の足し算)と非常に相性が良い性質です。

とくに効率性はSHAPの実用上の生命線です。説明(各特徴量の貢献の和)が必ず実際の予測値と一致するので、「説明はしたが予測と辻褄が合わない」という事態が起きません。これらの公理が、SHAPを単なる発見的手法ではなく理論的に裏打ちされた手法にしています。では、この協力ゲームの枠組みを、どう機械学習の予測の説明に対応づけるのでしょうか。

機械学習への対応:特徴量=プレイヤー、予測値=報酬

SHAPのアイデアは、協力ゲームの登場人物を機械学習の言葉に置き換えるだけです。対応関係を図にまとめます。

協力ゲーム理論と機械学習の予測説明の対応表

対応は次のように読みます。プレイヤーは特徴量、提携 $S$ は「値がわかっている特徴量の集合」、提携の利得 $v(S)$ は「$S$ の特徴量だけを知ったときの予測の期待値」です。

$$ v(S) = \mathbb{E}\bigl[\,f(x) \mid x_S\,\bigr] $$

つまり、「ある特徴量を知らない」状態を、その特徴量を背景データ(多数のサンプル)の値で置き換えて周辺化することで表現します。知っている特徴量 $x_S$ は説明したいサンプルの値に固定し、残りは背景データで平均します。すると、分配すべき総利得は $v(N) – v(\varnothing) = f(x) – \mathbb{E}[f(x)]$、すなわち「この予測値と平均予測の差」になり、各特徴量のシャープレイ値 $\phi_j$ がその差を公平に分けた取り分になります。

効率性の公理から、次の加法的な分解が常に成り立ちます。

$$ f(x) = \underbrace{\mathbb{E}[f(x)]}_{\text{基準値}} + \sum_{j=1}^{M} \phi_j $$

この式こそSHAPの核心です。どんな複雑なモデルでも、1件の予測を「平均予測+各特徴量の貢献の足し算」に必ず分解できるのです。

ここで「知らない特徴量を背景データで置き換える」という操作の意味を、もう少し丁寧に押さえておきましょう。モデル $f$ は全特徴量がそろっていないと予測を出せません。そこで「特徴量 $j$ を知らない」状態を、$j$ の値を背景データから取ってきた値で埋め、たくさんの埋め方について予測を平均することで近似します。背景データには訓練データの代表的なサンプル(あるいはその一部)を使い、これが「平均的にはこの特徴量はこのくらい」という基準を与えます。この置き換え方には実は2つの流儀があり、特徴量を独立とみなして周辺分布から置き換える介入的(interventional)SHAPと、他の特徴量との相関を保つ条件付き分布から置き換える条件付き(conditional)SHAPがあります。本記事の実装は前者で、計算が単純で「モデルへの入力をどう動かすか」という因果的な解釈がしやすい一方、相関の強い特徴量があると後述の注意点が出ます。どちらを使うかで貢献の値が変わりうる、ということは頭の隅に置いておくとよいでしょう。

ただし、この計算には大きな壁があります。

計算量の壁とTreeSHAP・KernelSHAP

シャープレイ値の定義は「すべての特徴量の部分集合」について $v(S)$ を評価することを要求します。特徴量が $M$ 個あれば部分集合は $2^M$ 通りあり、特徴量が増えると組合せが指数的に爆発します。

特徴量数に対して評価すべき部分集合が指数爆発する様子とTreeSHAPの多項式時間の比較

図のとおり、$M=20$ で約100万通り、$M=40$ では約1兆通りに達し、厳密計算は現実的でなくなります。そこで実用的な近似・高速化が使われます。

  • KernelSHAP — モデルの中身を問わない汎用手法。提携をサンプリングし、特別な重み付き線形回帰でシャープレイ値を近似します。どんなモデルにも使える反面、サンプリングのため計算は重めです。
  • TreeSHAP — 決定木・ランダムフォレスト・GBDTなど木モデル専用の手法。木の構造(各葉に至る経路と到達確率)を利用して、指数時間ではなく多項式時間(木の本数・葉の数・深さの多項式)で厳密に計算します。図の青線がそのオーダーで、木モデルなら大規模でも実用的です。

KernelSHAPの考え方を少しだけ補足します。SHAPの提案者は、シャープレイ値が「ある特別な重み付き最小二乗問題の解」として書けることを示しました。具体的には、提携 $S$(どの特徴量を「知っている」とするか)を表す0/1ベクトル $z$ を入力、その提携の予測 $v(S)$ を出力とする線形モデルを当てはめます。このとき、各提携にSHAPカーネルと呼ばれる特別な重み(小さい提携と大きい提携を重く、中くらいの提携を軽くする重み)を与えて回帰すると、その回帰係数がちょうどシャープレイ値になります。KernelSHAPは、全 $2^M$ 提携を使う代わりに重要な提携をサンプリングしてこの回帰を解くことで、任意のモデルに対して近似的にSHAP値を求めます。モデルの中身を一切仮定しないのが強みで、ニューラルネットでもSVMでも使えます。

XGBoostやLightGBMといったGBDT系がSHAPと特に相性が良いのは、このTreeSHAPで高速かつ厳密に貢献を出せるからです。実務では shap ライブラリの shap.TreeExplainer(木モデル)や shap.KernelExplainer(汎用)を使い、shap.summary_plotshap.waterfall_plot で可視化するのが定番です。本記事では理解のため、shap ライブラリは使わず、小さなGBDTに対して定義どおりの厳密計算(全部分集合の列挙)を行い、SHAPの代表的な可視化を自作して中身を見ていきます。仕組みがわかれば、ライブラリの出力も自信を持って読めるようになります。

Pythonでのスクラッチ実装と可視化

まず、シャープレイ値を定義どおりに計算する関数を用意します。shap ライブラリを使わず、全部分集合を列挙して厳密に求めます。

import itertools
from math import factorial
import numpy as np

def shap_values_exact(model_predict, X_explain, X_background):
    """v(S)=E_b[f(x_S, b_{S以外})] として全 2^M 部分集合を列挙し厳密に計算する"""
    N, M = X_explain.shape
    B = len(X_background)
    V = np.zeros((2 ** M, N))                       # V[mask, i] = 提携maskの価値
    for mask in range(2 ** M):
        on = [j for j in range(M) if mask >> j & 1]  # 値が既知の特徴量
        Z = np.tile(X_background, (N, 1))            # 背景データを下敷きに
        for j in on:
            Z[:, j] = np.repeat(X_explain[:, j], B)  # 既知の特徴量はxの値で上書き
        V[mask] = model_predict(Z).reshape(N, B).mean(axis=1)
    # 提携サイズ s に対する重み |S|!(M-|S|-1)!/M!
    w = {s: factorial(s) * factorial(M - 1 - s) / factorial(M) for s in range(M)}
    phi = np.zeros((N, M))
    for j in range(M):
        for mask in range(2 ** M):
            if mask >> j & 1:                        # j が既に入っている提携は飛ばす
                continue
            s = bin(mask).count("1")
            phi[:, j] += w[s] * (V[mask | (1 << j)] - V[mask])
    return phi, V[0]                                 # base = v(空集合) = 平均予測

この実装は、知らない特徴量を背景データで周辺化する介入的SHAPそのものです。次に、合成した中古マンションデータ(専有面積・築年数・駅徒歩・階数・南向き・部屋数の6特徴量、価格は面積で上がり築年数と駅徒歩で下がる)に小さなGBDTを学習し、SHAP値を計算して効率性を検証します。

# モデルを学習し、説明対象と背景データを用意(GBDTはスクラッチ実装を使用)
model = GBDT(n_trees=200, lr=0.1, max_depth=3).fit(Xtr, ytr)
bg = Xtr[np.random.default_rng(0).choice(len(Xtr), 100, replace=False)]
X_exp = Xte[:120]
phi, base = shap_values_exact(model.predict, X_exp, bg)

# 効率性(加法性)の検証: base + 各特徴量の貢献の和 が予測値に一致するか
recon = base + phi.sum(axis=1)
print("最大誤差 |base+Σφ - f(x)| =", round(float(np.abs(recon - model.predict(X_exp)).max()), 8))

このコードを実行すると、最大誤差は0.00000000となり、「基準値+各特徴量の貢献の和」が予測値に厳密に一致することが確認できます(学習したモデルのテストRMSEは約208万円、$R^2 \approx 0.97$ でした)。効率性の公理が実装レベルで成り立っているのです。これでSHAP値が手元にあるので、代表的な可視化を順に見ていきましょう。

summary plot:モデル全体の傾向を一望する

まず、多数のサンプルのSHAP値をまとめて見るsummary plotです。各点が1サンプルで、横軸がその特徴量のSHAP値、色が特徴量の値の大小を表します。

import matplotlib.pyplot as plt
order = np.argsort(np.abs(phi).mean(axis=0))  # 平均|SHAP|の小さい順に下から並べる
fig, ax = plt.subplots(figsize=(10, 5.6))
rng = np.random.default_rng(1)
for row, j in enumerate(order):
    t = (X_exp[:, j] - X_exp[:, j].min()) / (np.ptp(X_exp[:, j]) + 1e-12)
    ax.scatter(phi[:, j], np.full(len(phi), row) + rng.uniform(-0.32, 0.32, len(phi)),
               c=plt.get_cmap("coolwarm")(t), s=16, alpha=0.85)
ax.axvline(0, color="#888888", lw=1)
plt.show()

SHAPサマリープロットで各物件の特徴量ごとの貢献の分布を示した図

このsummary plotから、モデル全体の傾向が一望できます。専有面積は最も重要で、値が大きい(赤い)点ほどSHAP値が正に大きく、価格を押し上げています。築年数は逆に、値が大きい(古い)ほどSHAP値が負で価格を押し下げます。一方部屋数はSHAP値がほぼ0に集まり、価格への寄与がほとんどありません(面積と強く相関しているため、面積に貢献を吸われています)。色とSHAP値の関係から、各特徴量が価格を上げる向きか下げる向きかまで読み取れます。

waterfall plot:1件の予測を分解する

次に、特定の1物件について「平均予測からどう積み上がってこの予測値になったか」を示すwaterfall plotです。

1物件の予測を平均予測から各特徴量の貢献で積み上げて説明するウォーターフォールプロット

この物件は、平均予測の基準値3,579万円から出発しています。最大の押し上げ要因は専有面積(80平米)の+718万円で、これだけで予測の大部分を説明します。一方で階数(1階)が-87万円南向きでないことが-55万円と価格を押し下げています。これらを足し合わせると、この物件の予測価格4,227万円にちょうど到達します。個別の予測の「理由」が、特徴量ごとの金額として明快に読める — これが与信や診断の説明で強力に効く点です。

dependence plot:特徴量と貢献の関係と相互作用

最後に、ある特徴量の値とそのSHAP値の関係を散布図にしたdependence plotです。点の色に別の特徴量を割り当てると、特徴量どうしの相互作用も見えます。

専有面積と駅徒歩のSHAP値の依存プロットで相互作用が筋に分かれる様子

左は専有面積とそのSHAP値で、面積が広いほど貢献が大きい右上がりの傾向がはっきり出ています。さらに点の色(駅徒歩)に注目すると、同じ面積でも駅近(青)の物件は貢献が一段高く、データに仕込んだ「駅近×広さ」の相互作用プレミアムが筋の分かれとして現れています。右の駅徒歩のプロットでは、徒歩5分以内で貢献が跳ね上がり、広い物件ほど跳ねが大きいことが読めます。dependence plotは、モデルが特徴量をどんな形(線形か、しきい値か、相互作用ありか)で使っているかを暴くのに有効です。

可視化が出そろったので、SHAPと従来の特徴量重要度との違いを整理しましょう。

gain・permutation importance との違い

特徴量の重要度には、SHAP以外にも代表的な指標があります。それぞれ測っているものが違います。

  • gain(ゲイン)重要度 — 木の分割でその特徴量がどれだけ誤差(不純度・二乗誤差)を減らしたかの合計。モデルの学習過程に基づく指標で、木モデル特有です。
  • permutation importance(並べ替え重要度) — その特徴量の値をシャッフルしたときに、予測精度(誤差)がどれだけ悪化するかで測る。モデル非依存で、予測性能への寄与を見ます。
  • 平均|SHAP| — 各サンプルのSHAP値の絶対値の平均。個々の予測への貢献の大きさを集約したもので、向き(プラス・マイナス)も保持したまま全体に集計できます。

3つを同じモデルで比べてみましょう。

平均SHAPとpermutation重要度とgain重要度の3種類を並べて比較した棒グラフ

3つの指標とも、専有面積を最重要とし、築年数・駅徒歩が続くという順位はおおむね一致します。しかし意味は異なります。gainは「学習中にどれだけ分割に使われたか」、permutationは「壊すとどれだけ性能が落ちるか」、SHAPは「各予測にどれだけ寄与したか」を測ります。とくにSHAPは個別の予測まで分解できる唯一の指標で、しかも符号(押し上げ/押し下げ)を保持します。全体傾向の把握には平均|SHAP|を、性能への寄与の確認にはpermutation importanceを、というように併用すると理解が深まります。

便利なSHAPですが、解釈には重要な注意点があります。

注意点:相関する特徴量と「因果ではない」こと

SHAPを使ううえで、必ず押さえておくべき落とし穴が2つあります。

ひとつは相関する特徴量どうしで貢献が分け合われることです。互いに強く相関する2つの特徴量があると、本来は片方だけが重要でも、シャープレイ値の対称性の性質から両者に貢献が割り振られてしまいます。実際に、ほぼ同じ値を取る特徴量 a と b(真に効くのは a のみ)を含むデータで確かめましょう。

import numpy as np
rng = np.random.default_rng(0)
a = rng.uniform(0, 10, 600)
b = a + rng.normal(0, 0.3, 600)          # a とほぼ同じ(強い相関)
c = rng.uniform(0, 10, 600)
X = np.c_[a, b, c]
y = 2.0 * a + 0.0 * b + 1.0 * c + rng.normal(0, 0.2, 600)  # 真の寄与は a と c のみ

このデータでSHAP値を計算すると、真の係数は b に対して0であるにもかかわらず、a の貢献の一部が b に流れ込み、b にも無視できない重要度が割り振られてしまいます。下の図のとおりです。

相関する特徴量aとbで貢献が分け合われてしまう様子を示した散布図と重要度の棒グラフ

このように、SHAP値が小さいからといって「その特徴量は不要」とは限りません。相関する仲間に貢献を吸われているだけかもしれません。

もうひとつ、より根本的な注意はSHAPは相関であって因果ではないという点です。SHAPはあくまで「学習済みモデルが、その特徴量をどう使って予測したか」を説明するもので、「その特徴量を変えれば結果が変わる」という因果関係を保証しません。モデルが偶然のパターンを学んでいれば、SHAPもそのパターンを忠実に映すだけです。SHAPはモデルの挙動の説明であって、世界の因果の説明ではない — この区別を忘れると、誤った意思決定につながります。

具体例で考えてみましょう。あるECサイトの解約予測モデルで「サポートへの問い合わせ回数」のSHAP値が大きく正(解約方向)に出たとします。これは「問い合わせが多い顧客は解約しやすい」というモデルの挙動を正しく説明しています。しかし、ここから「問い合わせを減らせば解約が減る」と結論して問い合わせ窓口を閉じるのは、因果を取り違えた誤りです。実際には「不満を抱えた顧客が問い合わせ、その後に解約する」という別の要因(不満)が背後にあり、問い合わせはその症状にすぎないかもしれません。SHAPは症状と結果の関連を示しますが、介入の効果を予言するものではありません。因果効果を知りたいなら、SHAPではなく因果推論の枠組み(実験や反事実の分析)が必要になります。

加えて、SHAPの値は背景データの選び方にも依存します。背景データを「全顧客」にするか「特定セグメント」にするかで基準値 $\mathbb{E}[f(x)]$ が変わり、各特徴量の貢献も相対的に変わります。SHAP値はつねに「何を基準にした貢献か」とセットで解釈すべきで、絶対的な真の値が一つに定まるわけではない、という点も実務では重要です。

まとめ

本記事では、SHAPについて協力ゲーム理論から実装・注意点まで解説しました。

  • SHAPはシャープレイ値で予測値を各特徴量の貢献に分解する、理論的に裏打ちされた解釈手法
  • シャープレイ値は「全参加順序にわたる限界貢献の平均」で、効率性・対称性・ダミー・加法性の4公理を満たす唯一の配分
  • 機械学習では特徴量=プレイヤー、予測値=報酬と対応づけ、$f(x)=\mathbb{E}[f(x)]+\sum_j \phi_j$ の加法分解が常に成り立つ(効率性)
  • 厳密計算は $2^M$ で爆発するため、汎用のKernelSHAPと木モデル専用のTreeSHAPで実用化される
  • summary/waterfall/dependence plotで全体傾向・個別予測・相互作用を読み解ける
  • gain/permutation importanceと順位は近いが意味が違う。SHAPは個別予測まで分解できる唯一の指標
  • 相関する特徴量で貢献が分け合われること、SHAPは因果ではないことに注意

モデル解釈は、高精度なアンサンブルを安心して実務に投入するための鍵です。次のステップとして、以下の記事も参考にしてください。