Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Kernel SHAP

モデル非依存(model-agnostic)、つまり任意の機械学習アルゴリズムで作った予測モデルに対して適用できるSHAP values推定アルゴリズム。

SHAPの提案論文(Lundberg & Lee, 2017)のTheorem2あたりで出てくる話

数式の概要

Notation

  • MM時点の特徴量ベクトルxxがあるとし、特徴量が存在するかどうかを表すようにsimplifiedした二値変数のベクトルをs∈{0,1}Ms \in\{0,1\}^Mとする。

  • ssをxxに戻す関数をx=hx(s)x = h_x(s)とおく

  • 予測値を特徴iiの寄与度ϕi\phi_i に分解する関数をggとおく: f(x)=g(x)=ϕ0+∑i=1Mϕixif(x)=g(x)=\phi_0+\sum_{i=1}^M \phi_i x_i

Shapley kernel

重み関数

πx(s)=M−1(M∣s∣)∣s∣(M−∣s∣)\pi_x(s) =\frac{M-1}{\binom{M}{|s|}|s|(M-|s|)}

をShapley kernelと呼ぶ。なお、ここで ∣s∣|s|はssの非ゼロ要素の数(∣s∣=∑j=1Msj|s|=\sum_{j=1}^M s_j)である。

重み付き二乗損失

モデルの予測値(実測値)f(hx(s))f(h_x(s)) と 説明モデルの出力g(s)g(s)を近づけるようにすると損失が小さくなる関数を定義し、Shapley kernelで重みをつける。

L(f,g,πx)=∑s∈{0,1}M[f(hx(s))−g(s)]2πx(s)L(f, g, \pi_x) =\sum_{s \in \{0,1\}^M}[f(h_x(s))-g(s)]^2 \pi_x(s)

Theorem2

上記の L(f,g,πx)L(f, g, \pi_x) を最小化する解はShapeley values(モデルの説明について望ましい性質1~3を満たす値)である

(そしてこの重み付き回帰がKernel SHAPと呼ばれる)

実装例で確かめる

全体像

Simple Kernel SHAP — SHAP latest documentation

を参考にしつつ改変したものが次

(referenceの値の重要性はいまいちわかっておらずひとまず0にしている)

          x = [10 15]
shap_values = [ 50. 150.]
 base_value = 10.000000000000002
   sum(phi) = 210.0
       f(x) = 210

詳細解説

予測モデル

単純な線形回帰を考える

210

Shapley kernel(重み関数)

πx(s)=M−1(M∣s∣)∣s∣(M−∣s∣)\pi_x(s) =\frac{M-1}{\binom{M}{|s|}|s|(M-|s|)}
0.5

データ行列を作る

[(), (0,), (1,), (0, 1)]

重み付き最小二乗法を解く

重み付き最小二乗法(weighted least squares: WLS)の推定量は、重みを持った対角行列WWと入力の行列XX、目的変数ベクトルyyについて

ϕ=(X⊤WX)−1X⊤Wy\phi = (X^\top W X)^{-1} X^\top W y

と定義される。

Kernel SHAP

これらを全部やればKernel SHAPとなる

実際のライブラリの実装は大規模データの場合にランダムサンプリングするなど高速化の工夫があるようだが、スモールデータでは一致する

          x = [10 15]
shap_values = [ 50. 150.]
 base_value = 10.000000000000002
   sum(phi) = 210.0
       f(x) = 210

パッケージとの比較

shap_values = [ 50. 150.]
base value = 10.0

参考文献