完整题目
在构建机器学习模型时,验证集的类别分布应如何设计?它应当与训练集、测试集保持怎样的关系?为什么?
先确定验证集要代表什么
验证集不是机械地复制训练集分布,而是用来选择模型、阈值和超参数,因此应尽量代表部署时要优化的目标分布。
- 如果线上样本近似独立同分布,可在按类别分层后随机切分,使训练、验证和测试的类别比例接近。
- 如果同一用户、设备、病例或文档会产生多条样本,应按组切分,避免同一实体跨集合造成泄漏。
- 如果任务存在时间演化,应按时间切分:用过去训练、较新的时间窗验证、更晚的时间窗测试。
- 如果要声明跨域泛化能力,可以有意让验证集或测试集来自新地区、新设备或新业务域。
三个集合的关系
训练集用于拟合参数;验证集用于方案选择;测试集只用于最后一次或受控次数的泛化声明。验证集可以与训练集不同分布,但必须贴合要优化的部署目标。测试集是否与验证集同分布取决于最终声明范围;二者同分布本身不是泄漏,只有把测试样本、标签或测试结果用于调参和方案选择才是测试污染。
类别不均衡时,不应只追求三个集合比例完全相同。先保证每个关键类别有足够的验证样本,再按业务代价选择 macro-F1、PR-AUC、召回率、校准或分组指标。切分后还要检查重复样本、时间穿越、实体交叉和预处理统计量泄漏;标准化、特征选择和重采样只能在训练折内拟合。
继续追问 · 3 个问题
- 如果业务场景存在明显的概念漂移(concept drift),验证集设计需要做什么调整?
- 类别极度不平衡时(如1:1000),分层采样具体怎么做,验证集指标看ACC还是F1?
- 实际项目中遇到过验证集和测试集指标差距很大的情况吗,如何排查原因?
换一种问法,检查是否真正理解
场景切入
假设现在训练数据与未来部署流量的类别比例不同。你会怎样设计验证集,使模型选择真正针对部署目标,而不是机械复制训练集?
层层追问
IID 场景怎样分层切分?……同一用户或文档跨集合有什么风险?……存在时间漂移时怎么切?……验证集与测试集同分布就是泄漏吗?
直球技术
请说明验证集类别分布的设计原则,以及它与训练集、测试集、部署分布的关系;覆盖随机分层、组切分、时间切分、域外评测和不均衡指标。