You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XGBoost分类器SHAP中expected_value与训练集均值不符的原因解析

理解SHAP的explainer.expected_value与XGBoost分类器的标签均值差异

一、SHAP的expected_value到底是什么?

explainer.expected_value是SHAP解释的基准预测值,对应模型在「基准输入样本」下的边际输出(对于XGBoost分类器,这个边际输出是logit尺度,即未经过sigmoid变换的原始预测值)。

对于树模型的SHAP Explainer,默认的基准输入是训练数据集的特征均值(或者说特征的全局平均分布),这个值是模型对"拥有平均特征取值的样本"的原始预测结果,而非训练集标签的均值。

从你提供的代码也能验证这一点:

# 每个样本的边际预测值 = expected_value + 该样本所有特征的SHAP值之和
np.isclose(model.predict(X_test, output_margin=True), explainer.expected_value + shap_df.sum(axis=1))
# 返回True

这说明SHAP的分解逻辑是把每个样本的原始预测(logit)拆成基准预测加上各特征的贡献值,这个基准就是expected_value。

二、为什么sigmoid(expected_value)不等于y_train.mean()?

核心原因是这两个值的定义逻辑完全不同:

  • y_train.mean()是训练集标签的实际均值,代表训练数据中正样本的比例。
  • expit(explainer.expected_value)是模型对「基准输入样本」的预测概率,也就是模型认为一个"平均特征"的样本属于正类的概率。

具体来说,还有两个关键细节:

  1. XGBoost的训练目标不是对齐基准预测与标签均值
    XGBoost分类器训练时最小化的是交叉熵损失,模型的所有预测(包括基准预测)都是为了最小化损失,没有强制要求基准预测对应的概率等于训练集标签均值。

  2. 基准输入是特征均值,不是标签均值的映射
    SHAP的基准是特征层面的平均,不是标签层面的平均。模型对"平均特征样本"的预测,和训练集整体的标签分布没有直接绑定关系——比如如果特征和标签是非线性关系,平均特征对应的预测概率自然不会等于标签均值。

内容的提问来源于stack exchange,提问作者Mena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:35:02