周一上午9点,新上线的商品推荐位在4小时内曝光2.3万次,点击率只有0.7%,运营怀疑是算法坏了。先别急着改模型,先查数据常识:曝光日志是否去重、时间戳是否统一到秒、用户ID是否跨端打通。这三项任一缺失,排序结果都会像随机数。
用对比看更清楚。A版本用全量曝光做训练,B版本只保留曝光超过500毫秒的记录。同一批用户测试7天,B版本点击率提升12%,但人均停留下降8秒。说明清理数据不是越多越好,要明确业务目标:要点击还是要停留。
第1步,拉取近14天日志,按小时统计缺失率;第2步,抽查100条用户会话,看行为序列是否断档;第3步,核对商品类目字段是否有超过5%的空值;第4步,检查价格区间是否被错误归一化到0到1;第5步,对比训练集与线上特征分布的均值差;第6步,用固定种子复现排序前20名;第7步,记录每次改动前后的离线指标。常见错误是跳过第5步,直接调参。
案例:某本地生活场景,午高峰11:30到13:00的点击率是晚高峰的1.6倍,但转化率低0.9个百分点。若只用点击率做排序目标,会把大量低质补贴商品推到前排。把目标改成点击率乘以下单概率的加权分,7天后人均订单增加0.4单。
概率上要警惕小样本。一个商品曝光80次、点击8次,点击率10%;另一个曝光8000次、点击600次,点击率7.5%。前者置信区间很宽,直接排序会高估。用贝叶斯平滑或Wilson区间下界排序,能把前者的分数压到合理位置。阈值建议:曝光少于200次时,不单独进入主排序池。
模型评估别只看AUC。排序场景更关心前10个位置的命中率。离线用NDCG@10和召回率@20,线上用AB实验的点击率、转化率和人均时长。某次实验AUC从0.78升到0.81,但NDCG@10下降0.03,上线后点击率反而跌4%。原因是模型把中段商品排乱了。
最后给一张日常检查表:每天10点前看特征缺失率是否低于2%;每周一对比上周同日的同时段指标;每月重跑一次负采样比例。价格区间、地理位置、设备类型这三个维度最容易漂移,建议单独监控。
如果只能改一处,先把曝光日志的去重和用户行为序列补齐。数据常识不到位,排序模型越复杂,错误越隐蔽。