Kaggle 本地验证集应尽量模拟实际预测场景,而不是默认把所有行随机拆开。独立样本可考虑随机划分;同一个人或设备反复出现时,需要考虑按组隔离;预测未来时,需要考虑时间先后。本文的验证集指从有标签数据中留出的评估部分,不是比赛提供的无标签测试集。
01 / 验证集是一场模拟考试
训练集用于学习模型,验证集用于比较方案和选择参数。验证阶段可以用已知标签计算指标,但这些答案以及预测时拿不到的信息,不能提前参与模型学习或特征构造。
关键是模拟对象。例如,任务如果要求预测从未见过的用户,验证时也应尽量留出未在训练中出现的用户;如果预测已有用户未来的行为,则需要考虑时间窗口以及当时真正可用的信息。两者都涉及用户数据,却未必适合相同划分。
本地验证、公榜和最终榜单使用的数据可能不同。验证设计提供选择依据,不能保证与榜单完全一致;榜单的区别见公榜与最终榜单指南。
02 / 三类划分,各自在防什么?
| 场景 | 可考虑的划分 | 重点检查 |
|---|---|---|
| 样本之间近似独立 | 随机划分;分类任务可按类别分层 | 是否存在重复样本或隐藏的分组、时间关系 |
| 同一人、设备或来源有多条记录 | 按组划分,例如 GroupKFold | 需要隔离的组是否跨越训练与验证 |
| 用过去预测未来 | 按时间划分,或合适的时间序列交叉验证 | 训练是否早于验证,标签窗口是否跨界 |
假设例子:患者 A 有十张近似图像,任务是预测新患者的情况。如果随机按图片分行,A 的图片可能同时出现在训练和验证中。模型可能借助个体特征得到好分数,却没有真正证明对新患者有效。此时按患者隔离,比只调整随机种子更切合问题。
分层抽样主要保持类别比例,不能自动解决同一人的记录跨组或未来信息泄漏。GroupKFold 解决组隔离,也不会自动保证时间先后。若同时存在分组与时间约束,可能需要组合规则或定制划分。
TimeSeriesSplit 是可用工具之一,不是所有时间数据的通用答案。样本间隔、预测跨度以及训练标签何时可用,都需要检查;必要时在训练和验证之间留出间隔,避免重叠窗口引入未来信息。
03 / 先划分,再学习预处理规则
scikit-learn 官方文档提醒:不要让留出的评估数据参与拟合预处理步骤。例如,先用全部有标签数据选择最相关的特征,再划分训练和验证,已让验证答案影响了模型输入。
- 固定划分与评价方式
记录哪些样本用于训练、哪些用于验证,以及指标的输入和计算方法。指标应与任务目标一致,不能只比较名字相近的数字。
- 仅在当前训练部分拟合预处理
例如学习缺失值填充统计量、标准化参数或特征选择规则。不是在训练与验证合并后再拟合。
- 用同一规则转换验证部分
验证数据使用训练时学到的转换,不在验证集上重新 fit。模型训练后,再用验证标签评估预测结果。
- 交叉验证时,每折重新学习
预处理应放在每折的训练流程中。合适的 Pipeline 有助于避免预处理跨折泄漏,但不能替你判断特征是否包含未来信息。
目标编码还涉及标签使用范围:验证折的编码不能利用该折标签;训练部分通常也需合适的折外编码或其他防泄漏方案。仅把列命名为“编码特征”,不代表问题已经解决。
04 / 分数异常好,先排查这几件事
- 预测时才会产生的字段:例如用事后结算结果预测事前风险。回到真实预测时间点,逐列确认何时能拿到它。
- 重复或近重复样本:检查相同对象、同源切片或同一事件是否进入两侧。是否需要隔离,取决于要模拟的场景。
- 全数据特征筛选:包括利用全部标签做相关性筛选、调参数或构造统计特征,再报告留出分数。
- 反复围绕同一验证集优化:即使没有直接把标签输入训练,也可能逐渐迎合这份验证集。记录尝试次数与选择过程,数据允许时保留独立的最终检查集。
验证泄漏与违反比赛规则不是同一个概念。一个做法即使未被规则明文禁止,也可能让本地评估过于乐观;反过来,使用外部数据是否允许,需要查具体规则,不能单靠“没有泄漏”判断。
不要因为一次涨分就确信某个改动有效。先固定可比较的划分和评价条件,再观察不同折或重复实验中的变化;如果数据量不足,应承认不确定性,而不是给出固定的“涨多少就可靠”标准。
05 / 开始实验前,填一张验证设计卡
- 预测对象与时间点:[谁 / 什么,在哪个时刻预测]
- 预测时可用信息:[允许使用的字段与历史窗口]
- 样本依赖:[同一用户、设备、地点、事件、时间等]
- 划分方法与理由:[为什么它能模拟目标场景]
- 隔离核查:[组是否重叠,时间和标签窗口是否越界]
- 预处理范围:[哪些步骤只在训练部分拟合]
- 指标与记录:[指标计算方法、划分版本、基线结果]
- 已知局限:[分布变化、小样本、反复调试等]
这张卡可以放进实验记录或项目 README。它的价值是让每次比较有据可查,帮助解释结果为什么可信、又在哪些条件下可能失效。
参考资料
2026 年 10 月 7 日核对。患者示例为假设情境;对照表与设计卡为编辑建议,不代表某场比赛已经验证过的最优方案。
- scikit-learn:Data leakage
先划分、避免在测试部分拟合预处理,以及 Pipeline 的作用。 - scikit-learn:Group K-Fold
分组隔离与非独立样本。 - scikit-learn:Stratified K-Fold
分层抽样及其局限。 - scikit-learn:Time Series Split
时间依赖与按顺序评估。