SHAPの理論

はじめに

機械学習モデルの解釈性への需要が高まる中、SHAP(SHapley Additive exPlanations)は特に注目を集めている手法です。モデルのブラックボックス性を解消し、各特徴量の予測への寄与を定量的に評価できる点が、実務での意思決定において重要な役割を果たしています。理論的な裏付けも強固で、ゲーム理論のShapley値を基礎としている点も、多くの実務家から支持されている理由の一つです。
今回は、SHAPの理論について、基礎から発展的な内容まで、段階的に理解を深めていきたいと思います。それぞれの概念について、直感的な理解から数学的な厳密性まで、複数の視点から解説していきます。

SHAPの基礎理論

SHAPの本質は、協力ゲーム理論におけるShapley値の考え方を、機械学習モデルの特徴量の寄与度評価に応用したところにあります。
まず、Shapley値について直感的な理解を深めましょう。たとえば、あるチームでプロジェクトを完遂し、その成果に対して報酬を分配する場合を考えてみましょう。各メンバーの貢献度をどのように評価すれば良いでしょうか。単純に「最後に誰が参加したか」だけでは、それまでの土台を作った人の貢献を正しく評価できません。逆に「最初に誰が参加したか」だけでも、その後の発展に貢献した人の評価が適切にできません。
Shapley値は、このような問題に対して「すべての可能な参加順序を考慮する」という解決策を提供します。具体的には、メンバーが参加する可能性のあるすべての順序について、「その人が参加することで生まれる限界的な価値」の平均を取ります。これにより、「誰が先に参加したか」という偶然の要素に左右されない、公平な評価が可能となります。
この考え方を数学的に表現すると、以下の式となります:

\phi_i(v) = \sum_{S \subseteq N \backslash {i}} \frac{|S|!(n-|S|-1)!}{n!}(v(S \cup {i}) - v(S))
この式は一見複雑に見えますが、一つずつ要素を解釈していきましょう。\phi_iは特徴量iのShapley値を表します。summationの中の分数部分は、ある順序で特徴量が選ばれる確率を表現しています。v(S \cup {i}) - v(S)は、特徴量iを追加することによる予測値の変化、つまり限界的な貢献を表しています。
式の各部分をより詳しく見ていきましょう。|S|!は、集合Sの中での順列の数を表します。これは、Sに含まれる特徴量がどのような順序で選ばれても同じ扱いをすることを意味します。同様に、(n-|S|-1)!は、残りの特徴量(特徴量i以外)の順列の数を表します。n!で割ることで、すべての可能な順序の中での、その特定の順序の確率を計算しています。

この理論的枠組みは、四つの重要な性質を満たすことが数学的に証明されています。一つずつ詳しく見ていきましょう。
  
効率性は、予測値が特徴量の寄与度の総和と等しいという性質です。数式で表現すると以下のようになります:

f(x) = \phi_0 + \sum_{i=1}^{M} \phi_i
ここでf(x)は予測値、\phi_0はベースとなる予測値(全特徴量の平均的な効果)、\phi_iは各特徴量の寄与度を表します。この性質により、モデルの予測を完全に分解して理解することが可能となります。これは実務上極めて重要で、予測値の構成要素を完全に把握できることを保証します。

  
対称性は、同じ寄与をする特徴量は同じ値を持つという性質です。数学的には以下のように表現できます:

\forall S \subseteq N \backslash {i,j}: v(S \cup {i}) = v(S \cup {j}) \Rightarrow \phi_i = \phi_j

この式は、特徴量iとjが任意の部分集合Sに対して同じ貢献をする場合、それらのShapley値も等しくなることを示しています。これにより、特徴量の重要性を公平に評価することが可能となります。
  
ダミー性は、予測に全く影響を与えない特徴量のShapley値は0になるという性質です:

\forall S \subseteq N \backslash {i}: v(S \cup {i}) = v(S) \Rightarrow \phi_i = 0

この性質により、不要な特徴量を自動的に識別することが可能となります。実務上、これは特徴量選択やモデルの簡略化に直接的な示唆を与えます。
  
加法性は、複数のモデルの予測を組み合わせた場合、Shapley値も線形に組み合わさるという性質です:

\phi_i(v_1 + v_2) = \phi_i(v_1) + \phi_i(v_2)

この性質により、複雑なモデルをより単純なサブモデルに分解して解析することが可能となります。
  
これらの性質を満たすような特徴量の重要度指標は、Shapley値が唯一であることが数学的に証明されています。この理論的な裏付けの強さが、SHAPが広く受け入れられている理由の一つです。
  
SHAPでは、この考え方をさらに発展させ、条件付き期待値の観点から特徴量の寄与を評価します:

\phi_i = \sum_{S \subseteq N \backslash {i}} \frac{|S|!(n-|S|-1)!}{n!}(E[f(x)|x_S] - E[f(x)|x_{S \backslash {i}}])
この式について、もう少し詳しく解説しましょう。E[f(x)|x_S]は、特徴量集合Sの値を固定した際の予測値の条件付き期待値を表します。これは、「特定の特徴量の値が分かっている時に、平均的にどのような予測値が得られるか」を表現しています。E[f(x)|x_{S \backslash {i}}]は、特徴量iを除いた場合の条件付き期待値です。

  
ここまでの内容を概念的に説明しようと思います。
サッカーの試合で、チーム全体の得点に対して各選手がどれだけ貢献したのかを評価することを考えてみましょう。単純に「誰がゴールを決めたか」だけを見るのは不十分です。素晴らしいパスを出した選手や、相手の攻撃を防いだディフェンダー、チームを統率したキャプテンなど、様々な形での貢献があるためです。
SHAPは、この評価を「全ての可能なチーム編成を試す」という方法で解決します。例えば、11人の選手がいる場合、考えられる全ての組み合わせ(2人だけでプレイする場合、3人でプレイする場合など)でチームの得点力を評価します。ある選手の価値は、「その選手が加わることで、どれだけチームの得点力が向上するか」の平均として計算されます。
これを機械学習に当てはめると、各特徴量(選手)が予測値(チームの得点)にどれだけ貢献しているかを評価することになります。例えば、家の価格を予測するモデルでは、「広さ」「駅からの距離」「築年数」などの特徴量それぞれの貢献度を計算できます。
  
SHAPの重要な性質は、サッカーチームの例で説明するとより分かりやすくなります:
効率性は、チーム全体の得点が各選手の貢献度の合計と等しくなるという性質です。つまり、予測された家の価格は、各特徴量の貢献度を全て足し合わせると完全に説明できます。これは、「なぜこの価格になったのか」を完全に理解できることを意味します。
対称性は、同じような働きをする選手は同じ評価を受けるという性質です。例えば、同じようなプレースタイルで同じくらいの得点に貢献している2人のフォワードは、同じ評価を受けるべきです。これは、特徴量の評価が公平であることを保証します。
ダミー性は、試合に全く影響を与えない選手(ベンチにずっと座っている選手)の貢献度は0になるという性質です。これは、予測に影響を与えない特徴量は自動的に0という評価になることを意味します。
加法性は、例えばリーグ戦と杯戦の両方を評価する場合、各選手の総合評価は両大会での評価の合計になるという性質です。これにより、複雑なモデルを分解して理解することが可能になります。
さらに、SHAPは条件付き期待値という考え方も導入します。これは、「特定の選手がいる場合といない場合で、チームの得点期待値がどう変化するか」を評価するようなものです。例えば、エースストライカーがいる場合といない場合で、チームの得点期待値がどれだけ変化するかを、様々な他の選手の組み合わせで試算し、その平均を取ります。

SHAPの理論的拡張

SHAPの基本的な枠組みを理解したところで、より発展的な理論について説明していきましょう。特に、条件付き期待値の計算方法と、様々なモデルへの適用について詳しく見ていきます。

まず、条件付き期待値の計算における理論的な課題について考えてみましょう。条件付き期待値E[f(x)|x_S]の計算には、以下のような積分が必要となります:
E[f(x)|x_S] = \int f(x)p(x_{N\backslash S}|x_S)dx_{N\backslash S}
ここでp(x_{N\backslash S}|x_S)は、特徴量集合Sが与えられた時の、残りの特徴量の条件付き分布を表します。この分布を正確に推定することは一般に困難で、特に特徴量間に複雑な依存関係が存在する場合は特に難しくなります。

  
この問題に対処するため、SHAPでは以下のような近似アプローチを採用しています:

E[f(x)|x_S] \approx \frac{1}{|D_x|} \sum_{z \in D_x} f(h_S(x, z))
ここでD_xは背景分布からのサンプル集合、h_S(x, z)は特徴量集合Sについてはxの値を、それ以外についてはzの値を使用する関数です。この近似により、複雑な条件付き分布の推定を避けつつ、実用的な計算が可能となります。

具体的な計算手順は以下のようになります:

h_S(x, z)_j = \begin{cases} x_j & \text{if } j \in S \ z_j & \text{if } j \notin S \end{cases}

この関数により、特徴量空間上で「一部の特徴量だけを置き換える」という操作が可能となります。これは、特定の特徴量の組み合わせが予測にどのような影響を与えるかを直接的に評価することを可能にします。
さらに、この近似を用いたShapley値の計算は以下のように展開されます:

\phi_i = \frac{1}{M} \sum_{m=1}^M \sum_{S \subseteq N \backslash {i}} \frac{|S|!(n-|S|-1)!}{n!}(f(h_{S\cup{i}}(x, z^{(m)})) - f(h_S(x, z^{(m)})))
ここでz^{(m)}は背景分布から得られたm番目のサンプルを表します。この式は、複数のサンプルを用いてShapley値を推定することを表現しています。サンプル数Mを増やすことで、より安定した推定が可能となりますが、計算コストとのトレードオフが生じます。

  
ここまでの内容を概念的に説明してみようと思います。
新しい料理を開発する際、各食材がどのように最終的な味に影響するかを理解することは非常に重要です。しかし、一つの食材の効果を評価するのは簡単ではありません。なぜなら、その食材の効果は、一緒に使用する他の食材によって大きく変化する可能性があるためです。
例えば、塩の効果を評価したいとします。単純に「塩がある場合とない場合」を比較するだけでは不十分です。なぜなら、塩の効果は他の調味料(醤油、味噌など)の存在によって大きく変わるからです。理想的には、考えられる全ての食材の組み合わせで塩の効果を試してみたいところですが、これは現実的ではありません。
SHAPの拡張理論は、この問題に対して賢明な解決策を提供します。それは、「代表的なレシピのパターン」をいくつか選んで、その中での食材の効果を評価する方法です。まず代表的なレシピのパターンをいくつか用意し、これは統計的には「背景分布からのサンプリング」に相当します。次に評価したい食材について、それを加えた場合と加えない場合の味の違いを、各レシピパターンで確認します。そして、これらの結果の平均を取ることで、その食材の「一般的な効果」を推定します。
この方法の利点は、全ての可能な組み合わせを試す必要がなく、代表的なパターンだけを使って効率的に評価できる点です。例えば、1000種類の可能な組み合わせがあっても、20-30の代表的なパターンで十分な精度の評価が可能になります。
さらに、この方法は食材間の相互作用も自然に考慮します。塩と砂糖を組み合わせた時の効果、塩と醤油を組み合わせた時の効果、塩と酢を組み合わせた時の効果など、これらの組み合わせ効果が、最終的な評価に反映されます。
ただし、注意すべき点もあります。代表的なパターンの選び方によって、結果が変わる可能性があります。これは、どのようなレシピを「標準的」と考えるかによって、各食材の評価が変わり得ることを意味します。そのため、十分な数の多様なパターンを使用することが重要です。
この理論は、より複雑なケースにも応用できます。季節によって変わる食材の組み合わせや、地域による味の好みの違い、調理方法による食材の効果の変化など、これらの要因も、適切なサンプリングとモデリングによって考慮することが可能です。

モデル特有のSHAP実装

これまでの理論的な枠組みを基に、様々な機械学習モデルに対するSHAPの具体的な実装方法について見ていきましょう。特に、決定木系モデルとニューラルネットワークに対する実装は、それぞれ独自の理論的な発展を遂げています。

決定木系モデルに対するSHAPの理論

まず、決定木系モデルに対するTreeSHAPから説明していきます。TreeSHAPの革新的な点は、決定木の構造を利用することで、Shapley値の厳密な計算を効率的に行える点にあります。基本的な計算式は以下のようになります:

\phi_i^{tree} = \sum_{j \in \text{leaf nodes}} w_j(i) \cdot v_j
この式の理論的な意味を深く理解するために、各要素について詳しく見ていきましょう。w_j(i)は葉ノードjにおける特徴量iの重みを表し、以下のように計算されます:
w_j(i) = \sum_{p \in \text{paths to j}} \frac{|S_p|!(n-|S_p|-1)!}{n!} \cdot 1_{i \in p}

ここで重要なのは、この重みの計算が決定木の構造を直接利用していることです。従来のSHAP計算では全ての特徴量の組み合わせを考慮する必要がありましたが、TreeSHAPでは木構造に沿って計算を行うことで、計算量を大幅に削減しています。具体的には、計算量は木の深さに対して指数関数的ではなく、線形になります。
  
さらに、決定木における予測値の条件付き期待値は以下のように展開できます:

E[f(x)|x_S] = \sum_{j \in \text{leaves}} v_j \cdot P(j|x_S)
ここでP(j|x_S)は、特徴量集合Sが与えられた時に葉ノードjに到達する確率を表します。この確率は以下のように計算されます:
P(j|x_S) = \prod_{k \in \text{path to j}} P(d_k|x_S)
d_kは決定木のk番目の分岐を表し、P(d_k|x_S)はその分岐を選択する確率です。この確率は、分岐に使用される特徴量がSに含まれるか否かによって異なります:
P(d_k|x_S) = \begin{cases}
1 & \text{if feature}(d_k) \in S \text{ and } x \text{ satisfies } d_k \
0 & \text{if feature}(d_k) \in S \text{ and } x \text{ does not satisfy } d_k \
p_k & \text{if feature}(d_k) \notin S
\end{cases}
ここでp_kは、訓練データにおいてその分岐が選択される経験的な確率です。この確率計算の枠組みにより、決定木の各分岐が最終的な予測に与える影響を正確に追跡することが可能となります。

  
ここまでの内容を概念的に文章で説明していこうと思います。
家の価格を予測する決定木モデルを想像してみましょう。このモデルは、「広さ」「駅からの距離」「築年数」などの特徴を使って、最終的な価格を予測します。TreeSHAPは、この予測に対して各特徴がどのように貢献したのかを解き明かすための手法です。
これを理解するために、レストランでの配膳の例で考えてみましょう。お客様のテーブルまで料理を運ぶとき、キッチンからテーブルまでには複数の経路があり得ます。各ウェイターは異なる順序で現れ、料理を受け渡していくかもしれません。これは決定木での予測と似ています。TreeSHAPは、各ウェイター(特徴量)がどれだけ効率的に料理(予測値)の配達に貢献したかを計算します。
従来のSHAPは、全てのウェイターの可能な組み合わせを考慮する必要がありました。これは、全ての可能な配膳ルートを一つ一つ検証するようなものです。しかし、実際のレストランでは、キッチンからテーブルまでの効率的な経路は限られています。TreeSHAPは、この事実に着目しました。決定木の構造そのものが、効率的な「配膳ルート」を示しているのです。
具体的には、決定木の各分岐点は、料理を次のウェイターに渡すかどうかの判断ポイントのようなものです。例えば、「広さが80平米以上か?」という分岐は、特定のウェイターに料理を渡すかどうかの判断に相当します。その判断の結果、料理は異なる経路(左の枝か右の枝)を通っていきます。
重要なのは、TreeSHAPが各特徴量の貢献度を計算する際、この「配膳ルート」の構造を利用している点です。あるウェイターが料理の配達に貢献したかどうかは、彼らが実際に料理を運んだ区間(決定木での分岐)にのみ依存します。他の区間での出来事は、そのウェイターの貢献度評価には影響しません。
また、各分岐点での判断確率は、訓練データから学習します。これは、あるウェイターが特定の経路を選ぶ頻度のようなものです。例えば、「広さが80平米以上」という条件を満たす物件が訓練データの70%であれば、その分岐を右に進む確率は0.7となります。
このように、TreeSHAPは決定木の自然な構造を活用することで、効率的に各特徴量の貢献度を計算できます。まるで、レストランで最も効率的な配膳ルートを見つけ出し、各ウェイターの貢献度を正確に評価するようなものです。この手法により、複雑な予測モデルの判断過程を、人間が理解しやすい形で説明することが可能となっています。
さらに、この考え方は複数の決定木を組み合わせたモデル(例:ランダムフォレスト)にも適用できます。それは、複数のレストランでの配膳実績を総合的に評価するようなものです。各レストラン(決定木)での貢献度を適切に集計することで、より正確な評価が可能となります。

TreeSHAPの欠点や注意すべき点

まず、特徴量間の相関関係、すなわち多重共線性の問題があります。先ほどのレストランの例を拡張して考えてみましょう。二人のウェイターが常に一緒に行動している場合、彼らの個別の貢献度を正確に評価することは困難です。同様に、「広さ」と「部屋数」のように強い相関がある特徴量の場合、TreeSHAPは各特徴量の真の貢献度を過小評価したり、場合によっては誤った解釈を導く可能性があります。
また、TreeSHAPは特徴量間の交互作用を単純化して扱う傾向があります。これは、複数のウェイターが協力して初めて効率的な配膳が可能となるような状況を、完全には捉えきれないことを意味します。例えば、「駅からの距離」と「バスの本数」という特徴量は、組み合わさることで価値が大きく変化する可能性がありますが、TreeSHAPではこのような複雑な相互作用を十分に表現できないことがあります。
サンプルサイズの問題も重要です。訓練データが少ない場合、各分岐での確率推定の信頼性が低下します。レストランで言えば、限られた営業日のデータだけで各ウェイターの貢献度を評価しようとするようなものです。特に深い階層での分岐では、データ不足により不安定な結果となる可能性があります。
さらに、決定木の構造自体に起因する解釈の難しさもあります。特徴量の重要度は、その特徴量が決定木のどの位置で使用されるかに大きく依存します。例えば、根に近い位置で使用される特徴量は、より大きな影響力を持つ傾向がありますが、これが必ずしもその特徴量の本質的な重要性を反映しているとは限りません。

ニューラルネットワークにおけるSHAP(Deep SHAP)

ニューラルネットワークに対するDeep SHAPについて見ていきましょう。Deep SHAPの特徴は、ネットワークの層構造を活用してShapley値を効率的に計算する点にあります。基本的なアイデアは、各層での変換を考慮しながら、最終的な予測に対する各特徴量の寄与を計算することです。
  
Deep SHAPの計算は以下の式で表現されます:

\phi_i^{(l)} = \sum_{j} \phi_j^{(l+1)} \frac{\partial h_j^{(l+1)}}{\partial h_i^{(l)}}
この式は一見シンプルに見えますが、実際には深い理論的な意味を持っています。h_i^{(l)}は層lでのニューロンiの出力を表し、\frac{\partial h_j^{(l+1)}}{\partial h_i^{(l)}}は層間の勾配を表します。この式は、誤差逆伝播に似た形で、出力層から入力層に向かってShapley値を計算していく過程を表現しています。

  
より具体的に、各層での計算は以下のように展開されます:

h_j^{(l+1)} = \sigma(\sum_i w_{ij}^{(l)} h_i^{(l)} + b_j^{(l)})
ここで\sigmaは活性化関数、w_{ij}^{(l)}は重み、b_j^{(l)}はバイアスを表します。Deep SHAPでは、この非線形変換に対して、以下のような線形化近似を行います:
\phi_i^{(l)} \approx \sum_{j} \phi_j^{(l+1)} w_{ij}^{(l)} \sigma'(\sum_k w_{kj}^{(l)} h_k^{(l)} + b_j^{(l)})

この近似により、各層でのShapley値の計算が実用的な時間で可能となります。しかし、この近似は活性化関数が滑らかな場合にのみ有効で、ReLUのような非滑らかな活性化関数に対しては追加的な考慮が必要となります。
  
さらに、Deep SHAPでは参照点の選択が重要になります。参照点は以下のように設定されます:

r_i^{(l)} = E_{x \in \mathcal{B}}[h_i^{(l)}(x)
ここで\mathcal{B}は背景分布を表します。この参照点を用いて、各特徴量の寄与は以下のように計算されます:
\phi_i = \sum_{S \subseteq N \backslash {i}} \frac{|S|!(n-|S|-1)!}{n!}(f(h_S(x, r)) - f(h_{S \backslash {i}}(x, r)))

この参照点の設定により、「特徴量が存在しない状態」を適切にモデル化することが可能となります。これは特に、入力特徴量間に強い相関がある場合に重要となります。
  
ここまでの内容を概念的に説明してみます。
会社での意思決定プロセスを例に考えてみましょう。大企業では、提案が最終決定に至るまでに複数の部署や階層を経由します。これは、ニューラルネットワークでの情報の流れとよく似ています。Deep SHAPは、最終決定に対する各部署や個人の貢献度を評価するようなものです。
例えば、新商品の開発プロジェクトを考えてみましょう。マーケティング部門からの市場調査データ(入力層)は、中間管理職(中間層)によって解釈され、さらに上級管理職(deeper層)による検討を経て、最終的な決定(出力層)に至ります。Deep SHAPは、この最終決定に対して各レベルでの情報や判断がどのように影響したのかを追跡します。
この追跡プロセスは、会社での業績評価に似ています。年末の業績評価(Shapley値の計算)では、各従業員の貢献度を評価する際に、その人が関わった全てのプロジェクトや決定(活性化された経路)を考慮します。しかし、全ての可能な組み合わせを詳細に検討することは現実的ではありません。そこでDeep SHAPは、効率的な近似手法を用います。
この近似は、従業員の評価を行う際の簡略化した基準のようなものです。例えば、ある従業員の貢献度は、直属の上司の評価(次の層のShapley値)と、その従業員の業務効率(重み)、さらにその時の部署の状況(活性化状態)に基づいて計算されます。これは、完全な評価よりも効率的ですが、それでも十分な精度を保っています。
参照点の概念は、「平均的な従業員」との比較のようなものです。ある従業員の貢献度を評価する際、その人が全く関与しなかった場合(参照点)と比較します。これは、その従業員の独自の価値を浮き彫りにするのに役立ちます。例えば、特殊なスキルを持つ従業員は、その技能が必要な局面で高い貢献度を示すでしょう。
さらに、Deep SHAPは層間の関係性も考慮します。これは、ある部署での決定が他の部署にどのように影響するかを追跡するようなものです。例えば、マーケティング部門の優れた市場分析は、製品開発部門の効果的な意思決定を導き、それが最終的な商品の成功につながるといった具合です。
このように、Deep SHAPは複雑なニューラルネットワークの意思決定プロセスを、人間が理解しやすい形で説明します。それは、大規模な組織での意思決定プロセスを追跡し、各参加者の貢献度を評価するようなものです。この手法により、「ブラックボックス」と呼ばれるニューラルネットワークの判断過程を、より透明で解釈可能なものにすることが可能となっています。
また、活性化関数の扱いは、従業員の業績評価基準の非線形性に似ています。例えば、営業成績が急激に向上する「ブレイクスルーポイント」があるような場合、その評価方法は特別な考慮が必要になります。これはReLUのような非滑らかな活性化関数の場合と同様です。

Deep SHAPの欠点や注意すべき点

まず、線形化近似に関する問題があります。先ほどの会社の例で考えると、Deep SHAPは各従業員の貢献度を、その直属の上司からの評価の線形な組み合わせとして近似します。しかし実際の組織では、複数の従業員が協力して初めて生まれる相乗効果や、逆に負の干渉効果が存在することがあります。このような非線形な相互作用は、線形化近似では十分に捉えきれない可能性があります。
計算コストの問題も重要です。確かに、Deep SHAPは通常のSHAPよりも効率的ですが、深層ニューラルネットワークの場合、依然として大きな計算リソースが必要となります。これは、大規模な組織で全従業員の詳細な業績評価を行うようなもので、層が深くなるほど、また各層のユニット数が増えるほど、計算量は急激に増加します。
参照点の選択に関する課題も存在します。Deep SHAPでは、「平均的な入力」を参照点として使用しますが、この平均が必ずしも意味のある基準とならない場合があります。例えば、カテゴリカルな特徴量の場合、その平均値は現実には存在しない中間的な状態を表すことになります。これは、存在しない「平均的な従業員」と比較して評価を行うようなものです。
グラディエントの不安定性の問題も無視できません。特に深い層では、勾配の消失や爆発が起こる可能性があり、これはShapley値の計算精度に直接影響します。会社の例で言えば、組織の階層が深くなるほど、最上層での些細な判断の変更が、下層での評価に予期せぬ大きな影響を与える可能性があるということです。
活性化関数の非滑らかさに起因する問題もあります。ReLUのような非滑らかな活性化関数を使用する場合、その微分不可能な点での挙動をどのように扱うかが課題となります。これは、業績評価でのある種の閾値効果、例えば「一定の売上を超えた場合にボーナスが急激に増加する」ような状況をモデル化する際の難しさに似ています。
さらに、特徴量間の長距離依存関係の捉え方も課題となります。Deep SHAPは基本的に層ごとの局所的な関係性を見ていきますが、入力層から出力層まで直接的な影響を持つような関係性は、十分に捉えきれない可能性があります。これは、組織の異なる部署間での直接的な相互作用や、長期的な影響関係を評価することの難しさに似ています。
データの分布シフトに対する脆弱性も考慮する必要があります。訓練データと大きく異なる分布の入力に対しては、Deep SHAPの説明が信頼できないものとなる可能性があります。これは、通常とは全く異なる状況下での従業員評価が、既存の評価基準では適切に機能しないことに似ています。

カーネルSHAPの理論(KernelSHAP)

モデル不可知な手法であるKernelSHAPについて、より深く理解していきましょう。KernelSHAPの革新的な点は、Shapley値の計算を重み付き線形回帰問題として定式化したことにあります。この定式化により、任意のモデルに対してSHAP値を計算することが可能となります。
まず、KernelSHAPの基本的な最適化問題は以下のように表現されます:

\min_{\phi} \sum_{z \in {0,1}^M} \pi_x(z)(f_x(z) - (\phi_0 + \sum_{i=1}^M \phi_i z_i))^2
この式の深い理論的意味を理解するために、各要素について詳しく見ていきましょう。zは特徴量の有無を表す二値ベクトルで、f_x(z)はその特徴量の組み合わせに対する予測値を表します。\pi_x(z)は重み関数で、以下のように定義されます:
\pi_x(z) = \frac{M-1}{\binom{M}{|z|}|z|(M-|z|)}
この重み関数の設計には深い理論的な根拠があります。分母の二項係数\binom{M}{|z|}は、特定の数の特徴量を選ぶ組み合わせの総数を表します。|z|M-|z|の項は、選択された特徴量と選択されていない特徴量の数を反映しています。この重み付けにより、Shapley値の計算に必要な「すべての可能な順序の平均」を効率的に近似することが可能となります。

  
実際の計算では、特徴量の組み合わせをサンプリングして近似計算を行います。このサンプリングは以下の類似度カーネルに基づいて行われます:

K(z) = \frac{(M-1)}{\binom{M}{|z|}|z|(M-|z|)}

このカーネルの特徴は、中程度の数の特徴量を含む組み合わせに対して高い重みを与える点です。これは以下の理論的な考察に基づいています:

E[\phi_i] = \sum_{S \subseteq N \backslash {i}} \frac{|S|!(M-|S|-1)!}{M!}(f_x(S \cup {i}) - f_x(S))
この期待値の計算において、中程度のサイズの集合Sが最も多くの情報を提供することが示されています。具体的には、|S|がM/2付近の値を取る場合に、そのサンプルが最も価値のある情報を提供することが数学的に証明されています。

  
KernelSHAPの計算効率をさらに向上させるため、以下のような理論的な拡張が行われています。まず、サンプリングの効率化について考えてみましょう。単純なランダムサンプリングではなく、以下の分布に従ったサンプリングを行うことで、推定の分散を削減することができます:

p(z) \propto \sqrt{\pi_x(z)} \cdot \text{Var}(f_x(z))
この式において、\text{Var}(f_x(z))は特徴量組み合わせzに対する予測値の分散を表します。この分散は以下のように推定されます:
\text{Var}(f_x(z)) \approx \frac{1}{K-1} \sum_{k=1}^K (f_x(z^{(k)}) - \bar{f}_x(z))^2
ここでz^{(k)}は特徴量組み合わせzの周辺でのk番目のサンプル、\bar{f}_x(z)はそれらの予測値の平均を表します。このような分散を考慮したサンプリングにより、重要な特徴量の組み合わせにより多くの計算リソースを割り当てることが可能となります。

さらに、線形回帰の解は以下の形式で与えられます:

\phi = (Z^T W Z + \lambda I)^{-1} Z^T W y

ここで、

Zは特徴量の組み合わせ行列
Wは重み行列(対角成分に\pi_x(z)を持つ)
yは予測値のベクトル
\lambda正則化パラメータ

を表します。   

この正則化\lambdaの導入により、推定の安定性が向上します。最適な\lambdaの値は、以下の交差検証スコアを最小化することで決定されます:
\text{CV}(\lambda) = \sum_{i=1}^n (y_i - \hat{y}_i^{(-i)}(\lambda))^2 \pi_x(z_i)
ここで\hat{y}_i^{(-i)}(\lambda)は、i番目のサンプルを除いて学習したモデルによる予測値を表します。

また、特徴量間の相互作用を考慮するため、以下のような二次の項を含むモデルへの拡張も可能です:

f(z) \approx \phi_0 + \sum_{i=1}^M \phi_i z_i + \sum_{i < j} \phi_{ij} z_i z_j

この拡張により、特徴量間の相互作用効果を直接的に評価することが可能となります。相互作用項の重要度は以下のように計算されます:

\phi_{ij} = \sum_{S \subseteq N \backslash {i,j}} \frac{|S|!(M-|S|-2)!}{(M-1)!}(\Delta_{ij}(S))

  
これまでの内容に関して概念的に説明してみましょう。
レストランでの料理の評価システムを想像してみましょう。一つの料理の美味しさは、様々な食材(特徴量)の組み合わせによって決まります。KernelSHAPは、各食材が最終的な美味しさにどれだけ貢献しているかを評価する方法です。
まず、基本的な考え方を説明します。シェフ(モデル)は様々な食材の組み合わせで料理を作ります。KernelSHAPは、食材を入れた場合と入れなかった場合の味の違いを、全ての可能な組み合わせで比較します。これは、料理コンテストの審査員が、各食材の貢献度を公平に評価しようとするようなものです。
しかし、全ての可能な組み合わせを試すのは現実的ではありません。例えば、20種類の食材があれば、100万通り以上の組み合わせが存在します。そこでKernelSHAPは、賢明なサンプリング戦略を採用します。これは、経験豊富な料理評論家が、特に重要そうな組み合わせに注目して評価するようなものです。
特に興味深いのは、KernelSHAPが中程度の数の食材を含む組み合わせを重視する点です。これは直感的にも理解できます。極端に少ない食材や多すぎる食材では、個々の食材の貢献度を正確に評価するのが難しいためです。例えば、塩一つだけの評価や、全ての食材を一度に評価するのは、あまり意味のある情報を提供しません。
さらに、KernelSHAPは食材の相互作用も考慮します。例えば、醤油と砂糖は単体では特別でなくても、組み合わせることで素晴らしい味を生み出すかもしれません。これは、特徴量間の相互作用を評価する機能に相当します。
重み付き線形回帰という手法は、レシピの評価点数をつけるようなものです。各食材に点数(係数)をつけ、その合計が最終的な料理の評価と最もよく一致するように調整します。この際、より信頼できるサンプル(評価)には高い重みが与えられます。
また、分散を考慮したサンプリングは、より不確実性の高い組み合わせにより多くの注意を払うことを意味します。例えば、珍しい食材の組み合わせは、より慎重に評価する必要があるでしょう。
正則化の導入は、評価の安定性を確保するためのものです。これは、一時的な味の変動や個人の好みによる偏りを抑制し、より一般的で信頼できる評価を得るようなものです。
このように、KernelSHAPは複雑なモデルの判断プロセスを、食材の貢献度評価のような直感的な形で説明することを可能にします。これにより、どんな種類のモデル(シェフ)であっても、その判断基準を理解可能な形で説明することができます。特に、相互作用の評価や効率的なサンプリング戦略により、現実的な計算時間で信頼性の高い結果を得ることができる点が、この手法の大きな特徴となっています。

KernelSHAPの欠点や注意すべき点

計算コストの問題が最も顕著です。先ほどのレストランの例で考えると、食材の組み合わせは指数関数的に増加します。KernelSHAPは確かに効率的なサンプリング戦略を採用していますが、特徴量が多い場合、依然として大きな計算リソースが必要となります。例えば、100種類の食材がある場合、有意義なサンプル数を確保するだけでも膨大な計算時間が必要となる可能性があります。
サンプリングによる近似の不確実性も重要な課題です。効率的なサンプリング戦略を採用しているとはいえ、重要な組み合わせを見落としてしまう可能性は常に存在します。これは、限られた試食会で重要な食材の組み合わせを見逃してしまうようなものです。特に、めったに使用されないが重要な食材の組み合わせは、サンプリングから漏れやすい傾向があります。
背景分布の選択に関する問題もあります。特徴量が「存在しない」状態をどのように表現するかは、結果に大きな影響を与えます。これは、ある食材を使用しない場合に、どのような代替食材を使用するか、あるいは単に除外するかという選択に似ています。この選択は必ずしも自明ではなく、文脈依存的な判断が必要となります。 特徴量間の複雑な相互作用の扱いも課題となります。二次の相互作用項まで考慮可能ですが、三つ以上の特徴量間の複雑な相互作用は十分に捉えきれません。料理で言えば、三種類以上の食材が組み合わさって初めて生まれる独特の味わいを評価することの難しさに似ています。
モデルの非線形性に対する感度も考慮が必要です。線形回帰による近似を基本としているため、極端に非線形なモデルの振る舞いを正確に捉えることが難しい場合があります。これは、食材の量がわずかに変化しただけで味が劇的に変わるような場合の評価の難しさに似ています。
重み関数の設計に関する理論的な課題もあります。現在の重み関数は数学的な美しさを持っていますが、必ずしもすべての実践的な状況に最適とは限りません。特に、ドメイン知識に基づいて特定の特徴量の組み合わせをより重視したい場合、現在の重み関数では柔軟な調整が難しい場合があります。
正則化パラメータの選択も実践上の課題となります。交差検証によって最適値を決定できますが、これは追加の計算コストを必要とします。また、選択された正則化パラメータが本当に最適な説明を提供しているかどうかの検証は容易ではありません。
さらに、時系列データや構造化データなど、特殊なデータ型への適用における課題もあります。これらのデータでは、特徴量の「存在/不在」という二値的な考え方が必ずしも適切ではない場合があります。例えば、時間的な依存関係を持つ食材の組み合わせを評価する場合、単純な有無の比較では不十分かもしれません。

発展的なSHAPの理論

Causal SHAP

因果的SHAPは、相関関係ではなく因果関係に基づいて特徴量の重要度を評価する手法です。通常のSHAPが条件付き独立を仮定しているのに対し、Causal SHAPは因果グラフに基づいた介入効果を評価します。
まず、Causal SHAPの基本的な計算式は以下のように表現されます:

\phi_i^{causal} = \sum_{S \subseteq N \backslash {i}} \frac{|S|!(n-|S|-1)!}{n!}(E[f(x)|do(x_S), do(x_i = x_i^*)] - E[f(x)|do(x_S)])
この式におけるdo(x_i = x_i^)は、Pearlの介入演算子を表します。これは単なる条件付けとは異なり、因果グラフ上でx_iに向かうすべての矢印を切断し、値を直接x_i^{*}に設定する操作を表します。

この介入の効果を正確に推定するため、以下のような構造方程式モデル(SEM)を考えます:

x_i = f_i(pa(x_i), u_i, \epsilon_i)
ここで重要な要素を詳しく見ていきましょう。f_iは構造関数で、変数間の因果関係を表現します。pa(x_i)x_iの親ノード集合、つまりx_iに直接的な因果効果を持つ変数の集合です。u_iは観測された交絡因子、\epsilon_iは観測されていない外生的撹乱を表します。

この構造方程式モデルに基づいて、介入の効果は以下のように計算されます:

E[f(x)|do(x_i = x_i^)] = \int f(x) P(x|do(x_i = x_i^))dx = \int f(x) \prod_{j \neq i} P(x_j|pa(x_j))dx_j

この式は、介入後の確率分布が、因果グラフの構造に従ってどのように変化するかを表現しています。積分は、介入されていない変数に対して、それらの親ノードに基づいた条件付き確率を用いて計算されます。   
交絡因子の存在下での因果効果の識別には、バックドア基準を用いることができます:

P(y|do(x_i = x_i^)) = \sum_z P(y|x_i = x_i^, z)P(z)
ここでzは十分な調整集合を表し、これはバックドア基準を満たす変数の集合です。この集合は因果グラフの構造から特定することができ、以下の条件を満たす必要があります:
P(y|do(x_i = x_i^)) = P(y|x_i = x_i^, z) \text{ if } z \text{ blocks all backdoor paths}

  
実際の計算においては、段階的なアプローチが必要となります。まず因果グラフの構造を特定することから始めます。これは、ドメイン知識や観測データから因果関係を推定することで行われます。次に、識別された因果グラフに基づいて、十分な調整集合を見つけていきます。この調整集合は、すべてのバックドアパスをブロックする必要があります。その後、条件付き期待値の推定を行います。これには様々な機械学習手法を活用することができます。そして最後に、これらの推定値を用いて最終的なCausal SHAP値を計算します。
このプロセスを数学的により厳密に表現すると、以下のようになります。因果効果の推定値は、観測データと因果グラフの構造から以下のように計算されます:

\hat{E}[f(x)|do(x_i = x_i^)] = \int f(x) \hat{P}(x|do(x_i = x_i^))dx
ここで\hat{P}は推定された確率分布を表します。この推定には、以下のような局所因果効果の計算が必要となります:
\text{LCE}(x_i) = E[f(x)|do(x_i = x_i^* + \delta)] - E[f(x)|do(x_i = x_i^*)]
この式は、特徴量x_iに小さな変化\deltaを与えた時の予測値の変化を表現しています。

  
Causal SHAPの実装において、実務的な観点から重要となるのが交絡因子の処理です。実際の因果効果の推定では、以下のような一般化式を用います:

E[f(x)|do(x_i = x_i^), z] = \int f(x) P(x|do(x_i = x_i^), z)dx

この式において、zは観測された交絡因子を表します。実際のデータ分析では、この期待値の計算は以下のような推定式で近似されることが一般的です:

\hat{E}[f(x)|do(x_i = x_i^{'}), z] = \frac{1}{|D_z|} \sum_{x \in D_z} f(h_{i,x_i^{'}}(x))
ここでD_zは交絡因子zの値が類似したデータ点の集合、h_{i,x_i^{'}}(x)は特徴量iの値をx_i^{'}に置き換える関数を表します。

さらに、推定の信頼性を向上させるため、二重ロバスト推定という手法が用いられることがあります:

\hat{\tau}(x_i) = \hat{E}[f(x)|do(x_i = x_i^*)] - \hat{E}[f(x)] + \frac{1}{n} \sum_{j=1}^n (Y_j - \hat{E}[f(x)|x_i = x_{i,j}])

この式の各項は以下のような意味を持ちます。第一項は介入効果の推定値、第二項はベースラインの期待値、第三項は観測データとモデル予測の残差を表します。この推定量は、モデルの誤特定に対してロバストな性質を持ちます。
実際の応用においては、特徴量間の複雑な因果関係を考慮するため、以下のような一般化線形モデルが用いられることがあります:

E[Y|do(x_i = x_i^)] = g^{-1}(\beta_0 + \beta_i x_i^ + \sum_{j \neq i} \gamma_j E[X_j|do(x_i = x_i^*)])
ここでgはリンク関数、\beta_iは直接効果、\gamma_jは間接効果のパラメータを表します。この式は、介入による直接効果と、他の変数を通じた間接効果の両方を捉えることができます。

  
ここまでの内容を概念的に説明してみようと思います。
家庭菜園で、トマトの収穫量をより良くするために様々な要因の影響を理解したいとします。通常のSHAPでは「日照時間が長いトマトは収穫量が多い」という相関関係は分かりますが、これが本当に日照時間の直接的な効果なのか、それとも他の要因(例えば気温や水分量)を通じた間接的な効果なのかは区別できません。
Causal SHAPは、この問題に対して「介入」という考え方を導入します。これは、庭で実験をするようなものです。例えば、日照時間の効果を知りたい場合、遮光ネットを使って意図的に日照時間を調整します。これにより、他の条件(気温や水分量)への自然な影響を切り離して、純粋な日照時間の効果を測定できます。
この「介入」の考え方は、構造方程式モデルという形で表現されます。これは、野菜の成長における因果関係を数式で表したものです。例えば「気温は日照時間の影響を受け、水分量は気温と降水量の影響を受け、トマトの成長は気温と水分量と日照時間の影響を受ける」といった関係性を、数学的に記述します。
さらに複雑なのが、交絡因子の存在です。例えば、土壌の質は日照時間と水分量の両方に影響を与える可能性があります。このような交絡因子の影響を適切に調整するため、Causal SHAPは「バックドア基準」という考え方を使います。これは、純粋な因果効果を測定するために必要な要因を特定する方法です。
実際の分析では、まず野菜の成長に関する因果関係の構造を理解する必要があります。これは園芸の専門知識や過去のデータから推測します。次に、その構造に基づいて、各要因の純粋な効果を推定していきます。例えば、日照時間を1時間増やしたときの収穫量の変化を、他の要因の影響を適切に調整しながら計算します。
この手法の特徴的な点は、直接効果と間接効果を区別できることです。例えば、日照時間を増やすことは、直接的にトマトの光合成を促進する効果と、気温を上昇させることを通じた間接的な効果の両方を持ちます。Causal SHAPは、これらの効果を個別に評価することができます。
より複雑な状況として、複数の野菜を同時に栽培する場合を考えてみましょう。ある野菜への介入が、土壌の栄養状態を変化させることで他の野菜にも影響を与える可能性があります。このような相互作用も、因果グラフの構造に基づいて適切に評価することができます。
このように、Causal SHAPは単なる相関関係ではなく、真の因果関係に基づいて各要因の重要度を評価することを可能にします。これにより、より効果的な意思決定や改善策の立案が可能となります。野菜作りの例では、限られたリソース(時間や労力)を、本当に収穫量の向上に効果のある要因に集中して投資することができます。

時系列SHAP

時系列SHAPでは、時間的な依存関係を明示的にモデル化する必要があります。基本的な定式化は以下のとおりです:

\phi_{i,t} = \sum_{S \subseteq N_t \backslash {i}} \frac{|S|!(n_t-|S|-1)!}{n_t!}(\Delta_{i,t}(S))
この式において、\Delta_{i,t}(S)は時刻tにおける特徴量iの限界的な寄与を表し、以下のように定義されます:
\Delta_{i,t}(S) = E[f(x_t)|x_{S,t}, x_{i,t}, h_{t-1}] - E[f(x_t)|x_{S,t}, h_{t-1}]
ここでの理論的な革新は、履歴情報h_{t-1}の導入にあります。この履歴情報は以下のような再帰的な構造を持ちます:
h_t = g(h_{t-1}, x_t)
gは状態更新関数で、過去の情報を要約する役割を果たします。この関数の具体的な形式は、問題の性質に応じて様々な選択が可能です。例えば、単純な加重平均から、LSTMやGRUなどの複雑なニューラルネットワークまで、幅広い選択肢があります。

時系列における長期的な依存関係を考慮するため、時間方向の減衰を導入することができます:

\phi_{i,t}^{long} = \gamma \phi_{i,t-1}^{long} + (1-\gamma)\phi_{i,t}
減衰係数\gammaは以下のように定義されます:
\gamma = \exp(-\Delta t/\tau)
ここで\tauは特徴的な時間スケールを表すパラメータ、\Delta tは時間間隔を表します。この定式化により、過去の影響を徐々に減衰させながら考慮することが可能となります。

時系列データの特殊性を考慮するため、条件付き期待値の計算には以下のような時間依存性を持つカーネルが使用されます:

K_t(z, z') = K_{space}(z, z') \cdot K_{time}(t, t')
この式において、K_{space}は特徴量空間上の類似度、K_{time}は時間方向の類似度を表します。この分解により、空間的な類似性と時間的な類似性を独立に扱うことが可能となります。

時系列データにおける特徴量の重要度は、時間的な文脈に大きく依存します。この依存性を適切にモデル化するため、以下のような時間依存型の期待値計算を導入します:

E[f(x_t)|x_{S,t}, h_{t-1}] = \int f(x_t)p(x_t|x_{S,t}, h_{t-1})dx_t
この積分は、過去の状態h_{t-1}と現在の部分的な観測x_{S,t}が与えられた時の予測値の期待値を表します。実際の計算では、この期待値は以下のようなサンプリングベースの近似で評価されます:
\hat{E}[f(x_t)|x_{S,t}, h_{t-1}] = \frac{1}{M} \sum_{m=1}^M f(x_t^{(m)})
ここでx_t^{(m)}は条件付き分布p(x_t|x_{S,t}, h_{t-1})からのm番目のサンプルを表します。

時系列データにおける特徴量間の相互作用も、時間依存性を考慮して以下のように定式化されます:

\phi_{ij,t} = \sum_{S \subseteq N_t \backslash {i,j}} \frac{|S|!(n_t-|S|-2)!}{(n_t-1)!}(\Delta_{ij,t}(S))
ここで\Delta_{ij,t}(S)は、時刻tにおける特徴量iとjの相互作用効果を表し、以下のように計算されます:
\Delta_{ij,t}(S) = E[f(x_t)|x_{S,t}, x_{i,t}, x_{j,t}, h_{t-1}] - E[f(x_t)|x_{S,t}, x_{i,t}, h_{t-1}] - E[f(x_t)|x_{S,t}, x_{j,t}, h_{t-1}] + E[f(x_t)|x_{S,t}, h_{t-1}]

この式は、二つの特徴量の組み合わせ効果から、それぞれの個別効果を差し引くことで、純粋な相互作用効果を抽出しています。
さらに、時系列データ特有の周期性を考慮するため、以下のような周期関数を導入することも可能です:

p(t) = \sum_{k=1}^K \alpha_k \sin(2\pi k t/T) + \beta_k \cos(2\pi k t/T)

この周期関数を用いて、Shapley値を以下のように補正します:

\phi_{i,t}^{periodic} = \phi_{i,t} \cdot (1 + p(t))

  
ここまでの内容を概念的に説明してみようと思います。
株価の変動を理解しようとするとき、様々な要因(株価指標、取引量、ニュースなど)が時間とともに変化し、それらが複雑に絡み合って影響を及ぼします。時系列SHAPは、このような時間的な依存関係を持つデータにおいて、各要因の重要度を適切に評価する手法です。
株価分析の例で考えると、今日の株価は今日の要因だけでなく、過去の履歴情報にも大きく依存します。例えば、過去の株価トレンド、取引量の推移、そして市場センチメントの変化などが、現在の株価形成に影響を与えます。時系列SHAPは、この「履歴情報」を明示的にモデルに組み込みます。
また、時間的な影響の減衰も考慮されます。これは、投資家の記憶が徐々に薄れていくようなものです。例えば、1年前の大きなニュースの影響は、時間とともに小さくなっていきます。時系列SHAPでは、この減衰を数学的にモデル化し、過去の影響を適切に重み付けします。
さらに、株式市場には様々な周期性が存在します。日中の取引パターン、週末効果、季節性などです。時系列SHAPは、これらの周期的なパターンも考慮に入れることができます。例えば、月曜日の取引開始時と金曜日の取引終了時では、同じニュースでも市場への影響が異なる可能性があります。
特徴量間の相互作用も、時間的な文脈の中で評価されます。例えば、取引量の増加は、上昇トレンドの中では株価にポジティブな影響を与えるかもしれませんが、下降トレンドの中ではネガティブな影響を与えるかもしれません。時系列SHAPは、このような文脈依存的な相互作用を捉えることができます。
期待値の計算においても、時間的な依存関係が考慮されます。これは、ある時点での予測を行う際に、過去の情報と現在の部分的な観測の両方を活用するようなものです。例えば、午前中の取引データから午後の株価を予測する場合、過去の同様なパターンを参照しながら、予測を行います。
サンプリングによる近似も、時間的な構造を維持しながら行われます。これは、過去の類似した市場状況をサンプリングして、現在の状況での予測に活用するようなものです。このとき、時間的に近い事例により大きな重みが与えられます。

最後に

今回は、様々なところで使用されているSHAPに関して、理論を踏まえて様々解説してみましたがどうだったでしょうか?SHAPの概要だけは知っているが、中身でどういった処理がなされて結果が出てきているか知らないといった人は、結構いるのではないでしょうか?今回の記事を機にSHAPへの理解が深まれば幸いです。