当前位置:   article > 正文

SHAP (SHapley Additive exPlanations)

shapley additive explanations

原文:HTML
翻译:我


Lundberg and Lee(2016)的SHAP(SHapley Additive ExPlanations)是一种解释个体预测的方法。 SHAP基于游戏理论上的最佳Shapley值。

SHAP拥有自己的一章,而不是Shapley值的子章节,有两个原因。首先,SHAP的作者提出了KernelSHAP,这是一种受局部代用模型( local surrogate models)启发的、基于核函数(kernel-based)的Shapley值估计方法。并且他们提出了TreeSHAP,一种基于树型模型的高效估计方法。其次,SHAP带有许多基于Shapley值聚合(aggregations)的全局解释方法。本章将对新的估计方法和全局解释方法进行解释。

我建议先阅读有关Shapley值和局部模型(LIME)的章节。


1. Definition

SHAP的目标是通过计算每个特征对预测x的贡献来解释实例x的预测。SHAP解释方法根据联盟博弈理论计算Shapley值。数据实例的特征值充当联盟(集合)中的参与者。 Shapley值告诉我们如何在特征之间公平地分配“支出”(即预测)。玩家可以是单个特征值,例如,用于表格数据。玩家也可以是一组特征值。比如要解释一幅图像,可以将像素归为超级像素,并将预测值分布在其中。SHAP带来的一个创新是,Shapley值的解释是以一种加法特征归因方法,一种线性模型来表示的。这种观点将LIME和Shapley值连接起来。SHAP将解释具体化为:

g ( z ′ ) = ϕ 0 + ∑ j = 1 M ϕ j z j ′ g(z')=\phi_0+\sum_{j=1}^M\phi_jz_j' g(z)=ϕ0+j=1Mϕjzj

其中g是解释模型, z ′ ∈ { 0 , 1 } M z'\in\{0,1\}^M z{0,1}M 是联盟向量(coalition vector),M是最大联盟规模(coalition size), ϕ j ∈ R \phi_j\in\mathbb{R} ϕjR是特征 j j j 的特征归属,Shapley值。在SHAP论文中,我所谓的“联盟向量(coalition vector)”被称为“简化特征(simplified features)”。我想之所以选择这个名字,是因为对于图像数据等来说,图像并不是在像素层面上表示,而是聚集到超级像素上。我相信,把z看作是描述联盟是有帮助的。在联盟向量中,1表示相应的特征值 “存在(present)”,0表示 “不存在(absent)”。如果你知道Shapley值的话,这听起来应该很熟悉。为了计算Shapley值,我们模拟只有一些特征值在发挥作用(“存在”),而一些特征值没有发挥作用(“不存在”)。将其表示为联盟的线性模型是计算 ϕ \phi ϕ 的一个技巧。对于x这个感兴趣的实例,联盟向量x’是所有1’的向量,即所有特征值都是 "存在"的。该公式简化为:
g ( x ′ ) = ϕ 0 + ∑ j = 1 M ϕ j g(x')=\phi_0+\sum_{j=1}^M\phi_j g(x)=ϕ0+j=1Mϕj

你可以在Shapley值一章中找到这个用类似符号表示的公式。更多关于实际估算的内容在后面。我们先来谈谈 ϕ ϕ ϕ 的特性,然后再讨论它们的估算细节。

Shapley值是唯一满足效率、对称性、虚值和可加性(Efficiency, Symmetry, Dummy and Additivity)等特性的解。SHAP也满足这些特性,因为它计算的是Shapley值。在SHAP论文中,你会发现SHAP特性和Shapley特性之间的差异。SHAP描述了以下三个理想的属性。

  • 1) Local accuracy
    f ( x ) = g ( x ′ ) = ϕ 0 + ∑ j = 1 M ϕ j x j ′ f(x)=g(x')=\phi_0+\sum_{j=1}^M\phi_jx_j' f(x)=g(x)=ϕ0+j=1Mϕjxj
    如果定义 ϕ 0 = E X ( f ^ ( x ) ) \phi_0=E_X(\hat{f}(x)) ϕ0=EX(f^(x)) 并设置所有 x j ′ x_j' xj 为 1,这是Shapley效率属性。仅使用不同的名称并使用联合向量。
    f ( x ) = ϕ 0 + ∑ j = 1 M ϕ j x j ′ = E X ( f ^ ( X ) ) + ∑ j = 1 M ϕ j f(x)=\phi_0+\sum_{j=1}^M\phi_jx_j'=E_X(\hat{f}(X))+\sum_{j=1}^M\phi_j f(x)=ϕ0+j=1Mϕjxj=EX(f^(X))+j=1Mϕj

  • 2) Missingness
    x j ′ = 0 ⇒ ϕ j = 0 x_j'=0\Rightarrow\phi_j=0 xj=0ϕj=0
    Missingness说,缺失的特征得到的归属为零。注意 x j ′ x_j' xj 指联盟,其中值为0表示不存在特征值。在联盟符号中,所有特征值 x j ′ x_j' xj 解释的实例应该是’1’。0的存在将意味着感兴趣的实例缺少特征值。此属性不在“常规” Shapley值的属性中。那么,为什么我们需要SHAP?Lundberg 称其为 “minor book-keeping property”。从理论上讲,缺失的特征可以具有任意的Shapley值,而不会损害局部精度属性,因为它是与 x j ′ = 0 x_j'=0 xj=0 相乘的。Missingness属性强制缺少的特征获得Shapley值0。实际上,这仅与恒定特征有关。

  • 3) Consistency
    f x ( z ′ ) = f ( h x ( z ′ ) ) f_x(z')=f(h_x(z')) fx(z)=f(hx(z)) z ∖ j ′ z_{\setminus{}j}' zj 表示 z j ′ = 0 z_j'=0 zj=0。对于满足的两个模型f和f’:
    f x ′ ( z ′ ) − f x ′ ( z ∖ j ′ ) ≥ f x ( z ′ ) − f x ( z ∖ j ′ ) f_x'(z')-f_x'(z_{\setminus{}j}')\geq{}f_x(z')-f_x(z_{\setminus{}j}') fx(z)fx(zj)fx(z)fx(zj)
    对于所有输入 z ′ ∈ { 0 , 1 } M z'\in\{0,1\}^M z{0,1}M, 然后:
    ϕ j ( f ′ , x ) ≥ ϕ j ( f , x ) \phi_j(f',x)\geq\phi_j(f,x) ϕj(f,x)ϕj(f,x)
    一致性属性说的是,如果一个模型的变化使得一个特征值的边际贡献增加或保持不变(不考虑其他特征),那么Shapley值也会增加或保持不变。从一致性出发,Shapley属性线性、虚拟和对称性(Linearity, Dummy and Symmetry)也随之而来,如Lundberg和Lee的附录中所述。


2. KernelSHAP

KernelSHAP会为实例估算x每个特征值对预测的贡献。 KernelSHAP包含5个步骤:
- 样本联盟
我们可以通过反复抛硬币来创建一个随机联盟(集合),直到我们有一个0和1的连锁。例如,(1,0,1,0)的向量意味着我们有一个第一和第三特征的联盟。K个采样联盟成为回归模型的数据集。回归模型的目标是联盟的预测。("等等!"你说,“模型还没有在这些二元联盟数据上进行训练,不能对它们进行预测。” ) 为了从特征值的联盟到有效的数据实例,我们需要一个函数 h x ( z ′ ) = z h_x(z')=z hx(z)=z,其中 h x : { 0 , 1 } M → R p h_x:\{0,1\}^M\rightarrow\mathbb{R}^p hx:{0,1}MRp,函数 h x h_x hx 将1映射到我们要说明的实例x的对应值。对于表格数据,它将0映射到我们从数据中抽样的另一个实例的值。这意味着我们将 “特征值不存在"等同于"特征值被数据中的随机特征值取代”。对于表格数据,下图直观地展示了从联盟到特征值的映射。

在这里插入图片描述
对于表格数据, h x h_x hx X C X_C XC X S X_S XS 视为独立的,并对边际分布进行积分。
f ( h x ( z ′ ) ) = E X C [ f ( x ) ] f(h_x(z'))=E_{X_C}[f(x)] f(hx(z))=EXC[f(x)]

从边际分布中取样意味着忽略了存在和不存在特征之间的依赖结构。因此,KernelSHAP和所有基于换元的解释方法一样,都存在着同样的问题。估计将过多的权重放在不可能的实例上。结果会变得不可靠。但从边际分布中采样是必要的。如果不存在的特征值会从条件分布中抽样,那么结果值就不再是Shapley值。结果值将违反Dummy的Shapley公理,即一个对结果没有贡献的特征值应该是Shapley值为零。

对于图像,下图描述了可能的映射函数:
在这里插入图片描述
与LIME最大的区别是回归模型中实例的权重。LIME根据实例与原始实例的接近程度对实例进行加权。联盟向量中的0越多,LIME中的权重越小。SHAP根据联盟在Shapley值估计中获得的权重对采样实例进行加权。小联盟(很少的1)和大联盟(即许多1)得到的权重最大。其背后的直觉是:如果我们能孤立地研究单个特征的影响,我们就能了解到最多的信息。如果一个联盟由一个单一特征组成,我们就可以学习特征对预测的孤立的主要影响。如果一个联盟由除一个特征外的所有特征组成,我们可以了解这个特征的总效应(主效应加上特征的相互作用)。如果一个联盟由一半的特征组成,我们对单个特征的贡献了解甚少,因为有许多可能的联盟有一半的特征。为了实现符合Shapley的权重,Lundberg等人提出了SHAP kernel
π x ( z ′ ) = ( M − 1 ) ( M ∣ z ′ ∣ ) ∣ z ′ ∣ ( M − ∣ z ′ ∣ ) \pi_{x}(z')=\frac{(M-1)}{\binom{M}{|z'|}|z'|(M-|z'|)} πx(z)=(zM)z(Mz)(M1)

这里,M为最大联盟规模,而 ∣ z ′ ∣ |z'| z 为实例z’中存在特征的数量。Lundberg和Lee表明,用这个核的权重进行线性回归可以得到Shapley值。如果你将SHAP核与LIME一起用在联盟数据上,LIME也会估计出Shapley值!

我们可以在联盟的抽样上更聪明一些。最小和最大的联盟占据了大部分的权重。我们通过使用一些抽样预算K来包含这些高权重的联盟,而不是盲目地抽样,来获得更好的Shapley值估计。我们从所有可能的具有1和M-1特征的联盟开始,这使得总共有2M个联盟。当我们有足够的预算剩余时(当前预算为K - 2M),我们可以包含具有2个特征的联盟和具有M-2个特征的联盟,以此类推。从剩余的联盟规模中,我们用重新调整后的权重进行采样。

我们有数据,目标和权重。建立加权线性回归模型的一切:
g ( z ′ ) = ϕ 0 + ∑ j = 1 M ϕ j z j ′ g(z')=\phi_0+\sum_{j=1}^M\phi_jz_j' g(z)=ϕ0+j=1Mϕjzj

我们通过优化以下损失函数L来训练线性模型g:
L ( f , g , π x ) = ∑ z ′ ∈ Z [ f ( h x ( z ′ ) ) − g ( z ′ ) ] 2 π x ( z ′ ) L(f,g,\pi_{x})=\sum_{z'\in{}Z}[f(h_x(z'))-g(z')]^2\pi_{x}(z') L(f,g,πx)=zZ[f(hx(z))g(z)]2πx(z)
其中Z是训练数据。这就是我们通常对线性模型进行优化的平方误差之和。模型的估计系数, ϕ j \phi_j ϕj 是Shapley值。

由于我们是在线性回归的环境中,我们也可以利用标准的工具进行回归。例如,我们可以添加正则化项来使模型变得稀疏。如果我们在损失L上加一个L1的惩罚,我们可以创建稀疏的解释。(不过我不太确定产生的系数是否还能成为有效的Shapley值)


3. TreeSHAP

Lundberg等人(2018)提出了TreeSHAP,这是SHAP的一个变种,用于基于树的机器学习模型,如决策树、随机森林和梯度提升树。TreeSHAP是作为KernelSHAP的一个快速、特定模型的替代方案引入的,但事实证明,它可能会产生不直观的特征归因。

TreeSHAP使用条件期望定义值函数 E X S ∣ X C ( f ( x ) ∣ x S ) E_{X_S|X_C}(f(x)|x_S) EXSXC(f(x)xS) 而不是边际期望。条件期望的问题在于,对预测函数f没有影响的特征可以获取不同于零的TreeSHAP估计。当特征与实际上对预测有影响的另一个特征相关时,可能会发生非零估计。

TreeSHAP快多少?与精确的KernelSHAP相比,它计算的复杂度从 O ( T L 2 M ) O(TL2^M) O(TL2M)减少到了 O ( T L D 2 ) O(TLD^2) O(TLD2)。其中T是树的数目,L是任何树的最大叶子数,D是任何树的最大深度。

TreeSHAP使用条件期望 E X S ∣ X C ( f ( x ) ∣ x S ) E_{X_S|X_C}(f(x)|x_S) EXSXC(f(x)xS) 评估影响。如果我们对所有特征进行条件限制–如果S是所有特征的集合–那么来自实例x所在节点的预测将是预期预测。如果我们不对任何特征做任何条件–如果S是空的–我们将使用所有终端节点预测的加权平均值。如果S包含一些特征,但不是全部特征,我们忽略不可到达节点的预测。不可到达意味着通向这个节点的决策路径与 x S x_S xS中的值相矛盾。从剩余的终端节点中,我们按节点大小(即该节点的训练样本数)加权平均预测。其余终端节点的平均值,经每个节点的实例数加权后,就是给定S的x的预期预测值。问题是,我们必须对特征值的每个可能的子集S应用这个过程。TreeSHAP的计算方式是多项式时间,而不是指数式。基本思路是同时将所有可能的子集S推到树下。对于每个决策节点,我们必须跟踪子集的数量。这取决于父节点中的子集和分裂特征。例如,当树中的第一次拆分是在特征x3上,那么所有包含特征x3的子集都会去一个节点(x去的那个节点)。不包含特征x3的子集会去两个节点,权重降低。不幸的是,不同大小的子集有不同的权重。算法必须跟踪每个节点中子集的总体权重。这使得算法变得复杂。关于TreeSHAP的细节,我参考原论文。计算可以扩展到更多的树。多亏了Shapley值的Additivity属性 一个树集合的Shapley值是各个树的Shapley值的(加权)平均值。

接下来,我们将看一下SHAP的解释。


4. Examples

我用100棵树训练了一个随机森林分类器,以预测子宫颈癌的风险。我们将使用SHAP来解释各个预测。我们可以使用快速的TreeSHAP估计方法来代替较慢的KernelSHAP方法,因为随机森林是一个树的集合。但是本例不依赖条件分布,而是使用边际分布。这在软件包中有所描述,但在原文中没有。Python TreeSHAP函数在使用边际分布时速度较慢,但仍然比KernelSHAP快,因为它与数据中的行呈线性缩放。

因为我们在这里使用的是边际分布,所以解释和Shapley值章节中的解释是一样的。但随着Python shap包的使用,就会有不同的可视化效果。你可以将Shapley值这样的特征属性可视化为 “力”。每个特征值都是一个增加或减少预测的力。预测从基线开始。Shapley值的基线是所有预测的平均值。在图中,每个Shapley值是一个箭头,推动增加(正值)或减少(负值)预测。这些力量在数据实例的实际预测中相互平衡。

下图显示了宫颈癌数据集中两名女性的SHAP解释力图:
在这里插入图片描述
这些是对单个预测的解释。Shapley值可以组合成全局解释。如果我们对每个实例运行SHAP,我们就会得到一个Shapley值的矩阵。这个矩阵每个数据实例有一行,每个特征有一列。我们可以通过分析这个矩阵中的Shapley值来解释整个模型。

我们从SHAP特征重要性开始。


5. SHAP Feature Importance

SHAP特征重要性背后的想法很简单:具有较大绝对Shapley值的特征很重要。由于我们需要全局重要性,因此我们在数据中对每个特征的绝对Shapley值取平均值:

I j = ∑ i = 1 n ∣ ϕ j ( i ) ∣ I_j=\sum_{i=1}^n{}|\phi_j^{(i)}| Ij=i=1nϕj(i)

接下来,我们按照重要性递减的方式对特征进行排序并绘制。下图是之前训练的用于预测宫颈癌的随机森林的SHAP特征重要性。
在这里插入图片描述
图5.51:SHAP特征重要性以Shapley绝对值的平均值衡量。使用激素避孕药的年数是最重要的特征,平均改变了预测的绝对癌症概率2.4个百分点(x轴上为0.024)。

SHAP特征重要性是替代置换特征重要性(Permutation feature importance)的一种方法。两种重要性测量之间有很大的区别。特征重要性是基于模型性能的下降。SHAP是基于特征属性的大小。

特征重要性图很有用,但不包含重要性以外的信息。要获得更多信息,我们接下来将看一下摘要图。


6. SHAP Summary Plot

摘要图将特征重要性与特征效应结合起来。摘要图上的每个点是一个特征和一个实例的Shapley值。y轴上的位置由特征决定,x轴上的位置由Shapley值决定。颜色从低到高代表特征的值。重叠点在y轴方向上是有抖动的,所以我们可以了解每个特征的Shapley值的分布情况。特征根据其重要性进行排序。
在这里插入图片描述
图5.52:SHAP摘要图。服用激素避孕药的年数低会降低预测的癌症风险,年数多则会增加风险。定期提醒:所有的效应都是描述模型的行为,而不是现实世界中的因果关系。

在摘要图中,我们首先看到特征值与对预测的影响之间的关系。但是要查看关系的确切形式,我们必须查看SHAP依赖图。


7. SHAP Dependence Plot

SHAP特征依赖性可能是最简单的全局解释图:1)选择一个特征。2)对于每个数据实例,在x轴上绘制一个点,特征值在x轴上,y轴上绘制相应的Shapley值。3)完成。

从数学上讲,该图包含以下几点: { ( x j ( i ) , ϕ j ( i ) ) } i = 1 n \{(x_j^{(i)},\phi_j^{(i)})\}_{i=1}^n {(xj(i),ϕj(i))}i=1n

下图为SHAP特征对激素避孕药的多年依赖性。
在这里插入图片描述
图5.53:使用激素避孕药年限的SHAP依赖性图。与0年相比,几年降低了预测的概率,而年数多则增加了预测的癌症概率。

SHAP依赖性图是部分依赖性图(PDP)累积局部效应(ALE)的替代方案。PDP和ALE图显示的是平均效应,而SHAP依赖性图在y轴上也显示了方差。特别是在交互作用的情况下,SHAP依赖性图在y轴上会更加分散。可以通过突出这些特征交互作用来改进依赖性图。


8. SHAP Interaction Values

相互作用效应是在考虑了单个特征效应之后的附加组合特征效应。博弈论中的Shapley相互作用指数定义为:
ϕ i , j = ∑ S ⊆ ∖ { i , j } ∣ S ∣ ! ( M − ∣ S ∣ − 2 ) ! 2 ( M − 1 ) ! δ i j ( S ) \phi_{i,j}=\sum_{S\subseteq\setminus\{i,j\}}\frac{|S|!(M-|S|-2)!}{2(M-1)!}\delta_{ij}(S) ϕi,j=S{i,j}2(M1)!S!(MS2)!δij(S)
when i≠j and:
δ i j ( S ) = f x ( S ∪ { i , j } ) − f x ( S ∪ { i } ) − f x ( S ∪ { j } ) + f x ( S ) \delta_{ij}(S)=f_x(S\cup\{i,j\})-f_x(S\cup\{i\})-f_x(S\cup\{j\})+f_x(S) δij(S)=fx(S{i,j})fx(S{i})fx(S{j})+fx(S)
这个公式减去了特征的主效应,这样我们就得到了核算个体效应后的纯交互效应。我们对所有可能的特征联盟S进行平均,就像Shapley值计算一样。当我们计算所有特征的SHAP交互作用值时,每个实例得到一个矩阵,维度为M×M,其中M为特征数。

我们如何使用互动指数?例如,为交互作用最强的SHAP特征依赖图自动着色:
在这里插入图片描述
图5.54:SHAP特征依赖性图,交互作用可视化。激素避孕的年限与性病相互作用。在接近0年的情况下,性病的发生会增加预测的癌症风险。对于更多的避孕年限,性病的发生会降低预测的风险。同样,这不是一个因果模型。影响可能是由于混杂因素造成的(例如,性病和较低的癌症风险可能与更多的医生门诊相关)。


9. Clustering SHAP values

你可以在Shapley值的帮助下对数据进行聚类。聚类的目标是找到相似实例的群体。通常,聚类是基于特征的。特征通常是在不同的尺度上。例如,高度可能以米为单位,颜色强度从0到100,一些传感器的输出在-1和1之间,困难的是计算具有这种不同的、不可比较的特征的实例之间的距离。

SHAP聚类是通过对每个实例的Shapley值进行聚类。这意味着你通过解释的相似性对实例进行聚类。所有SHAP值都有相同的单位–预测空间的单位。你可以使用任何聚类方法。下面的例子使用分层聚类来对实例进行排序。

该图由许多力图( force plots)组成,每个力图都能解释一个实例的预测。我们将力图垂直旋转,并根据它们的聚类相似度并排放置。

图5.55:按解释相似度聚类的叠加SHAP解释。x轴上的每个位置都是数据的一个实例。红色的SHAP值会增加预测,蓝色的值会减少预测。一个群组脱颖而出。右边是一个预测癌症风险很高的组。


10. Advantages

由于SHAP计算的是Shapley值,所以Shapley值的所有优点都适用。SHAP在博弈论上有坚实的理论基础。预测值在特征值中分布相当均匀。我们得到的是对比预测和平均预测的对比解释。

SHAP连接LIME和Shapley值。这对于更好地了解这两种方法非常有用。它还有助于统一可解释机器学习的领域。

SHAP对基于树的模型有一个快速的实现。我相信这是SHAP流行的关键,因为采用Shapley值的最大障碍是计算速度慢。

快速的计算使得计算全局模型解释所需的许多Shapley值成为可能。全局解释方法包括特征重要性、特征依赖性、相互作用、聚类和汇总图。使用SHAP,全局解释与局部解释是一致的,因为Shapley值是全局解释的 “原子单位”。如果你用LIME来做局部解释,用部分依赖图加换位特征重要性来做全局解释,你就缺乏一个共同的基础。


11. Disadvantages

KernelSHAP 很慢。这使得KernelSHAP在你要计算许多实例的Shapley值时不实用。而且所有的全局SHAP方法,比如SHAP特征重要性,都需要计算很多实例的Shapley值。

KernelSHAP忽略了特征依赖性。大多数其他基于换元的解释方法都存在这个问题。通过用随机实例中的值替换特征值,通常更容易从边际分布中随机采样。然而,如果特征是依赖性的,例如相关的,这就会导致把过多的权重放在不可能的数据点上。TreeSHAP通过对条件预期预测进行显式建模来解决这个问题。

TreeSHAP会产生不直观的特征归属。虽然TreeSHAP解决了外推到不可能的数据点的问题,但它引入了一个新的问题。TreeSHAP通过依赖条件预期预测来改变价值函数。随着价值函数的改变,对预测没有影响的特征可以得到一个不同于零的TreeSHAP值。

Shapley值的缺点也适用于SHAP:Shapley值可能会被误解,并且需要访问数据才能为新数据计算它们(TreeSHAP除外)。


12. Software

作者在shap Python包中实现了SHAP。这个实现适用于python的scikit-learn机器学习库中基于树的模型。本章中的例子也使用了shap包。shap集成在树型提升框架xgboost和LightGBM中。在R中,有shapper和fastshap包。SHAP也包含在R的xgboost包中。


Reference

  • Lundberg, Scott M., and Su-In Lee. “A unified approach to interpreting model predictions.” Advances in Neural Information Processing Systems. 2017.↩

  • Lundberg, Scott M., Gabriel G. Erion, and Su-In Lee. “Consistent individualized feature attribution for tree ensembles.” arXiv preprint arXiv:1802.03888 (2018).↩

  • Sundararajan, Mukund, and Amir Najmi. “The many Shapley values for model explanation.” arXiv preprint arXiv:1908.08474 (2019).↩

  • Janzing, Dominik, Lenon Minorics, and Patrick Blöbaum. “Feature relevance quantification in explainable AI: A causality problem.” arXiv preprint arXiv:1910.13413 (2019).↩

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/446250
推荐阅读
相关标签
  

闽ICP备14008679号