開發

為什么要在離線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測試的情況下實現更高效的離線決策,以及更高效的在線決策。

注意:

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

我還沒有學會寫個人說明!

虛擬化Pod性能比裸機還要好,原因竟然是這樣!

上一篇

微盟系統崩潰后續:微商城等核心業務已恢復

下一篇

你也可能喜歡

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

長按儲存圖像,分享給朋友

ITPUB 每周精要將以郵件的形式發放至您的郵箱


微信掃一掃

微信掃一掃
双色球常规走势图 鑫配网配资 广西快乐双彩开奖公布 河南四人麻将玩法规则 cba比赛各队比分 超级大透乐开奖结果 中国足球彩票比分直播网 山东体彩11选5走 棒球比分直播网 黑龙江福利彩票22选5走势图 网上不能炒 广西麻将十三幺怎么打 河北十一选五历史开