模型可解释性-SHAPE

 

        在算法建模过程中,我们一般会用测试集的准确率与召回率衡量一个模型的好坏。但在和客户的实际沟通时,单单抛出一个数字就想要客户信任我们,那肯定是不够的,这就要求我们摆出规则,解释模型。但不是所有的模型都是规则模型,一些黑盒模型(比如神经网络)有着更高的准确率,但是无法给出具体的规则,无法让普通人理解和信任模型的预测结果。尤其当模型应用到银行业等金融领域时,透明度和可解释性是机器学习模型是否值得信任的重要考核标准。我们需要告诉业务人员如何营销,告诉风控人员如何识别风险点,而不仅仅告诉他们预测的结果。一个预测表现接近完美、却属于黑盒的人工智能模型,会容易产生误导的决策,还可能招致系统性风险,导致漏洞被攻击,因而变得不安全可靠。因此我们需要建立一个解释器来解释黑盒模型,并且这个解释器必须满足以下特征:

可解释性

要求解释器的模型与特征都必须是可解释的,像决策树、线性模型都是很适合拿来解释的模型;而可解释的模型必须搭配可解释的特征,才是真正的可解释性,让不了解机器学习的人也能通过解释器理解模型。

局部保真度

既然我们已经使用了可解释的模型与特征,就不可能期望简单的可解释模型在效果上等同于复杂模型(比如原始CNN分类器)。所以解释器不需要在全局上达到复杂模型的效果,但至少在局部上效果要很接近,而此处的局部代表我们想观察的那个样本的周围。

与模型无关

这里所指的是与复杂模型无关,换句话说无论多复杂的模型,像是SVM或神经网络,该解释器都可以工作。

除了传统的特征重要性排序外,ICE、PDP、SDT、LIME、SHAP都是揭开机器学习模型黑箱的有力工具。

  • 特征重要性计算依据某个特征进行决策树分裂时,分裂前后的信息增益(基尼系数);
  • ICE和PDP考察某项特征的不同取值对模型输出值的影响;
  • SDT用单棵决策树解释其它更复杂的机器学习模型;
  • LIME的核心思想是对于每条样本,寻找一个更容易解释的代理模型解释原模型;
  • SHAP的概念源于博弈论,核心思想是计算特征对模型输出的边际贡献;

模型可解释性-SHAPE

模型可解释性-LIME

模型可解释性-树结构可视化

 

目录

Shapley Value介绍

SHAP Value

TreeSHAP

应用实例


            

Shapley Value介绍

沙普利值(Shapley value),是通过考虑各个代理(agent)做出的贡献,来公平地分配合作收益。代理的沙普利值是对于一个合作项目所期望的贡献量的平均值。下面我们结合一个事例来形象的介绍一下沙普利值是如何公平分配收益的。

示例1:

百度百科_夏普利值的一则寓言故事

约克和汤姆结对旅游。约克和汤姆准备吃午餐。约克带了3块饼,汤姆带了5块饼。这时,有一个路人路过,路人饿了。约克和汤姆邀请他一起吃饭。路人接受了邀请。约克、汤姆和路人将8块饼全部吃完。吃完饭后,路人感谢他们的午餐,给了他们8个金币。路人继续赶路。

约克和汤姆为这8个金币的分配展开了争执。汤姆说:“我带了5块饼,理应我得5个金币,你得3个金币。”约克不同意:“既然我们在一起吃这8块饼,理应平分这8个金币。” 约克坚持认为每人各4块金币。为此,约克找到公正的夏普里。

夏普里说:“孩子,汤姆给你3个金币,因为你们是朋友,你应该接受它;如果你要公正的话,那么我告诉你,公正的分法是,你应当得到1个金币,而你的朋友汤姆应当得到7个金币。”

约克不理解。

夏普里说:“是这样的,孩子。你们3人吃了8块饼,其中,你带了3块饼,汤姆带了5块,一共是8块饼。你吃了其中的1/3,即8/3块,路人吃了你带的饼中的3-8/3=1/3;你的朋友汤姆也吃了8/3,路人吃了他带的饼中的5-8/3=7/3。这样,路人所吃的8/3块饼中,有你的1/3,汤姆的7/3。路人所吃的饼中,属于汤姆的是属于你的的7倍。因此,对于这8个金币,公平的分法是:你得1个金币,汤姆得7个金币。你看有没有道理?”

约克听了夏普里的分析,认为有道理,愉快地接受了1个金币,而让汤姆得到7个金币。

在这个故事中,我们看到,夏普里所提出的对金币的“公平的”分法,遵循的原则是:所得与自己的贡献相等。

示例2:

A,B,C三位好友看完话剧准备拼车回家,拼车总价18元。如果不拼车A回家需要6元、B需要11元、C需要15元。

C说:咱们每人出6块吧

A表示不服:我自己回家打车就6块,拼车还6块?

由于A极力反对,这个车没拼成。

A说要不咱们商量下吧,怎么拼车最公平,要不这样。第一段咱们平分、第二段B和C平分、第三段C自己掏钱了吧。

B和C笑了,我们为你绕道了,绕道这部分居然没有定价?那不行!不拼。

B说:听我出一套最公平的方案吧,想象A打车回家途中遇到B和C,当然也有可能先遇到C再遇到B,可能出现的组合如下:

每一种情况出现的几率是平等的,计算后

补充信息:
A-C家直线价格是11元。第5种情况B支付2元是怎么算的:(11+6)-15 = 2

平均计算后A需支付2.83、B是5.33、C是9.83

通过上面的两个示例,我们可以看到 Shapley 值法目的是解决以下情况:

一群拥有不同技能的参与者为了集体奖励而相互合作。那么,如何在小组中公平分配奖励?

SHAP Value

SHAP,最早由加州大学洛杉矶分校(UCLA)的教授 Lloyd Shapley 提出,主要是用来解决合作博弈论中的分配均衡问题。Lloyd Shapley 是 2012 年的诺贝尔经济学奖获得者,也是博弈论领域的无冕之王。在合作博弈论的启发下SHAP构建一个加性的解释模型,可以解释任何机器学习模型的输出。SHAP属于模型事后解释的方法,它对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中每个特征所分配到的数值。

SHAP全称是 SHapley Additive exPlanation,其中各个单词的意义为:

SHapley:代表对每个样本中的每一个特征变量,都计算出它的 Shapley Value。

Additive:代表对每一个样本而言,特征变量对应的 shapley value 是可加的。

exPlanation:代表对单个样本的解释,即每个特征变量是如何影响模型的预测值。

传统的Feature Importance只告诉哪个特征重要,但我们并不清楚该特征是怎样影响预测结果的。SHAP value最大的优势是SHAP能对于反映出每一个样本中的特征的影响力,而且还表现出影响的正负性。SHAP的目标就是通过计算 X 中每一个特征对Prediction的贡献,来对模型判断结果的解释。SHAP方法的整个框架图如下所示:

SHAP Value 的创新点是将Shapley Value和LIME两种方法的观点结合起来了。SHAP解释的时候使用下面的表达式,这个和LIME中的原理是相似的(最大的不同是SHAP中设置了不同的distance的定义):

上面的Simplified Features取值只能是{0, 1}, 当其取值为1的时候,表示的是这个特征是present(也就是这个特征的取值与我们要解释的instance x中对应的特征是相同的), 当其特征是0的时候,表示这个特征是absent(这时候我们从数据集中取一个这个特征的值, 其他数据在这个特征上的取值)。

对于我们要解释的instance x来说, 也就是所有的Simplified Features都是1,此时上面的式子可以化简为:

这个时候, 就可以看成每一个特征的Shapley Value的和做出的贡献,使得预测结果从均值变为我们预测的结果, 也就是g(x')。

 

SHAP有多种实现方式,每种方式都适用于特定的模型类型,可以实现更快的逼近。

  • TreeExplainer :TreeExplainer专为树集合方法开发,如XGBoost,LightGBM或CatBoost。
  • DeepExplainer :DeepExplainer是为深度学习模型开发的,支持TensorFlow / Keras。
  • GradientExplainer :GradientExplainer也是为深度学习模型中的SHAP值而开发的,但速度比DeepExplainer慢,并且做出了不同的假设。 此方法基于Integrated Gradient归因方法,并支持TensorFlow / Keras / PyTorch。
  • KernelExplainer :KernelExplainer使用加权线性回归近似任何类型模型的SHAP值。
  • 使用特定于模型类型的算法(TreeExplainer,DeepExplainer)而不是通用KernelExplainer更快更有效。
     

TreeSHAP

本文只对TreeExplainer进行说明,TreeExplainer是Tree SHAP的实现,是基于树模型的一种估计方法。树集成模型中包括很多性能优良的黑箱模型,比如随机森林、XGBoost、LightGBM 和 CatBoost,都属于非线性模型。Scott M. Lundberg,Su-In Lee 等提出了 TreeSHAP 来对树模型进行局部解释。相对于 model-agnostic 的局部解释方法,TreeSHAP 不需要抽样,而是通过对树模型中的节点来计算 Shapley Value。
TreeSHAP 有如下优点:

  • 计算时间减少
    如果直接用 Shapley Value 的公式来计算,时间复杂度是指数级的,但是 TreeSHAP 将中计算 Shapley Value 的算法进行优化,时间复杂度变为线性,因此可以大大缩短运行时间。
  • 将局部解释拓展到抓取交互效应
    对于每一个样本, 局部解释会对其中的每一个特征变量计算对应的值。直观来看,这种解释不能让我们直接地看到交互作用。为解决这个问题,TreeSHAP 提供了计算 SHAP interaction value(参考论文 2)的方法来看模型内部的交互作用。
  • 基于众多局部解释来进行全局解释
    对于整个数据集,可以运用 Shapley Value 来高效准确地获得局部解释性, 即对每个样本的解释,可以帮助我们得到特征变量的全局解释。对于某一个特征变量,TreeSHAP 可以计算出所有样本中对应该变量的 Shapley Value, 将它们的平均值作为该特征的重要性值,从而得到全局解释。

 

测试数据说明

本测试数据来源于kaggle上一个很经典的评分卡案例 Give Me Some Credit ,通过改进信用评分技术,预测未来两年借款人会遇到财务困境的可能性。银行在市场经济中发挥关键作用。 他们决定谁可以获得融资,以及以何种条件进行投资决策。 为了市场和社会的运作,个人和公司需要获得信贷。信用评分算法可以猜测违约概率,这是银行用于确定是否应授予贷款的方法。目标是建立一个借款人可以用来帮助做出最佳财务决策的模型。

数据来源:https://www.kaggle.com/c/GiveMeSomeCredit/data

数据集介绍说明:

数据集示例:

数据集统计:

应用实例

SHAP有两个核心,分别是shap values和shap interaction values,在官方的应用中,主要有三种,分别是force plot、summary plot和dependence plot,这三种应用都是对shap values和shap interaction values进行处理后得到的。

单一预测值分析解释

force plot可以针对单个样本预测的解释,它将shap values可视化为force,每个特征值都是一个增加或减少预测的force,预测从基线开始(base value),基线是解释模型的常数,每个归因值是一个箭头,增加(正值)或减少(负值)预测。我们以随机抽取几个样本为示例,其force plot如下:

基本值(base value)是我们传入数据集上模型预测值的均值,不同的模型的训练参数,模型结果中的base value有所差异;

上图的展示了每个特征都各自有其贡献,将模型的预测结果从基本值(base value)推动到最终的取值(output value),将预测推高的特征用红色表示,将预测推低的特征用蓝色表示;

我们预测的结果时0.21,而基准值是0.3256 ,引起预测增加的特征值是粉色的,它们的长度表示特征影响的程度。引起预测降低的特征值是蓝色的,最大的影响源自 loan_amount=0 的时候,但 overdue_60= 3 的值则对提高预测的值具有比较有意义的影响;

如果把粉色条状图的长度与蓝色条状图的长度相减,差值就等于基准值到预测值之间的距离;要保证基线值加上每个特征各自影响的和等于预测值的话,在技术上还是有一些复杂度的(这并不像听上去那么直接),我们不会研究这些细节,因为对于使用这项技术来说,这并不是很关键。

多个样本对比分析解释

如果对多个样本进行解释,将上述形式旋转90度然后水平并排放置,我们可以看到整个数据集的explanations ,可以从下拉框选择对比分析的选项,我们随机抽取2000条数据,对批数据进行整体的分析解释,我们选取几个分析示例:

sample order by similarity(样本按相似度排序后结果)

sample order by output value (样本按输出值排序结果)

orginal sample ordering(原始的样本顺序结果)

可以查看单个变量与Y值之间的关系,比如 overdue_90 这个变量对Y值的影响,当 overdue_90>1 时,将Y值由基准值提高到0.8左右。

查看age这个变量,当 age<21 时将减小Y值,当 age 在21-55之间,将增加Y值,当 age>55时,将减小Y值;

summary_plot

summary_plot为每个样本绘制其每个特征的SHAP值,这可以更好地理解整体模式,并允许发现预测异常值。每一行代表一个特征,横坐标为SHAP值。一个点代表一个样本,颜色表示特征值(红色高,蓝色低)。

横坐标是SHAP值(对模型输出的影响),纵坐标是不同的特征,颜色越红,特征值越大,越蓝特征值越小。我们发现 overdue_30,overdue_60,overdue_90,这几个逾期的变量,当逾期的天数过大(红色)那么SHAP value值(模型输出)则越大。

 

dependence_plot

我们也可以用dependence_plot描绘两个变量交互下变量对目标值的影响,随机抽取一部分样本可视化如下图:

横坐标为变量age,左边纵坐标为 shap value for age ,右边的纵坐标为 income,从图中可以,

随着年龄的增加(从左到右),收入越来越高(样本点的颜色逐渐由蓝色变为红色),

随着年龄的增加(从左到右),shap value for age并没有出现明显的变化;

 

 

 

参考链接:https://iceflameworm.github.io/2019/08/17/permutaion-importance/ 特征重要性解读
参考链接:https://iceflameworm.github.io/2019/08/28/partial-plots/ pdp 解读
参考链接:https://zhuanlan.zhihu.com/p/85791430
参考链接:https://christophm.github.io/interpretable-ml-book/shap.html
参考链接:https://zhuanlan.zhihu.com/p/85791430原理公式
参考链接:https://www.lamsade.dauphine.fr/~airiau/Teaching/CoopGames/2011/coopgames-7[8up].pdf
参考链接:http://papers.nips.cc/paper/7062-a-unified-approach-to-interpreting-model-predictions.pdf
参考链接:https://arxiv.org/pdf/1802.03888.pdf
参考链接:https://christophm.github.io/interpretable-ml-book/shap.html

 

  • 18
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值