AB实验实际上是在做一个假设检验,可以参考上一篇笔记【概率论】- (2)假设检验。在查资料的过程中,查到AB实验主要有两种检验方式(不同的样本量,不同的检验方式)——
这里以Z检验为例,介绍如何确定AB实验中实验组与对照组的样本量,提供相应的代码,卡方检验原理相似。
在假设检验中有以下两类错误——
在教科书中一般只限定显著性水平为 α \alpha α,即只考虑一型错误的概率,而不考虑二型错误。但在实际应用中(如AB实验),二型错误也必须限定在较低的范围内。如下例子,这种情况下即使 α \alpha α 足够小,实验结果仍不够具有说服性。
假设实验的显著性水平 α = 0.01 \alpha=0.01 α=0.01,二型错误概率 β = 0.5 \beta=0.5 β=0.5,这意味着——
- 若原假设为真,我们判断出错(即拒绝)的概率为1%;
- 若原假设为假,我们判断出错(即接受)的概率为50%。
上面说的考虑二型错误,更常见的是考虑统计功效Statistical Power
。
统计功效是指当原假设为假,拒绝原假设的概率。因此有 p o w e r = 1 − β power = 1-\beta power=1−β。
通过求解统计功效,即可得到统计功效与 α 、 n \alpha、n α、n 的关系式。反过来,知道 α 、 p o w e r \alpha、power α、power 后就可以求出所需的样本量。
H 0 : μ A = μ B H 1 : μ A ≠ μ B (1) H_0:\mu_A=\mu_B \\ H_1:\mu_A \ne\mu_B\tag{1} H0:μA=μBH1:μA=μB(1)
β = P ( 接 受 H 0 ∣ H 0 为 假 ) = P ( − z α / 2 ≤ x ˉ A − x ˉ B σ / n A + n B ≤ z α / 2 ∣ δ ≠ 0 ) = P ( − z α / 2 − δ σ / n A + n B ≤ ( x ˉ A − x ˉ B ) − δ σ / n A + n B ≤ z α / 2 − δ σ / n A + n B ) = ϕ ( z α / 2 − δ σ / n A + n B ) ) − ϕ ( − z α / 2 − δ σ / n A + n B ) ) (2) \begin{aligned} \beta&=P(接受H_0|H_0为假)\\ &=P(-z_{\alpha/2}\le \frac{\bar x_A-\bar x_B}{\sigma/\sqrt{n_A+n_B}}\le z_{\alpha/2}|\delta \ne 0)\\ &=P(-z_{\alpha/2}-\frac{\delta}{\sigma/\sqrt{n_A+n_B}}\le \frac{(\bar x_A-\bar x_B)-\delta}{\sigma/\sqrt{n_A+n_B}}\le z_{\alpha/2}-\frac{\delta}{\sigma/\sqrt{n_A+n_B}})\\ &=\phi(z_{\alpha/2}-\frac{\delta}{\sigma/\sqrt{n_A+n_B}}))-\phi(-z_{\alpha/2}-\frac{\delta}{\sigma/\sqrt{n_A+n_B}})) \tag{2} \end{aligned} β=P(接受H0∣H0为假)=P(−zα/2≤σ/nA+nBxˉA−xˉB≤zα/2∣δ=0)=P(−zα/2−σ/nA+nBδ≤σ/nA+nB(xˉA−xˉB)−δ≤zα/2−σ/nA+nBδ)=ϕ(zα/2−σ/nA+nBδ))−ϕ(−zα/2−σ/nA+nBδ))(2)
注意,由于 H 0 H_0 H0 为假,即 μ A ≠ μ B \mu_A \ne \mu_B μA=μB, X ˉ A − X ˉ B σ / n A + n B \frac{\bar X_A-\bar X_B}{\sigma/\sqrt{n_A+n_B}} σ/nA+nBXˉA−XˉB 不服从正态分布,所以需要转化为 ( X ˉ A − X ˉ B ) − δ σ / n A + n B \frac{(\bar X_A-\bar X_B)-\delta}{\sigma/\sqrt{n_A+n_B}} σ/nA+nB(XˉA−XˉB)−δ 才服从标准正态分布。
p o w e r = 1 − β = 1 − ϕ ( z α / 2 − z ) + ϕ ( − z α / 2 − z ) = ϕ ( − z α / 2 + z ) + ϕ ( − z α / 2 − z ) (3) \begin{aligned} power=1-\beta&=1-\phi(z_{\alpha/2}-z)+\phi(-z_{\alpha/2}-z)\\ &=\phi(-z_{\alpha/2}+z)+\phi(-z_{\alpha/2}-z) \tag{3} \end{aligned} power=1−β=1−ϕ(zα/2−z)+ϕ(−zα/2−z)=ϕ(−zα/2+z)+ϕ(−zα/2−z)(3)
上述推导出了统计功效的计算公式,当然计算样本量已经有很多工具,比如Z检验计算样本量工具,这个工具中也提供了计算公式,与上面推导出的类似,注意区别在于这个工具的 z 1 − α / 2 z_{1-\alpha/2} z1−α/2 是下分位点,上述推导是上分位点。
从这个网站的公式中也可以看到样本量的计算公式。
python中提供了假设检验的函数(R中也有类似的函数,参考pwr功效分析R包),Z检验的函数定义如下,使用的时候提供参数,留一个未知参数(None),返回值为未知参数的计算结果,看后面的具体例子。
from statsmodels.stats.power import NormalIndPower
NormalIndPower().solve_power(
effect_size=None,
nobs1=None,
alpha=None,
power=None,
ratio=1.0,
alternative='two-sided',
)
第一个参数effect_size
表示效应量,代表不同处理下总体差异的大小(即判断有没有差别,还要判断差多少)。在Z检验中确定样本量可以使用 ∣ μ A − μ B ∣ σ \frac{|\mu_A-\mu_B|}{\sigma} σ∣μA−μB∣ 近似效应量。
假设原方案的留存率为0.40,新方案的留存率预计为0.45,方差为1,则求解样本量如下:
卡方检验的推导思路应该与Z检验大致相同,我没有去尝试,这里直接用python函数求解,并与工具对比。
python提供的卡方检验函数如下,使用方法与Z检验的函数相同。
from statsmodels.stats.power import GofChisquarePower
GofChisquarePower().solve_power(
effect_size=None,
nobs=None,
alpha=None,
power=None,
n_bins=2,
)
卡方检验中,四格表的效应量计算公式如下(百度百科-效应量):
ϕ = χ 2 n = n ( a d − b c ) 2 / [ ( a + b ) ( c + d ) ( a + c ) ( b + d ) ] n = ( a d − b c ) 2 / [ ( a + b ) ( c + d ) ( a + c ) ( b + d ) ] \phi=\sqrt{\frac{\chi^2}{n}}=\sqrt{\frac{n(ad-bc)^2/[(a+b)(c+d)(a+c)(b+d)]}{n}}=\sqrt{(ad-bc)^2/[(a+b)(c+d)(a+c)(b+d)]} ϕ=nχ2=nn(ad−bc)2/[(a+b)(c+d)(a+c)(b+d)]=(ad−bc)2/[(a+b)(c+d)(a+c)(b+d)]
假设原方案的留存率为0.40,新方案的留存率预计为0.45,方差为1,则求解样本量如下:
因为没有实际进行过AB实验,不太清楚实际应用中使用的是哪种方式。个人认为卡方检验更为方便实用,一方面是样本量更少,实验成本更低,另一方面需要提供的参数也更少(不需要提供方差)。
以上是我对于AB实验样本量计算的一些思考,如有错误,请大佬指正~
《浙江大学概率论与数理统计第四版》
略谈假设检验第二类错误的概率
Z检验计算样本量工具
另一个Z检验计算样本量工具
pwr功效分析R包
卡方检验计算样本量工具
另一个卡方检验计算样本量工具