SHAP简介SHAP(SHapley Additive exPlanation)是解决模型可解释性的一种方法。SHAP基于Shapley值,该值是经济学家Lloyd Shapley提出的博弈论概念。“博弈”是指有多个个体,每个个体都想将自己的结果最大化的情况。该方法为通过计算在合作中个体的贡献来确定该个体的重要程度。 SHAP将Shapley值解释表示为一种加性特征归因方法(additive feature attribution method),将模型的预测值解释为二元变量的线性函数: 其中,M是简化输入的特征数, 假设第i个样本为,第i个样本的第j个特征为,模型对该样本的预测值为yi,整个模型的基线(通常是所有样本的目标变量的均值)为,那么SHAP value服从以下等式: 其中为SHAP值。f(xi,1)就是第i个样本中第1个特征对最终预测值yi的贡献值。每个特征的SHAP值表示以该特征为条件时预期模型预测的变化。对于每个功能,SHAP值说明了贡献,以说明实例的平均模型预测与实际预测之间的差异。当f(xi,1)>0,说明该特征提升了预测值,反之,说明该特征使得贡献降低。 加性特征归因方法是满足以下三个条件的唯一解决方案:
定理1来自于合作博弈论的组合结果,ϕi表示Shapley值。Young (1985)证明了Shapley值是唯一满足局部精度、一致性和一个冗余属性的值。 SHAP****优点:
缺点
应用方法(基于tensorflow和keras)
import shap 如果没有这个库,先在terminal安装:
以随机森林为例: 导入模型的方法为: from sklearn.externals import joblib
在本文的例子中,特征参数都在x_test数组中
因为我们的模型是随机森林,所以采用的是针对树的解释器:TreeExplainer
shap_values = explainer.shap_values(x_test) #x_test为特征参数数组 shap_value为解释器计算的shap值
注意: 1)”参数名称“表示要绘制的单变量名称 2)shap_value是第5步计算的SHAP值 3)特征数组为dataframe格式。第一行需要是特征名称,后面是具体的特征数值。如果原始数组是numpy的array数组,需要按照以下代码添加特征名称: data_with_name = pd.DataFrame(x_test) #将numpy的array数组x_test转为dataframe格式。 4)interaction_index 表示是否考虑交互作用,None为只考虑单因素作用,不考虑其他因素。如果不是None,会自动搜索与该参数交互最大的参数,也就是令颜色的离散程度最大的特征进行着色,然后从图中展示出来。 如图所示,如果考虑交互作用,与等效渗透率交互作用最强的是厚度,或者说,厚度这个参数对等效渗透率的SHAP值分布影响最大。当然,这里可以通过设置查看别的参数的交互作用。 图中横坐标表示特征的取值,纵坐标表示特征的SHAP值,也就是特征的取值对于模型的输出会带来的变化量。此外,对于同一个x值,也就是特征取值相同的样本,他们的SHAP值不同,这是因为该特征与其他特征有交互作用。 5)show=False 表示不显示图,如果是true,显示的是默认绘图格式,也就是说坐标的大小啊,含义啊都是默认的。如果不满意自带的绘图格式,可以show=False,然后自定义格式。这里给出一套相关自定义代码:
shap.summary_plot(shap_values, x_test, plot_type='bar',show=False) 这行代码可以绘制出参数的重要性排序。 8. 不同特征参数共同作用的效果图
这个可以体现出不同参数组合对模型的贡献度。也就是说,可以给出模型优化方案, 这里有很多种模式可以选择,第一种是根据对模型的贡献度进行排序的,如图所示: 第二种是根据参数的相似性对样本进行排序 第三种是按照原始的样本排序绘图 后面几种绘图方式就是根据不同的参数进行绘图: 解释:这里鼠标可以随意指到任何位置,然后就可以看到不同的组合情况以及对模型的贡献值(纵坐标显黑的部分)。这里的横坐标表示第几个样本,纵坐标表示不同组合对模型的贡献值。蓝色表示负影响的参数,红色表示正影响的参数。这是一个参数叠加图,红色区域越大,说明正影响越强,反之,蓝色区域越大,说明负影响越强。个人认为这个图的好处就是能够给出明确的对模型贡献大的参数组合。
传统的feature importance只告诉哪个特征重要,但我们并不清楚该特征是怎样影响预测结果的。SHAP value最大的优势是SHAP能对于反映出每一个样本中的特征的影响力,而且还表现出影响的正负性。 如下图所示,这个图也可以看出参数的重要性,但是比之前的重要性排序图多了具体特征值的影响。以Feature5为例,该参数对模型的影响最大,当feature5的值越小,模型的输出越小,越大,模型的输出越大。 |
|