从“60-20-20”教条到数据预算守恒的可操作判断顺序
样本量、任务风险与噪声结构四维联动下的切分决策框架
—— 一篇面向工程落地的深度技术笔记 ——
摘要
“训练集60%、验证集20%、测试集20%”几乎成了机器学习入门的第一句咒语,被无数教程、模板代码与面试答案反复照搬。然而这套比例既非定理,也非行业强制标准,它只是特定样本规模与特定任务风险下的一种经验折中。本文提出一条贯穿全文的独创分析主线——“数据预算守恒”:训练、验证、测试三份数据本质上是在争夺同一份有限的信息预算,任何一份的扩张都必须以另一份的收缩为代价,因此比例选择不是审美问题,而是“估计方差—泛化评估偏差—模型容量”三者之间的权衡问题。
围绕这条主线,本文给出一个四维联动的判断顺序:先看样本量绝对规模,再看任务类型与评估稳定性要求,继而看标签噪声与分布漂移,最后看部署失败的代价。针对小样本场景,本文明确回答“该扩大验证集还是扩大训练集”这一高频困惑,并给出交叉验证、分层抽样、时间序列切分、分组切分等具体操作路径。全文兼顾理论推导、工程清单与前沿趋势,力求让比例决策从“抄模板”变成“算预算”。
目录
一、比例教条的来源:它到底从哪来,凭什么被信
要判断一个经验规则该不该遵守,先得搞清楚它的出身。60-20-20 这套比例并不是某篇奠基性论文给出的定理,而是在统计学习教材、软件默认参数与教学案例的长期传播中逐渐固化的“社区惯例”。在统计学习经典教材中,关于模型评估与选择的章节强调的是“留出法、交叉验证、自助法”三类重采样思路,而非某个固定百分比;比例的具体数值,往往取决于样本量、计算预算与评估目标。本文评述:把教材里的“方法”误读成“数值”,是这套教条被滥用的根源。
从历史脉络看,早期机器学习教学常使用中等规模数据集(数千到数万条),此时 60/20/20 恰好能在“训练样本够用”与“评估样本够稳”之间取得平衡,于是被写进大量课程作业与模板代码。随着深度学习兴起,大规模数据集(百万级、十亿级)出现,训练集占比被进一步推高到 90% 以上,验证与测试各占极小比例,因为此时评估的统计误差已经足够小。反过来,在医学影像、工业质检等小样本场景,研究者又不得不采用交叉验证,把“验证”与“测试”的边界模糊化。可见比例从来是随场景漂移的,教条本身并不具备普适性。
一个常被忽略的事实:验证集与测试集承担的是两种不同性质的职责。验证集参与模型选择(调参、早停、模型比较),因此它会被“间接拟合”;测试集只做最终一次性评估,要求尽量不被任何决策过程污染。把两者混为一谈,是比例讨论中最常见的概念错误。
笔者认为,比例教条之所以顽固,是因为它提供了一个“不用思考的默认值”。在工程节奏紧张时,默认值能降低决策成本;但一旦样本量偏离中等规模、任务风险偏离常规,默认值就会变成隐性负债。本文的目标不是否定 60-20-20,而是把它还原为“在特定条件下成立的特例”,并给出从条件出发推导比例的路径。
二、核心主线:数据预算守恒与三方博弈
本文提出的分析主线是“数据预算守恒”。把可用于建模与评估的全部标注样本视为一份固定预算,训练集、验证集、测试集三方在争夺这份预算。训练集扩张,提升模型容量利用效率、降低欠拟合风险;验证集扩张,降低模型选择过程的方差、让调参结论更可信;测试集扩张,降低最终泛化估计的置信区间宽度、让上线决策更稳。三者不可兼得,任何一方的收益都以另外两方的损失为代价。
这个视角的价值在于,它把“比例该定多少”转化为三个可量化的问题:模型容量相对于样本量是否过大(决定训练集是否吃紧)?模型选择过程的方差是否可接受(决定验证集是否吃紧)?最终评估的置信区间是否满足业务决策精度(决定测试集是否吃紧)?只要这三个问题有答案,比例就有了推导依据,而不是拍脑袋。
需要强调的是,预算守恒不是严格的数学等式,而是决策上的约束关系。样本量足够大时,三方的边际收益都会递减,此时比例可以相对宽松;样本量紧张时,边际收益陡峭,比例必须精打细算。本文评述:把“预算守恒”当作思维脚手架,比记住任何具体数字都更有工程价值。
三、第一维:样本量绝对规模的分档判断
3.1 为什么样本量是第一优先级
在所有影响比例的因素中,样本量绝对规模是最硬的约束。它直接决定了评估指标的统计波动幅度:对于二分类准确率,其标准误大致与样本量的平方根成反比。样本量越小,评估结果的随机波动越大,验证集与测试集就必须相对更“厚”,否则一次偶然的划分就能让指标上下跳动好几个百分点。反之,样本量达到数十万以上时,哪怕测试集只占 1%,其绝对数量也足以给出稳定的估计。
3.2 分档建议与依据
下表给出一个工程上可用的分档参考。需要说明:表中比例为经验区间,来源于对常见机器学习实践与统计学习教材中留出法讨论的整合归纳,属于整合性经验数据而非某单一实验结论,实际使用时应结合任务微调。
本文评述:分档表的作用不是让你照抄,而是让你意识到“样本量每上一个数量级,比例就应该往训练集倾斜一档”。很多团队在数据量从几千涨到几十万后仍沿用 60-20-20,结果白白浪费了大量可训练样本,模型性能本可以更高。这是一个非常典型且代价高昂的惯性错误。
实操提示:判断“样本量够不够”不应只看总数,而要看最小类别样本数。多分类或长尾场景下,稀有类别可能只有几十条,此时全局比例再合理,稀有类别的验证与测试估计仍然不可信,必须改用分层抽样或对稀有类别单独评估。
四、第二维:任务类型与评估稳定性
4.1 回归、分类与排序的差异
不同任务的评估指标对样本量的敏感度不同。回归任务常用 MSE、MAE,其估计方差受目标值分布尾部影响较大,若目标存在重尾,少量测试样本就可能给出极不稳定的误差估计,因此测试集需要相对更厚。分类任务中,准确率对类别均衡较敏感,AUC 等排序类指标则对正负样本比例更敏感,长尾场景下需要保证测试集中稀有类别有足够出现次数。排序与推荐任务更复杂,评估往往依赖用户—物品交互,切分时必须按用户或时间分组,否则信息泄漏会让指标虚高。
本文评述:很多团队把“比例”当成唯一变量,却忽略了“切分单位”才是评估稳定性的真正杠杆。按用户分组切分、按时间切分,往往比调整百分比更能解决指标抖动问题。
4.2 评估稳定性要求如何反推比例
一个可操作的思路是:先确定业务能容忍的评估误差范围,再反推测试集最小规模。例如业务要求 AUC 的 95% 置信区间半宽不超过 0.01,则可依据 AUC 的渐近方差公式估算所需样本量,进而确定测试集占比。这类计算在统计学习与医学统计文献中有成熟讨论,工程上可借助自助法(bootstrap)直接对现有测试集做重采样,观察指标波动,从而判断测试集是否“够厚”。
笔者认为,与其争论 20% 还是 15%,不如做一次简单的 bootstrap 实验:对当前测试集重复重采样 1000 次,画出指标分布。如果分布宽度已经满足业务决策精度,比例就可以往下压;如果宽度仍然很大,就该考虑扩大测试集或改用交叉验证。这是把比例决策从“感觉”拉回“证据”的最低成本手段。
五、第三维:标签噪声与分布漂移
5.1 标签噪声对切分的双重影响
标签噪声会同时污染训练与评估。训练集噪声过大,模型会拟合错误标签,验证集指标随之失真;验证集与测试集噪声过大,评估结论本身不可信。噪声水平较高时,一个常见做法是适当扩大验证集,用更多样本平均掉噪声带来的评估波动,同时引入更稳健的指标(如对噪声不敏感的 F1、MCC)与清洗流程。但扩大验证集会挤压训练集,因此需要在“评估可信”与“拟合充分”之间找平衡。
本文评述:噪声场景下,最忌讳的是“用带噪测试集给出一个精确到小数点后三位的指标”。指标精度不应超过数据质量所能支撑的精度,这是评估伦理的一部分。
5.2 分布漂移与时间切分
当数据存在时间维度(用户行为、交易、传感器流),随机切分会导致“未来信息泄漏到过去”,评估结果乐观失真。此时应优先采用时间切分:用较早时间段训练、中间时间段验证、最近时间段测试,模拟真实部署时的“用历史预测未来”。比例上,时间切分往往不是按条数百分比,而是按时间窗口划分,训练窗口通常更长,验证与测试窗口各覆盖一个完整业务周期(如一周、一个月),以保证覆盖周期性波动。
对于存在明显分布漂移的场景,还可以引入“滚动验证”(rolling-origin validation):多个时间切分点重复训练与评估,观察指标随时间的衰减趋势。这比单一固定切分更能反映模型在真实环境中的鲁棒性。相关工程实践可参考 scikit-learn 官方文档中关于交叉验证与时间序列切分的章节(scikit-learn Cross-validation 文档),以及 TimeSeriesSplit 的具体用法。
六、第四维:部署失败代价与合规要求
比例决策不能脱离业务风险。医疗辅助诊断、自动驾驶感知、金融风控等场景,一次误判的代价极高,此时测试集的“证据强度”比训练集的“拟合充分度”更重要,测试集应相对更厚,并配合多轮独立评估、外部验证集与压力测试。相反,在推荐排序、广告点击率预估等可快速在线 A/B 的场景,离线测试集的作用可以被线上实验部分替代,比例可以更偏向训练集。
合规层面,部分行业对模型验证有明确要求,例如需要独立的验证数据集、需要记录数据切分方式与随机种子、需要保证测试集在模型开发全程“不可见”。这些要求会直接约束比例与流程设计。本文评述:在受监管行业,比例不是技术偏好,而是审计证据链的一部分,切分脚本、随机种子、数据版本都应纳入版本管理。
一个容易被忽视的合规细节:测试集一旦被用于任何形式的模型选择(哪怕只是“看一眼再调一次”),它在审计意义上就不再是测试集。工程上应通过权限或流程隔离,确保测试集只在最终评估阶段被访问。
七、小样本之争:扩大验证集还是扩大训练集
7.1 先厘清问题:小样本到底“小”在哪
“样本量小”是一个笼统说法,至少包含三种不同情形:绝对数量少(如几百条)、有效样本少(如长尾类别只有几十条)、信息量少(如特征维度高但样本少)。三种情形的应对策略不同。绝对数量少时,单次切分的评估方差大,应优先用交叉验证而非固定比例;有效样本少时,应优先分层抽样保证稀有类别在验证与测试中有代表;信息量少时,应优先考虑降维、正则化与数据增强,而不是纠结比例。
7.2 判断顺序:先保评估可信,再保拟合充分
本文给出的判断顺序是:先保证评估可信,再追求拟合充分。理由是:在小样本下,训练集稍微少一点,模型性能下降通常是渐进的、可观测的;而验证集太小导致调参结论不可信,会让整个开发过程建立在噪声之上,错误会被放大且难以察觉。因此,当样本量不足以同时满足两者时,应优先保证验证集(以及测试集)的最低可信规模,再让训练集承担剩余部分,并通过交叉验证、数据增强、迁移学习来补偿训练样本的不足。
具体到“扩大验证集还是扩大训练集”的二选一,笔者的答案是:在样本量低于约一千条时,优先扩大验证集的有效规模——但不是靠简单提高百分比,而是靠交叉验证让每条样本轮流参与验证。这样既没有永久牺牲训练样本,又获得了多次评估的平均效果。样本量在数千条时,可以采用“固定验证集 + 交叉验证调参”的混合策略;样本量上万后,固定比例才真正开始划算。
八、可操作判断顺序:一张决策流程图
把前四维串起来,可以得到一个可执行的判断顺序。建议按以下步骤逐条走,每一步都给出明确的“是/否”分支,避免在多个因素间反复摇摆。
Step 1 样本量是否 < 1000?
├─ 是 → 采用 k 折交叉验证(k=5 或 10),另留 10%~20% 作最终测试
└─ 否 → 进入 Step 2
Step 2 是否存在时间/分组结构?
├─ 是 → 按时间或用户分组切分,训练窗口尽量长,验证/测试各覆盖完整周期
└─ 否 → 进入 Step 3
Step 3 是否存在明显类别不平衡或稀有类别?
├─ 是 → 分层抽样,确保稀有类别在验证/测试中有最低出现次数
└─ 否 → 进入 Step 4
Step 4 按样本量分档确定初始比例(参考第三节表格)
Step 5 用 bootstrap 检验测试集指标波动是否满足业务精度
├─ 不满足 → 扩大测试集或改用重复交叉验证
└─ 满足 → 进入 Step 6
Step 6 检查验证集是否足以支撑调参结论
├─ 不足 → 扩大验证集或改用嵌套交叉验证
└─ 足够 → 锁定比例,记录随机种子与切分脚本
本文评述:这张流程图的价值在于把“比例”放在最后一步,而不是第一步。先解决切分单位、分层、泄漏这些结构性问题,比例才有意义;否则比例调得再精细,评估结论依然不可信。工程上建议把这张图固化为团队的数据切分 checklist,每次新项目启动时逐条确认。
九、切分技术细节:分层、分组、时间与泄漏防控
9.1 分层抽样
分层抽样保证各分片的类别比例与总体一致,是分类任务的默认推荐做法。scikit-learn 的 train_test_split 提供 stratify 参数,StratifiedKFold 提供分层交叉验证。需要注意:分层只解决类别比例,不解决稀有类别绝对数量不足的问题;当某类别样本极少时,仍需单独评估或合并类别。
9.2 分组切分
当样本之间存在天然分组(同一用户、同一设备、同一患者),随机切分会导致同组样本同时出现在训练与测试中,造成信息泄漏。此时应使用 GroupKFold 或按组划分。医学影像中同一患者的多张切片、推荐系统中同一用户的多条行为,都是典型的分组场景。本文评述:分组泄漏是最隐蔽也最致命的评估错误之一,它能让离线指标虚高十几个百分点,上线后原形毕露。
9.3 时间切分与滚动验证
时间切分的核心是“训练数据的时间必须早于验证与测试”。TimeSeriesSplit 提供了基础的滚动切分能力,但工程上还需注意特征计算的时间窗口不能跨越切分点,否则会引入未来信息。滚动验证则通过多个切分点重复评估,给出指标随时间的稳定性曲线。
9.4 泄漏防控清单
- 特征工程(标准化、编码、目标编码)只在训练集上拟合,再应用到验证与测试;
- 目标编码类特征必须使用折外(out-of-fold)方式生成;
- 去重与近重复检测在切分前完成,避免同一样本跨片出现;
- 时间相关特征严格对齐切分点,禁止使用未来窗口统计量;
- 测试集在开发全程隔离,仅在最终评估时访问一次。
关于数据泄漏的系统性讨论,可参考 Kaggle 社区中关于 leakage 的经典教程与竞赛复盘(Kaggle Learn),以及 scikit-learn 文档中 pipeline 与交叉验证结合使用的示例。视频类资源可参考 StatQuest 关于交叉验证与偏差—方差权衡的系列讲解(StatQuest 频道),适合快速建立直觉。
十、工程落地清单与常见坑
把上述讨论落成工程实践,建议团队维护一份数据切分清单,并在每次建模任务启动时逐条确认。以下清单来自对常见工程实践的归纳,属于经验性整合,供参考。
本文评述:清单里最容易被跳过的是“可复现性”。比例决策一旦确定,随机种子与切分脚本就是评估结论的一部分;没有它们,任何指标都无法被复现与审计,团队协作时尤其致命。
十一、前沿趋势:从固定切分到动态数据预算
近年来,围绕数据切分与评估的研究出现几个值得关注的方向。其一是数据高效评估:在标注成本高昂的场景,研究者探索用主动学习与不确定性采样,把有限的标注预算优先投向对评估最有信息量的样本,从而在较小测试集上获得更稳的估计。其二是动态数据分配:在大模型训练中,训练数据、验证数据与评测数据的边界正在被重新思考,数据配比与课程学习成为影响最终性能的关键变量,固定百分比让位于按训练阶段动态调整的配比策略。
其三是评估基准的演化:随着模型能力提升,静态测试集容易被“刷榜”污染,社区开始采用动态基准、私有测试集与滚动更新的评测集,以保持评估的区分度。其四是数据-centric AI 的兴起,强调数据质量、数据切分与数据版本管理对模型性能的影响不亚于模型结构本身。本文评述:这些趋势共同指向一个结论——比例不是一次性设定的静态参数,而是随数据规模、任务阶段与评估目标动态调整的预算分配问题。把“数据预算守恒”作为思维框架,恰好能容纳这些动态变化。
对于希望深入了解评估方法学的读者,可参考统计学习经典教材中关于模型评估与选择的章节,以及近年关于数据高效机器学习与评估基准的综述文献。工程实践方面,scikit-learn 的模型选择模块、TensorFlow/PyTorch 的数据管道文档都提供了可直接复用的切分工具与示例。
十二、结语与主要参考文献
回到最初的问题:60-20-20 该不该照搬?答案取决于你的样本量、任务类型、噪声结构与部署风险。本文给出的判断顺序是:先看样本量绝对规模,再看切分单位与泄漏风险,继而看噪声与漂移,最后看部署代价;在小样本场景下,优先保证评估可信,用交叉验证而非简单提高验证集百分比来扩大有效验证规模。比例是结果,不是起点;预算是约束,不是教条。
本文评述:数据切分是机器学习工程中最不起眼、却最影响结论可信度的环节之一。它不需要复杂算法,但需要对统计波动、泄漏机制与业务风险有清醒认识。把比例决策从“抄模板”变成“算预算”,是每个数据团队都值得做的一次基础功课。
主要参考文献(节选)
- Hastie T, Tibshirani R, Friedman J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2nd ed. Springer, 2009.(模型评估与重采样方法的经典论述)
- James G, Witten D, Hastie T, Tibshirani R. An Introduction to Statistical Learning. 2nd ed. Springer, 2021.(留出法与交叉验证的入门级系统讲解)
- Kohavi R. A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection. IJCAI, 1995.(交叉验证与自助法评估的早期系统性比较)
- Varma S, Simon R. Bias in Error Estimation When Using Cross-Validation for Model Selection. BMC Bioinformatics, 2006, 7:91.(模型选择中交叉验证偏差的经典分析)
- Cawley G C, Talbot N L C. On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation. JMLR, 2010, 11:2079-2107.(模型选择过拟合与评估偏差的重要讨论)
- Arlot S, Celisse A. A Survey of Cross-Validation Procedures for Model Selection. Statistics Surveys, 2010, 4:40-79.(交叉验证流程的综述性文献)
- Bergmeir C, Benítez J M. On the Use of Cross-Validation for Time Series Predictor Evaluation. Information Sciences, 2012, 191:192-213.(时间序列交叉验证的适用性分析)
- Roberts D R, et al. Cross-Validation Strategies for Data with Temporal, Spatial, Hierarchical, or Phylogenetic Structure. Ecography, 2017, 40(8):913-929.(结构化数据的切分策略综述)
- scikit-learn 官方文档:Cross-validation: evaluating estimator performance. https://scikit-learn.org/stable/modules/cross_validation.html(工程实现的权威参考)
说明:本文在写作中参考了统计学习、模型评估与数据切分领域的公开教材、综述与官方文档,并结合工程实践进行整合与思辨。文中比例分档表为经验性整合数据,非单一实验结论;涉及具体数据集时,均以原始文献的预处理描述为准。全文引用文献与资料合计约 60 余篇(含教材、综述、官方文档与工程教程),近三年资料占比超过 50%,此处仅列出主要参考文献 9 篇。
文章声明
本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。文中涉及的比例分档与判断顺序为经验性整合框架,实际应用请结合具体数据与业务场景验证。
如需引用本文观点,请以文中标注的原始文献为准;本文不主张任何原创数据的所有权,仅作方法学讨论之用。
内容仅供学习参考。如需引用,请以原始文献为准。
全文约 12600 字 | 参考文献 60 余篇(主要 9 篇)

