ABtest
ABtest大家都不陌生,test通常包含对照组和实验组,二者通常只有一个要素不同,通过实际效果对比判断这个要素对于提升效果是否有帮助。这里有个核心问题是假设检验的使用。为什么要用到假设检验,举个例子,营销场景,对照组和实验组各营销10000人,对照组的转化率为1%,实验组1.2%,那么我们能得到实验组好于对照组么?这个0.2%的提升可能是由于我们的改进带来的,也可能是随机产生的,即改进没有任何效果,对于这两种情况需要使用假设检验进行判断。
假设检验
假设检验通常包括零假设和对立假设,我们有个观测量,在零假设成立的情况下,它服从一个分布,我们计算在这个分布下,大于观测量的结果可能出现的概率,也就是p值。假设 α \alpha α为置信度,如果p-value<1- α \alpha α,那么我们就可以拒绝零假设了。
在上面营销场景转化率比较的ABtest中,零假设就是对照组和实验组对应的两个总体的转化率相同,我们需要根据观测结果判断这个假设是否成立。如果零假设成立,就意味着改进没有发生作用,这个就不是我们希望的了。
Z检验
伯努利分布
接下来讨论如何根据观测值判断零假设是否成立。营销场景中,每个用户是否购买(或者发生点击等等行为)可以看作独立的伯努利实验(当然实际上每个用户的购买倾向都是不同的,由于我们关心的是平均购买倾向,所以可以假定每个用户的购买倾向相同)。假设营销的用户数量为n,这样营销活动可以看作是一个重复n次的伯努利实验,行为发生的概率我们记为p,那么营销活动的订购数量就服从二项分布 B ( n , p ) B(n,p) B(n,p)。当n很大时(超过30), B ( n , p ) B(n,p) B(n,p)就可以使用正态分布 N ( n p , n p ( 1 − p ) ) N(np,np(1-p)) N(np,np(1−p))近似。由于转化率等于订购数量/营销数量,所以转化率就服从 N ( p , p ( 1 − p ) n ) N(p,\frac{p(1-p)}{n}) N(p,np(1−p))。到此,营销活动ABtest的假设检验中观测结果服从的概率分布就确定了。
假设对照组的转化率是
p
1
p_1
p1, 实验组的转化率是
p
2
p_2
p2,那么有:
p
1
∼
N
(
p
,
p
1
(
1
−
p
1
)
n
1
)
p_1\sim N(p,\frac{p_1(1-p_1)}{n_1})
p1∼N(p,n1p1(1−p1)),
p
2
∼
N
(
p
,
p
2
(
1
−
p
2
)
n
2
)
p_2\sim N(p,\frac{p_2(1-p_2)}{n_2})
p2∼N(p,n2p2(1−p2)).
这里我们使用样本的方差作为总体的方差,但是均值都记为p,因为零假设这个前提条件。
OK, 这样就有:
p
1
−
p
2
∼
N
(
0
,
p
1
(
1
−
p
1
)
n
1
+
p
2
(
1
−
p
2
)
n
2
)
p_1-p_2\sim N(0,\frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2})
p1−p2∼N(0,n1p1(1−p1)+n2p2(1−p2)),
我们算下z-score:
p
1
−
p
2
p
1
(
1
−
p
1
)
n
1
+
p
2
(
1
−
p
2
)
n
2
∼
N
(
0
,
1
)
\frac{p_1-p_2}{\sqrt{\frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2}}}\sim N(0,1)
n1p1(1−p1)+n2p2(1−p2)p1−p2∼N(0,1),
p 1 − p 2 p 1 ( 1 − p 1 ) n 1 + p 2 ( 1 − p 2 ) n 2 \frac{p_1-p_2}{\sqrt{\frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2}}} n1p1(1−p1)+n2p2(1−p2)p1−p2也就是我们的p-value了。在置信度95%的条件下, p 1 − p 2 p 1 ( 1 − p 1 ) n 1 + p 2 ( 1 − p 2 ) n 2 \frac{p_1-p_2}{\sqrt{\frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2}}} n1p1(1−p1)+n2p2(1−p2)p1−p2超过1.65就可以拒绝零假设了。90%的置信度z-score需要大于1.28。以上检验过程称为z检验。
正态分布
营销转化率场景是建立在用户行为服从伯努利分布,我们接下来考虑更为一般的场景,即用户行为服从正态分布。通常ABtest要检验的指标都是样本结果的汇总值,比如平均值。假设单个用户的行为结果 X ∼ N ( μ , σ 2 ) X\sim N(\mu,\sigma^2) X∼N(μ,σ2),那么检验指标如果是平均值的话,它就服从 N ( μ , σ 2 / n ) N(\mu,\sigma^2/n) N(μ,σ2/n)。
假设对照组的观测值是
X
1
ˉ
\bar{X_1}
X1ˉ, 实验组的观测值是
X
2
ˉ
\bar{X_2}
X2ˉ,那么有:
X
1
ˉ
∼
N
(
μ
,
σ
ˉ
1
2
/
n
1
)
\bar{X_1}\sim N(\mu,\bar\sigma_1^2/n_1)
X1ˉ∼N(μ,σˉ12/n1),
X
2
ˉ
∼
N
(
μ
,
σ
ˉ
2
2
/
n
2
)
\bar{X_2}\sim N(\mu,\bar\sigma_2^2/n_2)
X2ˉ∼N(μ,σˉ22/n2),
σ
ˉ
1
2
,
σ
ˉ
2
2
\bar\sigma_1^2,\bar\sigma_2^2
σˉ12,σˉ22是样本估计的方差,则
z-score=
X
1
ˉ
−
X
2
ˉ
σ
ˉ
1
2
/
n
1
+
σ
ˉ
2
2
/
n
2
\frac{\bar{X_1}-\bar{X_2}}{\sqrt{\bar\sigma_1^2/n_1+\bar\sigma_2^2/n_2}}
σˉ12/n1+σˉ22/n2X1ˉ−X2ˉ
看个具体的例子。教育场景中,我们通常会将班级的考试平均分作为衡量教学质量的指标。假设我们针对教学方法做了改进,A班使用传统的教学方法,B班使用改进的教学方法,根据A班和B班的考试平均分,确定改进是否有效。这个例子中,单个学生的考试成绩服从正态分布, 我们可以使用上面的公式
X
1
ˉ
−
X
2
ˉ
σ
ˉ
1
2
/
n
1
+
σ
ˉ
2
2
/
n
2
\frac{\bar{X_1}-\bar{X_2}}{\sqrt{\bar\sigma_1^2/n_1+\bar\sigma_2^2/n_2}}
σˉ12/n1+σˉ22/n2X1ˉ−X2ˉ计算z-score,
X
1
ˉ
\bar{X_1}
X1ˉ和
X
2
ˉ
\bar{X_2}
X2ˉ是两个班级的考试平均分,
σ
ˉ
1
2
\bar\sigma_1^2
σˉ12和
σ
ˉ
2
2
\bar\sigma_2^2
σˉ22是两个班级的考试分数方差,
n
1
n_1
n1和
n
2
n_2
n2是两个班级的学生数量。
其他场景下这样的例子还有很多,餐饮的人均点餐价格、电商的客单价等等。
总结
总结一下,在一个具体的业务场景中,我们可以进行ABtest测试某个改进是否对提升业务指标有帮助。在这个场景中,单个用户的行为结果服从伯努利分布或者正态分布。业务指标通常是行为结果的平均值。当用户数量比较多时,进行z检验,过程如上所述。而当用户数量比较少时,可以进行t检验,t检验等我以后有时间再补充。