3. SHAP 核心原理:期望值、边际贡献与 SHAP 值的数学定义

SHAP(SHapley Additive exPlanations)的核心思想源自博弈论中的 Shapley 值。在机器学习中,它将每一个特征视为“玩家”,将模型的预测结果视为“合作博弈的总收益”。SHAP 的目标是公平地将预测值分配到每个特征上,使得每个特征的贡献之和等于模型预测与平均预测的差值。

3.1 期望值:模型预测的基准

在 SHAP 框架中,期望值(Expected Value)是所有样本预测的平均值,通常记为 E[f(x)]。它代表了在没有特定样本信息时,模型对目标变量的“先验”预测。对于分类模型,期望值通常是训练集预测概率的平均值;对于回归模型,则是预测值的平均值。

对于一个具体样本 x,其模型预测值 f(x) 可以分解为:

f(x) = E[f(x)] + Σ φ_i

其中 φ_i 是第 i 个特征的 SHAP 值。期望值作为基准点,所有特征的贡献之和决定了预测值偏离基准的程度。

直观理解: 期望值就像一场比赛的“起跑线”。每个特征贡献的 SHAP 值决定了最终预测结果相对于起跑线的偏移方向和幅度。

3.2 边际贡献:特征加入时的增量影响

边际贡献(Marginal Contribution)衡量的是,在已有特征子集 S 的基础上,加入一个新特征 i 后,模型预测值的变化量。其数学定义为:

Δ_i(S) = f(S ∪ {i}) - f(S)

其中 f(S) 表示仅使用特征子集 S 中的特征时模型的预测值。由于特征之间存在交互作用,同一个特征在不同特征组合下的边际贡献可能不同。SHAP 值正是通过对所有可能的特征子集进行加权平均,来公平地计算每个特征的平均边际贡献。

特征子集 S 加入特征 A 前的预测 f(S) 加入特征 A 后的预测 f(S∪{A}) 边际贡献 Δ_A(S)
∅(空集) E[f(x)] = 0.50 f({A}) = 0.65 +0.15
{B} f({B}) = 0.55 f({A, B}) = 0.72 +0.17
{C} f({C}) = 0.48 f({A, C}) = 0.60 +0.12
{B, C} f({B, C}) = 0.58 f({A, B, C}) = 0.80 +0.22

上表展示了特征 A 在不同特征子集下的边际贡献。由于特征交互,边际贡献从 +0.12 到 +0.22 不等。SHAP 值需要综合所有这些情况。

3.3 SHAP 值的数学定义与计算公式

SHAP 值 φ_i 是特征 i 在所有可能特征子集上的边际贡献的加权平均值。其精确数学定义为:

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

其中:

  • N 是所有特征的集合,|N| 是特征总数。
  • S 是不包含特征 i 的任意特征子集。
  • |S|! 和 (|N|-|S|-1)! 是排列组合的权重因子。
  • f(S ∪ {i}) - f(S) 是特征 i 在子集 S 上的边际贡献。

该公式满足以下四个公理,确保了分配的公平性:

  1. 效率性(Efficiency): 所有特征的 SHAP 值之和等于预测值与期望值的差值。
  2. 对称性(Symmetry): 如果两个特征在所有子集中的边际贡献相同,则它们的 SHAP 值相等。
  3. 虚拟性(Dummy): 如果一个特征对任何子集都没有贡献,其 SHAP 值为 0。
  4. 可加性(Additivity): 对于两个独立模型,合并后的 SHAP 值等于各自 SHAP 值之和。
计算复杂度: 精确计算 SHAP 值需要遍历所有 2^|N| 个特征子集,当特征数量较多时(如 > 20),计算量呈指数级增长。实际应用中通常使用 Kernel SHAP、Tree SHAP 等近似算法。

3.4 SHAP 值的计算流程

下图展示了从模型预测到 SHAP 值输出的完整计算流程:

SHAP 值计算流程 输入样本 x 枚举所有特征子集 S 计算边际贡献 Δ_i(S) 加权求和 φ_i 输出 SHAP 值向量 期望值 E[f(x)] 说明: SHAP 值通过枚举所有特征子集,计算每个特征在不同组合下的边际贡献,再按排列权重进行加权平均,最终得到每个特征的公平贡献值。

3.5 特征交互与 SHAP 值的分解

SHAP 值不仅可以衡量单个特征的主效应,还可以通过 SHAP 交互值(SHAP Interaction Values)来量化特征之间的交互效应。特征 i 和特征 j 的交互 SHAP 值定义为:

φ_{i,j} = Σ_{S ⊆ N \ {i,j}} [ |S|! (|N| - |S| - 2)! / (|N| - 1)! ] × [ f(S ∪ {i,j}) - f(S ∪ {i}) - f(S ∪ {j}) + f(S) ]

此时,特征 i 的总 SHAP 值可以分解为:

φ_i = φ_i^main + Σ_{j ≠ i} φ_{i,j}

其中 φ_i^main 是特征 i 的主效应,φ_{i,j} 是特征 i 与特征 j 的交互效应。这种分解能力使得 SHAP 成为解释复杂模型(如 GBDT、神经网络)中特征交互行为的强大工具。

注意事项: 交互 SHAP 值的计算复杂度更高(O(2^|N|)),在实际应用中通常仅在特征数量较少或使用 Tree SHAP 等高效算法时启用。

3.6 SHAP 值的性质总结

性质 数学表达 实际意义
效率性 Σ φ_i = f(x) - E[f(x)] 所有特征贡献之和等于预测偏差
对称性 若 Δ_i(S) = Δ_j(S) ∀S,则 φ_i = φ_j 贡献相同的特征获得相同 SHAP 值
虚拟性 若 Δ_i(S) = 0 ∀S,则 φ_i = 0 无贡献的特征 SHAP 值为 0
可加性 φ_i(f+g) = φ_i(f) + φ_i(g) 集成模型的 SHAP 值可分解
线性性 φ_i(αf) = α·φ_i(f) 模型缩放时 SHAP 值等比缩放