理解用于计算SHAP值的公式
在本文中,我们将了解SHAP(SHapley Additive exPlanations)的理论基础,并看看SHAP值的计算方法。
博弈论与机器学习
SHAP值基于Shapley值,Shapley值是博弈论中的一个概念。但博弈论至少需要两样东西:游戏和参与者。这如何应用于机器学习的可解释性呢?假设我们有一个预测模型:
- “游戏”再现机器学习模型的结果,
- “玩家”是机器学习模型中包含的功能。
Shapley所做的是量化每个玩家对游戏的贡献。SHAP所做的是量化每个特征对机器学习模型做出的预测的贡献。
需要强调的是,我们所谓的“游戏”只涉及单一的观察。一个游戏:一个观察。实际上,SHAP是关于预测模型的局部可解释性的。
特征集
举例来说,我们将想象一个机器学习模型(假设是线性回归,但也可以是其他任何机器学习算法),该模型可以根据一个人的年龄,性别和工作来预测该人的收入。
Shapley值基于以下思想:应考虑玩家的每个可能组合结果,以确定单个玩家的重要性。在我们的情况下,这对应于f个特征的每种可能组合(f从0到F,F是示例3中所有可用特征的数量)。
在数学上,这称为“ 幂集 ”,可以表示为树。
每个节点代表一个特征组合。每条边代表包含了一个在前一个组合中不存在的特征。
我们从数学上知道一个幂集的势是2的n次方,其中n是原始集合的元素数,实际上,在我们的例子中,我们有2 ^ F = 2 ^ 3 = 8个可能的特征集合。
现在,SHAP需要为幂集中的每个不同的组合训练一个不同的预测模型,也就是2 ^ F个模型。当然,这些模型在涉及它们的超参数和训练数据方面是完全等价的。唯一改变的是模型中包含的一组特性。
假设我们已经在相同的训练数据上训练了8个线性回归模型。我们可以采取一个新的观察(我们称之为x₀),并查看8个不同模型对同一观测值x₀的预测。
在此,每个节点代表一个模型。但是边代表什么?
SHAP公式(1/2)-特征的边际贡献
正如上面所看到的,两个连接节点的预测之间的差距可以归因于附加特征的影响。这被称为特征的“边际贡献”。
因此,每个边都代表要素对模型带来的边际贡献。
假设我们位于节点1中,该节点是没有特征的模型。该模型将简单地预测所有训练观测值的平均收入(5万美元)。如果我们移到节点2,它是一个只有一个特征(Age)的模型,则x的预测现在为40k $。这意味着知道x₀的年龄会使我们的预测降低10k $。
因此,Age对仅包含Age作为特征的模型带来的边际贡献为-10k $。在公式中:
当然,要获得Age对最终模型的总体影响(即,年龄x的年龄的SHAP值),有必要考虑Age在模型(所有存在Age的模型)中的边际贡献。在我们的树表示中,这意味着要考虑连接两个节点的所有边,使得:
- 上面的一个不包含Age
- 底部的包含Age。
在下图中,这些边以红色突出显示。
Age的边际贡献
然后,所有这些边际贡献都通过加权平均值进行汇总。
其中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 的所有边际贡献的数量,换句话说,每个“行”中的边的数量为:
取它的倒数就足够了,我们得到了f-feature-models边际贡献的权重。
下图对此进行了举例说明:
现在,我们计算元素X 0针对Age的SHAP值:
最后
我们建立了3-feature-model来计算年龄的SHAP值。推广到任意特征和任意F,我们得到公式:
应用到我们的示例中,公式得出:
- 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 库。