SHAP算法
参考链接Interpretable Machine Learning
-
什么是SHAP?
考虑一个场景,两名玩家1,2共同参加比赛,这样能够获得C12=10000的奖金;
如果玩家1单独参赛,能够获得C1=7500的奖金;
玩家2单独参赛能获得C2=5000的奖金。
当然,没有人参赛的时候,则C0=0。
引入边际贡献,这表示,一个玩家加入这个比赛小组而增加的奖金。
如果玩家1加入玩家2的小组,这会让小组多出C12−C2=5000的奖金;
如果玩家1单独作战(加入没有人的小组),那么(这个没有人的小组)会多出C1−C0=7500的奖金;
取这两个收益进行平均,得到25000+7500=6250,这就是玩家1的预期边际贡献。
按同样的方式,玩家二的预期边际贡献为2(C12−C1)+(C2−C0)=3750。
玩家的预期边际贡献,即为SHAP值。实际上,这个值的大小,是玩家/对所有他能加入的联盟的贡献/的加权平均值。
-
那么,考虑下一个问题:如何“加权”?
考虑一个更复杂的场景,玩家1,2,3在参加比赛。因此,共有8种可能的联盟组合。不妨如下定义各个联盟能够获得的奖金:
C123C0C12C13C23C1C2C3=10000=0=7500=7500=5000=5000=5000=0
通过加权,我们可以计算玩家1的SHAP值:

这里的权重,代表着玩家做出相应的边界贡献(也就是加入相应的联盟)的概率。
以计算P(C123−C23)(也就是玩家1加入玩家2,3联盟)的概率为例:
首先,需要计算出玩家1加入玩家2,3联盟的可能组合。
显然,有1->(2,3)和1->(3,2)这两种组合。而由玩家1,2,3构成的联盟共有3!=6种组合方式。
红头发为玩家1;黑人为玩家2;绿衣服为玩家3

所以,P(C123−C23)=62。
计算P(C12−C2)为例,此时只有一种情况1->(2)。

所以,P(C12−C2)=61。
-
公式推导
推广到p人的场景:
玩家i对联盟做出相应的边界贡献的权重为
weight=p!∣S∣!∗(p−∣S∣−1)!
我们可以看出,权重的本质,是所有可能排列中,S内成员先加入、玩家i随后加入、最后加入剩余成员的概率
而在这种情况下,玩家做出的边界贡献为
val(S∪i)−val(S)
而考虑玩家i能够加入的联盟s,将p!∣S∣!∗(p−∣S∣−1)!∗[val(S∪i)−val(S)]取Σ,则得到玩家i的SHAP值。
ϕi=S⊆P∖{i}∑p!∣S∣!⋅(p−∣S∣−1)![fx(S∪{i})−fx(S)]
-
机器学习中的SHAP分析
术语对应:
联盟里的玩家->参与预测的特征变量
联盟获得的奖金->预测模型的结果
联盟S的”值” -> 基于S的预测期望val(S)
valx(S)=EX∈/S[f(xS,X∈/S)]=∫f(xS,X∈/S)dP(X∈/S)
其中,xS是S中特征的观测值;X∈/S是非S特征的随机变量,而dP(X∈/S)是非S特征的联合概率分布。
这表示,特征联盟S的值是模型对/S中没有的所有特征变量/进行边缘化后的期望值。这里的“边缘化”,是指对非S特征的联合分布求期望,这可以通过积分(离散)或求和(离散)实现。“边缘化”的意义,是消除非S特征的影响,通过积分(或期望)将其”平均掉”,反映S特征的独立贡献。
TimeSHAP
相关资料
[TimeSHAP:通过序列扰动解释递归模型-Feedzai 技术博客.html](..\参考资料\TimeSHAP:通过序列扰动解释递归模型-Feedzai 技术博客.html)
TimeSHAP:通过序列扰动解释递归模型.html
[SHAP-Interpretable Machine Learning.html](..\参考资料\SHAP-Interpretable Machine Learning.html)
-
前置知识:kernelSHAP
直接计算Shapley值需遍历所有 2p 个子集,计算复杂度为指数级。KernelSHAP 通过以下方法近似:
- 仅采样部分特征子集;
- 将Shapley值转换为线性回归问题,利用核函数逼近理论值。
将Shapley值求解转化为优化问题:
ϕ0,ϕ1,...,ϕpminz′∈Z∑[f(hx(z′))−(ϕ0+i=1∑pϕizi′)]2⋅πx′(z′)
其中:
-
z′∈{0,1}p 是二进制向量(1表示特征存在,0表示缺失)。
-
hx(z′) 将 z′ 映射到原始特征空间(缺失特征用背景数据填充)。
-
核函数 πx′(z′) 定义为:
πx′(z′)=(∣z′∣p)⋅∣z′∣⋅(p−∣z′∣)(p−1)
这里 ∣z′∣ 是子集大小,核函数的设计使得回归结果逼近Shapley值的权重。
关于核函数,他的作用是通过调整不同子集的权重,使得回归结果符合Shapley值的权重分配。
而线性模型,是假设Shapley值可表示为线性组合 ϕ0+∑ϕizi′,通过加权最小二乘法求解。
如何计算一个特征变量的shap值呢?
-
生成扰动样本:
- 对输入实例 x,生成 m 个二进制向量 z′∈{0,1}p,每个元素表示对应特征是否“存在”。
- 例如,z′=(1,0,1) 表示包含第1、3个特征,缺失第2个。
-
映射到原始特征空间:
- 对每个 z′,缺失特征用背景数据集(如训练集均值)填充,得到完整样本 hx(z′)。
- 例如,若特征2缺失,则用背景数据的均值替代。
-
获取模型预测:
- 计算每个扰动样本的预测值 f(hx(z′)),得到目标变量 y=[f(hx(z1′)),...,f(hx(zm′))]。
-
构建回归问题:
- 设计矩阵 Z,每行对应一个 z′,增加一列1(截距项 ϕ0)。
- 核权重矩阵 W 为对角矩阵,元素为 πx′(z′)。
-
求解加权线性回归:
- 通过解析解计算Shapley值:
ϕ=(ZTWZ)−1ZTWy
- 其中 ϕ=[ϕ0,ϕ1,...,ϕp]T。
示例:
- 若 p=3,生成 z′=(1,0,1),填充缺失特征后输入模型得到预测值。
- 回归方程:f(z′)≈ϕ0+ϕ1⋅1+ϕ2⋅0+ϕ3⋅1。
- 通过大量样本的加权拟合,最终解得 ϕi。