4. SHAP原理(下):数学推导与四大公理

上一节我们建立了SHAP值“每个特征贡献之和等于预测差值”的直观认知。本节将深入其数学内核:SHAP值唯一满足效率性、对称性、虚拟性、可加性四个公理的解,这正是它区别于LIME、Permutation Importance等方法的根本原因。

4.1 从Shapley值到SHAP值的数学定义

SHAP值源于合作博弈论中的Shapley值。设特征全集为 \(F\),模型 \(f\) 对样本 \(x\) 的预测值为 \(f(x)\),基准预测(所有特征缺失时的期望预测)为 \(\phi_0 = E[f(x)]\)。特征 \(i\) 的SHAP值 \(\phi_i\) 定义为:

φ_i = Σ_{S ⊆ F \ {i}} [ |S|! (|F| - |S| - 1)! / |F|! ] × [ f_x(S ∪ {i}) - f_x(S) ]

其中 \(S\) 是不包含特征 \(i\) 的特征子集,\(f_x(S)\) 表示在子集 \(S\) 条件下模型对 \(x\) 的期望预测。这个公式遍历所有可能的特征组合顺序,计算特征 \(i\) 加入时的边际贡献,再按组合数加权平均。

核心理解:SHAP值不是简单计算“特征存在与不存在”的差值,而是对所有可能的特征加入顺序取平均,从而公平分配贡献。

4.2 四大公理:SHAP值的唯一性基石

Shapley值被证明是唯一同时满足以下四个公理的解。SHAP值继承这些公理,保证了归因的数学严谨性。

公理 数学表述 业务含义
效率性 \(\sum_{i=1}^{|F|} \phi_i = f(x) - E[f(x)]\) 所有特征的SHAP值之和等于预测值与基准值的差值,贡献完全分配,无遗漏
对称性 若 \(f_x(S \cup \{i\}) = f_x(S \cup \{j\})\) 对所有 \(S\) 成立,则 \(\phi_i = \phi_j\) 两个特征对模型影响完全相同时,获得相同贡献值,避免偏好
虚拟性 若 \(f_x(S \cup \{i\}) = f_x(S)\) 对所有 \(S\) 成立,则 \(\phi_i = 0\) 对预测无影响的特征贡献为零,自动过滤无关变量
可加性 若模型 \(f = f_1 + f_2\),则 \(\phi_i(f) = \phi_i(f_1) + \phi_i(f_2)\) 多个模型的SHAP值可直接相加,适用于集成模型或复合损失
实战启示:可加性公理使得SHAP值天然支持XGBoost、LightGBM等加法模型。对于树模型,每个树的SHAP值独立计算后求和,与模型整体预测一致。

4.3 效率性公理详解

效率性是四个公理中最直观也最重要的约束。它保证了“贡献守恒”:

  • 数学形式: \(\phi_0 + \sum_{i=1}^{M} \phi_i = f(x)\),其中 \(\phi_0 = E[f(x)]\)
  • 验证方法:对任意样本,将所有特征的SHAP值加上基准值,结果必须等于模型原始预测值
  • 与LIME的区别:LIME不保证效率性,其局部线性近似可能产生“贡献总和≠预测差值”的情况
# 效率性验证示例(Python伪代码)
import shap

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)

# 对第0个样本验证
base_value = explainer.expected_value
prediction = model.predict(X[0:1])[0]
sum_shap = base_value + shap_values[0].sum()

print(f"模型预测: {prediction:.4f}")
print(f"基准值+SHAP和: {sum_shap:.4f}")
print(f"差值: {abs(prediction - sum_shap):.6f}")  # 应接近0

4.4 对称性与虚拟性:公平性与稀疏性

对称性确保归因的公平性。当两个特征在所有子集下对预测的边际贡献完全一致时,它们获得相同的SHAP值。这避免了因特征顺序或命名差异导致的偏差。

虚拟性则提供了天然的稀疏性。如果一个特征在任何特征组合下都不改变预测结果,其SHAP值严格为零。这在特征选择中非常有用:

  • 虚拟特征(如随机噪声列)的SHAP值应接近0
  • 若某个特征的SHAP值绝对值普遍很小,说明其对模型贡献有限
  • 可用于自动识别冗余特征,辅助特征工程
注意:虚拟性要求“对所有子集S都不产生影响”才严格为零。实际数据中,特征可能在某些子集下影响很小而非零,此时SHAP值会接近但不等于零。

4.5 可加性公理与模型分解

可加性是SHAP值在工程实践中的强大工具。它允许我们将复杂模型的SHAP值分解为各组成部分的SHAP值之和:

# 可加性示例:XGBoost多模型融合
model_1 = xgb.train(params, dtrain_1, num_boost_round=50)
model_2 = xgb.train(params, dtrain_2, num_boost_round=50)
ensemble_pred = model_1.predict(X) + model_2.predict(X)

# 分别计算SHAP值
shap_1 = shap.TreeExplainer(model_1).shap_values(X)
shap_2 = shap.TreeExplainer(model_2).shap_values(X)

# 可加性:整体SHAP值 = 各部分SHAP值之和
shap_ensemble = shap_1 + shap_2  # 逐元素相加

这一性质在以下场景尤为实用:

  • 集成学习:随机森林、XGBoost等集成模型的SHAP值等于各基学习器SHAP值之和
  • 多任务学习:共享特征的多输出模型,每个输出的SHAP值独立计算后合并分析
  • 模型对比:比较两个模型的SHAP值差异,定位模型行为变化的原因

4.6 四大公理关系总览

SHAP四大公理关系图 SHAP值 效率性 贡献总和=预测差值 对称性 等价特征同等贡献 虚拟性 无影响特征贡献=0 可加性 模型分解贡献可加 唯一性定理 Shapley值是唯一同时满足效率性、对称性、虚拟性、可加性的解 SHAP值继承这一性质,确保特征归因的数学唯一性 任何不满足这四个公理的归因方法(如LIME)都不具备唯一性保证

4.7 公理违背的后果与对比

理解这四个公理,能帮助我们判断不同归因方法的优劣:

归因方法 效率性 对称性 虚拟性 可加性
SHAP ✅ 满足 ✅ 满足 ✅ 满足 ✅ 满足
LIME ❌ 不保证 ❌ 不保证 ❌ 不保证 ❌ 不保证
Permutation Importance ❌ 不适用 ✅ 满足 ✅ 满足 ❌ 不适用
Partial Dependence ❌ 不适用 ✅ 满足 ✅ 满足 ❌ 不适用
关键结论:SHAP值是唯一同时满足四个公理的局部归因方法。当业务场景要求“贡献总和必须等于预测差值”(如信用评分卡、定价模型监管合规)时,SHAP是唯一选择。

4.8 本章小结

  • SHAP值基于Shapley值,通过遍历所有特征组合顺序计算边际贡献的加权平均
  • 效率性保证贡献守恒,所有特征SHAP值之和等于预测与基准的差值
  • 对称性确保等价特征获得相同贡献,避免归因偏差
  • 虚拟性自动过滤无关特征,贡献严格为零
  • 可加性支持模型分解,集成模型和多任务场景下可直接相加
  • 四个公理共同保证了SHAP值在数学上的唯一性和公平性,这是其他归因方法无法替代的核心优势