树模型的 SHAP 值:把一张保单的预测分给每个变量

梯度提升树对这张保单的预测比平均高,高在哪里?每个变量各贡献多少?怎么保证贡献加起来正好等于预测和平均的差?

SOA PA
对过的标准答案
3 条
覆盖的考试公式
0 个
参数
5 个
开源库
1 个

01当场运行

改一个参数,当场重算

正在用默认参数运行,计算量大的方法最多要 20 秒。

04出处和说明

公式从哪里来,有什么限制

列出参考的教材、论文和考试公式条目。方法的限制和实现上的说明也写在这里。

参考

  • Lundberg、Erion、Lee (2018) Consistent individualized feature attribution for tree ensembles(arXiv 1802.03888)算法 1
  • Shapley (1953) A value for n-person games, Contributions to the Theory of Games II
  • Wüthrich、Merz:Statistical Foundations of Actuarial Learning and its Applications(2023)第 9 章 可解释性

这个方法算什么

Shapley 值把预测 f(x) 和平均 φ₀ 的差公平地分给每个变量:变量 j 的贡献是它加入每一个子集 S 时 v(S ∪ {j}) − v(S) 的加权平均。树模型的 v(S) 是"已知 S 里的变量、其余变量按训练样本在树里的覆盖比例平均"的预测(Lundberg 等 2018 的路径依赖定义)。这里对每个子集精确计算(变量少,可以枚举全部 2^p 个子集),给出一张保单的分解和测试集上的全局重要性(平均 |φ|)。

说明和限制

  • GBM 的 SHAP 值在 ln 频率的尺度上相加:exp(φ₀) × Π exp(φ_j) = 预测的频率,所以 exp(φ_j) 是变量 j 的"乘数"。
  • 覆盖数用训练时每个节点的保单数。树里没出现的变量 φ = 0。
  • 精确枚举要算 2^p 个子集,变量多时用 Lundberg 等的多项式时间算法(结果相同)。

数据

看参数里选的数据:选平台的数据集时是真实数据或公开样例,填自己的数时只用输入的数。上面运行的输出里写明这一次用的是哪种。

开源库和版本

  • numpy2.4.6BSD-3-Clause数值计算