1. 程式人生 > >計算A/B Test需要的樣本量

計算A/B Test需要的樣本量

A/B Test是我們做演算法模型時離不開的助手,只有通過A/B Test的模型才能進入產品。但要使A/B Test達到應有的效果,我們必須嚴格地滿足它的一些要求。這裡有一篇關於A/B test的文章:ABtest和假設檢驗、流量分配寫得很好,我只在這裡補充一些細節。

Z檢驗

很多情況下,我們要用Z檢驗來判斷A/B Test的有效性。Z檢驗,也稱“U檢驗”,是為了檢驗在零假設情況下測試資料能否可以接近正態分佈的一種統計測試。根據中心極限定理,在大樣本條件下許多測驗可以被貼合為正態分佈。在不同的顯著性水平上,Z檢驗有著同一個臨界值,因此它比臨界值標準不同學生t檢驗更簡單易用。當實際標準差未知,而樣本容量較小(小於等於30)時,學生T檢驗更加適用。

我們設H0假設為A、B沒有顯著性差異,H1假設為A、B有顯著性差異。那我們就有幾個重要的資料需要考慮:

  • 樣本容量,即A、B的sample數量,一般我們會設na=nbn_a = n_b
  • power:拒絕H0後接受H1的概率,一般設為90%
  • 置信度:我們做出結論的可信度有多少,一般是0.95或者0.99
  • 顯著性:1-置信度,也就是0.05或者0.01
  • 置信區間:目標值的置信區間,以高斯分佈為例,是[vλσ,v+λσ][v - \lambda\sigma, v + \lambda\sigma],其中λ\lambda與置信度有關

statsmodels

Python有一個統計工具statsmodels,其中有一個

NormalIndPower工具可以用來計算Z檢驗。

舉一個簡單的?,我們已知目前的CTR是0.7,我們想要提升10%即將CTR提升到0.77,A和B的sample size相同,那麼我們計算需要的樣本量的方法為:

effect_size = 0.1
print NormalIndPower().solve_power(
    effect_size=effect_size,
    nobs1=None,
    alpha=0.05,
    power=0.9,
    ratio=1.0,
    alternative='larger'
) 

計算器

網上有很多sample size計算器,比如說這就是一個

Sample Size Calculator。其中,Conversion Rate是指優化目標現在的值,例如現在的CTR,其他的metrics則像我們之前提到的那樣。