【长文干货】AB测试:原理流程、实际案例及面试指南
AB测试我们在工作当中,尤其是在很多的互联网大厂里面,经常是用来验证一个功能最终是否会被上线的重要手段,也是在数据分析面试当中经常会出现的一个考点,所以AB测试的重要性就不言而喻了。但是很多同学一提到AB测试就会头皮发麻,感觉自己知道什么是AB测试,但是具体的统计学原理、样本量&试验周期计算、实施步骤和效果验证却是一头雾水,也不知道在面试当中会怎么考。今天通过理论和实际案例的形式详细、系统地和大家啃一啃AB测试这块硬骨头。
本文有理论公式,也有实践案例,深入浅出,大神小白皆宜。
涉及到一些统计学的理论和公式,是为了辅助大家理解AB测试的原理,知其然知其所以然,有基础的同学可以好好研究!
小白说我看不懂理论公式,没关系!有理论公式的地方就有实际栗子,有栗子不怕你理解不了!
更任性的同学,我看到公式脑壳就疼,更不想手算,好吧,工具已经备好,直接拿去用!
面试的同学,想要了解AB测试的常见问题,文末已经安排!
目的只有一个,无论AB测试的各种疑问,这篇文章尽可能满足你的需求,安排!

1、什么是AB测试?
AB测试其实来源于假设检验,我们现在有两个随机均匀的样本组A、B,对其中一个组A做出某种改动,实验结束后分析两组用户行为数据,通过显著性检验,判断这个改动对于我们所关注的核心指标是否有显著的影响。
在这个实验中,我们的假设检验如下:
原假设H0:这项改动不会对核心指标有显著的影响
备选假设H1:这项改动会对核心指标有显著影响
如果我们在做完实验之后,通过显著性检验发现P值足够小,我们则推翻原假设,证明这项改动会对我们所关注的核心指标产生显著影响,否则接受原假设,认为该改动未产生显著影响。如果用一句话来概括的话,AB测试其实就是随机均匀样本组的对照实验。这个就是AB测试的原理。
2、AB测试的一般流程
1、一般在开始实验之前,我们首先需要和相关的产品或者项目经理确定这个实验所要验证的改动点是什么。
1、明确改动点
实验开始之前,首先要和产品或者项目经理明确实验的变量是什么?我们要保证AB测试的“单一因素原则”,即每一个实验的评估的因素都是单一因素,一次实验不能糅合多个影响因素,否则会导致实验效果难以区分是哪个因素的影响。
2、明确观测指标
观测指标可以分为两种类型:
1、绝对值类指标。我们平常直接计算就能得到的单个指标,不需要多个指标计算得到。一般都是统计该指标在一段时间内的均值或者汇总值,比如DAU,平均停留时长等。这类指标一般较少作为AB测试的观测指标。
2、比率类指标。与绝对值类指标相对应,我们不能直接计算得到,而是通过多个指标计算得到。比如某页面的点击率,我们需要先计算页面的点击数和展现数,两者相除才能得到该指标。类似的,还有一些转化率、复购率等等。AB测试观测的大部分指标都是比率类指标。
为什么这里要区分不同类型的观测指标,因为在接下来的样本量计算中,这两类指标的样本量计算有所差别。
1、AB测试样本量计算
A/B 测试样本量的选取基于大数定律和中心极限定理。在计算样本量之前,我们先大致了解一下大数定律和中心极限定理:
1. 大数定律:当试验条件不变时,随机试验重复多次以后,随机事件的频率近似等于随机事件的概率。
2. 中心极限定理:对独立同分布且有相同期望和方差的n个随机变量,当样本量很大时,样本的均值近似服从标准正态分布N(0,1)。
说人话就是:只要样本量足够大,样本就能够代表整体的表现。这个足够大到底是多大呢?
每一个实验组所需的样本量计算公式如下:
在这个公式当中,
σ代表的是样本数据的标准差,衡量的是整体样本数据的波动性,可以计算样本的标准差计算得到。
而δ代表的是预期实验组和对照组两组数据的差值,比如说期望点击率从20%提升到25%,那么δ就是5%。
而α和β,也就是我们在统计学当中所经常提到的,犯第一类错误的概率和第二类错误的概率。
其中:
1、α为犯第一类错误的概率,把没有犯第一类错误的概率1-α称为置信水平。一般情况下,α取值为0.05。
2、β为犯第二类错误的概率,把统计功效定义为1-β,一般情况下,β取值0.2,则统计功效的取值为0.8。
当观测的指标为绝对值类型/比率型指标时,样本的标准差的计算公式有所差异,
当观测指标为绝对值类指标时:
当观测指标为比率类指标时:
其中PA、PB分别为对照组和实验组的观测数据,举个栗子,我们希望点击率从20%提升到25%,那么PA=20%,PB=25%,δ=5%。
如果上面的公式觉得不好理解,那我们就举个栗子计算一下!
某商品详情页平均停留时长的标准差是20秒,优化了商品详情页后,预估至少有5秒的绝对提升,AB测试每个组需要的最少样本量: σ=20,δ=5 每个组所需的最少样本量 = 8*20*20*2/5*5=256
某商品详情页点击率20%,优化了该功能后,预期点击率提升到25%,AB测试每个组需要的最少样本量: 对照组PA:20%,实验组PB:25% 每个组所需的最少样本量 = 8 * (20%*(1-20%)+25%*(1-25%))/ (25%- 20%)^2=1030 计算出单个实验组所需的样本量,若有多个实验组,乘以实验组的个数就可以得到最终的样本量。
公式虽然明白怎么算了,但是我还是不想手算怎么办?我们有现成的工具可以直接使用!
安利一个比较常见且好用的在线计算工具:Evans awesome AB Tools:https://www.evanmiller.org/ab-testing/sample-size.html,它的界面是这样的
1、辛普森悖论
我们对APP上一个按钮进行了颜色调整,需要比较一下颜色调整前后用户点击率是否提高?经过一段时间的试验,我们得到了两组试验的数据,计算出了两组试验的点击率,如下:
数据中我们发现,单独看这一试验,无论是女性人群和男性人群,数据表现都是A组中较好,但是,总计却是B组效果较好,细分的结果和总计的结果相悖,这就是我们常说的辛普森悖论。
那么,问题出在哪里呢?我们发现这个AB测试的两个组的性别选取有问题,性别特征并没有均衡的分布在两个组中。很明显,A组里女性用户只有男性用户的1/3,而B组里女性用户是男性用户的3倍。
所以,这一组不成功的AB测试,主要是因为流量分割忽略了一个重要的“隐藏因素”,也就是性别比例。性别上的差异在A、B组中也成为了影响结果的一个变量,从而导致最终的结果相悖。正确的试验实施方案里,除被测试的变量外,其他可能影响结果的变量的比例都应该保持一致,这就需要对流量进行均匀合理的分割。
2、分流分层原理
流量的分割常用的有分流和分层。
1)分流
用户分流是指按照地域、性别、年龄等把用户均匀地分为几个组,1个用户只能出现在1个组中。但是实际情况中,往往会同时上线多个实验,拿广告来说,有针对样式形态的实验,有针对广告位置策略的实验,有针对预估模型的实验。如果只是按照这种分流模式来,在每组实验放量10%的情况下,整体的流量只能同时开展10个实验。这个实验的效率是非常低的。为了解决这个问题,提出了用户分层、流量复用的方法。
2)分层
同一份流量可以分布在多个实验层,也就是说同一批用户可以出现在不同的实验层,前提是各个实验层之间无业务关联,保证这一批用户都均匀地分布到所有的实验层里,达到用户“正交”的效果就可以。所谓的正交分层,其实可以理解为互不影响的流量分层,从而实验流量复用的效果。
3)分流分层模型
对以上模型进行解释:
-
分流:组1、组2通过分流的方式分为2组流量,此时组1和组2是互斥的,即组1+组2=100%试验流量。
-
分层:流量流过组2中的B1层、B2层、B3层时,B1层、B2层、B3层的流量都是与组2的流量相等,相当于对组2的流量进行了复用,即B1层=B2层=B3层=组2
-
扩展:流量流过组2中的B1层时,又把B1层分为了B1-1,B1-2,B1-3,此时B1-1,B1-2,B1-3之间又是互斥的,即B1-1层+B1-2层+B1-3层=B1层。
根据以上规则我们可以不断地在此模型中增加组、层,并且可以互相嵌套。这要与实际的业务相匹配,拆分过多的结构可能会把简单的业务复杂化,拆分过少的结构又可能不满足实际业务。
4)使用场景
对于上图所示的流量分流分层模型,如果用于某些对所有功能都有影响的运营活动,比如春节的红包运营,由于活动是整体的,UI,策略,内容等模块都会配合修改,因此要评估春节红包活动的时候就会使用组1来评估。而剩余的组2的流量,则会划分为多个层,比如UI层,推荐策略层,内容模块层等,这几层基本上是没有任何的业务关联度的,即使共用相同的流量(流量正交)也不会对实际的业务造成结果。
1、测试效果显著性检验
AB测试后,我们需要对AB测试的结果进行显著性检验,从而判断改动是否对我们的核心指标产生了显著差异。
举个栗子,仍以点击率为例,我们运行AB测试一周,分别对1000个样本进行了测试。对照组A的点击率为7.5%,B的点击率为9%,如下表:
我们能否给出结论说B比A好,改动是有效果的呢?有多大的可能是因为一些随机的因素导致这样的差异呢?
假设检验可以有效地帮助我们回答这个问题。首先假设改动没有效果,即B的效果不会比A好,然后试图通过样本测试的结果来验证这个假设,如果样本足以推翻假设,那么我们就可以认为改动有效果,否则我们需要继续实验或者干脆就接受这个假设,把B方案扔掉了事。
由于我们实验的样本一般都较大(大于30),所以我们使用Z检验来检验差异显著性(样本量较小时,我们一般用T检验,对此有疑问感兴趣的同学可以查阅相关资料)。
2、Z检验
1)样本统计量Z值
Z检验是一种适用于大样本(样本容量大于30)的两组平均数之间差异显著性检验的方法。它是通过计算两组平均数之间差的Z值与理论Z值相比较,看是否大于规定的理论Z值,从而判定两组平均数的差异是否显著。
其一般步骤如下:
第一步:建立原假设 H0:μ1 = μ2 ,即先假定两组平均数之间没有显著差异,
第二步:计算统计量Z值,对于不同类型的问题选用不同的统计量计算方法,通过检验两组样本平均数的差异性,判断它们各自代表的总体的差异是否显著。
与计算样本量相似,当观测的指标为绝对值类型/比率型指标时,Z值的计算公式有所差异。
当观测指标为绝对值类指标时:
当观测指标为比率类指标时:
计算公式类似,只是对于绝对值/比率型指标,方差的计算方式有些差异而已。
2)理论Z值
样本的统计量Z值可以通过以上的公式进行计算,理论Z值可以通过查询Z值表获得,更方便的一种方法,我们可以通过Excel的NORM.S.INV函数直接计算,如下是我们常用置信水平90%、95%、99%下的理论Z值。
3)样本统计量Z值vs理论Z值比较
假设通过以上公式计算的统计量Z值 = 1.22,小于我们设定95%置信水平对应理论Z值1.96,也就是说我们暂无法判断这种差异性是显著的,所以上述样本不足以得出B比A好的结论。
4)继续实验
正如之前所说,由于无法得出B比A好的结论,这种情况下,我们需要做更多实验。
于是,我们又做了一周,A和B分别得到了3000个样本,对照组和实验组转化率不变。这个时候我们有信心认为B比A好了吗?
仍然是套用上述公式求统计量Z值= 2.66。超出了我们设定的95%置信水平对应理论Z值1.96,这个时候我们有了足够的信心来相信B比A好。到此为止,实验结束。
5)用工具直接验证
当然,如果觉得上述的显著性检验还是太麻烦,还记得我们之前安利的Evans AB Tools,我们可以用这个工具方便地进行检验!
使用方法也很简单,分别输入对照组和实验组的比率类指标对应的分子、分母和置信水平Confidence level(一般95%)。
在第一周的实验中,对照组A对应的分子、分母为75/1000(转化率为7.5%),实验组B的对应的分子、分母为90/1000(转化率为9%),设置置信水平Confidence level为95%,得出的结果如下:两组无显著性差异!
又进行了一周实验,对照组A对应的分子、分母为225/3000(转化率为7.5%),实验组B的对应的分子、分母为270/3000(转化率为9%),置信水平Confidence level仍为95%,得出结论:两组有显著差异,且实验组B效果更好!
不用任何公式,也能方便地进行AB测试结果的显著性验证,赶紧收藏吧!
还有一部分同学在准备数据分析的面试,不知道数据分析面试中AB测试会考哪些?希望能给一些建议,今天,它来了!
1、第一类错误vs第二类错误

2、统计显著=实际显著?
以上就是数据分析思维—AB测试部分的内容,整个数据分析思维系列的12篇文章已经更新完毕,更多数据分析思维的文章请翻看历史文章,如果觉得不错,也欢迎分享、点赞和点在看哈~
数据分析思维系列:
参考:
[【长文干货】AB测试:原理流程、实际案例及面试指南](https://mp.weixin.qq.com/s?__biz=MzI3NzQ5MzM5Mw==&mid=2247486853&idx=1&sn=5514cb3c314e0bc5f4ef9b43fa1f78b5&chksm=eb642e7bdc13a76d57122a5564abeb7f4335d20042d78ded79bcab3b1591ffdb9e5659caa256&scene=178&cur_album_id=1769229321178529795#rd )