跳到主要内容

机器学习与数据挖掘

SHAP 模型解释

用 Shapley 加性解释量化每个特征把模型预测推高或拉低了多少,并给出全局重要性与方向。

更新日期 2026-08-29 机器学习

这篇能回答什么

SHAP(SHapley Additive exPlanations)回答的是「模型为什么这样预测」。它把一次预测分解为各特征的边际贡献,使得贡献之和等于预测值相对基准的差。全局上,用平均绝对 SHAP 衡量特征重要性;方向上,用特征取值与 SHAP 值的相关判断正向驱动还是负向驱动。StatsX 底层拟合随机森林,再用 TreeExplainer 计算 SHAP。

适合:打开房价、流失、信用等树模型的黑盒,找出「面积把总价推高了多少」这类可写进结果节的归因。本教学示例目标为总价(万元),特征为面积、楼层、建筑年份与总楼层。

什么时候不该用

SHAP 解释的是这台模型,不是数据生成过程,更不是因果:面积的 SHAP 高不证明「增大面积会导致总价上升」,只说明模型在预测时重用了该特征。没有明确因变量时,应改用K-Means 等无监督方法。只要基尼重要性、不要方向与局部贡献时,可用随机森林特征重要性。样本量过小(少于 20 行)不能运行。

如何选择方法

先分清你要的是可加性归因、不纯度重要性还是线性系数。SHAP 提供一致的局部+全局解释;随机森林重要性更快但没有「把预测推高多少」的单位;线性回归的系数在满足假定时可直接读边际效应。

  • SHAP 模型解释:≥2 个特征 + 1 个目标,输出 mean|SHAP|、驱动方向与蜂群图。

  • 随机森林特征重要性:同样是树模型,只报告分裂不纯度下降,不做 Shapley 分解。

  • 线性回归:系数有单位、有标准误,适合可加线性关系,而不是复杂交互。

  • K-Means:无目标变量时的分群,不解释预测。

输入、输出与限制

输入

特征可为定量或定类(定类需能被模型编码为数值)。目标为 1 个定量或定类变量:唯一值较多时按回归森林拟合,唯一值 ≤ 10 或字符串标签时按分类森林拟合。

  • 特征变量:最少 2 个,最多 100 个。

  • 目标变量:正好 1 个定量或定类变量。

输出

结果表列:特征变量、平均绝对 SHAP 值(全局贡献)、驱动方向、与预测目标相关性。驱动方向由特征取值与 SHAP 值的相关系数判定:大于 0.1 为正向,小于 -0.1 为负向,否则为非线性/微弱。同时输出蜂群图与文字洞察。

产品限制

  • 有效样本至少 20 行;拟合最多使用 20000 行。

  • 计算 SHAP 时最多抽取 500 行(随机种子 42);洞察会注明是否抽样。

  • 底层为随机森林:50 棵树、最大深度 8,不是任意用户自带模型。

  • 蜂群图还会再限制点数,完整 mean|SHAP| 以结果表为准。

  • 这些上限来自 StatsX 实现,不要拿 Python shap 库对完整样本、或 SPSS 中不存在的过程来逐格核对。

案例

研究问题。 综合评价教学表希望解释「树模型在预测总价时主要依赖哪些住房特征、方向如何」,而不是只报告一个黑盒 R²。

教学示例目标为总价(万元),特征为面积(平米)、楼层、建筑年份、总楼层。全局 SHAP 基于 500 条抽样计算。面积(平米) 的 mean|SHAP| = 150.3252,方向为正向驱动,与目标相关 0.9476,远高于楼层(32.6425)与建筑年份(20.5409)。下载后按同样角色复现本页表格。

下载教学示例表(综合评价)

在 StatsX 中操作

  1. 步骤 1 · 上传表格

    打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用综合评价 xlsx,确认工作表为「Sheet1」。单文件不超过 20 MB。

  2. 步骤 2 · 查看画像与质量

    确认总价为定量目标,面积等为定量特征,缺失可接受。不要把 ID 列当作特征。

  3. 步骤 3 · 选择「SHAP 模型解释」

    在算法目录搜索「SHAP」并点选。适合/可用标记仅供参考。

  4. 步骤 4 · 指定特征与目标并运行

    特征勾选面积(平米)、楼层、建筑年份、总楼层(至少 2 个);目标选总价(万元)。点击运行分析。

  5. 步骤 5 · 阅读结果

    先看 mean|SHAP| 排序,再看驱动方向与蜂群图颜色。抽样计算时以表注与洞察中的 500 条为准。

StatsX 工作台上传综合评价表
将教学示例表拖入工作台上传区。
列画像
列画像确认目标为总价、特征为定量住房属性。
在目录中选择 SHAP 模型解释
在算法目录中选定「SHAP 模型解释」。
为 SHAP 指定特征与目标
特征勾选四列住房属性,目标为总价后运行。

如何阅读输出

下表由同一份教学示例在 StatsX 中运行 SHAP 得到。目标为总价(万元)。面积(平米) 的平均绝对贡献 150.3252,约为楼层(32.6425)的数倍,且与总价相关 0.9476,故为正向驱动。

SHAP 模型归因与特征解释 (目标变量: 总价(万元))
特征变量平均绝对 SHAP 值 (全局贡献)驱动方向与预测目标相关性
面积(平米)150.3252正向驱动0.9476
楼层32.6425正向驱动0.2899
建筑年份20.5409正向驱动0.1031
总楼层18.7801正向驱动0.2074

左右滑动可查看完整表格

SHAP 值衡量了特定特征在预测模型中对最终输出的平均边际贡献。正向驱动意味着特征值增大推高了预测值/发生概率。

SHAP 特征贡献表
工作台中的 SHAP 表,数字应与上表一致。
SHAP 特征影响蜂群图
蜂群图中每点是一条抽样样本;颜色表示特征值高低,横轴为该特征的 SHAP 值。

【SHAP归因】目标=总价(万元),Shapley加性解释(基于 500 条抽样样本计算全局 SHAP)。

解读顺序建议:任务类型(本案例为回归)→ 是否对 500 条抽样计算 → mean|SHAP| 排序 → 方向是否与业务一致 → 蜂群图是否出现「高面积对应大正 SHAP」的条带。面积与总价几乎共线,模型把大部分预测差归因给面积是预期行为;楼层、总楼层的贡献小且相关中等,不宜写成「楼层不重要」的因果结论。

理论与公式

把特征集合记为 N,模型为 f。特征 i 的 Shapley 值是它在所有特征子集 S 上加入时引起的预测变化的加权平均:

加性说明满足 f(x)=\phi_0+\sum_i \phi_i(x),其中 \phi_0 为基准(通常是训练预测均值)。全局重要性取抽样样本上的平均绝对值:

驱动方向用 corr(x_i, \phi_i) 的符号:正相关表示特征值越大,模型预测越高。树模型用 TreeExplainer 精确计算路径贡献,避免对特征子集做指数级枚举。分类任务对多类 SHAP 取关注类别(默认正类)再汇总。

注意事项

  • 解释对象是随机森林,换模型(线性、神经网络)SHAP 排序可能改变。

  • 相关高的特征会分摊或集中贡献,共线时不要把「面积 SHAP 最大」读成「其它变量无用」。

  • 超过 500 行只对抽样计算全局 SHAP,与全样本均值可能有随机误差。

  • 正向驱动阈值 ±0.1 是产品规则,弱相关会被标成非线性/微弱。

  • SHAP 单位与目标相同(本案例为万元),不能与标准化回归系数直接比大小。

  • 不能替代随机化试验或工具变量:预测归因 ≠ 干预效应。

常见问题

参考文献

  • Lundberg, S. M., Lee, S.-I. A unified approach to interpreting model predictions[C]//Advances in Neural Information Processing Systems. 2017.

  • Shapley, L. S. A value for n-person games[M]//Contributions to the Theory of Games II. Princeton University Press, 1953.

  • 周志华. 机器学习[M]. 北京: 清华大学出版社, 2016.