刚开始做模型的人常常卡在一件事上:数据切了三份,却说不清每份到底管什么。调参调完再用测试集挑模型,分数好看但上线就崩;或者干脆只切两份,验证和测试混着用。这篇不重讲「为什么要切」,只把四个数据集的分工、切分顺序、以及容易踩的坑摆成一张对照表,让你下次动手前先想清楚每一步该看哪份数据。
刚上手做模型的人常卡在同一个地方:数据切成了几份,但每份到底管什么说不清楚。于是出现两种典型翻车——调完参顺手用测试集挑模型,本地分数好看,上线就崩;或者干脆只切两份,验证和测试混着用,等于没有验收标准。
这篇不重讲「为什么要切数据」,那些概念资料到处都是。下面只把四个数据集的分工、切分顺序、泄漏排查和复用规则摆成一张对照表,让你下次动手前先想清楚每一步该看哪份数据,以及什么情况下这套常规做法不适用。
四个数据集各管一段:先把分工对号入座
四个名字里最容易混的是验证和测试。记住一句话:验证集是你反复看的,测试集是你只敢看一次的。一旦你在测试集上做了选择,它就从「验收标准」降级成了「又一个验证集」。
| 数据集 | 模型是否直接学它 | 你用它做什么 | 看几次 |
|---|---|---|---|
| 训练集 | 是,权重直接在它上面更新 | 让模型把参数学出来 | 反复用,每轮都过 |
| 验证集 | 否 | 挑超参、迭代轮数、特征组合、模型选型 | 反复看,但要记录次数 |
| 测试集 | 否 | 方案定型后做最终验收 | 原则上一次 |
| 评估集 | 否 | 上线后持续观测分布漂移与回归 | 长期周期性看 |
- 训练集上的分数只说明「背得熟不熟」,不能当效果结论,别拿它写汇报
- 验证集负责所有需要你做选择的决策,选完就固化方案
- 测试集在方案冻结后才动,它的作用是估计「没见过的新数据上大概什么样」
- 评估集不是给你反复调参用的,它是上线后盯着数据变化的观测池
切分顺序与比例:先想清楚哪一步会泄漏
顺序比比例更重要。标准做法是先留出测试集并锁住,再从剩下的数据里切验证集,最后剩下的才是训练集。反过来先切训练集,很容易让测试集混进同源样本,尤其是同一用户、同一文档产生的多条记录。
- 第一步:先冻结测试集从全量数据里划出测试集后就别再碰它,连看一眼分布都要谨慎。建议单独存一个只读文件或独立目录,避免误用。
- 第二步:从剩余数据切验证集验证集要留够样本量才有统计意义。数据少时别按固定比例硬切,宁可多留一点验证集,哪怕训练集小一些。
- 第三步:剩下的做训练集训练集是唯一允许模型直接更新权重的部分。如果训练集太小导致欠拟合,优先考虑增加数据或换更简单的模型,而不是去动测试集。
- 第四步:按组或按时间核对划分检查有没有同一来源的样本被拆到不同集合。时序任务按时间切,用户行为类任务按用户切,文档类任务按文档切。
比例本身没有标准答案,取决于数据量、类别均衡度和任务难度。数据量大时验证和测试可以按比例缩小;数据量小的时候,简单随机切分甚至不适用,这时要改用分层抽样或交叉验证。
泄漏排查清单:分数好得不正常时先查这几项
如果你在验证集上看到一个远超预期的分数,先别高兴,按下面的顺序排查一遍。泄漏是入门阶段最常见的「假高分」来源,而且它不会报错,只会悄悄骗你。
- 重复样本:同一行或近似重复的样本同时出现在训练和测试里,先去重,再做一遍近重复检测
- 特征穿越:某个特征在实际预测时点根本拿不到,或者它的取值是由标签反推出来的
- 预处理顺序:归一化、填充缺失值、编码这类操作如果在划分之前对全量数据做过,统计量已经把测试集信息带进训练
- 调参次数:反复用测试集挑模型,测试集就变成了验证集,验收结论不再干净
- 时间错位:时序数据被随机打乱,等于拿未来预测过去,这类模型的线下分数几乎必然虚高
关于不同模型和任务下泄漏的典型表现,站内资料库里有分门别的整理,具体到某个模型或场景可以去 /models 核对当时的条目,别凭印象判断。
复用与更新:什么时候可以重切、什么时候不行
划分不是一次做完就永远有效。数据会变、任务会变、线上分布也会变。但重切有代价,不能今天觉得分数不好就重切一次,那样等于变相用测试集调参。
| 触发条件 | 是否重切 | 原因 |
|---|---|---|
| 换了任务或标签定义 | 是 | 旧划分对应的标签口径已经作废 |
| 换了数据来源或采集方式 | 是 | 样本分布和同源关系都变了 |
| 只是模型效果不理想 | 否 | 重切等于用测试集挑模型,结论不再可信 |
| 线上分布明显漂移 | 部分重切 | 评估集要跟着更新,测试集视情况重建 |
同一份测试集不要长期反复使用,用多了它的参考价值会衰减。可以留一份不轻易动的评估集做长期对照,但评估集本身也要定期检查分布是否已经和线上真实流量偏离。类别极不均衡或样本极少时,交叉验证的结果不能当最终测试结论,它只能帮你做选择。
下一步如果你正在选模型或对比不同方案,别只盯一个分数。到站内的模型资料库和价格追踪页核对当时的数字与口径,再决定用哪套划分方式做验收。→常见问题
验证集和测试集到底差在哪,能不能只留一个?
能只留一个,但代价是你没法既做选择又做验收。验证集是给调参用的,看多少次都行;测试集只在方案定下来后看一次,用来估计真实效果。只用一份数据,挑完模型再报同一次分数,报出来的数字天然偏乐观。
四个数据集的比例该怎么定?
没有通用公式。数据量小的时候,验证和测试要占更大比例,否则评估波动太大看不出差异;数据量大时比例可以压小。要点是保证每份都够支撑结论,而不是凑某个固定百分比。具体到你的任务规模,可以到 用现成的换算思路核一遍。
模型在验证集上很好、测试集上变差,是什么问题?
通常是三种情况之一:一是调参时变相看过测试集,属于选择偏差;二是训练和测试之间存在分布差异或数据泄漏;三是模型过拟合了验证集那点样本。排查顺序是先做去重和特征穿越检查,再确认划分是不是按组或按时序切的。