线下可能很好,但是线上表现并不如意,对于这种线上线下一致性问题,是机器学习模型在上线之后经常遇到的问题。
围绕着这个问题,从多个角度来考虑该问题。
数据作为模型的输入,决定着模型的上限。一般一致性问题在数据的表现为:
针对同样的特征输入,离线和在线的处理方式不同,如input_schema配置没对齐、特征抽取不一致等,这是最容易出现的情况。
解决方法
一般是离线和在线共用同一套特征抽取框架,同时每次模型上线前先生成一批待校验的一致性样本,对比每条样本在离线打分和在线打分的gap,小于一定阈值(如1e-6)算一致性通过
user侧和item侧的特征一般以正排方式储存在key-value载体中,根据特征类型的不同更新时效性也可以分为:
对于天级更新、小时级更新和实时更新这些对时效性比较敏感的特征,如果出现了更新延迟,线上实验效果的衰减也是特别厉害的。
线上特征的获取由于来源和计算方式不同会有多种通路,比如文件、redis、rpc服务、透传等,每种通路一旦某个环节出现问题,特征就取不到或者取错,对线上预估的影响也是很大的
解决方法: 搭建特征监控体系
对每一个线上服务使用到的特征建立空值率、top取值分布、时效性、ctr/cvr分布等多个维度的监控也是很有必要的,可以及时发现出问题的特征并加以修复。
除了特征外另一个重要的排查方向就是离线训练结果是否存在问题,可以从三个方面进行排查。
上面根据离线情况提供了几种不置信的检测思路,那么线上也同样面对同样的置信问题。
线上指标统计时间窗口:不同指标达到可置信水平的统计窗口有较大区别,这跟业务和指标稳定性有很大关系,比如广告主价值指标的置信时间窗口往往要比收入/ecpm要长不少,因为天级波动比较大。而ctcvr指标则跟归因是否有延迟相关,一般要等好几个归因周期才能置信;
实验分桶是否随机:ABtest实验关键在于流量划分正交,流过每一层的流量必须重新的均匀划分。不正交结果必然不置信,可以通过划分AABB实验桶来判断流量划分是否出现问题。

线上serving检查
比如特征来源有的来自base模型,有的来自实验模型,导致数据分布,特征都不一致,对应的必然不行。