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 值计算的核心流程,从原始特征输入到最终贡献分配:
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 值提供了两个关键视角:
- 区间贡献量化: 每个分箱区间(如“年龄 30-40 岁”)的 SHAP 值表示该区间对预测的平均影响。正值表示该区间倾向于提高预测值,负值表示降低。
- 分箱方案评估: 通过比较不同分箱方案下各区间 SHAP 值的分布,可以判断分箱是否合理——好的分箱应使相邻区间的 SHAP 值有明显差异,且区间内样本的 SHAP 值方差较小。