本文來源:https://jeffshow.com/caculate-abtest-required-sample-size.html
本文暫不介紹實驗所需樣本量公式的由來,而是先給出樣本量計算常用的幾個公式,以及在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函數實現。一行代碼就可搞定:
1
|
power.prop.test(p1 = 0.30, p2 = 0.305, sig.level = 0.05, power = 0.80, alternative = "two")
|
執行后立即得到輸出結果,結果中n即為每組所需的樣本量。

在Python中計算所需樣本量
Python中科學計算庫里statsmodel也可直接支持計算。具體代碼為:
1
2
3
4
|
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即為對照組和實驗組所需的樣本量。