[控场AI]
· 6 分钟阅读· 3,449 字

留一法归因算出20,Shapley却给出精确10

留一法归因算出20,Shapley却给出精确10

留一法在交互和冗余场景下归因失真,Shapley 值以三条独立路径和四条公理提供可靠归因。

文章通过一个极简交互模型揭示了留一法归因的两个致命缺陷:在特征交互时重复计算贡献(两特征各得10分,总计20分,超过真实预测值10),在特征冗余时将真实信号归零(两个携带相同信息的特征都被打0分)。Shapley 值通过考虑特征所有到达顺序的期望边际贡献解决了这两个问题,其阶乘权重有明确的概率解释。文章进一步展示了阶乘公式、排列平均和 Möbius 反演三条独立计算路径的交叉验证,以及 Shapley 值唯一满足效率性、哑元性、对称性和线性性四条公理的理论保证。最后讨论了排列采样估计中效率性免费保留的性质,以及归因正负号所承载的重要信息。

一个经典归因翻车现场

你训练了一个模型,做出了一个预测。所有人都会问同一个问题:这个数字里,每个输入各自贡献了多少?

留一法(leave-one-out)是最直觉的答案——删掉一个特征,看预测值掉多少,掉多少就是它多重要。一行代码的事。

但在一篇关于 Shapley 值的技术演示中,作者构造了一个极简模型:只有当两个特征同时出现时,预测才为 10。结果留一法把这两个特征各自标成贡献了 10,加总起来是预测值的两倍。

留一法在交互特征下的归因失真

坑还不止一个。

什么是归因(attribution)? 在机器学习可解释性中,归因指的是把一个模型的输出(预测值)分解到各个输入特征上,回答"这个预测中每个特征贡献了多少"。归因方法被广泛用于特征重要性分析、模型调试、业务决策解释等场景。常见的归因方法除了本文讨论的留一法和 Shapley 值,还有 LIME、Integrated Gradients、注意力权重分析等。不同方法在交互特征、冗余特征等复杂场景下表现差异很大,这也是为什么归因方法的公理性质(如效率性、对称性)成为衡量其可靠性的核心标准。

留一法的两个方向都会错

交互场景:重复计算贡献

上面那个模型只有一对特征:has_card 和 is_verified。单独删掉任意一个,预测都会从 10 掉到 0。留一法据此判断——“删了你我就崩了,所以你贡献了全部 10 分”。两个特征都得到 10 分,总计 20 分,而真实预测只有 10。归因总量超过了预测本身,这直接违反了归因公理中的效率性(Efficiency)。

Shapley 在同样场景下给出的是各 5 分,合计 10 分,恰好匹配预测值。

冗余场景:真实信号被归零

第二种失效更危险。假设两个特征携带完全相同的信息——signal 和 signal_copy。删掉任意一个副本,预测纹丝不动。留一法于是给两者都打 0 分。

一个承载真实信号的特征,在特征重要性图里显示为彻头彻尾的无关变量。有人看图上这句话,就把这个特征删了。

Shapley 在这里给每个副本各 4 分。冗余信息被公平地分摊,而不是被整体抹除。

两种错误方向相反:交互时高估、冗余时低估。而在纯加性模型上,留一法和 Shapley 的结果完全一致——这正是为什么拿一个加性例子来验证归因方法是毫无意义的。

Shapley 值到底在算什么

Shapley 值换了个问法:在特征所有可能的到达顺序中,这个特征平均多带来了多少?

公式是经典的阶乘加权:

phi_i = sum over S not containing i of
          |S|! (n-|S|-1)! / n!  *  ( v(S + i) - v(S) )

那个阶乘权重不是随便写的。|S|! (n-|S|-1)! / n! 恰好等于在所有 n! 种排列中,集合 S 排在特征 i 之前、其余排在之后的排列所占的比例——这是一个定义在特征到达位置上的概率分布,总和恒为 1。

换句话说,Shapley 值不是某种启发式加权,它是一个有明确概率解释的期望边际贡献。

合作博弈论背景。 Shapley 值最初由 Lloyd Shapley 于 1953 年在合作博弈论中提出,用于解决"n 个参与者合作产生总收益 v(N),如何公平分配"的问题。在博弈论语境中,v(S) 称为特征函数(characteristic function),表示联盟 S 中成员合作能获得的总收益。Shapley 值给出的分配方案是唯一满足效率性、对称性、哑元性和线性性四条公理的解。2017 年 Lundberg 与 Lee 提出 SHAP(SHapley Additive exPlanations),将这一框架引入机器学习可解释性领域:把"特征"视为"参与者",把"模型预测值减去基线"视为"总收益",从而将归因问题转化为收益分配问题。SHAP 已成为当前最主流的模型解释工具之一。

三种独立算法互相验证

真正让人觉得可靠的做法是:同一个结果用三条互不相干的路径算出来,全部吻合到最后一位。

  1. 阶乘公式——直接按上面那个式子算。
  2. 排列平均——枚举所有 n! 种特征到达顺序,对每种顺序计算边际贡献再取均值。
  3. Möbius 反演——完全绕开阶乘和排列,先把集合函数反演成 Harsanyi 红利,再把每份红利在贡献它的联盟中均分:
m(S)   = sum over T subset of S of (-1)^(|S|-|T|) v(T)
phi_i  = sum over S containing i of m(S) / |S|

对那个交互模型,整套红利集中在特征对上——m({a,b}) = 10,而 m({a}) = m({b}) = 0。这一行式子本身就说明了:两个特征各自单独什么都做不了。

三条路径独立计算、结果一致,这种交叉验证比任何单一实现的「看起来对」都有力得多。

Möbius 反演是什么? Möbius 反演是组合数学中定义在偏序集上的对偶变换。在归因场景中,它把定义在特征子集上的集合函数 v(S) 转换为 Harsanyi 红利 m(S)——m(S) 表示"只有 S 中所有特征到齐时才产生的那部分增量贡献",即联盟 S 的纯协同价值。对于只有两个特征交互的模型,Harsanyi 红利会集中在交互对上:m({a,b}) = 10,而 m({a}) = m({b}) = 0,这行式子本身就直观地说明了两个特征单独什么都做不了。Möbius 反演路径完全绕开了阶乘权重和排列枚举,为 Shapley 值提供了一条纯代数视角的计算路径,三条路径结果一致,构成了强有力的交叉验证。

四条公理逐一核对

Shapley 值不是因为碰巧能用才被信任的。它是唯一同时满足四条要求的归因方案:

  • 效率性——所有特征贡献之和等于预测值减去基线。这正是留一法做不到的。
  • 哑元性——对结果毫无影响的特征得分恰好为 0。
  • 对称性——功能可互换的特征得到完全相同的值。
  • 线性性——对多个模型之和的归因,等于各自归因之和。

演示页面在每个模型上都验证了这四条,其中对称性是通过交换数据矩阵的列重新推导的,而不是信任页面自带的检测器。

采样估计:效率性免费保留

精确计算 Shapley 值需要 2ⁿ 次模型评估。特征数超过 20 左右就彻底不可行。实践中改用排列采样来近似。

这里有个值得注意的性质:无论采样多少次,效率性始终精确成立——哪怕只采一个排列。 因为每个排列内部的边际贡献会望远镜式地加总成 v(全集) - v(空集),这跟你抽到哪种顺序无关。采样牺牲的是单个特征的精度,而那个精度才是你真正需要报告的数字。

为什么精确计算是 2ⁿ 次评估? Shapley 值的阶乘公式需要对所有不包含特征 i 的子集 S 求和,而 n 个特征共有 2ⁿ 个子集。当 n=20 时,2²⁰ ≈ 100 万次模型评估;n=30 时超过 10 亿次,实际不可行。排列采样(permutation sampling)的思路是:从 n! 种排列中随机抽取若干种,对每种排列仅计算该特征在序列中的边际贡献,再取均值近似 Shapley 值。由于每个排列内部的边际贡献会望远镜式地加总为 v(全集) − v(空集),无论抽到哪种排列,效率性都精确成立,采样误差只影响单个特征的估计精度。这种"总量精确、分项近似"的性质使得采样估计在实际应用中非常实用。

归因有正负号

一个拉低预测值的特征,Shapley 会给出负分:有用的特征 +6,有害的特征 −4。只报告绝对值大小的方法根本无法表达这层信息——而「这个特征是在帮倒忙」恰恰是归因分析中最需要知道的结论之一。

整套验证跑下来:470 条验证断言,23 项页面内检查,全部通过。

#Shapley值#特征归因#留一法#特征重要性#模型可解释性#Möbius反演#Harsanyi红利#归因公理
分享:

相关推荐