推荐系统算法工程师的日常工作就是改进模型和策略,目标是提升推荐系统的业务指标。所有对模型和策略的改进,都需要经过线上AB测试,用实验数据验证模型和策略是否有效。
一、实验组和对照组
举个例子,召回团队实现一种图神经网络(graph neural network,GNN)召回通道,离线实验的结果看上去非常好,那么下一步就是做线上的小流量AB 测试,看GNN 召回通道对线上业务指标的影响。此外,GNN 的神经网络结构中有一些需要调的参数,比如设置层数” {1, 2, 3},具体该用几层的GNN,也需要线上的AB测试确定。
AB 测试对用户做随机分桶,比如分成10 桶,每桶占10% 的流量,取一桶作为对照组,一个或多个桶作为实验组,在上述例子中,有3 个实验组,分别是用1 层、2 层、3层的GNN。统计各组的业务指标,比如DAU、次1 日留存、用户使用推荐时长、曝光笔记数、点击率、点赞率。计算每个实验组与对照组的差(diff),得到3 个diff,反映出新的GNN 召回通道对业务指标的影响。如果有一组实验结果显著正向,则可以扩大它的流量,进一步观测实验的收益。值得注意的是分桶必须要足够均匀,保证各桶所有业务指标都持平。均匀分10 个桶,每个桶中有10% 的用户,并不能保证每个桶的DAU、中低活用户数、留存、消费、曝光次数、点击次数、交互次数都相等(至少精确到万分之一)。假如两个桶的某些核心指标有万分之几的差异,那么A/B 测试测出的diff 是没有意义的。分桶的时候,应当尽量保证各活跃度、人群的分桶是均匀的,避免桶间指标不平。
二、分层实验
2.1 目的
分层实验的目的:解决流量不够用的问题
以小红书这样的信息流产品为例,同时有多个团队做算法、前端界面、信息流广告、运营策略方面的优化,线上需要同时做数十个、甚至上百个AB 测试。假如我们把用户随机分成10 个桶,每个桶有10% 的流量,取1 个桶做对照组,剩下9 个桶作实验组,那么线上最多只能同时开9 个AB 测试,根本无法满足产品迭代的需求。
2.2 策略
- 同层互斥:避免一个用户同时被两个实验影响
- 不同层正交:召回层和粗排层对用户都是随机划分的,召回层的2号桶和粗排层的2号桶几乎没有交集
- 一个用户不能同时受到两个召回实验的影响,但可以同时受到召回实验和精排实验的影响
2.3 举例
一个召回实验和一个精排实验各自作用在十分之n个用户上,那么有百分之n的用户同时受两个实验的影响
2.4 问题
为什么允许召回和粗排实验同时作用到一位用户(正交),而不允许两个召回实验同时作用到一位用户(互斥)?
如果两组实验同时作用到一位用户,实验效果可能会相互增强(1 + 1 > 2)或相互抵消(1 + 1 < 2)。两个召回实验相互增强或相互抵消的可能性很大,所以让召回实验互斥。而召回实验与粗排实验通常互不干扰(1 + 1 = 2),所以可以让召回和粗排正交。
三、holdout机制
holdout桶就是对照组
四、实验推全&反转实验
4.1 实验推全
所有的实验都是从小流量开始,如果业务指标的diff 显著正向,则推全实验。举个例子,我们做一个召回通道的实验,取1 个桶作为实验组,1 个桶作为对照组。如果观测到显著正向的业务指标收益,则推全这条召回通道,让它从10% 的用户扩大到90%。
4.2 反转实验
在推全时,新建一层,包括90% 的用户,它与推荐系统的其他层正交。在新层中,保留5% 的用户作为反转桶使用旧策略,其余85% 的用户使用推全的新策略