推荐ABTest的实现策略总结


 

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


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


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



 


                                                                图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)子区间,两个比例相同的子区间就可以用作于实验策略对比。
 



 

 


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

 



 

 


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

 

 

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

 



 


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

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Implementing an A/B testing system in Java can be done in a few steps. 1. Define the experiment: Start by clearly defining the experiment and its goals. What are you trying to test? What are the variables you are trying to measure? 2. Create a control group: Next, you'll need to create a control group. This is the group that will not receive any treatment and will serve as a baseline for comparison. 3. Create a treatment group: After creating the control group, create a treatment group. This group will receive the treatment that you want to test. 4. Randomly assign users: Once you have created the control and treatment groups, you'll need to randomly assign users to each group. This is important to ensure that the results are representative and not biased. 5. Collect data: Once the experiment is underway, you'll need to collect data on the variables you're interested in. This could be things like conversion rates, page views, or user engagement. 6. Analyze the results: Finally, you'll need to analyze the results of the experiment. This will involve comparing the results of the control group to the treatment group to see if there is a statistically significant difference. Here is an example of a simple A/B testing system in Java: ``` import java.util.Random; public class ABTest { public static void main(String[] args) { int controlCount = 0; int treatmentCount = 0; Random random = new Random(); for (int i = 0; i < 1000; i++) { boolean isControl = random.nextBoolean(); if (isControl) { controlCount++; } else { treatmentCount++; } } System.out.println("Control group count: " + controlCount); System.out.println("Treatment group count: " + treatmentCount); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值