Bootstrap

SHAP值的解释,以一种你期望的方式解释给你听

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Samuele Mazzanti

编译:ronghuaiyang

正文共:3096 字 13 图

预计阅读时间:9 分钟

导读

上一篇文章我们说到SHAP值可以用来对黑盒模型进行解释,具备比简单的逻辑回归更好的实际意义,那么SHAP值到底是什么?有什么实际意义?如何计算?

揭开神秘的面纱

在上次的文章中,我们看到SHAP值可以用来解释机器学习方法的决策。换句话说,我们使用SHAP来揭开黑箱模型的神秘面纱。

到目前为止,我们利用了Python的SHAP库,而没有过多考虑它是如何工作的。足够讽刺的是,我们使用的SHAP本身就是一个黑盒!然而,理解SHAP值计算背后的思想对于理解它们的结果是至关重要的。

这就是为什么,在这篇文章中,我们将过一遍Slundberg和Lee在论文:https://arxiv.org/abs/1705.07874中描述的SHapley Additive exPlanations的理论基础,并看看为什么SHAP值是按照他们计算的方式来计算的。

博弈论和机器学习

SHAP值基于Shapley值,Shapley值是博弈论中的一个概念。但博弈论至少需要两样东西:一个游戏和一些玩家。这如何应用于机器学习的可解释性?假设我们有一个预测模型,然后:

  • “游戏”是复现模型的结果

  • “玩家”是模型中包含的特征

Shapley所做的是量化每个玩家对游戏的贡献。SHAP所做的是量化每个特征对模型所做预测的贡献

需要强调的是,我们所谓的“游戏”只涉及单一的观察样本。一个游戏:一个观察样本。实际上,SHAP是关于预测模型的局部可解释性的。

特征的power set(幂集)

举个例子,我们可以想象一个机器学习模型(假设是线性回归,但也可以是其他任何机器学习算法),知道这个人的年龄、性别和工作,它可以预测一个人的收入。

Shapley值是基于这样一种想法,即应该考虑每个玩家可能的组合的结果来决定单个玩家的重要性。在我们的例子中,这对应于f特征的每个可能组合(f从0到FF是所有可用特征的数量)。

在数学中,这被称为“power set”,可以用树表示。

特征的Power set

每个节点代表一个特征组合,每条边代表包含一个在前一个组合中不存在的特征

我们从数学上知道一个幂集的容量是2^n^,其中n是原始集合的元素个数。实际上,在我们的例子中,我们有2^F^ = 2^3^= 8个可能的特征的组合。

现在,SHAP需要为幂集中的每个不同的组合训练一个不同的预测模型,这意味着有2^F^个模型。当然,这些模型在涉及到它们的超参数和训练数据时是完全等价的。唯一改变的是模型中包含的一组特征。

假设我们已经在相同的训练数据上训练了8个线性回归模型。我们可以用一个新的观察样本(我们称之为x₀),看看同样的8种不同的模型对这个观察样本的预测。

用不同模型预测x₀。在每个节点上,第一行表示特征的组合,第二行为x₀的模型预测收入。

这里,每个节点代表一个模型。但是边代表什么呢?

构建SHAP公式(1/2) — 特征的边际贡献

正如上面所看到的,由一条边连接的两个节点只因为一个特征而不同,即底部的节点与上部的节点具有完全相同的特征,而上部的节点则没有。因此,两个连接节点的预测之间的差距可以归结为该附加特征的影响。这被称为特性的“边际贡献”**。

因此,每条边代表一个特征对模型的边际贡献。假设我们在节点1中,节点1是一个没有任何特征的模型。该模型将简单地预测所有训练观察样本值的平均收入(50k美元)。如果我们到了节点2,这是一个模型只有一个特征(年龄),现在对x₀的预测为40k美元。这意味着知道x₀的年龄降低了我们的预测10k美元。

因此,年龄对只包含年龄作为特征的模型的边际贡献是-10k$。公式:

当然,获得年龄对最终模型的整体效果(即x₀的年龄的SHAP值),有必要考虑年龄在所有出现过模型的边际贡献。在我们的树表示中,这意味着要考虑连接两个节点的所有边:

  • 上一个节点不包含年龄,且

  • 下一个节点中包含年龄

在下面的图中,这些边已经用红色突出显示。

年龄的边际贡献

所有这些边际贡献然后通过加权平均数加以汇总。公式:

其中w₁+w₂ +w₃+w₄=1

构建SHAP公式(2/2) — 边际贡献的加权

我们如何确定边的权重(即4个模型中年龄的边际贡献)?

想法是:

  • 所有边际贡献对具有1个特征的模型的权重之和应等于所有边际贡献对具有2个特征的模型的权重之和,以此类推……,换句话说,同一“行”上所有权值的和应该等于任意其他“行”上所有权值的和。在我们的例子中,这意味着:w₁= w₂+ w₃= w₄

  • 对每个ff个特征的模型的所有的边际贡献的权重应该是相等的。换句话说,同一“行”上的所有边应该相等。在我们的例子中,这意味着:w₂ = w₃

因此,(记住它们的和应该是1):

  • w₁ = 1/3

  • w₂ = 1/6

  • w₃ = 1/6

  • w₄ = 1/3

看看上面的图,你能猜出一般框架中确定权重的模式吗?

剧透:边的权值是同一“行”中边总数的倒数。或者,同样地,f个特征的模型的边际贡献的权重是可能的边际贡献的数量的倒数

有计算这个的公式吗?其实很简单。

每个f个特征的模型都有f个边际贡献(每个特征一个),因此,计算可能的f个特征的模型的数量并将其乘以f就足够了。因此,问题归结为计算可能的具有f个特征的模型的数量,给定f并知道特征的总数是F。这就是二项式系数的定义。

把所有的东西放在一起,我们得到了所有的具有f个特征的模型的所有边际贡献的数量,换句话说,每“行”的边的数量是:

取它的倒数就行了,我们就有了具有f个特征的模型边际贡献的权重。

如下图所示:

如何从边的数量中获得权重

现在,我们已经有了计算x₀的Age的SHAP值所需的所有元素:

整理一下

我们建立了具有3个特征的模型来计算年龄的SHAP值。推广到任何特征和任何F,我们得到了由Slundberg和Lee在文章中描述的公式:

应用到我们的例子中,得到:

  • SHAP_Age(x₀) = -11.33k $

  • SHAP_Gender(x₀) = -2.33k $

  • SHAP_Job(x₀) = +46.66k $

把它们加起来就是+33k,这正好是完整模型的输出(83k )和没有任何特征的虚拟模型的输出(50k)之间的差值。

这是SHAP值的一个基本特征:给定观察样本的每个特征的SHAP值加起来得到模型预测值和没有模型(或者是逻辑回归函数)之间的差别。这就是这个名字的由来:SHapley Additive exPlanations。

好极了!我可以自己计算SHAP值吗?

呃……不行!

如上所述,原来的SHAP公式需要训练2^F^个模型。对于一个只有50个特征的模型,这意味着要训练1e15个模型!实际上,随着F的增加,上面的公式很快就不适用了。

然而,像Slundberg提供的库:https://github.com/slundberg/shap采用了一些出色的近似和抽样(我将在后续的文章中讨论这个主题),使这项工作变得可行。

—END—

英文原文:https://towardsdatascience.com/shap-explained-the-way-i-wish-someone-explained-it-to-me-ab81cc69ef30

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧

;