理解用于计算SHAP值的公式

理解用于计算SHAP值的公式

在本文中,我们将了解SHAP(SHapley Additive exPlanations)的理论基础,并看看SHAP值的计算方法。

博弈论与机器学习

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

  • “游戏”再现机器学习模型的结果,
  • “玩家”是机器学习模型中包含的功能。

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

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

特征集

举例来说,我们将想象一个机器学习模型(假设是线性回归,但也可以是其他任何机器学习算法),该模型可以根据一个人的年龄,性别和工作来预测该人的收入。

Shapley值基于以下思想:应考虑玩家的每个可能组合结果,以确定单个玩家的重要性。在我们的情况下,这对应于f个特征的每种可能组合(f从0到F,F是示例3中所有可用特征的数量)。

在数学上,这称为“ 幂集 ”,可以表示为树。

理解用于计算SHAP值的公式

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

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

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

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

理解用于计算SHAP值的公式

在此,每个节点代表一个模型。但是边代表什么?

SHAP公式(1/2)-特征的边际贡献

正如上面所看到的,两个连接节点的预测之间的差距可以归因于附加特征的影响。这被称为特征的“边际贡献”。

因此,每个边都代表要素对模型带来的边际贡献。

假设我们位于节点1中,该节点是没有特征的模型。该模型将简单地预测所有训练观测值的平均收入(5万美元)。如果我们移到节点2,它是一个只有一个特征(Age)的模型,则x的预测现在为40k $。这意味着知道x₀的年龄会使我们的预测降低10k $。

因此,Age对仅包含Age作为特征的模型带来的边际贡献为-10k $。在公式中:

理解用于计算SHAP值的公式

当然,要获得Age对最终模型的总体影响(即,年龄x的年龄的SHAP值),有必要考虑Age在模型(所有存在Age的模型)中的边际贡献。在我们的树表示中,这意味着要考虑连接两个节点的所有边,使得:

  • 上面的一个不包含Age
  • 底部的包含Age。

在下图中,这些边以红色突出显示。

理解用于计算SHAP值的公式

Age的边际贡献

然后,所有这些边际贡献都通过加权平均值进行汇总。

理解用于计算SHAP值的公式

其中w 1 + w 2 + w 3 + w 1 = 1。

SHAP公式(2/2)-权衡边际贡献

但是,我们如何确定边的权重呢?

想法是:

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

因此,(请记住,它们的和应为1)解是:

  • w₁ = 1/3
  • w 2 = 1/6
  • w₃ = 1/6
  • w₄ = 1/3

你能猜出一般框架中确定权重的模式吗?

说明:边的权值是同一“行”中边总数的倒数。或者,一个f-feature-models的边际贡献的权重是所有f-feature-models可能边际贡献的数量的倒数。

是否有计算公式呢?实际上,很简单。

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

综上所述,我们拥有所有f-feature-models 的所有边际贡献的数量,换句话说,每个“行”中的边的数量为:

理解用于计算SHAP值的公式

取它的倒数就足够了,我们得到了f-feature-models边际贡献的权重。

下图对此进行了举例说明:

理解用于计算SHAP值的公式

现在,我们计算元素X 0针对Age的SHAP值:

理解用于计算SHAP值的公式

最后

我们建立了3-feature-model来计算年龄的SHAP值。推广到任意特征和任意F,我们得到公式:

理解用于计算SHAP值的公式

应用到我们的示例中,公式得出:

  • SHAP_Age(x₀) = -11.33k $
  • SHAP_Gender(x₀) = -2.33k $
  • SHAP_Job(x₀) = +46.66k $

将它们加起来得到+ 33k $,这恰好是完整模型的输出(83k $)与没有特征的虚拟模型的输出(50k $)之差。

这是SHAP值的一个基本特征:将给定观测的每个特征的SHAP值相加,得到模型预测与null模型(或其逻辑函数,如这里所示)之间的差异。这实际上就是它们名字的由来:SHapley Additive exPlanations。

如上所述,原始的SHAP公式需要训练2 ^ F模型。对于一个有50个6特征的机器学习模型,这意味着要训练1e15个模型!事实上,随着F的增加,上面的公式很快就不适用了。这时候可以使用Slundberg 库。

相关推荐