大厂AB实验理论知识与实践
在互联网公司实际生产中,对产品的任何微小改动都需要线上验证效果,然后才能把全量流量切入新版本。例如把一个按钮从绿色改为了红色,如果不在线上做实验,万一改动之后影响订单收益就是事故了。因此,AB实验是每个公司都必备的平台能力。
大厂的AB团队要针对本公司的行业特征与技术特点,设定合理的AB指标策略,开发各个语言(如Java、Python、Go等)的实验SDK,还要开发AB实验的管理平台、指标监控、实验结论生成等模块。
对于非AB团队的开发、测试、算法、前端等,因为会做产品开发升级工作,几乎都必不可少会接触到AB实验,以查看自己负责的模块在线上的表现。本篇文章将向大家介绍大厂AB实验理论知识与实践。
一、数学基础
中心极限定理
中心极限定理(Central Limit Theorem,简称CLT)是对一列独立同分布的随机变量的平均值的描述。简单而言,对于任意分布,只要随机变量之间相互独立且分布相同,从这些随机变量中随机抽n个值,然后求均值,并重复足够多的次数后,这些均值服从正态分布!
数学描述
设 X 1 , X 2 , . . . , X n X_1, X_2, ..., X_n X1,X2,...,Xn 是独立同分布的随机变量,每个随机变量都有期望值 μ \mu μ和方差 σ 2 \sigma^2 σ2 。定义样本平均值为 X ˉ n = 1 n ( X 1 + X 2 + . . . + X n ) \bar{X}_n = \frac{1}{n}(X_1 + X_2 + ... + X_n) Xˉn=n1(X1+X2+...+Xn)。当 n n n足够大时,样本平均值 X ˉ n \bar{X}_n Xˉn的分布将接近于均值为( μ \mu μ )、方差为( σ 2 n \frac{\sigma^2}{n} nσ2 )的正态分布。即: X ˉ n ∼ N ( μ , σ 2 n ) \bar{X}_n \sim N(\mu, \frac{\sigma^2}{n}) Xˉn∼N(μ,nσ2)。
关键点
- 独立同分布:中心极限定理成立的条件之一是随机变量必须是独立的并且具有相同的分布。
- 样本量的影响:样本量越大,样本平均值的分布就越接近正态分布。
- 原始分布的形状:原始随机变量的分布可以是任意的,但只要满足独立同分布的条件,其样本平均值的分布在大样本下都将接近正态分布。即使原始分布是非正态的,样本平均值的分布也会趋于正态。
- 方差的缩放:随着样本量的增加,样本平均值的方差会减小,这是因为分母( n )增大。
应用
中心极限定理在统计学中有着广泛的应用,尤其是在以下方面:
- 置信区间的构建:利用正态分布的性质来估计总体参数的置信区间。
- 假设检验:在假设检验中,中心极限定理允许我们使用正态分布来评估统计显著性。
- 样本量的确定:在进行实验设计时,可以帮助确定所需的样本量,以确保统计检验的效力。
中心极限定理是统计学理论中的一个基石,为许多统计推断方法提供了理论基础。
大数定理
大数定理描述了随机变量的样本平均在某些条件下收敛于其期望值(或真实均值)的性质。简单来说,大数定理说明了当独立重复试验的次数足够多时,试验结果的频率趋近于其概率。
数学描述
对于一系列独立的、同分布的随机变量 (
X
1
,
X
2
,
X
3
,
.
.
.
X_1, X_2, X_3, ...
X1,X2,X3,...),如果它们具有有限的期望值 (
E
(
X
1
)
=
μ
E(X_1) = \mu
E(X1)=μ),那么它们的样本平均 (
X
ˉ
n
=
1
n
∑
i
=
1
n
X
i
\bar{X}_n = \frac{1}{n}\sum_{i=1}^{n}X_i
Xˉn=n1∑i=1nXi) 将几乎肯定地收敛于 (
μ
\mu
μ),即:
lim
n
→
∞
P
(
∣
X
ˉ
n
−
μ
∣
<
ε
)
=
1
\lim_{n \to \infty} P\left(\left|\bar{X}_n - \mu\right| < \varepsilon\right) = 1
n→∞limP(
Xˉn−μ
<ε)=1
中心极限定理是说无论原始数据分布如何,抽样的均值分布服从正态分布;而大数定律根本和正态分布无关,是说样本多了抽样分布近似于总体分布。
二、常见统计学术语
AB测试主要涉及以下概念:
- 原假设&备择假设
- Z检验&p值
- 左侧检验
- 显著性水平(alpha值)&统计功效power(1-beta值)
- 置信区间
假设检验
在进行AB实验之前,要进行假设,也就是设立一个目标。假设检验是统计学里面用来判断样本数据是否足以拒绝某个统计假设的方法。它具有两个概念:
- 原假设(Null Hypothesis):通常记作 ( H 0 H_0 H0),它是一个默认的假设,通常表示没有效果、没有差异或没有关系。在AB实验中,原假设通常作为A版,也就是不作改动的参照组。
- 备择假设(Alternative Hypothesis):通常记作 ( H 1 H_1 H1) 或 ( H a H_a Ha),它是与零假设相对立的假设,表示存在某种效果、差异或关系。在AB实验中,备择假设通常作为B版,也就是作出了变更的实验组。
因此,AB实验中假设检验的目的是拒绝原假设,也就是备择假设才是我们想要的结果。
比如,你在原有App上增加了AI对话功能,那么原假设就是原有App,备择假设就是增加了AI对话功能的App,我们自然希望备择假设的效果能够更好。
检验方法(Z检验)
在设置了原假设与备择假设之后,需要通过统计手段来裁定实验结果。理论上实验样本越多,最终的实验结果越可靠。但是在实际生产中,线上流量就是金钱,不应该花大量的时间在实验上,应该快速决策好的假设。因此需要科学理论来计算最少需要的实验样本量,以节约成本。不同的检验方法有不同的特点,主要有:
- Z检验:适用于大样本情况
- T检验:适用于小样本情况
实际生产中大多数使用的是Z检验。
数学描述
Z检验适用于大样本数据(通常n>30),并且假设数据服从正态分布,或者总体标准差已知。Z检验的统计量是Z值,计算公式为:
Z
=
X
ˉ
−
μ
0
σ
/
n
Z = \frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}}
Z=σ/nXˉ−μ0
其中,( X ˉ \bar{X} Xˉ)是样本均值,( μ 0 \mu_0 μ0)是总体均值,( σ \sigma σ)是总体标准差,( n n n)是样本大小。
双比率Z检验
在AB实验中,Z检验通常用于比较两个不同版本的实验结果,以确定它们之间是否存在统计上显著的差异。
例如,AB实验比较的主指标是转化率CTR,假设对照组和实验组样本数为
n
1
n_1
n1,
n
2
n_2
n2,平均 CTR 为
p
ˉ
1
\bar{p}_1
pˉ1,
p
ˉ
2
\bar{p}_2
pˉ2,这里平均 CR 是指我们基于实验观测到的结果,假设实际上两组的 CTR 为
p
1
{p}_1
p1,
p
2
{p}_2
p2,根据中心极限定理,
p
1
{p}_1
p1和
p
2
{p}_2
p2均趋向正态分布,且由于独立正态分布变量之和依旧是正态分布,
p
1
−
p
2
{p}_1-{p}_2
p1−p2也趋向正态分布。正因为其满足正态分布,因此我们可以计算实验版与对照版之间统计量Z来检验实验效果:
Z
=
p
ˉ
1
−
p
ˉ
2
p
ˉ
1
(
1
−
p
ˉ
1
)
n
1
+
p
ˉ
2
(
1
−
p
ˉ
2
)
n
2
Z=\frac{\bar{p}_1-\bar{p}_2}{\sqrt{\frac{\bar{p}_1(1-\bar{p}_1)}{n_1}+\frac{\bar{p}_2(1-\bar{p}_2)}{n_2}}}
Z=n1pˉ1(1−pˉ1)+n2pˉ2(1−pˉ2)pˉ1−pˉ2
其中,
p
ˉ
1
−
p
ˉ
2
\bar{p}_1-\bar{p}_2
pˉ1−pˉ2是实际观测到的差异,
p
1
(
1
−
p
1
)
n
1
+
p
2
(
1
−
p
2
)
n
2
\sqrt{\frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2}}
n1p1(1−p1)+n2p2(1−p2)是实际观测到的标准误差,直观来看的话,Z-score 表示的是实际差异有多少个标准误差。Z-score 与正态分布的关系如下图所示:
得到统计量Z之后,使用标准正态分布表,或者使用统计软件可计算P值。
在上述的Z值计算公式中,使用的是对照组减去实验组,Z值具有正负性,参考图1,我们可以说Z越向两端靠近就越显著。而由于对照组代表原假设、实验组代表备择假设,当Z越小(负数)说明 p 2 {p}_2 p2越大于 p 1 {p}_1 p1,说明实验组效果越好,换句话说就是越接受备择假设。当Z越大(正数)的分析也同理。
左侧检验
上述计算Z值的公式实际上是一个单侧检验,我们还可以检验对照组与实验组是否有显著差别,即双侧检验,这里把各种情况下的假设和拒绝域都汇总帖出来。
双侧检验 | 左侧检验 | 右侧检验 | |
---|---|---|---|
假设 |
H
0
:
p
1
−
p
2
=
0
H_0:\ p_1-p_2= 0
H0: p1−p2=0 H 1 : p 1 − p 2 ≠ 0 H_1:\ p_1-p_2\not =0 H1: p1−p2=0 |
H
0
:
p
1
−
p
2
≥
0
H_0:\ p_1-p_2\ge 0
H0: p1−p2≥0 H 1 : p 1 − p 2 < 0 H_1:\ p_1-p_2<0 H1: p1−p2<0 |
H
0
:
p
1
−
p
2
≤
0
H_0:\ p_1-p_2\le 0
H0: p1−p2≤0 H 1 : p 1 − p 2 > 0 H_1:\ p_1-p_2>0 H1: p1−p2>0 |
拒绝域 | ∣ Z ∣ ≥ Z 1 − α 2 \mid Z\mid \ge Z_{1-\frac{\alpha}{2}} ∣Z∣≥Z1−2α | Z ≤ Z α Z\le Z_\alpha Z≤Zα | Z ≥ Z 1 − α Z\ge Z_{1-\alpha} Z≥Z1−α |
两类错误定义
第Ⅰ类错误是在假设检验中拒绝了本来是正确的原假设。也就是说实验组实际上不比对照组好,但是却错误的认为实验组更好。
第Ⅱ类错误是在假设检验中没有拒绝本来是错误的原假设。也就是说实验组实际上比对照组好,但是却错误的认为对照组更好。
这两类错误有点像混淆矩阵中假阳、真阴的概念,表示是绝对错误。换个角度说,真阳、假阴是绝对正确,所以才会在召回率公式中计算。
这两类错误之间有什么关系?
在假设检验中两种错误一般是此消彼长的,即如果减小第Ⅰ类错误,就会增大犯第Ⅱ类错误的机会;若减小第Ⅱ类错误,就会增大犯第Ⅰ类错误的机会。而使两种错误同时变小的办法只有增大样本量。但样本量不可能无限增大。因此,在假设检验中通常遵循首先控制犯第Ⅰ类错误原则。
继续参考图1。当Z值越小,说明实验组越好,我们越有理由拒绝原假设。那小到什么程度可以拒绝呢?这就需要人工拍一个显著水平 α \alpha α,它表示假定原假设为真时,我们却拒绝原假设的概率,也就是发生第Ⅰ类错误的概率。
**显著性水平 α \alpha α**取值通常为0.1或0.05,选择更小的 α \alpha α往往就意味着更高的成本。
其实P值才是实验过程中,真正计算而来的显著性水平, α \alpha α应该理解为对P值卡点的一个阈值。
我们把发生第Ⅱ类错误的概率定义为
β
\beta
β,定义功效power为
1
−
β
1-\beta
1−β,对于左侧检验,功效值的计算公式为:
1
−
β
=
Φ
(
p
ˉ
2
−
p
ˉ
1
−
Z
α
2
p
0
(
1
−
p
0
)
n
p
ˉ
1
(
1
−
p
ˉ
1
)
n
+
p
ˉ
2
(
1
−
p
ˉ
2
)
n
)
1-\beta=\Phi\Big(\frac{\bar{p}_2-\bar{p}_1-Z_\alpha\sqrt{\frac{2p_0(1-p_0)}{n}}}{\frac{\bar{p}_1(1-\bar{p}_1)}{n}+\frac{\bar{p}_2(1-\bar{p}_2)}{n}}\Big)
1−β=Φ(npˉ1(1−pˉ1)+npˉ2(1−pˉ2)pˉ2−pˉ1−Zαn2p0(1−p0))
检验的功效越大,当原假设为假时,我们拒绝原假设的概率越大。功效power一般取值为0.8。
为什么要有显著性水平 α \alpha α与功效power这两个概念?
从混淆矩阵的角度去理解,第Ⅰ类错误是假阳,第Ⅱ类错误真阴,假阳、真阴属于绝对的错误,我们要尽可能的去规避这两种错误。由于一般发生第一类错误的影响更大一些,所以我们一般控制第一类错误的概率不超过 α \alpha α,然后让功效越大越好。
置信区间
置信水平(例如95%)与显著性水平(例如0.05)的和通常等于1。置信水平高的区间对应于较低的显著性水平。置信水平与两种错误关系如下:
接受 H 0 H_0 H0 | 拒绝 H 0 H_0 H0 | |
---|---|---|
H 0 H_0 H0为真 | 置信度 1 − α 1−\alpha 1−α | 第Ⅰ类错误, ≤ α \le\alpha ≤α |
H 0 H_0 H0为假 | 第Ⅱ类错误, ≤ β \le \beta ≤β | 功效 1 − β 1-\beta 1−β |
⭐最后,怎样在确定显著水平
α
\alpha
α的情况下,提高 Z 检验的功效值呢?增加样本量!我们可以根据功效的计算公式对所需的最小样本量n进行求解,得到预期功效为
1
−
β
1-\beta
1−β的样本量为:
n
=
2
(
Z
α
+
Z
β
)
2
(
2
sin
−
1
p
ˉ
1
−
2
sin
−
1
p
ˉ
2
)
2
n=\frac{2(Z_\alpha+Z_\beta)^2}{(2\sin^{-1}\sqrt{\bar{p}_1}-2\sin^{-1}\sqrt{\bar{p}_2})^2}
n=(2sin−1pˉ1−2sin−1pˉ2)22(Zα+Zβ)2
其中,显著水平
α
\alpha
α、预期功效为
1
−
β
1-\beta
1−β是预设的,
Z
α
Z_{\alpha}
Zα、
Z
β
Z_{\beta}
Zβ可以通过查表得到。
p
ˉ
1
\bar{p}_1
pˉ1是你的指标的历史均值,比如CR近1个月的均值,
p
ˉ
2
\bar{p}_2
pˉ2等于
p
ˉ
1
+
l
i
f
t
\bar{p}_1 + lift
pˉ1+lift,lift是指标提升量。
三、实验流程
流程如下:
- 指标选取
- 实验单位选取
- 计算样本量
- 流量分割
- 实验周期计算
- 线上验证&实验开启
- AA校验
指标选取
首先,指标要分层级,一般是一个核心指标+多个观察指标。
核心指标用来度量本次实验的效果,以及计算相应的样本量。观察指标则用来度量,该实验对其他数据的影响(比如对页面延迟的影响)。
常见的实验指标有:
- 转化率(Conversion Rate, CR/CVR):用户完成预定目标行动(如购买、注册、下载等)的比例。
- 点击率(Click-Through Rate, CTR):用户点击某个链接或按钮的比率。
- 日活跃用户数(Daily Active Users, DAU)。
- 用户留存率(Retention Rate, RR):用户在一定时间后仍然使用服务的比例。
实验单位选取(分流依据)
大家应该都使用用户粒度来作为实验单位,但是总体说来,实验单位一般有3种。
-
用户粒度:这个是最推荐的,即以一个用户的唯一标识来作为实验样本。好处是符合AB测试的分桶单位唯一性,不会造成一个实验单位处于两个分桶,造成的数据不置信。
-
设备粒度:以一个设备标识为实验单位。相比用户粒度,如果一个用户有两个手机,那么也可能出现一个用户在两个分桶中的情况,所以也会造成数据不置信的情况。
-
行为粒度:以一次行为为实验单位,也就是用户某一次使用该功能,是实验桶,下一次使用可能就被切换为基线桶。会造成大量的用户处于不同的分桶。强烈不推荐这种方式。
计算样本量
这一步在上文已经说明。
流量分割
流量切割有两种方式:分流和分层。
分流是指我们直接将整体用户切割为几块,用户只能在一个实验中。但是这种情况很不现实,因为如果我要同时上线多个实验,流量不够切怎么办?那为了达到最小样本量,我们就得延长实验周期,要是做一个实验,要几个月,相信我,你老板一定会和你聊聊人生理想的。
另一种方式,分层。就是将同一批用户,不停的随机后,处于不同的桶。也就是说,一个用户会处于多个实验中,只要实验之间不相互影响,我们就能够无限次的切割用户。这样在保证了每个实验都能用全流量切割的同时,也保证了实验数据是置信的。
一般情况下,大多数实验都是独立的,所以会采用分层实验。
实验周期计算
相应的,最小样本量有了,我们切分了流量,知道了实验桶一天大概能有多少样本量(也可以算小时,如果产品的流量足够大)。我们直接用 最小样本量 / 实验桶天均流量 即可以得到相应的实验周期。
线上验证&实验开启
很多公司不会做线上验证。当然,不验证也没关系,就是有可能会踩坑,所以还是建议大家在实验上线后进行线上验证。
线上验证主要是2个方向,一个是验证实验策略是否真的触发。即我们上线的实验桶,是否在产品上实际落地了。比如你优化了一个产品功能,你可以去实际体验下,实验桶产品是否真的有优化。
另一个是验证同一个用户只能在同一个桶中,要是同时出现在两个桶中,后期数据也会不置信。
然后就是正式开启实验了。
AA校验
例如,在4个版本ABCD中,B为新版,ACD为老版。其中,建议A默认版盛放流量余量;B新版接入新版流量;CD老版,AA实验流量。流量关系需要满足C=D。
AB实验是比较实验组和对照组,即AB组;AA实验比较的是对照组和对照组,即CD组。如果CD组之间的指标差距很大,那么说明存在数据异常,AB组的实验结果并不可信。