某电商推荐团队在2023年6月做了一次回溯:把排序模型从A版本切到B版本,线上点击率涨了3.2%,但7日复购率掉了1.8个百分点。排查两周后发现,B版本新增的"近1小时点击次数"特征在训练集里覆盖了92%的样本,在线上却只有61%的用户有值,缺失部分被填充为0,等于把"新用户"和"不活跃用户"混成了一类。
第一个陷阱是时间穿越。常见错误:用T日全天的行为统计去预测T日上午的点击。修正步骤:1) 给每条样本打上曝光时间戳;2) 统计窗口右边界设为曝光时间减1秒;3) 抽样2000条人工核对,确认没有用到未来数据。某内容平台按这三步重跑后,离线AUC从0.78降到0.74,但线上指标反而更稳。
第二个陷阱是特征覆盖率的静默衰减。做法很朴素:每天凌晨2点跑一次特征覆盖率报表,对覆盖率低于70%的特征标红,连续3天标红就下线。一个15人团队用这套规则,3个月里下线了11个特征,模型体积缩小约18%,推理耗时从45毫秒降到31毫秒。
第三个陷阱是把ID类特征当万能药。对比一下:用户ID embeddings在样本量5000万以上时确实能带来约2%的AUC提升;但在冷启动场景,新用户占比超过25%的渠道里,ID特征几乎不起作用,还会挤占泛化特征的权重。案例:某本地生活应用把城市ID和商户ID同时输入,结果跨城市迁移时排序分数整体偏移,后来改成城市ID只做分桶归一化才解决。
第四个陷阱是特征尺度不一致。价格区间从9.9元到8999元,直接喂进模型会让梯度被大数值主导。步骤:1) 对金额做log1p变换;2) 对计数类特征做分位数截断,比如把99分位以上压到99分位;3) 标准化后再拼接。某二手交易平台按此处理,训练损失曲线在2000步内就收敛,之前要8000步。
第五个陷阱是离线评估口径和线上不一致。离线常用全量样本算AUC,线上却只关心Top10位置的点击。修正做法:离线额外计算Top10的NDCG和位置偏差加权指标,和线上小流量实验对齐。一个20人算法组把这步加进发布checklist后,因指标误判导致的回滚从每月4次降到1次左右。
最后留一个自查清单:特征时间窗是否明确到秒、覆盖率报表是否每日更新、ID特征是否有冷启动开关、金额与计数是否做过变换、离线指标是否包含TopK口径。5项里缺2项以上,别急着上线。