XGBoost回归

所属分类:机器学习-回归

这个方法是做什么的

预测一个数值型因变量的梯度提升实现:默认 200 轮,每轮长一棵最深 6 层的树去拟合前序模型剩下的残差,按学习率缩放后累加。与同族的 sklearn 实现相比,它用二阶梯度近似确定叶子取值、用直方图分桶加速切点搜索,因此在中等规模的表格数据上又快又贴合。默认按层生长——先把同一层的节点一并考虑再往下走,比只挑增益最大的叶子往深处钻的实现保守一些。定类自变量可直接拖入,管线内独热编码;不产出回归系数,也没有针对自变量的显著性检验。

报告共五张卡。主结果口径是 5 折 KFold 交叉验证:表4 给验证折 R²、RMSE、MAE 的均值、折间标准差与 95%CI,另附“训练折均值”和一次留出测试集两列,表5 是逐折明细。卡① 给建模设置、变量描述与前提诊断(n∶p 比、尺度差异、VIF、因变量分布形态、疑似数据泄漏、重复观测);卡③ 给逐折 R² 柱状图、拟合散点与残差图;卡④ 给测试集上 20 次随机重排的置换重要性(ΔR²、95%CI、相对贡献占比)以及 Cohen f² 与相对均值基线的 RMSE 降幅;卡⑤ 给论文用的规范表述。这一族八个模块的报告结构相同,但本模块的着眼点集中在表4:默认参数下“训练折均值”几乎必然贴到 1(本次 0.9996),读的时候先跳过这一列,直接看“交叉验证均值”与它的 95%CI。

需要准备什么数据

  • 放入因变量Y:不限
  • 放入自变量X:至少 1 个

数据要求

  • 数据表至少 30 行。
  • 单列缺失率不超过 30%。
  • 不接受取值全都一样的列(零方差列没有可分析的变异)。

以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。

什么时候用它

  • 中等规模的结构化表格数据,关系非线性、变量之间有交互,目标就是把预测误差压小
  • 样本量够(几百条以上),愿意配合调轮数、深度与学习率这三个旋钮
  • 自变量里定量与定类混杂,不想手工设定函数形式或构造交互项
  • 需要的是变量重要性排序及其不确定性,不是可解释、可检验的系数

前提:因变量必须是连续数值且有真实波动。有效样本量建议 ≥30,且“样本量 / 独热编码后特征维度”比值 ≥10;本模块的数据要求里另有一条提醒——XGBoost 依赖二阶梯度近似,样本量过小时正则项主导,模型可能退化成常数预测——本模块的样本量瓶颈是这个,而不是别处那种“训练慢”或“邻居不够”。本次 240 条并未触发退化,出现的是反方向的过拟合(见下)。所选变量上有缺失的整行会被剔除。

什么时候不要用它

  • 因变量是类别:用「XGBoost分类」。
  • 要系数、标准误与 p 值:整份报告没有。要能写进论文的系数表用「线性回归 (最小二乘法)」;想在给系数的同时压掉一批变量用「Lasso回归」。
  • 样本量只有一两百条,或不想调参:默认 200 轮 × 深度 6 在小样本上几乎必然过拟合(见下)。这种情况用开箱即用、加树不会加过拟合的「随机森林回归」更稳妥。
  • 要在训练取值范围之外做预测:提升树不能外推,用「线性回归 (最小二乘法)」;沿时间外延用「时间序列分析(ARIMA)」。
  • 观测之间不独立(同一门店多期、同一学校内的学生):交叉验证会把同一个体拆到训练折与验证折两边,R² 虚高;用「面板模型」或「混合模型」。
  • 自变量高度共线且你要的是稳定的变量排序:共线会稀释置换重要性,先用「VIF共线性诊断」定位,再决定合并还是删除。

容易误读的地方

  • 训练折 R²=0.9996 意味着模型几乎把训练样本背了下来。 本次训练折 RMSE 只有 0.2491,而因变量本身的标准差是 13.027——误差被压到标准差的 2%。与之对应,验证折 R² 只有 0.3149,落差 0.6847 是这一族八个模块的演示输出里最大的。默认 200 轮 × 深度 6 对 240 条样本来说太重了。在默认参数下,表4 的“训练折均值”这一列很容易贴到 1,把它当成绩读会得出与主结果完全相反的结论。同一张表最右的“留出测试集”用的是另一个种子、另一次划分,不是任何一折的副本;但它同样不构成第二次独立验证——交叉验证跑在全部 240 条上,那 48 条留出样本仍在各折的训练折里。单次 48 条的波动也更大:本次留出 R²=0.1570,比表5 里最差的第 2 折(0.2069)还低。
  • 本模块的控件里没有任何正则旋钮。 超参只有“迭代轮数”“最大深度”“学习率”三个(外加测试集比例与随机种子),XGBoost 常用的子采样、列采样、最小叶子权重、L1/L2 惩罚与早停都没有暴露出来。所以抑制过拟合只有三条路:减轮数、减深度、减学习率,而且要一次只改一个再看表4 的落差变化。想要带内建收缩、又能给出系数的模型,回到「Lasso回归」或「ElasticNet回归」。
  • 卡④ 的“相对贡献占比”加起来不一定是 100%。 本次三个自变量的占比是 86.41%、10.66%、2.93%,正好凑满 100%——但那只是因为三项 ΔR² 恰好都为正。分母取的是全部 ΔR² 的绝对值之和,只要有一项为负,它就进了分母却不分配占比:同族「LightGBM回归」的演示输出里“促销折扣力度”ΔR²=−0.0151、占比栏写“—(无正向贡献)”,可见的两项只有 90.14% 与 4.80%,加起来到不了 100%。看到这种缺口,说明模型里有变量被打乱后反而变好,那是过拟合的信号,不是“还有几个百分点没解释”。
  • ΔR² 之间不能相加,也不是因果效应。 本次 ΔR² 最大的“广告投入”是 0.4931,而模型在留出测试集上的 R² 只有 0.1570——单个变量的“重要性”比整个模型的解释力还大。这不是算错:打乱一列会破坏所有用到它的分裂,损失不是可加分解出来的份额。置换重要性只回答“把这一列洗牌,这个模型会掉多少 R²”,既不等价于回归系数的显著性,也不能读成“调整这个变量就能改变结果”。要系数、p 值与置信区间请用「线性回归 (最小二乘法)」。
  • 提升树不能外推。 预测是初始值加一串树的输出,每棵树的输出都由训练样本决定;自变量走出训练范围后,样本落进同一批边界叶子,预测值锁死为常数,不再随自变量变化。本模块示例数据里“广告投入”是 1.12~11.62 万元,模型对 20 万元投入给出的数字与 11.62 万元时相同。卡③ 的拟合散点在两端向均值收缩,就是这件事的表现。

报告里有什么

  1. 输出结果一:数据概览与前提检验
  2. 输出结果二:主结果表(交叉验证性能)
  3. 输出结果三:可视化(逐折性能 / 拟合散点 / 残差)
  4. 输出结果四:效应量与事后分析
  5. 输出结果五:结论与学术表述
逐折验证 R²(5 折)
图1 逐折验证 R²(5 折)
真实值 vs 预测值(留出测试集)
图2 真实值 vs 预测值(留出测试集)
残差 vs 预测值(留出测试集)
图3 残差 vs 预测值(留出测试集)
三张图分别回答:模型在不同数据划分下稳不稳(逐折 R²)、预测值贴不贴近真实值(散点)、误差是否随预测水平系统性变化(残差图)。

在线统计分析平台 · 233 种分析方法 · AI 智能解读

在线使用
使用教程