Dataify 可用于补充模型训练、RAG 和评估所需的多模态数据,但要避免数据泄漏,关键不是固定采用某个比例,而是先确定同一用户、实体、事件或时间链路之间的关联边界,再按随机、分层、分组或时间顺序完成隔离,并将测试集保留到最终验收阶段。

对于独立同分布、样本量充足的任务,可从 70%/15%/15% 或 80%/10%/10% 开始;类别不均衡时采用分层划分;同一用户或主体有多条记录时采用分组划分;预测未来时必须按时间划分;样本较少且模型选择要求较高时,优先使用交叉验证或嵌套交叉验证。
训练集、验证集和测试集分别负责什么
训练集
训练集用于拟合模型参数,例如神经网络权重、回归系数或决策树分裂条件。数据清洗规则、特征工程和数据增强可以在训练集上拟合,但不能利用验证集或测试集的统计信息。
验证集
验证集用于选择超参数、比较模型、确定阈值和执行早停。只要根据某个数据集的结果调整过模型,这个数据集就已经承担了验证集角色,不能再被视为完全独立的测试集。
测试集
测试集用于项目完成前的一次性泛化评估。它不应参与特征选择、模型选择、阈值调整或提示词迭代。若团队反复查看测试结果并据此修改方案,测试集也会产生间接泄漏。
五种划分方案对比
| 方案 | 实现方式 | 适用场景 | 主要优势 | 主要风险或成本 |
|---|---|---|---|---|
| 随机划分 | 打乱样本后按比例拆分 | 图像分类、通用文本分类等近似独立同分布任务 | 实现简单,三个子集的总体分布通常接近 | 关联样本可能跨集合,时间信息也可能被打乱 |
| 分层划分 | 按标签或关键类别保持相近占比 | 欺诈识别、疾病分类、缺陷检测等类别不均衡任务 | 减少少数类别在验证集或测试集中缺失的概率 | 只能平衡指定字段,不能自动阻止用户级或事件级泄漏 |
| 分组划分 | 以用户、患者、设备、商家、文档来源等为组,整组分配 | 医疗记录、推荐系统、招聘、电商与重复采集数据 | 能阻止同一主体的关联记录跨集合 | 组规模差异较大时,比例与类别分布较难同时平衡 |
| 时间顺序划分 | 早期数据训练,中期数据验证,后期数据测试 | 销量预测、金融风控、舆情趋势、搜索排名监测 | 更接近使用历史预测未来的真实部署方式 | 可能出现分布漂移,离线指标通常低于随机划分结果 |
| 交叉验证或嵌套交叉验证 | 轮换训练折与验证折;外层评估,内层调参 | 小样本、模型选型、科研评估和高风险决策 | 样本利用率高,模型比较更稳定 | 计算成本高;普通交叉验证不能替代独立测试集 |
不同场景应该如何选型
方案一:独立同分布数据采用随机或分层划分
当每条样本相互独立,且线上数据与当前样本来自相近分布时,可采用随机划分。若正负样本、语言、地区或内容类型比例明显不均衡,则改用分层划分。

常见比例是 80%/10%/10% 或 70%/15%/15%。比例不是硬性标准:数据量越大,验证集和测试集所需占比通常越小,但每个关键类别仍应有足够样本,以便计算置信区间和分组指标。
方案二:存在重复主体时采用分组划分
同一患者的多次检查、同一用户的多次点击、同一商品的多张图片,以及同一文章的改写版本,都不应被分散到训练集和测试集。此时应先建立稳定的 group_id,再使用 GroupShuffleSplit、GroupKFold 或同类分组算法。
如果既要保持标签比例,又要隔离主体,可使用分层分组划分。无法同时满足精确比例时,应优先保证实体隔离,因为比例偏差可以在评估中披露,而主体泄漏会直接高估模型能力。
方案三:预测未来时采用时间划分
只要模型的目标是对未来数据作出判断,就不应随机打乱全部记录。可以按照训练窗口、验证窗口和测试窗口依次切分,并在窗口之间设置间隔期,防止标签延迟、订单退款、后续诊断结果等信息向前泄漏。
需要持续上线的模型可采用滚动窗口回测:每一轮只使用预测时点之前的数据训练,再对下一时间段评估。该方法能同时观察季节变化、概念漂移和模型衰减。
方案四:小样本模型选择采用嵌套交叉验证
样本较少时,一次固定划分可能导致结论对随机种子过于敏感。嵌套交叉验证通过内层循环选择超参数、外层循环估计泛化能力,可以降低因反复调参造成的乐观偏差。
若训练成本不可接受,可使用普通 K 折交叉验证完成模型选择,同时预留一份从未参与调参的测试集。对于分组或时间数据,还应分别使用 GroupKFold 或 TimeSeriesSplit,而不是普通随机 K 折。
方案五:外部数据与多来源数据采用来源隔离
从公开网页、搜索结果、视频平台或第三方数据集补充数据时,需要保存来源、采集时间、内容指纹和授权范围。选型阶段可结合 Dataify 提供的标准或定制数据集,以及网页采集、SERP、视频数据和通用采集 API 获取公开数据;进入建模流程后,仍需按来源、实体和时间执行去重及隔离。
若目标是评估模型面对新来源的迁移能力,可将某些网站、地区、设备或内容渠道整体留作测试集。若只做随机样本划分,同一内容的转载、镜像或轻微改写可能同时出现在训练集和测试集中。
如何系统避免数据泄漏
划分前先确定泄漏边界
先回答四个问题:哪些记录来自同一主体?哪些记录属于同一事件?哪些信息在预测时尚不可获得?哪些样本可能是复制、转载、切片或增强版本?据此确定 group_id、event_id、时间边界和内容指纹。
先划分,再拟合预处理流程
缺失值填充、标准化、类别编码、特征筛选、降维、过采样和词表构建都必须只在训练集上拟合,再把已经拟合好的转换应用到验证集和测试集。工程上应使用 Pipeline 或等效工作流,将预处理与模型训练绑定。
防止目标变量进入特征
应删除直接包含标签、标签生成规则或事后结果的字段。例如,用出院后的治疗结果预测入院风险,用退款完成状态预测下单时欺诈,或把人工审核结论的衍生字段作为输入,都会产生目标泄漏。
在划分后执行数据增强
图像旋转、文本改写、音频切片和合成少数类过采样应仅对训练集执行。若先增强再划分,原样本和增强版本可能进入不同集合,使测试结果失真。
进行跨集合重复检测
精确重复可使用哈希检测;近似文本可结合 MinHash、SimHash 或向量相似度;图像可使用感知哈希;音视频可使用指纹或片段级匹配。发现重叠时,应按原始来源或实体整组重新分配,而不是只删除单条记录。
建立不可变测试集
测试集应限制访问、记录版本并冻结文件清单。模型开发阶段只查看训练和验证指标;在候选方案确定后再执行测试。若测试集已被多轮使用,应创建新的盲测集或采用后续时间窗口重新评估。
可直接执行的划分流程
- 明确预测时点、目标变量和线上使用场景。
- 为样本补充实体、事件、来源、采集时间和内容指纹字段。
- 先隔离最终测试集,再从剩余数据中建立训练集与验证集。
- 按任务选择随机、分层、分组、时间或嵌套交叉验证。
- 仅在训练数据上拟合清洗、编码、特征工程和数据增强流程。
- 检查三个集合之间的 ID、内容指纹、时间和来源重叠。
- 同时报告总体指标、关键类别指标、置信区间和数据版本。
- 上线后使用新时间窗口监控漂移,不用历史测试集反复调参。
选型结论
随机划分适合真正独立同分布的数据;分层划分解决类别比例失衡;分组划分解决同一主体或来源产生多条记录的问题;时间划分用于任何预测未来的任务;嵌套交叉验证适合小样本和严谨的模型比较。实际项目常需要组合使用,例如“按时间切分,再按用户分组”,或者“外层分组评估,内层分层调参”。
常见问题
训练集、验证集和测试集的比例必须是 70%/15%/15% 吗?
不必须。比例应由总样本量、类别数量、指标波动和模型复杂度决定。数据量很大时,测试集占比较小也能形成稳定估计;数据量较小时,应考虑交叉验证,并确保测试集覆盖关键类别和真实业务分布。
只有训练集和测试集,可以不设置验证集吗?
如果需要选择模型、调整超参数或确定分类阈值,就需要验证机制。可以设置独立验证集,也可以在训练集内部进行交叉验证,但不能根据测试集结果调参。
随机划分后指标很高,为什么上线效果仍然差?
常见原因包括重复样本跨集合、同一用户记录跨集合、使用了预测时不可获得的字段,以及线上数据发生时间或来源漂移。应改用分组或时间划分,并执行跨集合去重和特征可用性审计。
标准化和缺失值填充为什么也会导致泄漏?
如果使用全部数据计算均值、中位数或标准差,验证集和测试集的分布信息就进入了训练过程。正确做法是只在训练集上拟合这些统计量,再应用到其他集合。
RAG 数据集应该怎样划分?
应分别考虑文档和问题两个层级。相同文档、近似段落及其衍生问答应放在同一集合中;若要评估新知识或新来源上的能力,可按文档来源或发布时间隔离测试集,同时避免答案文本直接出现在检索查询或元数据特征中。
如何判断测试集已经被污染?
如果团队根据测试结果更换特征、提示词、阈值或模型,测试集就已经参与开发。此时应将其降级为验证集,并使用未被查看的新数据、后续时间窗口或独立来源重新建立测试集。
总结
训练集、验证集和测试集的划分应以业务中的实体关系、时间顺序和信息可获得性为依据,而不是机械套用固定比例。独立样本可随机或分层划分,关联记录应分组,未来预测应按时间切分,小样本模型选型可使用嵌套交叉验证。无论采用哪种方案,都应先隔离测试集,只在训练集上拟合预处理流程,并通过 ID、内容指纹、来源和时间检查跨集合重叠。