黑箱模型的解释-SHAP

1.SHAP值

SHAP值基于Shapley值,Shapley值是博弈论中的一个概念。SHAP所做的是量化每个特征对模型所做预测的贡献。
在这里插入图片描述
对于所有的特征上图(Age、Gender、Job)可以自由组合共有2^3=8种可能(数学中称为power set即幂集)。SHAP需要为幂集中的每个不同的组合训练一个不同的预测模型,这意味着有8个模型。当然,这些模型在涉及到它们的超参数和训练数据时是完全等价的。唯一改变的是模型中包含的一组特征。
在这里插入图片描述
假设上图是已经用相同训练样本训练了8个线性回归的模型。我们可以用这8个模型分别对一个测试样本做预测(x1),最后得出8个预测结果如上图。因为SHAP值所做的是量化每个特征对模型所做预测的贡献,因此需要计算出每个特征的SHAP值。在这里插入图片描述
对于模型2中Age可以算出年龄作为特征的模型的边际贡献是:
M C A g e , { A g e } = P r e d i c t { A g e } ( x 1 ) P r e d i c t ( x 1 ) = 40 k $ 50 k $ = 10 k $ MC_{{Age},\{Age\}}=Predict_{\{Age\}}(x1)-Predict_\varnothing(x1) = 40k\$-50k\$ = -10k\$
要获得年龄对最终模型效果的影响需要将所以涉及到Age的模型的边际贡献汇总。上图展示了所有涉及年龄的模型(1、2、5、6、8),可以得到年龄的贡献值(SHAP值)如下:

S H A P A g e ( x 1 ) = w 1 M C A g e , { A g e } ( X 0 ) + w 2 M C A g e , { A g e , G e n d e r } ( X 0 ) + w 3 M C A g e , { A g e , J o b } ( X 0 ) + w 4 M C A g e , { A g e , G e n d e r , J o b } ( X 0 ) \begin{aligned} SHAP_{Age}(x1)=&w_1*MC_{{Age},\{Age\}}(X0) +\\ &w_2*MC_{{Age},\{Age,Gender\}}(X0)+\\ &w_3*MC_{{Age},\{Age,Job\}}(X0)+\\ &w_4*MC_{{Age},\{Age,Gender,Job\}}(X0)\\ \end{aligned}
w 1 + w 2 + w 3 + w 4 = 1 其中w_1+w_2+w_3+w_4=1
如何确定边际贡献的权重:

  • 所有边际贡献对具有1个特征的模型的权重之和应等于所有边际贡献对具有2个特征的模型的权重之和,以此类推……,换句话说,同一“行”上所有权值的和应该等于任意其他“行”上所有权值的和。在我们的例子中,这意味着:w₁= w₂+ w₃= w₄
  • 对每个f,f个特征的模型的所有的边际贡献的权重应该是相等的。换句话说,同一“行”上的所有边应该相等。在我们的例子中,这意味着:w₂ = w₃
    结合数据可以计算出x1的Age的SHAP值:
    S H A P A g e ( x 1 ) = 1 3 ( 10 k $ ) + 1 6 ( 9 k $ ) + 1 6 ( 15 k $ ) + 1 3 ( 12 k $ ) = 11.33 k $ SHAP_{Age}(x1)=\frac{1}{3}*(-10k\$)+\frac{1}{6}*(-9k\$)+\frac{1}{6}*(-15k\$)+\frac{1}{3}*(-12k\$)=-11.33k\$
    应用到我们的例子中,得到:
  • S H A P A g e ( x 1 ) = 11.33 k SHAP_{Age}(x1)=-11.33k
  • S H A P G e n d e r ( x 1 ) = 2.33 k SHAP_{Gender}(x1)=-2.33k
  • S H A P J o b ( x 1 ) = 46.66 k SHAP_{Job}(x1)=46.66k
    把它们加起来就是+33k,这正好是完整模型的输出(83k )和没有任何特征的虚拟模型的输出(50k)之间的差值。

2.SHAP值应用于黑箱模型的解释

2.1 数据

ss

2.2 SHAP值的解释(反映出了相互作用)

上图为前5个样本的数据(Pclass:客舱等级;Sex:乘客性别;Age:乘客年龄;SibSp:泰坦尼克号上的兄弟姐妹/配偶人数;Parch:泰坦尼克上的家长/儿童人数;Fare:乘客票价;Embarked:登船口岸)
在这里插入图片描述
上图横向为变量,纵向为样本的每个样本变量的SHAP值(以Catboost模型为例)。SHAP值越高,生还概率越高,反之亦然。此外,大于0的SHAP值会导致概率的增加,小于0的值会导致概率的减少。
假设对于第一个个体,我们知道除了年龄以外的所有变量。它的SHAP和是-0.36 -0.76 +0.05 -0.03 -0.3 -0.08 = -1,48。一旦我们知道了个体的年龄(也考虑了年龄和其他变量之间的相互作用),我们就可以更新总和:-1.48 +0.11 =-1.37。在这里插入图片描述
上图基于Python的SHAP库来进行画出(SHAP值对于人类来说是不可理解的(即使对于数据科学家来说也是如此)

2.3 SHAP值转化到概率(用概率的方式解释,更加容易理解)

在这里插入图片描述
SHAP值是一个任意实数,而概率是在[0,1]范围内。因此需要一个函数f(.)将SHAP转化为概率(f(.)可以是满足条件的任何函数,并不是确定的)。即:
p r e d i c t e d _ p r o b a b i l i t y = f ( S H A P _ s u m ) predicted\_probability=f(SHAP\_sum)
假设已知除年龄外的所有变量,其SHAP和为0。现在假设年龄的SHAP值是2。f()函数就可以量化年龄对预测的生存概率的影响:它就是f(2)-f(0)。在我们的例子中,f(2)-f(0) = 80%-36% = 44%。按照这种思路可以算出每个格子中的影响(impact),可以应用以下公式:
i m p a c t = p r e d i c t e d _ p r o b a b i l i t y f ( S H A P _ s u m S H A P _ f e a t u r e ) impact = predicted\_probability-f(SHAP\_sum-SHAP\_feature)
得到如下的格子影响:在这里插入图片描述
拥有一张三等舱的票会降低第一个乘客的生存概率-4.48%(相当于-0.36 SHAP)。请注意,3号乘客和5号乘客也在三等舱。由于与其他特征的相互作用,它们对概率的影响(分别为-16.65%和-5.17%)是不同的。

2.4 SHAP值转化到概率的进一步解释

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图一是乘客年龄的边际效应,图二是乘客票价的边际效应,图三是交互作用:乘客票价 vs. 客舱等级。红线表示平均效应(一组中所有个体的年龄效应的均值),蓝带(均值±标准差)表示同一组中个体年龄效应的变异性。变异是由于年龄和其他变量之间的相互作用。以上3个图可提供的价值有:

  • 我们可以用概率来量化效果,而不是用SHAP值。例如,我们可以说,平均来说,60-70岁的人比0-10岁的人(从+14%到-13%)的存活率下降了27%
  • 我们可以可视化非线性效应。例如,看看乘客票价,生存的可能性上升到一个点,然后略有下降
  • 我们可以表示相互作用。例如,乘客票价与客舱等级。如果这两个变量之间没有相互作用,这三条线就是平行的。相反,他们表现出不同的行为。蓝线(头等舱乘客)的票价稍低。特别有趣的是红线(三等舱乘客)的趋势:在两个相同的人乘坐三等舱时,支付50 - 75英镑的人比支付50英镑的人更有可能生存下来(从-10%到+5%)。

3.总结

  • 像逻辑回归这样的简单模型做了大量的简化。黑盒模型更灵活,因此更适合复杂(但非常直观)的现实世界行为,如非线性关系变量之间的交互
  • 可解释性是指基于人类对现实的感知(包括复杂的行为),以一种人类可理解的方式表达模型的选择。
  • 我们展示了一种将SHAP值转换为概率的方法。这使我们有可能对一个黑匣子进行可视化,并确保它与我们对世界的认识是一致的(在质量和数量上):一个比简单模型所描述的世界更丰富的世界。

4.代码实现(待更…)

5.参考

1.https://www.6aiq.com/article/1588001724187
2.https://towardsdatascience.com/black-box-models-are-actually-more-explainable-than-a-logistic-regression-f263c22795d

猜你喜欢

转载自blog.csdn.net/weixin_41851055/article/details/106146098