技术问询:划分训练集与测试集前后删除重复行哪种更合理?
训练/测试集划分前后删除重复行的最佳实践
没有绝对的“正确”选择,核心得看你的重复行是怎么来的,以及你想让模型学到什么。下面分场景说清楚:
先删重复,再划分数据集
- 适用情况:重复行是数据采集/录入时的冗余(比如爬虫重复抓取同一条数据、手动输入时的重复提交),这些重复本身不带任何有用信息。
- 为什么这么做:
- 彻底避免训练集和测试集出现完全一样的样本——要是划分后才删,万一测试集里留着训练集见过的重复样本,模型评估出来的准确率会虚高,根本反映不了真实泛化能力。
- 减少数据量,节省训练时间,尤其大数据集里冗余重复多的时候。
- 注意:如果重复行是业务上的合理重复(比如同一个用户连续三次提交相同的订单,这种重复本身就是用户行为模式的一部分),绝对不能提前删,不然模型就学不到这种真实场景里的规律。
先划分,再分别删各自的重复行
- 适用情况:
- 你提到的「去除标签后特征相同」的情况——这种其实不算传统意义的重复(标签可能不一样),属于数据里的矛盾样本,得先划分再处理,避免训练集和测试集之间的信息干扰。
- 重复行是有业务意义的,你需要让模型学习这种重复模式(比如用户高频重复点击某类商品)。
- 为什么这么做:
- 严格保证训练集和测试集的独立性,不会因为提前删重复导致测试集的样本泄露到训练集里。
- 训练集里的重复行可以让模型更好拟合真实数据的分布,毕竟真实场景里本来就存在重复行为。
- 注意:如果划分前就有大量「特征+标签完全一致」的冗余重复,划分后再删训练集里的重复,可能会让模型因为见过太多相同样本而过拟合,这时候还是建议先清掉这类无意义重复再划分。
总结一下
- 先判断重复行的性质:是无意义的冗余垃圾,还是有业务价值的重复模式。
- 无意义冗余:先删重复再划分,杜绝数据泄露和虚高评估。
- 有意义重复:先划分,再分别清理训练集、测试集内部的冗余重复(别跨集删),保留训练集里的重复模式供模型学习。
- 遇到「特征相同但标签不同」的矛盾样本,别直接当重复删,先查数据是不是录错了,或者根据业务逻辑决定怎么处理(比如取众数标签、删除这类样本)。
内容的提问来源于stack exchange,提问作者Toqa Ghozlan
相关产品推荐
相关产品推荐

