上一節我們聊了聊用Wilson區間估計來處理小樣本估計,但從原理上來說這種方法更像是一種Trick,它沒有從本質上解決樣本量小的時候估計不置信的問題,而是給估計加上一個和樣本量相關的置信下界,然后用這個下界替代估計進行打分。
想要從本質上解決小樣本估計不置信的問題,一個更符合思維邏輯的方法是我們先基於經驗給出一個預期估計,然后不斷用收集到的樣本來對我們的預期進行更新,這樣在樣本量小的時候,樣本不會對我們的預期有較大影響,估計值會近似於我們預先設定的經驗值,從而避免像小樣本估計不置信的問題。
假設\(\theta\)是我們要給出的估計,x是我們收集的數據, \(\pi(\theta)\)是我們基於經驗給出的預期。貝葉斯表達式如下:
原理看似簡單,但落實到實際應用就會出現幾個問題:
- 如何把實際問題抽象成概率分布 \(p(x|\theta)\)
- 如何設置預期概率分布 \(\pi(\theta)\)
- 如何用新樣本對分布進行更新得到參數估計
讓我們繼續用之前點贊的例子,一個一個解答上面的問題
二元貝葉斯更新
-
樣本分布抽象 \(p(x|\theta)\)
我們上一章已經討論如何對用戶的點贊拍磚行為進行抽象。簡單來說每一個用戶是否點贊\(\sim Bernoulli(p)\),用戶間相互獨立,所以N個用戶對某一篇文章點贊量\(\sim Binomial(n,p) = \left(\! \begin{array}{c} n \\ k \end{array} \! \right)p^k(1-p)^{(n-k)}\)
抽象出了樣本的概率分布,,我們要如何用這些樣本對我們想要估計的參數p(點贊率)進行更新呢? -
預期分布抽象- 共軛分布\(\pi(\theta)\)
這就涉及到另一個概念- 共軛先驗分布。名字非常高大上難以記住(剛剛wiki過才找到對應的中文...)。簡單解釋如果你的先驗分布和后驗分布一致,它們就分別是共軛先驗和共軛后驗。這個性質之所以如此吸引人就在於,可以持續用新樣本更新先驗分布。因為如果分布不變 \(p(\theta|x_i) \propto p(x_i|\theta) * \pi(\theta)\)就可以一直連着乘下去\(x_i , i \in (1,2,..N)\)
有這種性質的分布有幾種,而適用於二項分布的就是Beta分布。把先驗分布設為beta分布,不斷用二項分布的樣本數據去更新先驗分布,后驗分布還是beta分布。記憶卡片~Beta分布
Beta函數: \(Beta(a,b) = \frac{(a-1)!(b-1)!}{(a+b-1)!}\)
Beta分布概率密度 \(f(x;a,b) = x^{(a-1)}(1-x)^{(b-1)}/Beta(a,b)\)
Beta分布統計值:\(\mu = \frac{a}{a+b}\) -
分布更新-貝葉斯更新
看到Beta分布的概率密度很容易聯想到二項分布,因為它們十分相似。和二項分布對比x就是我們要估計的參數p,Beta分布的兩個參數a,b分別對應正負樣本數量k,n-k。換言之Beta分布是二項分布參數的分布。
下一步我們就需要用到Beta分布作為共軛分布的性質(先驗后驗分布不變)來對參數進行更新:
如果我們預期點贊和拍磚的概率是50%/50%,既\(\alpha=\beta\)。當我們對預期不是非常肯定的時候(對用戶行為更相信),我們的\(\alpha,\beta\)可以給的相對比較小,這樣樣本會很快修正先驗概率,反之\(\alpha,\beta\)給更大值。這里\(\alpha,\beta\)可以理解為我們根據預期設定的虛擬樣本,下面是一個直觀的例子:
\(\alpha =2, \beta = 2,\hat{p}=0.5\), 當收集到1個點贊樣本,更新后的參數變為,$\alpha = 3, \beta=2, \hat{p} \to 0.67 \( \)\alpha =10, \beta = 10, \hat{p}=0.5\(, 當收集到1個點贊樣本更新后的參數變為,\)\alpha = 11, \beta=10, \hat{p} \to 0.52 \( 一個更直觀的\)\alpha, \beta$取值變化對參數p分布的影響如下圖:
- \(\alpha, \beta\)越大方差越小,p的分布越集中
- \(\alpha\)增加,p估計均值越大
- \(\beta\)增加,p估計均值越小
拋開數學的部分,用貝葉斯更新的方法來估計用戶評分可以非常簡單的用下面的表達式來表示,其中\(\alpha\)是預設的點贊量, \(\beta\)是預設的拍磚量, n是收集到的全部樣本量,其中k是收集到的樣本中點贊的數量。
如何設定\(\alpha \beta\)決定了最終打分從哪里開始更新,以及最終打分對新樣本的敏感程度。
多元貝葉斯更新
上述我們對用戶的行為做了一個最簡單的抽象,只包括點贊和拍磚兩種行為。現實情況往往更復雜,比如用戶打分(五星評分),這種情況我們應該如何使用貝葉斯來得到更加穩健的分數估計呢?
讓我們對照着上面二項分布的思路來梳理一下
- 樣本分布抽象 \(p(x|\theta)\)
假設用戶的評分從1分-5分,用戶最終打了3分,則可以抽象成一個有5種可能的多項分布,用戶的選擇用向量表示就是 \((0,0,1,0,0)\) 。多項分布的表達式如下
其中N是用戶量,\(x_i\)是選擇打i分的用戶數,滿足$\sum_{i=1}^5 x_i = N $, \(\theta_i\)是打i分的概率,滿足 \(\sum_{i=1}^5 \theta_i = 1\)
我們通過收集到的用戶打分來給出打1分-5分的概率,最終用多項分布的期望作為最終打分。
- 共軛先驗
和二項分布一樣,現在我們需要找到多項分布的共軛先驗分布 - Dirchlet分布,也就是beta分布推廣到多項。Dirchlet的分布概率密度如下:
其中\(\alpha_0 = \sum_i^K \alpha_k\),當K=2的時候Dirchlet就是beta分布。和Beta分布相同, 其中\(\alpha_i\)可以理解為對打分為i的預期先驗。
- 貝葉斯更新
確定了先驗分布和后驗分布,我們用和beta相同的方法用收集到的樣本對參數進行更新。
上述的條件概率可以被簡單理解為,當我們收集到N個樣本其中\(m_i\)個樣本打了i分,則打i分的概率會從預置的先驗概率\(\frac{\alpha_i}{\sum_i^k\alpha_i}\)被更新為 \(\frac{\alpha_i + m_i}{\sum_i^k\alpha_i + N }\)
有了后驗概率,我們就可以得到最終打分如下
- 貝葉斯平均
針對小樣本打分一種很常用的方法叫做貝葉斯平均,許多電影網站的打分方法都來源它。讓我們先寫一下表達式:
其中C是預置樣本量(給小樣本加一些先驗樣本), N是收集的樣本量,m是先驗的總體平均打分,\(x_i\)是每個用戶的打分。貝葉斯平均可以簡單理解為用整體的先驗平均打分來對樣本估計進行平滑。
但其實讓我們對上述基於Dirchlet分布給出的打分式進行一下變形 $\sum_{i=1}^K i * \alpha_i = C *m $, \(\sum_{i=1}^K i * m_i = \sum_{i=1}^K x_i\), 會發現兩種計算方式是完全一致的!!
針對打分我們分別討論了時間衰減,以及兩種解決小樣本估計不置信的方法。 但這只是打分系統很小的一部分,還有一塊很有趣的是如何基於偏好調整最終的打分。以后有機會再聊吧
To be continue
Reference