以后文章更新会先在微信公众号(公众号名:输出ING),欢迎大家来关注。
前面我们已经介绍了在开始一个A/B实验之前,计算实验所需样本量的方法。这篇文章Jeff 将介绍下,实验做完后,如何判断实验结果是否显著。
判断实验结果是否显著,一般来说有两种方法,一种是根据经验,你了解实验所关注指标一般的波动范围,而实验组该指标明显超出了一般波动范围,因而你判断实验得到了显著的结果。
显而易见,根据经验判断不够严谨,所以Jeff推荐使用第二种方法,即通过统计学的公式计算p 值是否小于设定的显著性水平α,从而判断实验结果是否显著的方法。
类似前面计算实验所需样本量,本文也仅讨论比例类指标A/B实验结果显著性判断问题,如果是均值类指标的A/B实验结果显著性判断不在本文讨论的范畴。
p 值计算的公式
要计算p值,我们需要先计算Z分数,可以使用统计学里两总体比例假设检验的Z分数计算公式,公式如下:
而p值和Z分数是可以相互推导的,得到检验统计量Z分数的值,p值就可以通过查统计教材对照表或者用已有工具内置的函数计算(可参考下面Excel部分的计算)。
以下以实验两组各有10000用户参与实验,其中A组3000用户达成了转化,B组3200用户达成了转化为例,来说明判断实验结果是否显著的方法。
对应到上边,即x1=3000, x2=3200, n1=n2=10000
用在线工具判断是否显著
上篇文章有提到有个在线工具可以很方便地帮我们计算A/B实验每组所需的样本量,不仅如此,其实它还可以帮我们计算实验结果的p值以及说明实验结果是否显著,如下图:
输入实验两组转化数和进入实验用户数,即可得到实验结果是否显著的说明。(点本文文末阅读全文可进入该页面)
在Excel中判断是否显著
类似样本量计算,在Excel中也可以计算p值,如下图:
其中前面4个数值和置信水平都是手动输入的,其余的都是Excel公式自动完成计算。
对照组转化率对应的公式:=C6/C3
实验组转化率对应的公式:=C7/C4
Z分数对应的公式:=(C9-C10)/SQRT((C6+C7)/(C3+C4)*(1-(C6+C7)/(C3+C4))*(1/C3+1/C4))
p value对应的公式:=IF(C14<0,2*NORM.S.DIST(C14,TRUE),2*(1-NORM.S.DIST(C14,TRUE)))
是否显著对应的公式:=IF(C15<C12,"显著","不显著")
用R判断是否显著
R中可以直接使用prop.test函数来计算p值。一行代码就可搞定:
prop.test(x = c(3000,3200), n = c(10000,10000), correct = FALSE)
执行后可得到输出结果:
R中输出结果显示p-value=0.00223<0.05,可知在显著性水平0.05下可认为两组存在显著差异。
用Python判断是否显著
跟之前一样,Python中tatsmodel库可直接计算p值。具体代码为:
from statsmodels.stats.proportion import proportions_ztest as ztest
import numpy as np
ztest(count=np.array([3000,3200]), nobs=np.array([10000,10000]))
执行后得到结果:
图上最后一行的结果,第一个值为Z分数,第2个值为p值,四舍五入后跟前边Excel是一样的值,为0.00223<0.05,从而可知两组存在显著差异,实验结果提升是显著的。
博主你好,对于非比例类的指标该怎么计算Z分数呢?比如判断ROI的指标是否显著
或许可以考虑用delta method
老师您好,想请教一下,这篇文章里面,Z的计算公式是如何推导出来的呀?
找一本统计学涉及到两样本均值/两样本比例假设检验的书看看,显著检验的Z分数。
好的~谢谢您
Pingback: A/B测试系列文章之A/B测试背后的科学原理 – Jeff的数据科学笔记