还记得前一阵子风靡朋友圈的表情包评论斗图吗?
但是从12月24日起,陆续有网友反映微信朋友圈无法评论表情包了。当时就有网友猜测该功能非正式版本,很有可能为A/B测试。
12月25日,微信官方回应表示:“此前,我们对朋友圈评论发送表情包功能进行灰度测试,部分用户更新 7.0.9 版本后可使用。目前,该功能已暂停。”
为什么有的用户还可以用表情包,而有的用户就不能用了呢?这其实就是A/B测试。
A/B测试是什么?
与微信这次的测试类似,假设我们的网站有一个落地页。关于详情按钮,设计团队偏向绿色,而产品经理则主张蓝色。双方对他们的选择都有强烈的看法。 谁来决定? 选择是否正确?
根据范冰在《增长黑客》一书中的介绍,A/B测试,简单说来就是针对想调研的问题提供两种不同的备选解决方案(比如两个注册页面),然后让一部分用户使用方案A,另一部分用户使用方案B,最终通过数据观察对比确定最优方案。
单变量
A/B测试的所有步骤都要遵循单变量的思想,比如
1.将测试用户随机分为两部分
2. 测试要在同一时间进行
想像一下,如果我们要测试游戏注册按钮蓝色绿色孰优孰劣。蓝色版本在周一周二测试,绿色版本在周六周日测试,测试的结果是绿色按钮点击率更高。但是,由于周末游戏用户活跃度原本就比较高,测试结果很有可能受到了时间因素的影响。
步骤
A/B测试不是一次性的试验,而是一个不断【设定目标】-【提出假设】-【变量修改】-【运行试验】-【衡量结果】的一个循环过程
目标:目标是用于判断哪个版本更好的量化指标。
假设:生成A/B测试的假设。
变量:确定单一变量,对网站当前版本的该变量进行所需的更改。
试验:网站的访问者将被随机分配到两个版本,并收集相应的数据。
结果:通过假设检验与置信区间来分析收集到的数据,得出结论。
统计学原理
从原理上看,A/B测试通过抽取样本来估计总体,在上面的例子中:
样本 是随机抽取使用该版本的用户的点击动作(0或1)
总体 是(如果网站全面改版)所有使用该版本的用户的点击动作(0或1)
但这样就足够了吗?如果我们最后得出的结果是A版本点击率5%,B版本点击率5.2%,B版本一定就是更好的?事实上这很有可能只是由抽样误差引起的。
这时我们就需要通过 假设检验 对结论进行数据支撑
假设检验
针对具体业务问题,我们可以将其提取成统计问题。以新旧哪个版本的点击率更高这个业务问题为例,假设检验的步骤如下
1. 提出假设
将新版本的点击率写成p1,旧版本的点击率写成p2
H0:p1=p2
H1:p1>p2
原假设H0是新旧版本点击率没有差异,备选假设H1是新版本点击率高于旧版本。
如果有足够的证据去拒绝原假设H0,我们就可以得到 p1>p2 的结论。
2. 确定显著性水平a
提前设定一个比例。如果测试结果出现的概率低于这个比例,我们就有足够的理由拒绝原假设H0。一般取5%。
3. 确定检验统计量
为了计算测试结果出现的概率,我们需要一个已知概率分布的统计量。一般对比双样本转化比率差异用z统计量,z服从标准正态分布。
4. 根据样本计算统计量及p值
我们通过试验得到了该统计量的值。由于已知其概率分布,我们能算出“出现比试验结果更极端情况”的概率,即p值。
5. 得出结论
如果p值小于我们之前设定的显著性水平,我们就有足够的证据拒绝H0假设,即新版本点击率比旧版本高
如果p值不小于我们之前设定的显著性水平,我们没有足够的证据拒绝H0假设,即新旧版本点击率没有明显差别
统计量
统计量z是怎么来的呢?为什么z服从标准正态分布?
首先要明确一点,我们对比两个版本的点击率,就是在进行双样本比例假设检验,因为我们有两个总体。
首先是单总体比例假设检验
假设我们有随机变量 (xi), i=1,...,n,xi{0,1},0代表失败,1代表成功
那么xi服从伯努利分布,xi~Bernoulli(p),p为总体比率
根据伯努利分布定义,xi的期望为p, xi的方差为 p(1-p)
现在我们考虑
p' 的期望是 n*E(x)/n = p
p' 的方差是 n*var(x)/n^2 = p(1-p)/n
现在我们考虑统计量
根据中心极限定理,不论xi服从什么分布,当n趋向无穷时,Z都服从标准正态分布
然后是双总体比例假设检验
首先我们有原假设 H0: p1=p2
如果 xi~Bernoulli(p1) 来自总体1,yi~Bernoulli(p2) 来自总体2,x之间iid,y之间iid,x与y独立
p1' 期望为 p1,方差为 p1(1-p1)/n1
p2' 期望为 p2,方差为 p2(1-p2)/n2
因为在H0假设下 p1=p2:=p,
p1' - p2' 期望为 p1-p2=0
p1' - p2' 方差为 p(1-p)(1/n1+1/n2)
由于 p1=p2=p 未知,我们用样本统计量 p'=(n1*p1'+n2*p2')/(n1+n2) 来代替 p
根据中心极限定理
服从标准正态分布
Python代码实现
在这个模拟例子里,我们分别在两个版本抽取了1000个样本
版本1获得237个点击,点击率为23.7%
版本2获得195个点击,点击率为19.5%
Z统计量为2.28,p值为0.0112<0.05
所以我们得出结论,版本1点击率显著高于版本2