问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

了解 SHAP,实现可解释的机器学习

创作时间:
作者:
@小白创作中心

了解 SHAP,实现可解释的机器学习

引用
CSDN
1.
https://m.blog.csdn.net/qq_46092061/article/details/138731063

SHAP(SHapley Additive exPlanations)是一种基于博弈论的模型解释方法,能够为机器学习模型提供可解释性。本文将深入探讨SHAP算法的理论基础、实现细节及其在模型解释中的应用,帮助读者理解这一重要工具的核心原理和使用方法。

前言

在这篇文章中,我们将了解 Shapley 值的概念,尝试理解为什么特征的顺序很重要,如何从 Shapley 值到 SHAP,填补缺失特征时观察性条件分布和干预性条件分布的故事,我们应该使用训练集还是测试集来解释模型等等。

1. Shapley value

SHAP 基于 Shapley 值,因此我们首先需要知道什么是 Shapley 值。
假设我们有 3 名球员,即 L、M、N,要参加一场机器篮球比赛。如果 L 单独上场,他可以获得 10 分。而 M 和 N 的分数分别是 20 分和 25 分。如果 L 和 M 一起打球,他们知道如何合作,最终能得到 40 分。然而,当 L 和 N 组队时,他们只能得到 30 分。详情如下表所示,其中 v(S) 是 S 中成员通过合作可以获得的总贡献。
如何根据上述信息找出球队中每个球员的贡献?这三名球员中哪一名最优秀?
例如,一名球员 L 的贡献可以通过 L 为最终得分带来的差异来计算。换句话说,我们考虑的是有 L 参加比赛时与没有 L 参加比赛时的差异。再细分一下,当 L 加入游戏时,他可以单独玩,也可以与其他成员一起玩。
因此,直观地说,L 的最终贡献应该是所有情况的平均值:
在数学上,假设我们有一个包含所有玩家的集合 N,S 是玩家联盟(子集)。我们建议的棋手 i 的贡献(φi )可以重写为:
它接近沙普利值中提出的公式。
"夏普利值是合作博弈论中的一个求解概念。它是为了纪念劳埃德-沙普利而命名的,沙普利于 1951 年提出了这一概念,并因此于 2012 年获得了诺贝尔经济学奖。
劳埃德-沙普利(Lloyd Shapley)希望计算联合博弈中每个棋手的贡献。他的想法是,考虑到所有可能的不同排列组合,我们通过边际贡献来得到每个棋手在每个博弈中的贡献,然后取这些贡献的平均值来得到该棋手的最终贡献[11]。夏普利值公式中缺少的是排序部分。
其中,分母中的|N|!表示所有可能的排列组合。在分子中,|S|!(|N| - |S| - 1)! 表示项 (v(S⋃{i}) - v(S)) 将在总共|N|!的排列中出现|S|!(|N| - |S| - 1)! 次。
回到开头的例子,我们可以得到 L 的夏普利值如下。

因为我们有三个棋手,所以总共有 3! = 6 种组合。夏普利值是六种贡献的平均值。请注意,S = {} 和 S = {M,N}出现了两次,因此在夏普利值的公式中,这些项的|S|!(|N| - |S| - 1)! 值将是 2。

2. Why the order of features matters?

为什么夏普利值要考虑所有可能的排序?
在某些情况下,当特征之间存在重叠时,放入模型中的特征顺序对其贡献起着至关重要的作用。
例如,当第一个特征加入时,它对模型的性能贡献很大。第二个特征随后加入,由于它与第一个特征有很大的重叠,因此新特征并没有为我们的模型增加多少 “新知识”。
如果我们颠倒顺序,情况就会相反。下图显示的就是这种情况,用教育程度和工作年限这两个特征来预测薪资。
夏普利值通过考虑所有可能的排序,消除了顺序效应,从而保证了公平性。

如果先加入教育,它将为模型贡献 500 点,然后再加入 “经验年限”,但只增加 100 点。反之,如果先加入 YearsOfExperience,它可以为模型贡献 300 点。之后,教育的加入又会增加 300 分。Shapley 值在计算特征重要性时会同时考虑这两种情况(YearsOfExperience 为 200,Education 为 400)。这就是为什么在计算 Shaley 值时要考虑顺序的原因。
到目前为止的总结夏普利值的主要思想是获取某一特征在所有不同排序中的边际贡献,然后求取平均值。换句话说,我们考虑的是在所有可能的排序中,有该特征和没有该特征的模型的性能差异。

3. SHAP (SHapley Additive exPlanations)

SHAP (SHapley Additive exPlanations)由 Scott Lundberg 和 Su-In Lee 于 2017 年首次提出,是一种解释任何机器学习模型输出的博弈论方法。它采用博弈论中经典的夏普利值来解释单个数据点级别的模型[12]。

3.1.SHAP 论文[1,2,3]的主要贡献

作者定义了一类新的加性特征重要性方法。这种新观点显示了 LIME、DeepLIFT 等其他六种方法之间的有趣联系。

包括 SHAP 在内的 "加性特征重要性方法 "关注机器学习模型的输入和输出。它试图在输出输入的简化版本 z’ 上拟合线性模型 g,并使用 g 的系数作为特征重要性来解释原始模型。对于每个数据点,我们都会找到一组不同的系数。当我们将这些系数(即特征重要性)相加时,就等于原始模型的输出。请注意,在某些情况下,模型的输出是对数概率(例如,在创建基于树的分类模型时)。
SHAP 解释法从联盟博弈理论出发计算夏普利值。作者介绍了 SHAP 的三个理论属性(局部准确性、遗漏性和一致性)[1],这三个属性与经典夏普利值的四个属性(效率、对称性、哑值和可加性)[11]相似。
这些论文提出了一种名为 KernelSHAP 的与模型无关的方法,并针对树基模型(如 LightGBM、XGboost、CatBoost)提出了一种最著名的名为 TreeExplainer 的方法。
SHAP 不仅能对个体进行解释,还能提供一些开箱即用的技术,将解释组合成全局解释,如特征重要性、特征依赖性、相互作用、聚类和汇总图

3.2. Why are exact Shapley values expensive?

SHAP 需要处理的第一件事,就是如何高效地计算 Shapely 值。
事实上,精确计算夏普利值的成本极其昂贵。对于 F 个特征,我们有 2^F 个子集 S。要计算精确的 Shapley 值,我们必须对每个 S 中的特征重新训练一个新模型。
你可能会说,为什么我们需要重新训练大量模型,而不是使用已经训练好的包含所有特征的模型呢?让我们把 S 称为我们已有值的特征集,C 称为我们没有值的特征集。假设我们有一棵关于泰坦尼克号数据的决策树 f,它有三个特征(性别、年龄和兄弟姐妹数量),S = {年龄、兄弟姐妹数量},缺失的特征集 C = {性别}(如下图)。如何得到预测值 f(z_S),z_S={年龄:10,#兄弟姐妹:3}(即z_S={年龄:10,#兄弟姐妹:3})?3}(即缺少性别值)。

因此,一般来说,我们需要 2^F 个模型才能得到精确的夏普利值,这使得夏普利值的计算非常昂贵。

3.3. How does SHAP approximate Shapley values?

SHAP 近似原始模型条件期望函数的 Shapley 值[1]。更具体地说,它用条件期望 E[f(z_S, z_C)|z_S] 近似函数 f(z_S)(SHAP 论文 [1] 中的公式 9)。
根据公式 9(条件期望值),我们使用带 z_C 的总期望值定律,然后假设特征是独立的,从而得到公式 11(边际期望值)的近似值如下。
让我们回到泰坦尼克号的例子。我们需要得到预测值 f(z_S),z_S = {年龄:10,#兄弟姐妹:3}:3}.根据公式 11,f(z_S) 可近似为 E_{z_C}[f(z)] = E_{Gender}[f(年龄:10, #兄弟姐妹:3, 性别:缺失)]。
要计算 E_{z_C}[f(z)],对于表格数据,可以从背景数据(如数据集的其他部分)中随机抽取不存在的特征。对于图像,我们可以取周围像素/超像素的平均值,甚至直接将其赋值为零。
因此,在填补缺失值后,我们可以计算边际期望值 E_{z_C}[f(z)],从而得到 f(z_S) 的近似值。
如果模型是线性的,根据公式 11,我们可以进一步简化为公式 12。回想一下,当 f(x) 是线性模型时,E[f(x)] = f(E[x])。
总结到目前为止:SHAP 假设特征是独立的。它通过使用边际分布来估算不存在的特征,从而近似得到 Shapley 值

4. How should we fill absent features?

这是一个与可解释性和因果关系相关的有趣话题。首先,我们需要了解观察和干预条件分布。

4.1.观察与干预的条件分布

我借用了 [14] 的一个例子,如下图所示。基本上,我们有 3 个因素,即肾结石大小、治疗方法和结果。红线表示肾结石的大小会影响治疗方法的选择。蓝线表示治疗和结果之间的直接关系。

在观察治疗如何与积极结果相关联(p(y|x))时,我们实际上测量了两个独立的部分:实际的因果关系(用 "do-operator "写成 p(y|do(x)),蓝色边)和虚假的关联。这两个部分受到一个共同隐藏因素(肾结石大小)的影响,我们无法区分这两个部分。换句话说,我们希望蓝色边代表因果关系,但我们观察到的是由蓝色和红色边组成的 p(y|x)。如果我们能以某种方式进行一次完全随机的试验(即完全随机地为患者分配不同的治疗方法,而不管其肾结石的大小),我们就能打破肾结石大小与治疗方法之间的依赖关系(即去除红色边),从而得到因果关系部分。这就是因果推论的基本思想。
要计算 p(y|do(x)),我们需要一个编码变量间因果关系的因果图。下图显示了三个因果图及其对应的 p(y|do(x))。请注意,箭头是从因指向果。

在论文[6]中,作者认为,如果给定一个简单的因果结构,其潜在的共同原因 Z 如下所示,观察条件 p(y|x1) 并不能正确描述干预 X1 后 Y 如何变化。作者建议改用干预条件分布 p(y|do(x1)),在这种情况下,它就是边际分布。

4.2. Marginal vs. Conditional distribution

特征在训练集还是测试集中的重要性?
在上一节的代码中,我们使用了 explainer.shap_values(X)(第 2 行)。我们应该在 X 中加入什么?是 X_train 还是 X_test?
这取决于解释的目的。
比方说,我们有一个模型在训练数据上过度拟合。换句话说,它在预测新数据集时毫无用处。
如果我们关心的是哪些特征对模型的影响最大,那就直接使用训练集来计算特征的重要性。
否则,如果我们认为模型是垃圾,所有特征的重要性都应该为零,那么就应该使用测试集。

优势

SHAP 在博弈论方面有坚实的理论基础,可以提出解释。
SHAP 引入了一种连接 LIME 值和 Shapley 值的方法,这样我们就有了一种很好的方法(KernelExplainer)来解释任何模型。
SHAP 可以解释个体层面的问题,我们也可以将结果汇总,得到一个全局性的解释。
SHAP 可以快速实现基于树的模型(TreeExplainer)。快速计算有助于 SHAP 广受欢迎并得到广泛应用。

缺点

在我看来,SHAP 的主要缺点是 KernelExplainer 的运行时间较长。在处理大数据集时,它的运行速度相当慢。

结论

SHAP 是了解任何机器学习模型的绝佳工具。在其他工具中,SHAP 是我的最爱。当我处理基于树的模型时,SHAP 是我的首选方法。
Github 上的 SHAP 代码库非常活跃,更新频繁。我强烈建议大家去看看 SHAP 作者的笔记本[15],看看 SHAP 能用很酷的可视化技术带来哪些启发。如需进一步阅读,您还可以参考其他一些不错的教程[7, 10, 16, 17, 18, 19]。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号