2. SHAP 基础原理:从 Shapley 值到 SHAP

SHAP(SHapley Additive exPlanations)是目前最主流的模型可解释性方法之一。它的核心思想源于合作博弈论中的 Shapley 值——一种公平分配“合作收益”的数学方案。理解 SHAP,首先要理解 Shapley 值如何将“特征”视为博弈中的“玩家”,将“预测值”视为“合作收益”,从而精确量化每个特征对预测结果的贡献。

2.1 合作博弈论与 Shapley 值

合作博弈论研究的是:当多个参与者(玩家)合作完成一项任务并产生总收益时,如何公平地将收益分配给每个参与者。Shapley 值由 Lloyd Shapley 在 1953 年提出,是唯一满足以下四个公理的分配方案:

公理 含义 在特征贡献中的对应
有效性 所有玩家贡献之和等于总收益 所有特征贡献之和 = 模型预测值 - 平均预测值
对称性 若两个玩家在所有子集贡献相同,则分配相同 若两个特征在所有特征组合中贡献相同,则 SHAP 值相等
虚拟性 若玩家对任何子集无贡献,则分配为 0 若特征对任何特征组合无影响,则 SHAP 值为 0
可加性 若两个独立博弈合并,分配等于各自分配之和 多个模型的 SHAP 值可线性叠加

Shapley 值的计算公式如下:

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

其中:

  • N:所有玩家的集合(所有特征)
  • S:不包含玩家 i 的任意子集(部分特征组合)
  • v(S):子集 S 合作产生的收益(模型基于 S 中特征的预测值)
  • φᵢ(v):玩家 i 的 Shapley 值(特征 i 的贡献)
关键理解: Shapley 值通过枚举所有可能的特征子集,计算“加入特征 i 前后预测值的变化”,再对所有子集取加权平均。这保证了分配的公平性,但计算复杂度为 O(2^|N|),在特征较多时不可行。

2.2 从 Shapley 值到 SHAP:近似与统一

SHAP 由 Scott Lundberg 和 Su-In Lee 在 2017 年提出,核心贡献在于:

  • 将 Shapley 值统一到可加性特征归因框架,使所有满足可加性的解释方法(如 LIME、DeepLIFT)都能用 SHAP 值表示。
  • 提出多种近似算法,使 Shapley 值的计算在树模型、线性模型、深度学习模型中变得可行。

SHAP 的基本公式(可加性特征归因模型):

g(z') = φ₀ + Σ_{i=1}^{M} φᵢ z'ᵢ

其中:

  • g(z'):解释模型
  • φ₀:所有样本的平均预测值(基线值)
  • φᵢ:特征 i 的 SHAP 值
  • z'ᵢ:特征 i 是否被观测到(1 表示观测到,0 表示缺失)
直观理解: SHAP 值 φᵢ 表示“特征 i 的取值使模型预测值偏离平均预测值的程度”。正值表示该特征将预测值推高,负值表示推低。所有特征的 SHAP 值之和加上基线值,恰好等于模型对该样本的预测值。

2.3 SHAP 与 Shapley 值的核心差异

维度 Shapley 值 SHAP
计算方式 精确枚举所有子集,复杂度 O(2^M) 近似算法(如 TreeSHAP、KernelSHAP),复杂度 O(M²) 或 O(TM)
适用模型 理论上适用于任何合作博弈 专为机器学习模型设计,有针对性优化
缺失特征处理 通过条件期望计算 v(S) 通过条件期望或边际期望近似
可解释性 数学上公平,但难以直接可视化 提供 SHAP 力图、摘要图、依赖图等可视化工具
实现工具 无标准库 Python shap 库,支持 XGBoost、LightGBM、CatBoost、sklearn 等

2.4 SHAP 计算流程:从特征到贡献值

以下 SVG 展示了 SHAP 值计算的核心流程,从原始特征输入到最终贡献分配:

SHAP 值计算流程 SHAP 值计算流程 输入特征 x₁, x₂, ..., xₘ 枚举特征子集 S ⊆ {1,2,...,M} 计算边际贡献 v(S∪{i}) - v(S) 加权平均 |S|!(M-|S|-1)! / M! SHAP 值输出 φ₁, φ₂, ..., φₘ 基线值 φ₀ 所有样本平均预测值 E[f(x)] 加和 最终预测值 f(x) = φ₀ + Σφᵢ

2.5 SHAP 的三种主要近似算法

针对不同模型类型,SHAP 提供了不同的近似算法,在计算效率和精度之间取得平衡:

算法 适用模型 时间复杂度 核心思想
KernelSHAP 任意模型(黑箱) O(M² · K)(K 为采样数) 用加权线性回归近似 Shapley 值,对特征子集采样
TreeSHAP 树模型(XGBoost、LightGBM、RF) O(T · M · D)(T 为树数,D 为最大深度) 利用树结构直接计算条件期望,避免枚举子集
DeepSHAP 深度学习模型 与模型前向传播同阶 基于 DeepLIFT 的传播规则,逐层分配贡献
实践注意: 在变量分箱场景中,我们通常使用 TreeSHAP 算法,因为分箱后的特征常与树模型(如 XGBoost、LightGBM)配合使用。TreeSHAP 能精确处理分箱后的离散特征,且计算效率远高于 KernelSHAP。

2.6 SHAP 值的数学性质与可加性

SHAP 值继承了 Shapley 值的所有优良数学性质,使其成为可解释性领域的“黄金标准”:

  • 局部精度: 解释模型 g(z') 在单个样本上完美逼近原始模型 f(x)。
  • 缺失性: 若特征 i 在任意子集中边际贡献为 0,则 φᵢ = 0。
  • 一致性: 若模型改变使得特征 i 的边际贡献增加,则 φᵢ 不会减少。
  • 可加性: 多个模型的 SHAP 值可直接相加,适用于集成模型。

这些性质保证了 SHAP 值在变量分箱场景中的可靠性:分箱后的每个区间都能获得公平的贡献度量,且不同分箱方案的贡献可以横向比较。

2.7 SHAP 在变量分箱中的特殊意义

在变量分箱案例中,SHAP 值提供了两个关键视角:

  1. 区间贡献量化: 每个分箱区间(如“年龄 30-40 岁”)的 SHAP 值表示该区间对预测的平均影响。正值表示该区间倾向于提高预测值,负值表示降低。
  2. 分箱方案评估: 通过比较不同分箱方案下各区间 SHAP 值的分布,可以判断分箱是否合理——好的分箱应使相邻区间的 SHAP 值有明显差异,且区间内样本的 SHAP 值方差较小。