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、 随机
如果是随机打散,那么我们的切分对象全集就是该站点的所有的流量。
这样切分流量的方式与用户无关,和系统的流量有关,随机胡的方式给用户展示不同的推荐算法或者推荐策略的数据。
这样做使一个推荐算法或者推荐策略展示给不同用户,得到的是所有的用户对这个推荐算法或者推荐策略的评价。这样得到的评介更准确。
相关推荐
数据齐全,含详细的代码注释以及ABTest具体介绍。 需要自行下载,诚不欺人。 详见博文说明:https://blog.csdn.net/qq_44186838/article/details/120652083
abtest_client_strategy_module10150009
• Introduction • Statistical Foundations • A/B test process • Design of Experiment • Result Measurement • Advanced A/B test topics • A/B Test Interviews
Unity的AB包打包Demo,简单易用,方便学习,适合新手学习,配合CSDN博客使用.....................
ABtest案例数据集
abtest资料——数据统计 数据分析
安装yarn add react-abtest 或者npm install react-abtest 用法您可以基于组放置自动渲染组件,也可以获取用户所在的组并自行选择处理方式。渲染组件实验随机随机渲染一个变体。 import { ExperimentRandom } from '...
cd ./abtest-agent export RECOMMEND_CONF_DIR=`pwd` mvn clean package jetty:run mvn org.mortbay.jetty:maven-jetty-plugin:run curl http://localhost:8080/abtest-agent/ curl ...
ABtest_blog 具有AB_test功能的网络博客
本数据是一手机游戏的AB试验数据,可用于ABtest的练习,主要字段如下: - userid:用户id - version:版本区别 **A**:gate_30 **B**:gate_40 - sum_gamerounds:安装后14天内,玩家玩的游戏回合数。 - retention_1...
移动互联网的应用ABTest.昨天晚上我前往慧谷科技听点评的架构师分享。收获还是很多的。我很喜欢这类分享,这类分享是真正的干货,并且也能够让人思考考虑怎么结合自己的产品。 昨天晚上我前往慧谷科技听点评的架构...
final ABTest buttonColorABTest = new ABTest.Builder(this) .with("ButtonColorPatterns", ButtonColorPatterns.class) .addPattern(new ABPattern(ButtonColorPatterns.RED, 80)) .addPattern(new ABPattern...
AB测试 在android中进行ab测试的简单库 用法(gradle) 将此行添加到您的依赖组: ... alphaBetaTest.doABTest( "test-action", new ABTest() { @Override public void B() { Log.i( LOG_TAG, getName()
ABTestJS ABTestJS 是一个 A/B 测试 javascript 库,它允许开发人员轻松比较同一... script type =" text/javascript " charset =" utf-8 " src =" src/ABTest.js " > </ script > < script type =" te
测试A/B 测试路由器,根据配置的权重为用户分配组配置:src/main/resources/configuration.yml 构建: mvn 清洁包运行:java -jar target/abtest.jar server src/main/resources/configuration.yml
AB_TEST和Facebook广告分析范围该项目的目的是使用AB TEST来衡量Facebook广告的效果完成了什么数据集从excel工作表导入到子工作表(控制和测试组) 数据集的列存在结构错误,我将其重命名。 我分析并预处理了数据集...
一个智能的web端大数据采集库,支持代码埋点、可视化埋点、abtest.zip
网站转化率分析会要注意到的点,各方面都抓好,转化率肯定上去。
网站测试,ab测试,可以对网站进行压测,测试性能,反应时长