本文為閱讀Data Science from Scratch之筆記,文中案例、公式分析皆來自此書
讓我們先來看看生活中的一個小例子。假設有某種疾病D,在10000人中會有1人患此病;又假設對患此病的人進行測試,測試為陽性的比例達到99%,也就是說100名患者中,有99名患者檢測結果皆為陽性(positive)。問題:
在檢測為陽性的情況下,某一個人確定患該病的概率是多少?
不用仔細思考,先用自己的直覺判斷,概率高還是低?再結合數據認真思考,你得到的概率值會是多少呢?我想,或許絕大部分人的第一反應是:在檢測為陽性的情況下,基本就可以確診身患D病了。再結合前面給出的數據進行運算,會非常容易地得到答案為99%。這是顯而易見的吧,100名患者99名都檢測為陽性,那么,——不是反之亦然么?
顯然,直覺欺騙了我們。上述數據營造了一種假象,讓我們忽略了未患D病的人檢測為陽性所占的比例。
讓我們把數據增大,假設有一百萬人。在這個基數下,患D病的人有100人。在這100人中,檢測為陽性的人為99人。現在考慮未患D病的人數,一百萬減去一百,得到的人數為999900。根據檢測陽性的比例,檢測這些人時,會有1%的幾率會檢測為陽性,人數為999900*1%等於9999人。於是,我們可以計算出患D病且檢測為陽性的人在所有檢測為陽性的人中所占的比例為:99/99+9999,結果才不到1%。
這樣結果真讓人莫名驚詫了。換言之,我們可以下結論說:當某個人檢測為陽性時,斷定他(她)患D病的幾率僅僅為0.98%。那么說,這樣的檢測給醫生的參考依據幾乎可以忽略不計啊!為什么會這樣?——從概率學的角度講,這其實是貝葉斯定理(Bayes's Theorem)的體現。
首先我們將患病的事件記做D,檢測為陽性的事件記做T。如果患病的事件沒有發生,則稱為“Not D”,符號記為:¬D。同理,檢測不為陽性的事件可以記為¬T。
如果記D、T都發生的概率為P(D,T),則有公式:
P(D,T) = P(D|T)/P(T)
其中P(D|T)為當T發生時,D發生的概率,這一概率被稱之為事件D關於事件T的條件概率(Conditional probability)。由於P(D,T) = P(T,D) = P(T|D)/P(D)
,因而條件概率的公式可以記為:
P(D|T) = P(D,T)/P(T) = P(T|D)P(D)/P(T)
我們再將事件D拆分為D和¬D,則P(T)可以記為:
P(T) = P(T,D) + P(T,¬D)
這個公式是一個公理,因為在具有D、T兩個事件的情況下,P(T)必然只存在兩種情況,要么在T發生時,D也發生;要么在T發生時,D沒有發生。那么貝葉斯定理就可以記為:
P(D|T) = P(T|D)P(D)/[P(T|D)P(D) + P(T|¬D)(P¬D)]
現在我們可以計算P(D|T),即測試為陽性時,患D病的概率值了。我們已知:
P(T|D):當患D病時,檢測為陽性的概率為0.99;
P(D):10000個人有1個人患D病,則概率為1/10000=0.0001;
P(T|¬D):沒有患D病時,檢測為陽性的概率為1-0.99=0.01;
P(¬D):沒有患D病的概率為1-0.0001=0.9999。
計算上面的公式,P(D|T)等於0.98%。符合我們前面的分析。然而我們的直覺呢?簡直潰敗而不成軍了。
注:上面所述D與T之間關系乃理想狀態,判斷一個人是否生病,檢測是否陽性、陰性僅僅為其中一個要素。例如當我們再增加一個症狀事件S后,同時滿足T與S的前提,則D發生的概率值就會顯著增加。