A/B測試系列文章之怎么計算實驗所需樣本量


本文來源: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測試中,我們關注的較多的一類是比例類的數值,如點擊率、轉化率、留存率等。

這類比例類數值的特點是,對於某一個用戶(樣本中的每一個樣本點)其結果只有兩種,“成功”或“未成功”;對於整體來說,其數值為結果是“成功”的用戶數所占比例。如轉化率,對於某個用戶只有成功轉化或未成功轉化。

比例類數值的假設檢驗在統計學中叫做兩樣本比例假設檢驗。其最小樣本量計算的公式為:

R和G*Power使用的樣本量計算公式

上面式子中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等函數,即可實現樣本量計算。如圖:

Excel中計算所需樣本量

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即為每組所需的樣本量。

R中計算所需樣本量

在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")

執行后得到結果:

Python中計算所需樣本量

在G*Power中計算所需樣本量

打開G*Power,選取Test family、Statistical test和Type of power analyisis為如下截圖所示且輸入對應數值。A/B 測試一般是實驗組和對照組樣本一樣多,故N2/N1設為1。

點擊Calculate,得到Sample size group1和Sample size group2即為對照組和實驗組所需的樣本量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM