2023年11月,某信息流团队遇到一次典型翻车:离线AUC从0.781升到0.801,线上人均阅读时长却从41分钟降到39.8分钟,降幅约3%。复盘耗时2周,定位到3个原因。
第一个原因:训练样本用了7天数据,但评估集用了同7天的随机切分,存在时间泄漏。特征里有“当日该文章总点击”这类未来信息,离线虚高。改成按时间切分(前5天训练、后2天评估)后,AUC回落到0.779,与线上趋势一致。
第二个原因:AUC是全局排序指标,但线上曝光集中在头部。把评估集按预估分分成10档,发现第1档(最高分)的NDCG@5反而下降0.04。头部样本只占8%,对AUC贡献小,却被线上放大。
第三个原因:负样本下采样比例从1:4改成1:2,离线指标涨了,但校准漂移。预估CTR均值从0.031变成0.047,排序不变但业务规则里的“CTR大于0.04才进候选池”被触发,导致候选池结构变化。
对比3种评估方案。方案A:只算AUC,成本低,但对头部不敏感。方案B:AUC+分组NDCG+校准误差(预测均值与真实均值之差),三项都看,误判率最低。方案C:只看GAUC(按用户分组),适合用户内排序,但对跨用户场景失真。实际建议B,多花约20分钟离线计算。
概率上,AUC可理解为随机取一个正样本和一个负样本,正样本分更高的概率。当正样本占比从4%降到2%,AUC的方差会明显变大。用2000个正样本和5万个负样本估算,AUC的标准误约0.008,所以涨0.02才勉强显著,涨0.005基本是噪声。
一个具体的检查清单:1)确认特征时间戳不晚于样本时间;2)检查负样本采样比例与线上是否一致;3)看Top1%分数段的NDCG;4)算校准曲线,分10桶对比预测均值与真实均值;5)用最近3天数据做一次回测。5步走完约40分钟,能挡掉大部分假涨。
案例补充:某短视频团队把评估指标从单一AUC换成“AUC+时长加权NDCG+校准误差”后,2024年1月连续3次模型迭代上线,线上时长分别涨1.2%、0.8%、1.5%,没有再出现离线涨线上跌。代价是每次发版多1小时评估,但避免了至少2次全量回滚。