← 返回题目列表

Stacking 为什么容易数据泄露?如何避免?

中等 第 20 / 25 题 更新于 2026/09/19
集成学习机器学习面试题模型训练

简化版

Stacking 训练元学习器时必须使用基模型对未见折的 OOF 预测;若使用基模型在自身训练数据上的预测,元模型会学习过于乐观的分数模式,形成泄漏。测试阶段再用全量重训的基模型产生特征。

详细版

  • 每折用 K-1 折训练基模型,预测剩余折。

  • 拼接所有折的 OOF 预测作为元训练特征。

  • 预处理、特征选择和校准也必须在折内拟合。

  • 测试预测可对各折模型平均,或用全量重训模型。

  • 时间任务需滚动 OOF,不能随机 K 折。

完整版教学

一、元模型只能看到诚实的一级预测

高容量基模型在训练样本上可能近乎完美,其 in-sample 预测与线上分布不同。

元模型会错误地相信极端置信度。

OOF 确保每行一级预测来自没训练过该行标签的模型,因此元模型面对的噪声更接近推理阶段。

二、底层机制与公式

for fold k:
  fit base on train_without_k
  Z[valid_k]=base.predict(valid_k)
fit meta on Z, y

三、带数字的推演

5 折、10,000 样本时,每个基模型训练 8,000、预测 2,000,拼完得到 10,000 行 OOF 特征。

若直接全量训练再预测同 10,000 行,就发生泄漏。

四、方案对比

方案/对象核心特点代价或边界
OOF stacking元特征诚实训练成本高
Blending单留出集训练元模型简单但浪费数据
训练内预测实现最省事严重泄漏

五、执行流程

先划最终测试 -> K 折生成所有基模型 OOF -> 拼元特征
-> 训练 meta -> 全量重训 base -> 生成测试特征 -> 一次最终评估

六、边界条件与工程代价

若调参也使用同一 OOF 结果,复杂选择仍可能过拟合;可嵌套交叉验证或保留额外验证层。

目标编码、标准化等流水线若在全量数据先 fit,即使基模型折分正确仍有前处理泄漏。

记忆钩子:Stacking 红线是“一级训练特征必须由没见过该样本的模型产生”。

七、常见误区与追问

  • 误区:基模型训练准确率高,最适合给元模型。 这恰恰造成分布失真。

  • 追问:OOF 每行来自哪个模型? 来自未用该行标签训练的折模型。

  • 误区:只要模型折分,预处理可全量拟合。 预处理也会泄漏统计和标签信息。

  • 追问:测试时基模型怎么训练? 通常用全量开发数据重训,或平均折模型。

  • 追问:时间数据怎么做? 用只看过去的滚动窗口生成 OOF。

八、加强记忆

Stacking 红线是“一级训练特征必须由没见过该样本的模型产生”。

折内还要包住预处理与调参,不能只把模型 fit 分折。