1. 坚守时间顺序:划分策略的基石
在电商场景下,坚决不能使用未来数据预测过去。因此,所有划分都必须基于时间戳。
-
全局固定时间点划分
这是最常用且稳妥的方法,旨在模拟模型在线上“当前”预测“未来”的真实场景。
- 训练集:选择一个固定的过去时间段,例如过去30至90天的用户交互数据(点击、浏览、加购、购买等)。这个时间长度取决于业务的数据密度和用户兴趣的变化速度。
- 验证集:紧挨着训练集结束时间点之后的一小段时间,例如3到7天。它主要用于超参数调优和早期模型选择,其数据必须是训练集时间点之后“未来”的数据。
- 测试集:在验证集之后,最近1到3天的数据。它用于模拟上线前的最终测试,提供最接近线上表现的无偏估计。测试集在整个模型开发周期内只能使用一次,以确保评估的公正性。
如果业务有强周期性(如周末效应、大促周期),确保测试集覆盖一个完整的周期(如一整周)能获得更全面的评估。
-
滑动窗口划分
为了更稳健地评估模型性能和稳定性,可以采用滑动窗口进行多次“训练-验证-测试”的循环。例如:
-
第一轮:用第1-28天训练,第29天测试。
-
第二轮:用第2-29天训练,第30天测试。
-
这种方法能帮助你观察模型表现是否受特定事件(如大促)的过度影响,并判断模型性能随时间衰减的速度,为线上模型的更新频率提供决策依据。
2. 电商场景的特殊处理技巧
除了时间划分,还需针对电商数据的特点进行精细处理。
-
应对冷启动用户
测试集中常包含训练集里从未出现的新用户。为了更好地评估模型在不同场景下的能力,建议将测试集进一步拆分:
- 老用户测试集:评估模型在拥有丰富历史行为的用户上的个性化推荐精度,常用NDCG、Recall等指标。
- 新用户测试集:评估模型的冷启动兜底能力,关注点击率、转化率、留存率等,看模型能否通过热门商品、分类探索等方式留住新用户。
-
数据清洗与负样本构建
- 过滤噪声:电商数据中存在爬虫或“羊毛党”等异常行为。划分前,通常需要过滤掉在极短时间内产生海量交互的异常用户。一个常见做法是保留交互次数在一定范围内的用户(如5到500次)进行评估。
- 负采样:用户未交互的商品远多于交互过的,直接学习会导致样本极度不平衡。因此,需要在训练集中进行负采样,即从用户未交互的商品中随机选取一部分作为负例。关键点:负样本必须来自用户在那个时间点可接触到但未点击的商品,且绝不能包含该用户在未来会交互的商品,否则会造成数据泄露。
3. 严防“数据泄露”:最重要的原则
在划分过程中,务必警惕以下导致模型“作弊”的情况:
- 特征穿越:所有特征(如用户历史平均点击价、近期购买次数)的计算必须严格基于测试集时间点之前的数据。例如,预测“今天”的点击率,不能使用包含“今天”及之后的数据来计算特征。
- 负采样泄露:负采样时,必须确保采样的商品池不包含用户在未来会与之产生交互的商品。这要求采样逻辑有严格的时序约束。
核心要点总结
一个可靠的电商推荐系统数据集划分策略,核心在于严格遵循时间顺序,采用类似滚动时间窗口的思维进行划分,并可能通过滑动窗口评估模型的稳健性。在此基础上,通过拆分评估冷启动用户、精细清洗数据和合规的负采样等手段应对电商数据的特殊性。最终,时刻警惕特征穿越和负采样泄露,确保模型评估结果真实有效。