zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

[轻笔记] SHAP值的计算步骤

计算笔记 步骤
2023-09-27 14:20:42 时间

SHAP值的主要思想来自合作博弈论(coalitional game theory)中的Shapley值。Shapley值由Shapley在1953年提出,用来对玩家贡献进行评估,从而分配收益的一种方法。在机器学习中,SHAP值被用来解释学习模型对某一输入状态的各特征值对预测输出的贡献(重要程度)。本文主要记录SHAP的计算步骤。

定义(联盟):假定状态空间为 n n n维,标记为 A = { x 1 , x 2 , . . . , x n } A=\{x_1, x_2, ..., x_n\} A={x1,x2,...,xn},我们此时要估计第 i i i个特征对预测输出的贡献,若有一集合 S S S满足 S ⊂ A S\subset A SA x i ∉ S x_i\notin S xi/S,假定有一样本 x k = [ x 1 = a 1 , x 2 = a 2 , . . . , x n = a n ] \mathbf{x}_k=[x_1=a_1, x_2=a_2, ..., x_n=a_n] xk=[x1=a1,x2=a2,...,xn=an],则称 S a = { x j = a j , ∀ j ∈ S } S_a=\{x_j=a_j, \forall j\in S\} Sa={xj=aj,jS}为特征 x i = a i x_i=a_i xi=ai的一个联盟。

举例:假定有一样本 x k = [ x 1 = a 1 , x 2 = a 2 , . . . , x n = a n ] \mathbf{x}_k=[x_1=a_1, x_2=a_2, ..., x_n=a_n] xk=[x1=a1,x2=a2,...,xn=an],我们要评估 x 2 x_2 x2的SHAP值,当 S = { x 1 , x 3 } S=\{x_1, x_3\} S={x1,x3}时有联盟 S a = { x 1 = a 1 , x 3 = a 3 } S_a=\{x_1=a_1, x_3=a_3\} Sa={x1=a1,x3=a3}

定义(在联盟 S a S_a Sa下, x i = a x_i=a xi=a的贡献):假定 S a S_a Sa x i x_i xi的一个联盟,则在该联盟下, x i = a i x_i=a_i xi=ai的贡献定义如下:

E x j ∼ X j , ∀ j ≠ i 且 x j ∉ S ( f ^ ( S a ∪ { x i = a i } ∪ { x j } ) ) − E x j ∼ X j , ∀ x j ∉ S ( f ^ ( S a ∪ { x j } ) ) (1) E_{x_j \sim X_j, \forall j\neq i 且 x_j\notin S}(\hat{f}(S_a\cup \{x_i=a_i\} \cup \{x_j\}))-E_{x_j \sim X_j , \forall x_j \notin S} (\hat{f}(S_a\cup \{x_j\}))\tag{1} ExjXj,j=ixj/S(f^(Sa{xi=ai}{xj}))ExjXj,xj/S(f^(Sa{xj}))(1)
其中, X j X_j Xj为生成特征 x j x_j xj的分布函数。

式(1)可以简写成 v a l ( S a ∪ { x i } ) − v a l ( S a ) val(S_a\cup\{x_i\})-val(S_a) val(Sa{xi})val(Sa) v a l x ( S b ) val_x(S_b) valx(Sb)是子集 S b S_b Sb的预测值在未包含 S b S_b Sb中的特征上的期望。

定义(SHAP值):SHAP值是特征 x i x_i xi所有可能联盟下的贡献的加权和,形式如下:

ϕ i ( v a l ) = ∑ S ∪ A 且 x i ∉ S ∣ S ∣ ! ( n − ∣ S ∣ − 1 ) ! n ! ( v a l ( S a ∪ { x i } − v a l ( S a ) ) (2) \phi_i(val)=\sum_{S\cup A 且 x_i\notin S}\frac{|S|!(n-|S|-1)!}{n!}(val(S_a\cup\{x_i\}-val(S_a))\tag{2} ϕi(val)=SAxi/Sn!S!(nS1)!(val(Sa{xi}val(Sa))(2)

举例:假定有数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\{(\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), ..., (\mathbf{x}_m, y_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)} m m m为数据个数。假定该数据状态有4维,标记为 { x 1 , x 2 , x 3 , x 4 } \{x_1, x_2, x_3, x_4\} {x1,x2,x3,x4}。经过该数据集,我们训练得到一模型 f ^ \hat{f} f^,我们现在想查看某一样本 x i = { x 1 = 3 , x 2 = 5 , x 3 = 9 , x 4 = 1 } \mathbf{x}_i=\{x_1=3, x_2=5, x_3=9, x_4=1\} xi={x1=3,x2=5,x3=9,x4=1}中第2个特征对预测结果 f ^ ( x i ) \hat{f}(\mathbf{x}_i) f^(xi)的贡献。

  • step 1:确定 x 2 = 5 x_2=5 x2=5所有可能的联盟总共有8个,如下所示
    S 1 = ∅ S_1=\emptyset S1=
    S 2 = { x 1 = 3 } S_2=\{x_1=3\} S2={x1=3}
    S 3 = { x 3 = 9 } S_3=\{x_3=9\} S3={x3=9}
    S 4 = { x 4 = 1 } S_4=\{x_4=1\} S4={x4=1}
    S 5 = { x 1 = 3 , x 3 = 9 } S_5=\{x_1=3, x_3=9\} S5={x1=3,x3=9}
    S 6 = { x 1 = 3 , x 4 = 1 } S_6=\{x_1=3, x_4=1\} S6={x1=3,x4=1}
    S 7 = { x 3 = 9 , x 4 = 1 } S_7=\{x_3=9, x_4=1\} S7={x3=9,x4=1}
    S 8 = { x 1 = 3 , x 3 = 9 , x 4 = 1 } S_8=\{x_1=3, x_3=9, x_4=1\} S8={x1=3,x3=9,x4=1}

  • step 2:对于所有的联盟利用式(1)计算其对预测结果的贡献,以 S 2 = { x 1 = 3 } S_2=\{x_1=3\} S2={x1=3}为例
    从数据集 D D D中随机采样 K K K次,获得了 K K K个数据样本,对于每个样本 x a = [ x 1 = a 1 , x 2 = a 2 , x 3 = a 3 , x 4 = a 4 ] \mathbf{x}_a=[x_1=a_1, x_2=a_2, x_3=a_3, x_4=a_4] xa=[x1=a1,x2=a2,x3=a3,x4=a4]做如下操作:
    a) 保持联盟中的特征 x 1 x_1 x1,要求贡献的特征 x 2 x_2 x2 x a \mathbf{x}_a xa中的对应特征的值相等,计算 f ^ ( x 1 = 3 , x 2 = 5 , x 3 = a 3 , x 4 = a 4 ) \hat{f}(x_1=3, x_2=5, x_3=a_3, x_4=a_4) f^(x1=3,x2=5,x3=a3,x4=a4)
    b)仅保持联盟中的特征 x 1 x_1 x1,其它与 x a \mathbf{x}_a xa中的对应特征的值相等,计算 f ^ ( x 1 = 3 , x 2 = a 2 , x 3 = a 3 , x 4 = a 4 ) \hat{f}(x_1=3, x_2=a_2, x_3=a_3, x_4=a_4) f^(x1=3,x2=a2,x3=a3,x4=a4)
    c)计算 v k = f ^ ( x 1 = 3 , x 2 = 5 , x 3 = a 3 , x 4 = a 4 ) − f ^ ( x 1 = 3 , x 2 = a 2 , x 3 = a 3 , x 4 = a 4 ) v_k=\hat{f}(x_1=3, x_2=5, x_3=a_3, x_4=a_4)-\hat{f}(x_1=3, x_2=a_2, x_3=a_3, x_4=a_4) vk=f^(x1=3,x2=5,x3=a3,x4=a4)f^(x1=3,x2=a2,x3=a3,x4=a4)
    计算完得到 K K K v k , k = 1 , 2 , . . . , K v_k, k=1, 2, ...,K vk,k=1,2,...,K,取平均 v ( S ) = 1 K ∑ k = 1 K v k v(S) =\frac{1}{K} \sum_{k=1}^{K}v_k v(S)=K1k=1Kvk近似式(1)。

  • step 3:根据 ∣ S ∣ ! ( n − ∣ S ∣ − 1 ) ! n ! \frac{|S|!(n-|S|-1)!}{n!} n!S!(nS1)!计算各联盟的权值如下
    S 1 : 1 4 S_1:\frac{1}{4} S1:41
    S 2 : 1 12 S_2:\frac{1}{12} S2:121
    S 3 : 1 12 S_3:\frac{1}{12} S3:121
    S 4 : 1 12 S_4:\frac{1}{12} S4:121
    S 5 : 1 12 S_5:\frac{1}{12} S5:121
    S 6 : 1 12 S_6:\frac{1}{12} S6:121
    S 7 : 1 12 S_7:\frac{1}{12} S7:121
    S 8 : 1 4 S_8:\frac{1}{4} S8:41

  • step 4:对计算得到的 v ( S i ) , i = 1 , 2 , . . . . , 8 v(S_i), i=1,2,....,8 v(Si),i=1,2,....,8按以上权值进行加权求和得到 x 2 = 5 x_2=5 x2=5对于 f ^ ( x i \hat{f}(\mathbf{x}_i f^(xi的预测结果的SHAP值。
    ϕ 2 ( v a l ) = 1 4 v ( S 1 ) + 1 12 v ( S 2 ) + 1 12 v ( S 3 ) + 1 12 v ( S 4 ) + 1 12 v ( S 5 ) + 1 12 v ( S 6 ) + 1 12 v ( S 7 ) + 1 4 v ( S 8 ) \phi_2(val)=\frac{1}{4}v(S_1)+\frac{1}{12}v(S_2)+\frac{1}{12}v(S_3)+\frac{1}{12}v(S_4)+\frac{1}{12}v(S_5)+\frac{1}{12}v(S_6)+\frac{1}{12}v(S_7)+\frac{1}{4}v(S_8) ϕ2(val)=41v(S1)+121v(S2)+121v(S3)+121v(S4)+121v(S5)+121v(S6)+121v(S7)+41v(S8)


END