贴吧式
离线 AUC 涨了 0.5%,上线后业务指标没动——这个 gap 到底该归因给谁?
帖子正文与楼层回复。
楼主 许星河
模型评估离线线上gap特征漂移A/B实验指标体系
背景
做了 15 年算法,从推荐到风控都带过团队。有一个场景我几乎每换一家公司都会再撞一次:算法同学兴冲冲地说"离线 AUC 从 0.782 涨到 0.787,显著",上线一周后业务方问"转化率怎么没动",算法同学回一句"可能是线上特征分布不一样",然后两边各说各话,最后谁也没拿到结论。
这个 gap 太常见了,常见到很多人觉得"这就是算法的宿命"。但我不这么看——gap 不是宿命,是评估体系没把"离线指标 → 线上效果"这条因果链拆清楚。
常见的几种归因(也是常见的分歧)
- 归因给"数据不一致":训练集和线上 serving 的特征分布不同(training-serving skew)。有人觉得"加个特征监控就完事",也有人觉得"分布漂移是常态,你不可能对齐"。
- 归因给"指标选错了":AUC 衡量的是排序能力,但业务要的是 top-K 的绝对收益。AUC 涨了但 top-1% 的排序没变,业务自然无感。有人觉得该换 NDCG@K,有人觉得该直接盯线上 CTR/CVR。
- 归因给"样本量太小":线上实验跑了 7 天,样本量不够检测 0.5pp 的提升。有人觉得"那就别上线了",有人觉得"7 天已经是极限了,再等就是浪费机会"。
- 归因给"模型没学到真东西":离线涨的那 0.5% 其实是过拟合到训练集里的噪声,线上根本不存在。有人觉得"该加大正则化",有人觉得"该换评估协议(比如用时间切分而非随机切分)"。
- 归因给"系统链路损耗":模型打分对了,但下游的排序/过滤/兜底逻辑把效果吃掉了。算法团队管不到,工程团队觉得"模型分没变"。
我的倾向
我倾向于把问题拆成三层,而不是混在一起讨论:
- 第一层:评估协议层。离线评估的切分方式(随机 vs 时间 vs 用户)决定了 AUC 的可信度。如果训练/验证是按用户切分,但线上是"新用户",那 0.5% 的涨幅可能根本不可迁移。这一层的问题,上线前就能发现,不需要等线上实验。
- 第二层:指标映射层。AUC → NDCG@K → 业务指标,每一层映射都有"衰减系数"。如果你能离线算出 top-100 的排序变化(而不只是全局 AUC),就能在上线前预估业务影响的上界。
- 第三层:实验设计层。线上 A/B 的样本量、实验时长、分流方式,决定了你能不能"检测出"那个预期中的小提升。如果预期 lift 是 0.3pp,但你只有 4 万 UV/组,那检测不出来是正常的,不是模型没用。
我的核心观点:gap 的 80% 出在第一层和第二层——也就是"你用来判断'模型变好了'的那个指标,和业务方用来判断'系统变好了'的那个指标,之间缺一个可量化的桥梁"。把这座桥建好(哪怕只是一个粗粒度的映射公式),比反复争论"到底是模型问题还是工程问题"有用得多。
想听大家聊聊
- 你遇到过"离线涨、线上不动"的情况吗?最终归因给了哪一层?
- 你们团队有没有做过"离线 top-K 排序变化 → 线上预期 lift"的映射?怎么做的?
- 如果只能加一个离线指标来预判线上效果,你会加哪个?
- 你的系统里,"模型分"到"最终展示"之间有几层干预?每层对最终效果的影响你量化过吗?
欢迎带具体数字来聊(AUC 变了多少、top-K 变了多少、线上 lift 预期多少),越具体讨论越有营养。
赞 0 · 收藏 0 · 楼层 0
楼层
还没有人回复。