2023年11月,北京一个内容资讯应用的排序团队把新模型推全量前,定了一条硬规矩:离线AUC提升不到0.003就不上线,NDCG@10提升不到0.5%不上线,线上首屏点击率置信区间下限必须高于旧模型。三条同时满足才放行。当年他们用这条规矩拦下了7个模型,其中3个离线AUC涨了0.008但线上掉了1.2%。
为什么离线涨线上跌?举一个具体案例:模型把“标题长度”学成了强特征,训练集里长标题文章多为深度稿,点击率高。但线上首屏卡片高度固定,长标题被截断成两行,用户看不清,点击率反而降。离线评估用的是完整标题文本,线上是截断后的渲染结果,特征和展示不一致。这个错误在离线报表里完全看不出来,只有做“渲染后特征”校验才能发现。
模型评估的指标要分三层看。第一层是排序质量:AUC、NDCG@10、MRR。第二层是业务指标:首屏点击率、人均阅读篇数、7日留存。第三层是系统指标:P99延迟、超时率、内存占用。三层里任何一层不达标都不推全量。常见错误是只看第一层,AUC从0.712涨到0.719就开香槟,结果P99延迟从180毫秒涨到340毫秒,首屏点击率掉0.9%。
做对比实验时,样本量要算清楚。假设基线点击率5%,想检测0.3个百分点的提升,显著性水平0.05、统计功效0.8,每组至少需要约4.2万用户。某次团队只切了8000人每组,跑了3天看到+0.4%就推全量,结果全量后效果回落到+0.05%,白折腾两周。样本不够时,置信区间宽到没有决策价值。
概率校准常被忽略。模型输出的分数是排序用的,不是概率。但运营拿分数当“购买概率”做补贴预算,把0.3分当成30%概率,实际校准后只有8%。团队后来加了保序回归做校准,把预测概率和真实频率的偏差从平均12个百分点压到2.1个百分点。校准后再做预算分配,补贴ROI从1.4升到2.2。
上线流程建议写成编号清单:1)离线三指标达标;2)渲染后特征一致性校验通过;3)小流量5%跑72小时,看P99延迟和超时率;4)扩到20%跑48小时,看业务指标置信区间;5)全量后保留旧模型影子流量7天,每天对比一次。这套流程把线上事故从每季度4次降到1次。
还有一个数据陷阱:评估集的时间切分。用随机切分,未来数据会泄漏到训练集,AUC虚高0.01-0.02。改成按时间切分,用前28天训练、第29-35天评估,AUC从0.731掉到0.714,这才是真实水平。时间切分后模型迭代速度慢了一点,但线上翻车次数少了。