推荐ABTest的实现策略总结


 

1. 背景介绍
       一个新推荐算法或者新策略开发完毕之后,在全流量上线之前要评估新功能或者新策略的优劣,常用的评估方法是A-B测试,做法是在全量中抽样出两份小流量,分别走新策略分支和旧策略分支,通过对比这两份流量下的各指标的差异,我们可以评估出新策略的优劣,进而决定新策略是否全流量。
抽样是指按照某种确定的随机化方法,对线上流量进行划分。抽样可以指这种划分的方法,也可以指划分得到的一个流量子集。抽样是一种特殊的小流量,要求对流量的划分必须保证均匀性和随机性,我们把抽样的过程称为流量切分,流量切分是指把全流量进行均匀的打散,提取出其中固定的流量比例,本文主要涉及的是流量切分的实现。


2. 流量切分架构
       做到流量切分的常用的方法是单层流量切分,流量切分需要以某种方式进行,即流量切分的打散依据


2.1  UUID hash
       我们可以依据流量中的cookie(用户的唯一标识)打散,我们依据cookie(用户的唯一标识)打散,那么我们的切分对象全集就是所有的用户。
 


推荐ABTest的实现策略总结_第1张图片
 


                                                                图1.1 单层流量切分架构示意图

 


       有了上面的想法,我们如何实现单层流量切分呢?如图1.1所示,我们按照指定的流量切分方式,将所需要的输入参数cookie先经过一次一致性hash计算,产生结果的均匀性和随机性由一致性hash算法来保证,有了一致性hash产生的结果,流量切分的过程还没有结束,我们还需要将一致性hash结果对应到切分对象的全集上面,实现方法是将切分对象全集看作是一个区间段,然后将一致性hash结果对应到区间段上面,区间的大小是切分的最小粒度决定的,例如,如果需要最小切分粒度为1%,则我们选取的区间段为[0,99],有了区间段的定义,我们可以将一致性hash结果对一个cookie取模,这个数可以唯一的对应到切分对象全集区间上面,这样我们就将所有的流量打到了流量切分对象全集上面。
       我们再将区间段按照实验需求细分,划分成若干子区间,用作于实验对比,例如下图所示,将整个100%的区间分为多个子区间(多少个推荐算法或者推荐策略),每个子区间(推荐算法或者推荐策略)使用唯一的编号——sid,作为区间的唯一的标识,sid=1的子区间对应的流量为1%,那么它的子区间就是[0,1],同理,sid=2的第二个1%的子区间对应的区间值为[2,3],这样我们就将一个100%的完整区间划分成了若干个(100)子区间,两个比例相同的子区间就可以用作于实验策略对比。
 


推荐ABTest的实现策略总结_第2张图片
 

 


        将用户通过一致性HASH到不同的推荐算法或者推荐策略上。

 



 
推荐ABTest的实现策略总结_第3张图片
 


        这样做的缺点是,固定的用户只看到固定的一份推荐数据或者推荐策略。最终收集到的是一部分用户对这个推荐算法或者推荐策略的评价。

 

 

2.2、 随机
      如果是随机打散,那么我们的切分对象全集就是该站点的所有的流量。
这样切分流量的方式与用户无关,和系统的流量有关,随机胡的方式给用户展示不同的推荐算法或者推荐策略的数据。

 


推荐ABTest的实现策略总结_第4张图片
 


         这样做使一个推荐算法或者推荐策略展示给不同用户,得到的是所有的用户对这个推荐算法或者推荐策略的评价。这样得到的评介更准确。

 

 

你可能感兴趣的:(test)