決定木ベースの手法で高速にSHAPを計算する手法。
論文上のアルゴリズム名はTreeSHAP、shapパッケージの実装としては TreeExplainer
アルゴリズム¶
Shapley values¶
は全特徴量集合、 は特徴量数とする。特徴量集合 が観測されているときの条件付き期待値 をとすると、Shapley valuesは
となる。
Tree SHAPアルゴリズムは木構造に特化してShapley valuesを厳密に計算し、計算量を従来の から に削減できる。ここで は木の数、 は各木の最大葉数、 は最大の深さである。
上の式のうち の推定が課題となる。
シンプルだが のアルゴリズム¶
を推定する単純で計算量の多いアルゴリズム。
例¶
次のような木を考える
root: x_1 <= 5 ?
├── left leaf: v = 10, cover = 30
└── right node: cover = 70
├── x_2 <= 3 leaf: v = 20, cover = 50
└── x_2 > 3 leaf: v = 100, cover = 20説明対象のインスタンスがだとする
の場合:
→ right node
→ で →
の場合:
→ right node
→ が未知なのでカバー比率で子ノードを荷重和
特徴量の数に対し、部分集合は個あるので計算量が多いのが問題
のアルゴリズム¶
決定木では、ある葉の値に影響するのは、基本的にはその葉に至るパス上に現れた特徴量だけなので、ほかの特徴についてのパスは無視できる → 深さに対し
Algorithm 2 は、決定木の各葉に到達する確率が、ある特徴量を条件付けるかどうかでどれだけ変わるかを計算し、その差に葉の出力値を掛けて特徴量ごとの寄与に分配するアルゴリズム
木を根から葉まで再帰的にたどる
各分岐で、対象サンプル x が進む方向を hot child とする
特徴量が「ある」場合は hot child にだけ進む
特徴量が「ない」場合は、訓練データのカバー比 r_child / r_parent で左右に分配する
パス上では、特徴量ごとの zero fraction, one fraction, Shapley重みを管理する
葉に到達したら、
w * (one fraction - zero fraction) * 葉の値を各特徴量のSHAP値に加算する
変化
φ_{m_i} ← φ_{m_i} + w * (m_i.o - m_i.z) * v_j
# w: 重み
# (m_i.o - m_i.z): 特徴の条件付けでの葉の到達確率の変化
# v_j: 葉ノードでの出力値TreeSHAP¶
[1802.03888] Consistent Individualized Feature Attribution for Tree Ensembles
[2109.09847] Fast TreeSHAP: Accelerating SHAP Value Computation for Trees
解説¶
SHAP interaction values¶
TreeSHAPと同じ論文で提案された、特徴量同士の交互作用の強さを評価する手法
主効果から相互作用効果を分離することで、さらに追加の洞察を得ることができる。ペアごとの相互作用を考えると、あるモデル予測に対して、すべての特徴量ペアが与える影響を表す寄与度行列が得られる。SHAP値はゲーム理論における古典的なShapley値に基づいているため、相互作用効果への自然な拡張は、より現代的なShapley interaction index によって得られる。
ただし であり、
式3では、特徴量 と特徴量 の間のSHAP相互作用値は、それぞれの特徴量に等しく分配される。そのため、
となり、全体の相互作用効果は
で表される。ある予測に対する主効果は、その特徴量のSHAP値から、その特徴量に関するSHAP相互作用値を差し引いたものとして定義できる。
SHAP相互作用値は直接計算することもできるが、木モデルではAlgorithm 2を利用することで、計算コストを大幅に削減できる。SHAP相互作用値は、特徴量 が存在している場合の特徴量 のSHAP値と、特徴量 が存在していない場合の特徴量 のSHAP値との差として解釈できる。
このため、Algorithm 2を2回使うことができる。1回目は特徴量 が存在しているものとして固定して無視し、2回目は特徴量 が存在しないものとして計算する。各特徴量についてこの処理を繰り返すため、実行時間は となる。