什么是 A/B 测试,Google 如何做 A/B?
假设你是一个做电商网站的工程师,花了1个月时间开发了一个功能,双十一的时候发布上线。功能上线后,电商的下单量,一天提升多了3w个订单。
当你欣喜的拿着数据准备向你的领导汇报的时候。
你觉得你的领导会问什么问题呢?
你能否解释清楚数据是和你开发的功能有关呢?
大概率可能遇到的问题如下:
-
最近开发上线了好几个功能,你怎么确定这个下单量的提升是你的功能带来的呢?
-
最近双十一,下单量本来就会增加,你怎么确定是你的新功能带来的呢?
碰到这种问题,相信大家很希望能拿出强有力的证据证明你的结论,但问题是怎么能证明呢?
前后数据对比,为什么不行?
首先,是否可以直接拿功能发布前和发布后的数据作对比呢?
相信在没有用A/B测试的时候,大部分功能迭代都是拿上线前后的数据来对比,来得出功能是否对指标有提升。
这样对比数据的问题很明显,因为用户行为会随着时间变化而变化。所以不能直接对比。
比如双十一的用户比平常的用户购物的意愿就要强烈,周末的用户和工作日的用户比起来,购物意愿也不一样,所以不能前后时间段的数据进行对比。
更不用说,还会有别的团队开发的其他功能上线,同时运营广告投放的时间点也不一样。这些常常无法感知,而且都会影响最终数据,所以这样的对比数据,结论是不可信的,当然也说服不了领导的。
A/B Testing 就是用来解决以上问题的,什么是 A/B Testing 呢,他又是如何解决上述问题的呢?
什么是 A/B Testing?
A/B Testing 是为同一个目标制定两个或两个以上的方案,在同一时间维度,让用户随机的使用某个方案,并收集各群组的用户目标数据,最后根据显著性检验分析评估出不同版本之间的差异并得出实验结论。
举一个简单的例子
概念有点抽象,举个例子,页面上有两个按钮,A版本为红色按钮,B为蓝色按钮,我们可以分3部分理解:
- 将用户随机分成A、B两组,当用户命中了A组,则展示红色按钮,如果命中B组则展示蓝色按钮,两个版本同时线上运行(因为同时,可消除其他因素影响)
- 点击按钮,上报日志,将两个分组的用户数据通过日志埋点记录下来
- 将最终的数据结果进行分析,通过置信度检验,看最终数据是否可信
通过上述方式,可以有理有据的说明数据的提升是否和新功能有关系。
虽然看起来好像很简单,实际有很多坑,比如就拿第一步来看,将用户随机分成AB两组。
是不是直接将用户的id和2进行取余就好了,代码如下,在做实验平台的过程中,经常有一些业务方一开始是这么做实验的。
int hash = Math.abs(id.hashCode()) % 2;
if (hash == 1) {
// TODO A组,对照组 策略
} else {
// TODO B组,实验组 策略
}
这样是可以将用户进行分组的,但是这样真的可行么?
我先直接给出结论是不行的,这样是会出现样本不均匀的情况,从而最终会影响实验的结论,这里我们暂时不多做介绍,后续文章,我会重点介绍原因和解法。
A/B Testing 已经有一整套完善的解决方案,并且在各大厂已经广泛应用了。
Google 是如何做 A/B 测试的?
实际上A/B实验远没有上面例子中的简单,互联网系统千差万别,如何设计出一个统一,合理的方案,来保证同时成千上万个实验在线上测试而不互相影响,如何保证数据最终的科学性和结论的准确性呢?
其实 Google 早在 2010年 就有发布一篇论文 《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》,就有介绍Google 是如何做A/B实验的。
这里我简单介绍下论文的内容:
名称翻译过来就是 《多层A/B实验基础设施:更多、更好、更快的实验》
文章里介绍了Google的A/B实验包含的三个部分:
第一部分包括 单层,多层实验,参数配置
第二部分介绍了一些实验相关的工具和实验过程:
- 工具包括实验变量检查,指标异常监控,样本计算器,A/A实验等
- 实验评审,实验讨论会,如何分析数据等从而减少实验的错误率提高实验的成功率
第三部分介绍了一些实验成果,Google 实验数量,如何指数级的增长的,实现方式
干货很多,但是整个论文也存在一些局限:
首先,因为论文较早只涉及到了web端,没有说到客户端和其他端内情况
其次,论文介绍的功能还比较基础,具体功能实现细节,提及较少
最后,因为只针对 Google 平台,实例也比较局限,场景也比较单一,而现在很多网站流量入口较分散,指标和UI交互多样,实验情况也更复杂,覆盖面比较窄
如果对论文原文有兴趣的同学,可以评论区留言,我会发给你PDF
A/B 测试系列分享
后续会深入分享如何在一个互联网公司,开发和推广A/B 实验。
以及如何解决上述提到的问题,最终通过数据驱动的方式衡量需求的价值,帮助公司和团队成长。
如果感兴趣可以点赞,留言让我知道,也欢迎在评论区留言讨论。
欢迎关注我的公众号“鸡眨眼”,我是一名关注用户体验的大厂程序员。