為什麼要在離線A/B測試中使用貝葉斯方法?

作者 | Alain Tanguy

編譯 | VK

來源 | Towards Data Science

當涉及到假設檢驗時,貝葉斯方法可以取代經典的統計方法。這裡將使用web分析的具體案例來演示我們的演示。

貝葉斯方法在經典統計中的重要性在此鏈接。https://towardsdatascience.com/from-frequentism-to-bayesianism-hypothesis-testing-a-simple-illustration-11213232e551


假設檢驗是統計學中的一個中心話題,它的應用範圍很廣,超出了數學的範圍,即使不是全部科學領域,也可以擴展到大多數科學領域。

我們將高度重視常規統計頻率的方法的局限性,並提出一個相關的貝葉斯框架,以解決數據科學家在零售或營銷工作中可能遇到的最常見的情況之一:A/B測試

問題陳述

A/B測試(也稱為分桶測試)為一種隨機測試,將兩個不同的東西(即A和B)進行假設比較。該測試運用統計學上的假設檢定和雙母體假設檢定。A/B測試可以用來測試某一個變數兩個不同版本的差異,一般是讓A和B只有該變數不同,再測試其他人對於A和B的反應差異,再判斷A和B的方式何者較佳(維基百科)

也許我們想為我們的網站測試一個新的設計,新的功能,甚至是針對我們的客戶的新策略,以衡量哪一個會導致最高的投資回報率。為了清晰起見,我們將考慮廣告使用A和B兩種創意的情況下試圖提高轉化率:每個交互廣告的用戶可以被看作是有兩個可能的結果的伯努利試驗:「轉換」和「不轉換」,根據用戶購買我們產品後顯示廣告。

可以考慮兩種設計來運行這個實驗:

  • 離線:可以理解為已快取的本地數據集中進行實驗
  • 在線:在實驗中進行分析和決策。

由於離線A/B測試問題需要截然不同的解決方案,因此本文只討論離線情況。

頻率方法:p值法和roc曲線法

每個用戶被展示為創意A或B的概率為0.5,並直接以未知的概率p_A=0.04或p_B=0.05進行轉換。

import scipy.stats as stats    #真實概率  p_A = 0.05  p_B = 0.04    #用戶流量  n_users = 13500  n_A = stats.binom.rvs(n=n_users, p=0.5, size=1)[0]  n_B = n_users - n_A    #轉換策略  conversions_A = stats.bernoulli.rvs(p_A, size=n_A)  conversions_B = stats.bernoulli.rvs(p_B, size=n_B)    print("creative A was observed {} times and led to {} conversions".format(n_A, sum(conversions_A)))  print("creative B was observed {} times and led to {} conversions".format(n_B, sum(conversions_B)))  

第一個困難很快出現:為了確定一個廣告素材是否比另一個更好,我們應該使用哪種測試?下表總結了常見的測試,由我們來選擇最適合我們的問題的測試。

在我們的例子中,Fisher』s exact test和 Barnard』s test似乎是最相關的,因為我們關注從二項式分布獲得的轉化率

我們將使用Fisher檢驗,它具有屬於精確檢驗類別的特點,之所以這樣稱呼它,是因為它的p值可以精確計算

  • H0:廣告素材的效果相當(p_A = p_B)
  • H1:一個廣告素材的效果要好於另一個

優良作法要求我們確定測試的統計能力。可以根據給定環境設計的模擬結果進行計算。我們的目標是0.8,我們使用的觀測量將被校準,以達到這個閾值。為了方便起見,我們僅考慮替代假設H1-「替代假設p_A = 0.04或p_B = 0.05」,這將使我們能夠輕鬆地計算檢驗的效果。

通常,α= 0.05是p值(即誤報率)的拒絕區域接受的極限。對於此閾值,將至少需要13500次觀測。

解釋測試結果

我們會問一個問題。從我們的測試結果和p值中我們可以得出什麼結論?

  1. 我們是否可以估算廣告素材A優於廣告素材B的可能性?
  2. 如果是的話,我們可以估計他們之間的進步嗎?

兩個問題的答案都是否定的。我們已經了解到,在假設(H0)下,p值僅僅是觀察結果的可能性至少是極端的。但這也凸顯了p值最重要的局限性:

p值不是效果大小的度量!即使獲得了積極的結果,它也沒有提供關於A的效果優於B的資訊。

為了提取有關效果大小的知識,可以使用另一個更強大的工具:置信區間。

置信區間(CI)

置信區間表示與真實參數在建議範圍內的置信度相關的未知參數的合理值範圍。

這給了我們更多的理解和豐富的見解,為我們提供了關於我們估計的概率和不確定性的知識。然而,它們也有自己的缺點:

  1. 我們需要選擇不同的方法來定義這些區間,這取決於一些假設:二項分布的置信區間。
  2. p_A和p_B值的置信區間不會直接轉換為p_A和p_B之間的差值的置信區間!幸運的是,存在直接計算差值的置信區間的方法,但是我們仍然需要從幾十種方法中選擇一種。

例如,我們可以使用「最簡單的」,即不需要連續性校正的Wald方法:

用?̂的經驗估計p_A和p_B,並且z對應於正態分布的α/2-百分位數。因此,對於95%置信區間(即α= 0.05),相應的z值將為1.96。

數值應用將給我們間隔[0.0009; 0.0171]以0.009為中心,不像我們希望的那樣與0重疊!

貝葉斯方法:簡單之美

對於本部分,我們將使用python的PyMC3庫,這使我們能夠輕鬆地構建貝葉斯非參數模型。

重要的是要記住,我們作為統計學家或數據科學家的目標顯然是為了構想準確和相關的結果,而且同樣重要的是,生成可以被任何其他利益相關者(甚至是非科學利益相關者)共享和理解的KPI。它將攜帶儘可能多的資訊。貝葉斯方法為我們提供了執行此操作所需的工具,它允許我們精確地計算所需的內容:p_A和p_B的後驗分布,即P(p_A | X)和P(p_B | X)以及P(p_A — p_B> 0 | X),即,廣告素材A比廣告素材B產生更多轉化的概率

這裡的貝葉斯模型還是很簡單的,因為我們已經用數學方法設計了環境,我們只需要用貝葉斯語言來複制它。

優先選擇的問題不可避免地出現。我們將為p_A和p_B選擇無資訊的統一先驗。

import pymc3 as pm    with pm.Model() as model:      n_users = 10000        #定義隨機和確定性變數(構建網路)      #用戶的數量      n_A = pm.Binomial("n_A", n_users, 0.5)      n_B = pm.Deterministic("n_B", n_users - n_A)        # 數量的轉換      conversions_A = pm.Binomial("conversions_A", n_A, p_A)      conversions_B = pm.Binomial("conversions_B", n_B, p_B)        observed_conversions_A = pm.Deterministic('observed_conversions_A', conversions_A)      observed_conversions_B = pm.Deterministic('observed_conversions_B', conversions_B)        p_estimates = pm.Uniform("p_estimates", 0, 1, shape=2)      delta = pm.Deterministic("delta", p_estimates[1] - p_estimates[0])        #向網路提供觀測數據      obs_A = pm.Binomial("obs_A", n_A, p_estimates[0], observed=observed_conversions_A)      obs_B = pm.Binomial("obs_B", n_B, p_estimates[1], observed=observed_conversions_B)        #運行MCMC演算法      start = pm.find_MAP()      step = pm.Metropolis()      trace = pm.sample(50000, step=step)      burned_trace = trace[1000:]  

我們也可以計算貝葉斯網路的圖形表示:

就這麼簡單,我們的工作結束了!我們剩下的全部工作就是通過網路運行MCMC演算法,以計算後驗分布。與現在的方法相比,這些將為我們提供更多的見解,因為現在我們可以通過從後驗對象中直接取樣來得出任何α水平的置信區間。

(很重要的一點是,由於p_A和p_B可能是依賴的,因此無法從p_A和p_B的後驗值計算出增量)

結果

我們可以簡單地計算出小於0的後驗概率:

np.mean (delta_samples < 0)  

在這裡,我們得到了0.956,這意味著廣告素材A產生的轉化率比廣告素材B高出96%!

但我們可以更進一步。想像一下,從設計B轉換到設計A是很昂貴的,並且只有至少提高5%的性能才能盈利。我們有辦法計算它!只需在我們的網路中插入一個新的確定性變數Tau = p_A/p_B,然後對後驗分布進行取樣。

tau = pm.Deterministic(「tau」, p_estimates[0] / p_estimates[1])  

根據MCMC抽樣估計的Tau的後驗分布

np.mean (tau_samples > 1.05)  

這次我們得到0.91…並不像我們通常希望的95%那樣具有決定性。如果我們需要更多的信心,我們只需要運行A / B測試更長的時間。

結論

  • 貝葉斯框架為經典的A/B檢驗方法提供了一個易於執行和閱讀的替代方法,並允許我們通過簡單地計算後驗分布來檢驗任何假設。
  • 貝葉斯方法使我們能夠在A/B測試的情況下實現更高效的離線決策,以及更高效的在線決策。

注意:

不同的先驗會給我們帶來不同的後驗。