編者按:和Google產(chǎn)品分析Zlatan Kremonic一起探索A/B測試的貝葉斯方法背后的理論。
本文將探索A/B測試的貝葉斯方法背后的理論。這一方法最近得到了廣泛認(rèn)同,并在一些情形下取代了流行的頻率方法。在講述理論之后,我們將查看一個實例。
頻率統(tǒng)計
頻率統(tǒng)計以收集數(shù)據(jù)、測試假設(shè)這一傳統(tǒng)方法為中心。頻率統(tǒng)計分為以下步驟:
形式化假設(shè)。
收集數(shù)據(jù)。
計算基本的測試統(tǒng)計,包括p值和置信區(qū)間。
決定是否駁回零假設(shè)(null hypothesis)。
頻率統(tǒng)計的重要假定是參數(shù)是確定的,不過我們并不知曉。我們接下來收集的數(shù)據(jù)是那些參數(shù)及其分布的一個函數(shù)。用數(shù)學(xué)可以表達為:

其中X是數(shù)據(jù)樣本,θ是零假設(shè)下的數(shù)據(jù)分布,戴帽θ是觀測到的參數(shù)。
總結(jié)科研報告的數(shù)據(jù)時,這一方法非常有用。置信區(qū)間的應(yīng)用為我們提供了非常直觀地理解觀測到的參數(shù)的方式。不過,這一頻率方法有一些缺陷:
當(dāng)我們發(fā)現(xiàn)p值明顯增加時,較早停止測試會增加得到假陽性結(jié)果的幾率。
我們無法測量研究結(jié)論為真的概率。
p值容易被誤解。
試驗必須全部事先指定,這可能導(dǎo)致看起來自相矛盾的結(jié)果。
多臂老虎機問題
在我們跳到貝葉斯推理之前,先在一個有用(且經(jīng)典)的場景下考察我們的問題,這很重要。在多臂老虎機問題中,我們在一家賭場玩老虎機。給定不是所有的老虎機返水率相同這一條件,如果我們同時玩兩臺老虎機,我們將開始發(fā)現(xiàn)兩臺老虎機的結(jié)果不同。這導(dǎo)致了“探索v.s.利用困境”,迫使我們決定到底是利用高返水的機器,還是探索(隨機)選項以收集更多數(shù)據(jù)。不管我們選擇利用的程度如何,我們都在讓我們的行為適應(yīng)觀測數(shù)據(jù),這正是強化學(xué)習(xí)的一般假定之一。我們的目標(biāo)是通過提高我們正做出正確決策的確定性,最大化返水,最小化損失。
處理多臂老虎機問題有很多策略,包括Epsilon-Greedy算法和UCB1算法,不過,也該讓貝葉斯推理出場了。
貝葉斯統(tǒng)計
貝葉斯統(tǒng)計以貝葉斯定理為中心:

在我們試圖得出關(guān)于給定數(shù)據(jù)集的參數(shù)的結(jié)論的科研問題中,我們可以將參數(shù)視作隨機變量(有自己的分布):

這里,
P(θ|X)稱為后驗,意為給定數(shù)據(jù)X,關(guān)于參數(shù)θ的新信念。
P(X|θ)稱為似然,回答給定當(dāng)前參數(shù)θ有多大可能觀測到我們的數(shù)據(jù)。
P(θ)是先驗,意為我們關(guān)于θ的舊信念。
P(X)是P(X|θ)P(θ)dθ的積分,但因為它并不包含θ,可以直接忽略這一點,將它作為一個歸一化常量。
現(xiàn)在我們看到了貝葉斯范式轉(zhuǎn)變。和頻率方法不同,這里我們收集數(shù)據(jù)的前后都考慮到了參數(shù)的分布。知曉參數(shù)的分布讓我們可以給參數(shù)估計分配給定的置信度。
但我們?nèi)绾沃獣院篁灧植寄??答案在“共軛先驗”這一概念之中:如果先驗概率分布和后驗概率分布同屬一個家族,那么它們稱為共軛分布,且先驗稱為似然函數(shù)的共軛先驗。簡單來說,如果我們知道似然函數(shù)的分布,我們就可以確定后驗和先驗的分布。
讓我們來看一個例子,假設(shè)我們正測量點擊率(某人是否點擊一則廣告)。因為我們測量的是二值輸出(點擊、沒點擊),所以我們處理的是伯努利分布,這意味著似然為:

伯努利分布的共軛先驗是貝塔分布:

其中B(a, b)為貝塔函數(shù)。
我們需要求解后驗,首先結(jié)合似然和后驗:

上式可以簡化為:

因此,我們可以看到,事實上P(θ|X)確實屬于貝塔分布,只不過超參數(shù)略有變動。由此我們得到:

其中,

在我們的點擊率問題中,a' = a + 點擊數(shù),b' = b + 未點擊數(shù)。
直覺上,這很合理。因為它告訴我們,后驗分布是收集數(shù)據(jù)的函數(shù),且后驗分布可以用作更多樣本的先驗,其中的超參數(shù)直接加上新得到的額外信息。
進一步查看下貝塔分布,我們注意到這一分布的均值為:

這和最大化似然時得到的值相同。最后,當(dāng)a和b增加時,貝塔分布的方差遞減,可類比頻率方法中置信區(qū)間的表現(xiàn):

例子:湯普森采樣
在這個例子中,我們將演示如何使用湯普森采樣基于貝葉斯推理解決多臂老虎機問題。我們將使用2000次測試,而三臂的返水率為0.2、0.5、0.75. 首先,我們定義具有給定概率的Bandit(老虎機)類。該類提供一個pull(拉)方法,基于其概率返回獎勵或損失(1或0)。我們也能更新a、b,并使用這些值從所得貝塔分布中取樣。
importmatplotlib.pyplotasplt
importnumpyasnp
fromscipy.statsimportbeta
NUM_TRIALS =2000
BANDIT_PROBABILITIES = [0.2,0.5,0.75]
classBandit(object):
def__init__(self, p):
self.p = p
self.a =1
self.b =1
defpull(self):
return1ifnp.random.random() < self.pelse0
defsample(self):
returnnp.random.beta(self.a, self.b)
defupdate(self, x):
self.a += x
self.b +=1- x
下面,我們將定義一個函數(shù)繪制老虎機的貝塔分布:
defplot(bandits, trial):
x = np.linspace(0,1,200)
forbinbandits:
y = beta.pdf(x, b.a, b.b)
plt.plot(x, y, label="real p: %.4f"% b.p)
plt.title("Bandit distributions after %s trials"% trial)
plt.legend()
plt.show()
現(xiàn)在,開始我們的試驗。首先,我們初始化三臺老虎機。我們將根據(jù)預(yù)先確定的sample_points繪制它們的分布。每次測試時,我們從每臺老虎機的分布中取樣,并選擇返水率最高的老虎機。被選中的老虎機將有機會拉動它的拉桿,進而更新其a、b值。
defexperiment():
bandits = [Bandit(p)forpinBANDIT_PROBABILITIES]
sample_points = [5,50,100,500,1999]
foriinxrange(NUM_TRIALS):
# 從每個老虎機取樣
bestb =None
maxsample = -1
allsamples = []# 收集這些數(shù)據(jù)以便調(diào)試時打印
forbinbandits:
sample = b.sample()
allsamples.append("%.4f"% sample)
ifsample > maxsample:
maxsample = sample
bestb = b
ifiinsample_points:
print"current samples: %s"% allsamples
plot(bandits, i)
# 拉動樣本最大的老虎機的拉桿
x = bestb.pull()
# 更新剛剛拉動拉桿的老虎機的分布
bestb.update(x)
調(diào)用experiment()函數(shù)可以進行測試。

測試5次后

測試50次后

測試100次后

測試500次后
測試1999次后
從試驗中,我們可以觀察到一些有趣的東西。我們注意到每個分布的均值逐漸向真值收斂。不過我們看到,高返水的老虎機的方差最低,這反映了它具有最高的N。然而,這未必是一個問題,因為最后返水最高的分布和其他兩個較低的分布幾乎沒有重疊的部分,這意味著從較差的老虎機取樣將產(chǎn)生較高返水的概率是最小的。
結(jié)果概率
基于湯普森采樣的貝葉斯推斷的另一優(yōu)勢是我們可以計算給定結(jié)果優(yōu)于替代選擇的概率。例如,如果我們正測量兩個競爭頁面的點擊率,期望回報將是后驗分布的均值。那么,給定均值高于另一均值的概率,可以通過計算兩者的聯(lián)合概率分布函數(shù)之下的面積得到。假設(shè)均值二高于均值一,則:
結(jié)論
就A/B測試問題而言,貝葉斯推理和頻率方法之間沒有明顯的贏家,在選擇一種方法之前最好首先評估場景。參考鏈接部分的最后一個鏈接提供了關(guān)于何處適用老虎機測試(包括湯普森采樣)的一些要領(lǐng)。
-
貝葉斯
+關(guān)注
關(guān)注
0文章
77瀏覽量
12916 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1236瀏覽量
26184
原文標(biāo)題:基于湯普森采樣的貝葉斯A/B測試
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
使用PyMC3包實現(xiàn)貝葉斯線性回歸
基于應(yīng)變模態(tài)和貝葉斯方法的桿件損傷識別
貝葉斯算法(bayesian)介紹
如何理解貝葉斯公式
貝葉斯統(tǒng)計的一個實踐案例讓你更快的對貝葉斯算法有更多的了解
一文秒懂貝葉斯優(yōu)化/Bayesian Optimization
探索A/B測試的貝葉斯方法背后的理論
評論