注:2024.11.11 更新样本量计算公式
以后文章更新会先在微信公众号(公众号名:输出ING),欢迎大家来关注。
本文暂不介绍实验所需样本量公式的由来,而是先给出样本量计算常用的几个公式,以及在Excel、R、Python等工具中实现实验样本量计算的方法。
A/B 测试一般是比较实验组和对照组在某些指标上是否存在差异,当然更多时候是看实验组相比对照组某个指标表现是否更好。
这样的对比在统计学上叫做两样本假设检验,即实验组和对照组为两样本,假设检验的原假设Ho:实验组和对照组无显著差异;备择假设H1:实验组和对照组存在显著差异。
显然,如果实验选取的样本很小,实验结果可信度就不高,因为很可能抽取的样本不能代表真实的水平。而在实际中,因为各种成本的考量,实验样本量也不可能无限大。那么,一般至少需要多少样本才能得到可信的结论呢?
实验所需样本量的一般公式
统计学里有最小样本量计算的公式,公式如下:
其中n是每组所需样本量,因为A/B测试一般至少2组,所以实验所需样本量为2n;α和β分别称为第一类错误概率和第二类错误概率,一般分别取0.05和0.2;Z为正态分布的分位数函数;Δ为两组数值的差异,如点击率1%到1.5%,那么Δ就是0.5%;σ为标准差,是数值波动性的衡量,σ越大表示数值波动越厉害。
从这个公式可以知道,在其他条件不变的情况下,如果实验两组数值差异越大或者数值的波动性越小,所需要的样本量就越小。
比例类数值所需样本量的计算
实际A/B测试中,我们关注的较多的一类是比例类的数值,如点击率、转化率、留存率等。
这类比例类数值的特点是,对于某一个用户(样本中的每一个样本点)其结果只有两种,“成功”或“未成功”;对于整体来说,其数值为结果是“成功”的用户数所占比例。如转化率,对于某个用户只有成功转化或未成功转化。
比例类数值的假设检验在统计学中叫做两样本比例假设检验。其最小样本量计算的公式为:
上面式子中p1我们称为基础值,是实验关注的关键指标现在的数值(对照组);p2我们称为目标值,是希望通过实验将其改善至的水平;第一类错误和第二类错误上边已经提到,暂不多做说明,通常设定α为0.05,β为0.2 。
既然样本量计算的公式已经清楚,那么我们按照公式代入即可得到结果。这里介绍5种获得比例类数值实验所需样本量的方法,分别为在线工具、Excel、R、Python、G*Power。
以下将以以p1=0.3,p2=0.305,α=0.05,β=0.2为例,演示在这几个工具里计算样本量的方法。
用在线工具计算所需样本量
Evan's Awesome A/B Tools 是一个被使用较多的在线工具,使用起来非常方便,如图:
简单输入几个,底下就显示了结果:每组大约需要132047的样本量。
在Excel中计算所需样本量
在Excel中用上NORM.S.INV等函数,即可实现样本量计算。如图:
C7-C11的公式分别为:
C7:=(NORM.S.INV(C4/2)+NORM.S.INV(C5))^2*(C2*(1-C2)+C3*(1-C3))/(C3-C2)^2
C8:=(NORM.S.INV(C4/2)*SQRT(2*(C2+C3)/2*(1-(C2+C3)/2))+NORM.S.INV(C5)*SQRT(C2*(1-C2)+C3*(1-C3)))^2/(C3-C2)^2
C9:=(NORM.S.INV(C4/2)*SQRT(2*C2*(1-C2))+NORM.S.INV(C5)*SQRT(C2*(1-C2)+C3*(1-C3)))^2/(C3-C2)^2
C10:=2*(NORM.S.INV(C4/2)+NORM.S.INV(C5))^2/(2*ASIN(SQRT(C2))-2*ASIN(SQRT(C3)))^2
C11:=16*(C2*(1-C2))/(C3-C2)^2
在R中计算所需样本量
:R中可以直接使用power.prop.test函数实现。一行代码就可搞定:
power.prop.test(p1 = 0.30, p2 = 0.305, sig.level = 0.05, power = 0.80, alternative = "two")
执行后立即得到输出结果,结果中n即为每组所需的样本量。
在Python中计算所需样本量
Python中科学计算库里statsmodel也可直接支持计算。具体代码为:
from statsmodels.stats.power import zt_ind_solve_power
from statsmodels.stats.proportion import proportion_effectsize as es
zt_ind_solve_power(effect_size=es(prop1=0.30, prop2=0.305), alpha=0.05, power=0.8, alternative="two-sided")
执行后得到结果:
在G*Power中计算所需样本量
打开G*Power,选取Test family、Statistical test和Type of power analyisis为如下截图所示且输入对应数值。A/B 测试一般是实验组和对照组样本一样多,故N2/N1设为1。
点击Calculate,得到Sample size group1和Sample size group2即为对照组和实验组所需的样本量。
上述的是对照组和实验组样本量相等的情况,如果两个组样本量不一样呢?直接用实验组+对照组=2n来判断可以吗
黄老师牛逼!
This has been a very useful resource for my personal practice and learning. Thank you very much
楼主,请问上述的流量计算公式的原理是什么呀?它是如何保证得到的流量能够满足实验要求呢?
统计学里的根据要满足的第一类错误和第二类错误推算出来的
楼主您好,我想请问下,如果要验证上线一个策略,对整体广告收入的影响,要用什么比例类指标合适呢?ARPU值还是ecpm?这两个是比例类指标吗?
可以用arpu吧,这是均值类的指标。
感谢分享,请问比例类的样本量n也是指每组的样本量吗?
是的
实验所需样本量的一般公式中的方差指的是那个方差呢?谢谢博主的分享
指标的样本方差
请问 验证新上线产品的转化率水平 所需的最小样本量 如何计算?
样本量计算公式那里跟google分层实验论文和另外一个计算网站上的公式不一样,那边的到的n前面需要乘以2,最终control和test都是2n,你这里看起来是n啊
关于实验所需样本量的一般公式是不是有问题,我看google分层ab test和这个网站http://powerandsamplesize.com/Calculators/Compare-2-Means/2-Sample-Equality都是要多乘以2
我这说的是每组所需样本量,链接这里说的应该是总共所需的样本量吧,如果实验组和对照组样本量一样多,那么就是2倍。
链接里确实是单组的样本量,好像是要乘以2,因为power的公式里n1=n2的情况下,两个组方差会加起来变成2倍方差所以有个2。
这个问题底下评论区回复过了。
你是对的
博主您好,感谢博主的分享。
请教一个问题,如果不是比例类数值所需样本量的计算,而就是一个数值比如roi的变化,这个怎么计算所需样本~您知道吗
要比较的是两个实验策略小ROI的差异吗 ?
比如比较不是比例类的指标,可能是一个策略对用户下单的交易额了影响
那比较的指标可以看做平均交易额,取交易额的均值和方差代入,就可以计算到所需最小样本量。
如果我是均值会变化比如预期某个指标会从1100降到800左右,这种不是比例的最小样本量应该怎么计算呢
是类似于dau的计数类指标?
dau这样的指标,最小样本量怎么计算呢
可以尝试转化为周活跃天(相当于是均值类指标)来算
是的
您好 我想请问这是针对有实验关注的关键指标现在的数值的情况。
那如果我是新上线一款产品,预期转化率是30%,怎么确定我需要收集多少样本呢
是需要验证新上线产品转化率水平,还是要验证两种方案转化率差异,这两个样本量计算有点不一样
我需要验证2种方案的转化率差异,这种怎么计算 呀?
根据文中公式就可以计算
博主您好,看了你的分享收获很大。
想请教一个问题,C7-C11的公式和结果不一样,是由于各网站或者各法则的公式不一样吗?那实际工作中一般会用到哪个呢?
样本量足够的情况下一般用C11比较快,计算公式简单,样本量最大;偷懒的时候,用C9,页面上输入下就自动帮你计算了。当实验达到了所需最小样本量之后,再去看下是否统计显著就行。
Pingback: A/B测试系列文章之A/B测试背后的科学原理 – Jeff的数据科学笔记
公式和图表都没有显示出来
非常感谢反馈,应该已经解决了,再看看?