背景

在精排模型迭代时,经常会遇到在离线指标不一致的问题,这里根据过往经验总结下遇到的问题及原因。

离线GAUC和在线GAUC不一致

场景一:离线GAUC涨,在线GAUC降

模型主场效应

训练样本一般是曝光空间,而线上预估时打分空间比曝光集合要大几个数量级,模型在不一致的空间上泛化性多多少少会有些问题。在这部分未曝光样本空间里,有些候选会被高估进而得到曝光机会,这些曝光就会获得用户的反馈,进而进入训练集通过模型学习来修正。实验模型只有很少的流量,所以获得的反馈很少,而基线模型流量大,获得的反馈更多,所以实验模型一直打不过基线。

解决办法: 1)增大实验流量; 2)增大实验模型训练周期

这种情况经常发生在模型打分分布变化较大时,比如框架迁移、模型重大升级这类动作,因为打分分布变化大会导致曝光差异变大。

场景二:离线GAUC降,在线GAUC涨

打分靠前的曝光机会更多,更易获得用户反馈,所以模型在自身的流量上的评估结果可能会更好。

比如以下案例:

基线:A模型,在线90%流量。

实验:B模型,在线10%流量。

精排排序候选1000个,[I1, I2, ..., I1000],打分排序后吐出10个展示给用户。

A展示了[I1, I3, I4, I6, I38, I194, I285, I396, I823, I956],其中获得点击的是[I1, I38]。

B展示了[I3, I5, I194, I38, I396, I285, I1, I733, I823, I956],其中获得点击的是[I3, I94]。

那么A模型的在线GAUC是0.8125,B模型的在线GAUC是0.9375,既实验模型在线GAUC更高。

离线的话,A在实验流量上的GAUC是0.8125,B在基线流量上的GAUC是0.625。因为离线测试集由90%基线样本和10%实验样本组成,所以A在测试集上的GAUC是0.8125*0.9+0.8125*0.1=0.8125,B在测试集上的GAUC是0.625*0.9+0.9375*0.1=0.65625,既实验模型离线GAUC更低。

解决办法:可以构建无偏的离线测试集(不经过精排,直接由粗排给出排序结果),如果在无偏测试集上GAUC涨的话就上实验。如果无偏测试集不好构造,并且你对实验模型比较有信仰时,可以直接上实验看效果。

在线GAUC和业务效果指标不一致

场景一:在线GAUC涨,业务效果指标降

业务指标,比如电商类的GMV、广告类的ECPM、社区类的用户时长/点击率之类。打分分布变化往往会导致曝光集合的分布漂移,比如类目分布漂移、价格分布漂移、时效性分布漂移之类,往往会导致AUC和业务指标效果不一致。举个例子,社区场景下视频比图文GAUC高,但视频点击率低,视频比例提升会带动整体在线GAUC涨,但整体点击率下降。

场景二:在线GAUC降,业务效果指标涨

与上面相反。

解决办法:融合公式、重排逻辑等调参,将曝光分布尽可能调平。在调平的基础上,看哪些业务指标有收益,如果主业务目标没涨其他业务指标涨了,再通过调参将其他业务指标收益兑换到主业务目标上。比如,线上ctr涨了但用户时长没涨,那就把视频多出一点图文少出一点,达到ctr持平和用户时长上涨的目的。

总结

离线和在线GAUC都是中间指标,和最终的业务效果指标并不一定强一致,如果遇到不一致问题,可以从多维度进行下钻分析。