技術觀察三 - 貝葉斯定理

在概率學中,有不少定理可以用於三觀的世界觀的正確建設,貝葉斯定理顯然是其中之一,為我們打開觀察世界的一個新角度。

貝葉斯定理是用來做什麼的?簡單說,概率預測:某個條件下,一件事發生的概率是多大?

wiki把為什麼要做這個定理談的很清楚,是為了覆蓋逆概的場景:

在貝葉斯寫這篇文章之前,人們已經能夠計算「正向概率」,如「假設袋子裡面有N個白球,M個黑球,你伸手進去摸一把,摸出黑球的概率是多大」。而一個自然而然的問題是反過來:「如果我們事先並不知道袋子裡面黑白球的比例,而是閉著眼睛摸出一個(或好幾個)球,觀察這些取出來的球的顏色之後,那麼我們可以就此對袋子裡面的黑白球的比例作出什麼樣的推測」。這個問題,就是所謂的逆概問題。

再來舉個很通俗的例子:你看到一個人買了愛馬仕,那這個人多半是個中產階級以上人士。在這裡,我們用一件愛馬仕商品被購買的條件,來判斷了一個人的社會地位,在這裡,社會地位顯然和購買的商品是相關的事件,我們可以用事件A(購買商品)的出現,去判斷相關事件B(社會地位)的概率。

是不是很符合我們的直覺?基本符合,但是貝葉斯定理很遺憾的和人性有一點衝突,就是「人是健忘的」。人們傾向於給最近發生的事件更多概率,舉個例子,告訴你,A是10年前買了愛馬仕,B是昨天買了愛馬仕,請問哪個人是中產階級以上人士的概率高?我們直覺上往往會偏向認為B是中產階級以上人士的概率更高,但貝葉斯定理的推測顯然是一樣的概率。

到了這裡,扯個題外話,就是數學定理很多時候能夠幫助我們穿透時間這個維度的影響,直逼本質。而人的直覺,和時間解耦是很困難的,這也就是為什麼很多事情我們無法堅持長期有利的策略,德撲在river被bad beat就是很好的例子。不過,反過來說,貝葉斯定律,很可能也讓在「拐點時刻」,錯誤的判斷局勢。

接下來稍微來點公式,奠定一下根基。

事件B發生的條件下,事件A發生的概率為:

同理可得,事件A發生的條件下,事件B發生的概率為:

很容易推導得到:

假設若P(A)≠0,那麼就可以得到用來預測概率的貝葉斯定理了:

這個定理顯然是可以推導到多個條件的,比如在2個條件的情況下:

好,現在我們來看看幾個經典的案例:

信某宗教的人是恐怖分子的概率是多少?

假設100%的恐怖分子都相信某宗教,而某人相信某宗教,並不代表此人100%是恐怖分子,還需要考慮先驗概率,假設全球有7萬恐怖分子(全球人口70億),假設全球有1/3的人口相信某宗教,那麼這個人是恐怖分子的概率是多少?(題目基本引自wiki)

解:

我們要求解的是這個概率:P(恐怖分子|信某教)

套用公式,得到 :

P(恐怖分子|信某教)

=P(信某教|恐怖分子)P(恐怖分子)/P(信某教)

=100%*(7萬人/70億人)/(1/3)

=0.003%

也即十萬分之三的概率。延展開去,從數學理論上講,民主黨不針對某個信教人群是對的,但是題目中設定100%的恐怖分子信某教,這個假設就比較tricky了。。

檢測呈陽性的僱員吸毒概率是多少?

假設一個常規的檢測結果的敏感度與可靠度均為99%,即吸毒者每次檢測呈陽性(+)的概率為99%。而不吸毒者每次檢測呈陰性(-)的概率為99%。假設某公司對全體僱員進行吸毒檢測,已知0.5%的僱員吸毒。請問每位檢測結果呈陽性的僱員吸毒的概率有多高?

解:

我們要求解的是這個概率:P(吸毒|檢測呈陽性的僱員)

套用公式,得到 :

P(吸毒|檢測呈陽性僱員)

=P(檢測呈陽性僱員|吸毒)P(吸毒)/P(檢測呈陽性僱員)

=99%*0.5%/[P(檢測呈陽性僱員∩吸毒)+P(檢測呈陽性∩不吸毒)]

=99%*0.5%/[P(檢測呈陽性僱員|吸毒)*P(吸毒)+P(檢測呈陽性|不吸毒)*P(不吸毒)]

=99%*0.5%/[99%*0.5%+1%*99.5%]

=0.3322

也就是說,儘管吸毒檢測的準確率高達99%,但貝葉斯定理告訴我們:如果某人檢測呈陽性,其吸毒的概率只有大約33%,不吸毒的可能性比較大。不過也要注意,檢測的準確率高低,十分影響結果的概率,如果檢測精度達到99.9%,那麼檢測呈陽性的僱員吸毒的概率就上升到了83.39%。

垃圾郵件的過濾

這是Paul Graham在《黑客與畫家》中提到的辦法。這個問題其實可以倒推,我們要求解的是這個概率:P(垃圾郵件|檢測到某種特徵)。這個某種特徵可以是關鍵詞,可以是時間,可以是頻次,可以是郵件附件類型...包括以上各種特徵混合的特徵等等。

我們先用最簡單的關鍵詞來做推測,根據我個人的經驗,一個中國式垃圾郵件很可能會包含兩個字:發票。好,那麼我們要求解的一封郵件是不是垃圾郵件的概率就變成P(垃圾郵件|檢測到「發票」關鍵詞),根據貝葉斯定理

P(垃圾郵件|檢測到「發票」關鍵詞)

=P(檢測到「發票」關鍵詞|垃圾郵件)/P(檢測到「發票」關鍵詞)

好,這裡遇到了一個問題,我們怎麼知道垃圾郵件里出現「發票」關鍵詞的概率?怎麼知道在所有郵件里出現「發票」關鍵詞的概率?理論上,除非我們統計所有郵件,否則我們是得不出的。這時候,就得做個妥協,在工程上做個近似,我們自己找到一定數量的真實郵件,並分為兩組,一組正常郵件,一組垃圾郵件,然後進行計算,看「發票」這個詞,在垃圾郵件中出現的概率是多少,在正常郵件里出現的概率是多少。

顯然,這裡的訓練數量大一些的話,計算得到的概率會更逼近真實值。Paul Graham使用的郵件規模,是正常郵件和垃圾郵件各4000封。如果某個詞只出現在垃圾郵件中,Paul Graham就假定,它在正常郵件的出現頻率是1%,反之亦然,這樣做是為了避免概率為0。隨著郵件數量的增加,計算結果會自動調整。

這樣的話,將公式繼續分解為如下:

P(垃圾郵件|檢測到「發票」關鍵詞)

=P(檢測到「發票」關鍵詞|垃圾郵件)/P(檢測到「發票」關鍵詞)

=P(檢測到「發票」關鍵詞|垃圾郵件)/[P(檢測到「發票」關鍵詞∩垃圾郵件)+P(檢測到「發票」關鍵詞∩正常郵件)]

=P(檢測到「發票」關鍵詞|垃圾郵件)/[P(檢測到「發票」關鍵詞|垃圾郵件)/P(垃圾郵件)+P(檢測到「發票」關鍵詞|正常郵件)/P(正常郵件)]

就又可以根據訓練模型得到的概率,進行初始值計算了。此後,可以通過大量用戶將垃圾郵件標註為正常郵件,正常郵件挪到垃圾郵件的動作,進行反覆訓練糾正,直至逼近一個合理值了。

不過這裡還涉及到一個問題,就是單個關鍵詞的概率(單個條件)無論如何再高,這封郵件仍然有可能不是垃圾郵件,所以在此處應用貝葉斯定理時,我們顯然要用到多個條件,也就是計算這個概率:

P(垃圾郵件|檢測到「A」關鍵詞,檢測到「B」關鍵詞,檢測到"C",...)

Paul Graham的做法是,選出郵件中P(垃圾郵件|檢測到「X」關鍵詞)最高的15個詞,計算它們的聯合概率。(如果關鍵詞是第一次出現,Paul Graham就假定這個值等於0.4,也即認為是negative normal)。

計算過程就不在此贅述了。


推薦閱讀:

兩根長度 1 的線段完全落入單位正方形內,求相交概率?
Stephen Wolfram:宇宙的本質是計算 這和量子力學衝突嗎?
勝率代表了什麼?
喝飲料或者吃零食中一等獎是怎樣的體驗?
一百顆糖,發給十個小朋友,要求每個小朋友都有糖,且不存在兩個小朋友手上的糖一樣多,問一共有多少種分法?

TAG:貝葉斯理論 | 概率 |