摘要这一篇文章主要介绍一下关于SHAP方法,会介绍关于Shapley Value的计算方式,通过举例进行说明。接着会举一个实际的例子,来说明如何使用SHAP来进行模型的解释,和对最后结果的可视化展示。
简介
这一篇是关于模型可解释性,文章会介绍关于SHAP Value的方法。同时介绍一下如何简单的绘制结果。还是把参考资料放在最前面。
在看这个之前, 建议先查看LIME和Shapley Value的相关的内容. 链接分别如下:
参考资料
SHAP Value方法的介绍
SHAP的目标就是通过计算x中每一个特征对prediction的贡献, 来对模型判断结果的解释. SHAP方法的整个框架图如下所示:
SHAP Value的创新点是将Shapley Value和LIME两种方法的观点结合起来了. One innovation that SHAP brings to the table is that the Shapley value explanation is represented as an additive feature attribution method, a linear model. That view connects LIME and Shapley Values.
SHAP解释的时候使用下面的表达式, 这个和LIME中的原理是相似的(最大的不同是SHAP中设置了不同的distance的定义, 我们后面会讲):
上面的Simplified Features取值只能是{0, 1}, 当其取值为1的时候, 表示的是这个特征是present(也就是这个特征的取值与我们要解释的instance x中对应的特征是相同的), 当其特征是0的时候, 表示这个特征是absent(这时候我们从数据集中取一个这个特征的值, 其他数据在这个特征上的取值).
对于我们要解释的instance x来说, 也就是所有的Simplified Features都是1. 此时上面的式子可以化简为:
这个时候, 就可以看成每一个特征的Shapley Value的和做出的贡献, 使得预测结果从均值变为我们预测的结果, 也就是g(x').
在原始论文中, 作者提出了KernelSHAP和TreeSHAP. 下面我们只详细介绍KernelSHAP.
KernelSHAP的简单介绍
KernelSHAP包含下面的5个步骤:
初始化一些数据, z', 作为Simplified Features, 例如随机生成(0, 1, 0, 1), (1, 1, 1, 0)等.
将上面的Simplified Features转换到原始数据空间, 并计算对应的预测值, f(h(z')).
对每一个z'计算对应的权重(这里权重的计算是关键, 也是SHAP与LIME不同的地方)
拟合线性模型
计算出每一个特征的Shapley Value, 也就是线性模型的系数.
对于上面的第二个步骤, 我们做一下解释, 当Simplified Features是1的时候, 使用原始数据的特征, 当Simplified Features是0的时候, 我们使用其他的数据进行替换(这种置换的方式会存在一些问题, 当特征之间不是独立的, 而是相互有关联的, 那么这样生成的数据可能是实际上不存在的), 如下图所示.
下面就是重点介绍对z'权重的计算了, 这个也是SHAP最大的不同. (The big difference to LIME is the weighting of the instances in the regression model.)
LIME根据相似度进行计算距离, 如sample的数据中有很多0, 也就是会和原始数据有很大的不同, 那么他的距离是远的, 也就是他的权重会是小的. (LIME weights the instances according to how close they are to the original instance. The more 0's in the coalition vector, the smaller the weight in LIME.)