跳到主要内容

Shapley 值

一、直观理解:按“平均边际贡献”公平分蛋糕​

Shapley 值是合作博弈中的经典分配方案:在所有可能的加盟顺序上,计算某参与人对联盟的边际贡献,再取平均。谁在更多情景下带来增量价值,谁分得更多。

它满足有效性、对称性、哑元性与可加性等公理,常被评价为“公平且唯一”的分配(在这些公理下)。建模中用于成本分摊、利润分配、特征贡献(甚至 SHAP 的名字来源)。

二、适用场景与优缺点​

类型说明
适用场景可定义联盟特征函数 v(S)v(S);需要公平分摊成本/收益;参与人不多(精确计算 2n2^n);或可用抽样近似。
核心优点公理化公平;解释清晰(平均边际贡献);与“贡献”叙事契合。
局限与缺点精确计算随 nn 指数爆炸;特征函数设定主观;不保证在核中(可能不稳定于某些反驳)。

三、核心原理​

对参与人集合 NN,∣N∣=n|N|=n,特征函数 v:2N→Rv:2^N\to\mathbb{R},v(∅)=0v(\emptyset)=0。参与人 ii 的 Shapley 值

ϕi(v)=∑S⊆N∖{i}∣S∣!(n−∣S∣−1)!n!(v(S∪{i})−v(S))\phi_i(v)=\sum_{S\subseteq N\setminus\{i\}}\frac{|S|!(n-|S|-1)!}{n!}\big(v(S\cup\{i\})-v(S)\big)

等价于所有排列 π\pi 上边际贡献的平均。

性质:∑iϕi=v(N)\sum_i\phi_i=v(N)(有效性)。

四、建模步骤​

  1. 定义 NN 与 v(S)v(S)(成本节约、利润、评分等);
  2. n≤15n\le 15 可精确枚举;更大则蒙特卡洛排列抽样;
  3. 报告 ϕ\phi 并解释排序;
  4. 做 vv 的敏感性分析。

五、MATLAB 示例​

%% 3 人合作博弈 Shapley 值(排列平均)
% v({})=0, v({1})=1,v({2})=2,v({3})=3
% v({1,2})=4,v({1,3})=5,v({2,3})=6, v(N)=8
vfun = @(S) shapley_v(S);
n = 3;
phi = zeros(n, 1);
P = perms(1:n);
for r = 1:size(P, 1)
S = false(1, n);
for k = 1:n
i = P(r, k);
before = vfun(S);
S(i) = true;
phi(i) = phi(i) + (vfun(S) - before);
end
end
phi = phi / factorial(n);
fprintf("Shapley 值 = [%s], 和=%.4f (v(N)=8)\n", ...
num2str(phi', '%.4f '), sum(phi));

function val = shapley_v(S)
key = sprintf('%d', find(S));
switch key
case '', val = 0;
case '1', val = 1;
case '2', val = 2;
case '3', val = 3;
case '12', val = 4;
case '13', val = 5;
case '23', val = 6;
case '123', val = 8;
otherwise, val = 0;
end
end

抽样近似(大 nn 思路):

rng(1); n=8;
% 假设 v(S)=|S|^2 的玩具特征
v = @(S) sum(S)^2;
R=5000; phi=zeros(n,1);
for r=1:R
seq=randperm(n); S=false(1,n);
for k=1:n
i=seq(k); before=v(S); S(i)=true; phi(i)=phi(i)+v(S)-before;
end
end
phi=phi/R;
fprintf("抽样 Shapley 和=%.3f, v(N)=%.1f\n", sum(phi), v(true(1,n)));

六、如何解释结果​

说明 v(S)v(S) 定义、计算是精确还是抽样、各参与人 ϕi\phi_i 与排序、总和是否等于 v(N)v(N)。把“边际贡献高”翻译成管理建议(谁应获得更高分成/补贴)。

七、常见误区​

1. v(S)v(S) 随意指定​

分配再公平,输入不成立则结论空。

2. nn 很大还硬枚举​

应抽样并报告标准误。

3. 把 Shapley 当非合作均衡​

它是合作分配,不描述策略对抗过程。

4. 与核、核仁混淆​

不同解概念侧重点不同。

附:建模流程中的落地清单(Shapley 值)​

要把方法真正写进论文,建议补齐以下模块,而不是只贴一个最终数字。

1. 问题对齐与假设​

说明题目中的输入/输出如何映射到本方法,并显式列出关键假设。假设越清楚,后面的敏感性分析越有对象。

2. 关键关系​

ϕi\phi_i 为所有加盟顺序上边际贡献的平均,满足有效性等公理。

3. 补充实现片段​

n=3; v=@(S) sum(S)^2; phi=zeros(n,1); R=2000; for r=1:R, seq=randperm(n); S=false(1,n); for k=1:n,i=seq(k);b=v(S);S(i)=true;phi(i)=phi(i)+v(S)-b; end, end; disp(phi/R);

4. 报告要素​

v(S)v(S) 定义、精确/抽样、分配向量、敏感性。

5. 不适用情形​

nn 很大硬枚举;vv 拍脑袋。

6. 与验证章节的衔接​

至少做一项:参数扰动、与基线方法对照、极限情形检查。把“方法正文”和“全局方法论(第15门类)”连起来,结论才站得住。

八、小结​

Shapley 值按所有加盟顺序的平均边际贡献分配合作收益,公理清晰、解释友好。建模关键是合理定义特征函数,并在计算上对症选择精确枚举或随机近似。