事件时间 · 延迟标签 · 至少一次投递 · 精确恢复

标签还没来,就把曝光当负例,会发生什么?

在线训练真正难的不是把循环写成常驻进程,而是让预测、曝光、标签和更新在不同时间到达时仍能对账。下面固定一份可复现日志,同时跑“即时负例”和“等待标签后回放”两条策略。

先改变数据与消息系统,再看训练语义怎么变

65%
12:00
4 小时
15%
15%
8 小时
事件 ID 去重
0.08
错误负例
重复更新
窗口内准确率 · Log loss

漂移检测信号

把事件时间和处理时间放回同一条轴

同一批日志,两种策略学到的不是同一个目标

窗口指标只使用截至 24:00 已成熟、且事件时间仍在回放窗口内的标签;未成熟标签不会被偷偷当作负例。
策略错误负例重复更新窗口准确率Log loss训练样本次
模型版本
日志游标
最近检查点
模型校验和

幂等写入要把去重状态一起提交

本实验用 event_id + trainer_run_id 识别同一训练语义下的重投。模型版本、日志游标和已处理 ID 必须在同一个提交点推进;只移动游标或只写模型,都会留下无法可靠重放的半状态。

精确恢复不只是重新加载权重

检查点同时保存模型参数、更新版本、日志游标和去重集合。恢复后从该游标重放确定性日志,最终校验和应与无故障运行一致;缺少任何一项,都可能重复或跳过更新。