← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:バギングとランダムフォレスト(特徴量重要度)

要点(BLUF)


1. なぜ解釈性が要るのか

予測精度が高ければそれで十分、とはいきません。モデルがブラックボックス(入力と出力は見えるが、中の判断根拠が見えない)だと、次の場面で困ります。

ここで重要な区別を先に置きます。解釈性(interpretability)は「人間が因果関係や根拠をどれだけ理解できるか」、説明可能性(explainability)は「ブラックボックスの挙動を後付けで説明できるか」 を指すことが多いです。本ノートでは両者をまとめて「解釈性」と呼びますが、後述のように後付けの説明は近似であって真の根拠そのものではない点が常について回ります。


2. 整理の2つの軸

解釈手法は数が多いので、まず2軸で地図を描きます。

flowchart TB
    Root["解釈手法の地図"]
    Root --> A["軸1:適用範囲<br/>大域 vs 局所"]
    Root --> B["軸2:透明性<br/>モデル固有 vs モデル非依存"]

    A --> A1["大域 global<br/>モデル全体の傾向"]
    A --> A2["局所 local<br/>特定の1件の予測"]

    B --> B1["モデル固有 intrinsic<br/>モデル自体が透明"]
    B --> B2["モデル非依存 post-hoc<br/>学習後に後付けで説明"]

    A1 --> P1["並べ替え重要度<br/>(非依存・大域)"]
    B1 --> P2["線形回帰の係数 / 決定木<br/>(固有・大域も局所も)"]
    A2 --> P3["LIME<br/>(非依存・局所)"]
    A2 --> P4["SHAP<br/>(非依存・局所+集約で大域)"]

軸1:大域(global) vs 局所(local)

要するに、鳥瞰図(大域)か虫眼鏡(局所)かの違いです。

軸2:モデル固有(intrinsic) vs モデル非依存(post-hoc)

要するに、最初から透明な箱(固有)か、不透明な箱を外から推し量る(非依存)かです。一般に「精度の高い複雑なモデルほど不透明」というトレードオフがあり、後者の手法が必要になります。


3. モデル固有の解釈(intrinsic)

複雑な後付け手法に行く前に、そもそも透明なモデルを押さえます。これらは説明が「近似」ではなく構造そのものなので、信頼度が高いのが利点です。

線形回帰の係数

線形回帰 y^=β0+jβjxj\hat{y} = \beta_0 + \sum_{j} \beta_j x_j では、係数 βj\beta_j が「xjx_j を1単位増やすと予測が βj\beta_j だけ動く」を直接表します(他を固定したとき)。符号と大きさがそのまま解釈になります。詳しくは 線形回帰(最小二乗法と確率的解釈)

ただし特徴量のスケールが揃っていないと係数の大小を直接比べられない(単位の違いで β\beta が変わる)点に注意。比較するなら標準化してから見ます。

Lasso のスパース性

L1正則化(Lasso)は係数の一部をちょうど0に潰すので、「効いている特徴」だけが残った疎な(スパースな)モデルになります。これは変数選択を兼ねた解釈として強力です。Ridge は0にしないので、この性質はLasso特有です → 正則化(Ridge・Lasso・Elastic Net)

決定木

決定木は「もし x1>5x_1 > 5 なら…さらに x2<3x_2 < 3 なら…」という** if-then ルールの連鎖**そのものなので、浅い木なら根から葉までたどるだけで判断根拠が読めます → 決定木。深くなると人間が追えなくなり、解釈性は失われます。

木の特徴量重要度(不純度減少)

ランダムフォレストや勾配ブースティングでは、各特徴がノード分割で不純度(ジニ不純度やエントロピー)をどれだけ減らしたかの合計を重要度とします。

Importance(xj)=xj で分割した全ノード tntnΔi(t)\text{Importance}(x_j) = \sum_{\substack{\text{$x_j$ で分割した}\\ \text{全ノード } t}} \frac{n_t}{n}\,\Delta i(t)

ここで Δi(t)\Delta i(t) はノード tt での不純度減少、nt/nn_t/n はそのノードに来るデータの割合(重み)です。要するに、その特徴を使った分割が「データをどれだけきれいに分けたか」の総量。全木で平均してランキング化します → バギングとランダムフォレスト

⚠️ ただしこの不純度ベースの重要度は カーディナリティの高い特徴(取りうる値が多い特徴)を過大評価しやすいという既知のバイアスがあります。連続値やIDのような特徴は分割の自由度が高く、見かけ上たくさん不純度を減らせてしまうためです。次節の並べ替え重要度はこの弱点を補えます。


4. 並べ替え重要度(permutation importance)

モデル非依存・大域の代表手法。アイデアは極めて素直です。

ある特徴 xjx_j の列だけをランダムにシャッフル(並べ替え)して、xjx_j と目的変数の関係を壊す。それでモデルの性能がどれだけ落ちたかを、その特徴の重要度とする。

PI(xj)=L(y,f(Xperm(j)))xj を壊した後の損失L(y,f(X))元の損失\text{PI}(x_j) = \underbrace{L(y, f(X_{\text{perm}(j)}))}_{\text{$x_j$ を壊した後の損失}} - \underbrace{L(y, f(X))}_{\text{元の損失}}

性能が大きく落ちる → そのモデルはその特徴に強く依存していた、と読みます。要するに「その情報を奪ったら、どれだけ困るか」を測るわけです。

⚠️ 相関のある特徴で誤解を生む:2つの特徴が強く相関していると、片方をシャッフルしてももう片方が同じ情報を持っているため、性能があまり落ちません。結果、両方とも重要度が低く見える(重要度が分散・希釈される)。さらに、シャッフルは「現実には起こりえない特徴の組み合わせ」を作り出し、モデルが訓練時に見たことのない領域へ外挿(extrapolation)してしまうため、その意味でも値が歪みます。相関が強い場合は特徴をまとめる、条件付き並べ替えを使うなどの対処が要ります。


5. LIME:局所を線形で近似する

LIME(Local Interpretable Model-agnostic Explanations) は、注目する1点 xx の予測だけを説明する局所・非依存手法です。

核心のアイデア:複雑なモデル ff も、ある1点のごく近傍だけ見れば、単純な線形モデルで近似できるはず。だから「xx の周りでだけ ff に似た、解釈可能な単純モデル gg」を当てはめ、その gg の係数で説明します。

flowchart LR
    A["説明したい1点 x"] --> B["x の近傍に<br/>サンプルを生成"]
    B --> C["各サンプルを<br/>本物のモデル f で予測"]
    C --> D["x に近いサンプルほど<br/>重く(近接カーネル)"]
    D --> E["重み付きで<br/>単純な線形モデル g を学習"]
    E --> F["g の係数 = x での<br/>局所的な特徴の効き方"]

数式では、次の目的関数を最小化する gg を選びます。

ξ(x)=argmingG L(f,g,πx)局所的な近似のズレ+Ω(g)g の複雑さ罰則\xi(x) = \arg\min_{g \in G}\ \underbrace{\mathcal{L}(f, g, \pi_x)}_{\text{局所的な近似のズレ}} + \underbrace{\Omega(g)}_{\text{$g$ の複雑さ罰則}}

要するに、「この1点の近くでだけ、本物のモデルにそっくりで、しかも人間が読める単純モデル」を作って代弁させるπx\pi_x が「近く」の定義(距離が近いほど大きい重み)を与え、Ω\Omega が「読める」を担保します。

⚠️ LIMEは近傍サンプルの作り方や近接カーネルの幅(どこまでを近くと見るか)に敏感で、同じ点でも設定次第で説明が変わりうる、という再現性の弱さがあります。


6. SHAP:シャープレイ値で寄与を公平配分する

SHAP(SHapley Additive exPlanations) は、協力ゲーム理論のシャープレイ値を使って、各特徴が予測にどれだけ寄与したかを**「公平に」配分**します。局所説明が基本ですが、全データで集約すれば大域的な重要度にもなります。

アナロジー:利益の山分け

協力ゲームでは、複数のプレイヤーが協力して得た総利益を、各人の貢献度に応じて公平に分けたい。シャープレイ値はその唯一の公平な配分法です。SHAPはこれを「プレイヤー=特徴、総利益=その予測値」に置き換えます。

シャープレイ値の数式

特徴 ii のシャープレイ値 ϕi\phi_i は、ii が加わることでモデル出力がどれだけ増えるか(限界貢献)」を、ありうるすべての特徴の組み合わせ SS について平均したものです。

ϕi=SN{i}S!(NS1)!N![v(S{i})v(S)]\phi_i = \sum_{S \subseteq N \setminus \{i\}} \frac{|S|!\,\big(|N| - |S| - 1\big)!}{|N|!}\,\Big[\,v(S \cup \{i\}) - v(S)\,\Big]

要するに、「いろんな順番で特徴を1つずつ足していったとき、ii を足した瞬間に予測がどれだけ動いたか」を、全順序で平均した値ϕi\phi_i です。

4つの公理(なぜ「公平」と言えるか)

シャープレイ値は、次の4性質を同時に満たす唯一の配分であることが証明されています(Shapley, 1953)。これがSHAPの理論的な強みの源です。

  1. 効率性(efficiency / 局所正確性):全特徴の寄与の和が、予測と基準値の差にちょうど等しい。
  2. 対称性(symmetry):2つの特徴がどんな組み合わせでも同じ貢献をするなら、寄与も等しい。
  3. ダミー(dummy / null player):どの組み合わせに足しても出力を変えない特徴の寄与は0。
  4. 加法性(additivity / linearity):2つのモデルを足したモデルの寄与は、各モデルの寄与の和。

加法性(局所正確性)が一番効く

実務でSHAPが好まれる最大の理由が、公理1から導かれる加法性です。1件の予測について、

f(x)=ϕ0+i=1Mϕi,ϕ0=E[f(X)]f(x) = \phi_0 + \sum_{i=1}^{M} \phi_i,\qquad \phi_0 = \mathbb{E}[f(X)]

要するに、「平均的な予測 ϕ0\phi_0 から出発し、各特徴がプラス/マイナスに押した分を足すと、最終予測に過不足なくたどり着く」。内訳が完全に閉じるので、説明として非常に納得感があります(LIMEの局所近似には、ここまでの厳密な閉じ方の保証はありません)。

計算コストと近似

ただし定義通りだと、部分集合 SS の数は特徴数に対して**指数的(2N2^{|N|} 通り)**に増え、厳密計算は重い。そこで近似・高速化版が使われます。

flowchart TB
    S["SHAP : シャープレイ値で寄与配分"] --> K["KernelSHAP<br/>(任意モデル・近似・重い)"]
    S --> T["TreeSHAP<br/>(木モデル専用・厳密・高速)"]
    S --> D["DeepSHAP<br/>(NN向け近似)"]
    S --> P["加法性 : 寄与の和 = 予測 - 基準値"]

7. ⚠️ よくある誤解・落とし穴


対応するシミュレーション

simulations/permutation_importance.py:効く特徴3つと無関係な特徴3つが混ざったデータでランダムフォレストを学習し、並べ替え重要度を計算します。各特徴の値だけをシャッフルして関係を壊したときの正解率の低下量を重要度とすると、本当に効く特徴だけが大きく出て無関係な特徴はほぼ0になることを可視化します。モデル非依存に使える一方、特徴間の相関で重要度が分散する注意点(重回帰と多重共線性)にも触れます。

並べ替えによる特徴量重要度

関連ノート