如果你學過一點統計學,想必聽過貝氏定理或貝氏統計(貝葉斯統計),也知道頻率學派(古典統計)與貝氏統計學派的分析方法常常被拿來比較。我們可以用學校都會教的以 P 值(P-value)進行假設檢定來簡略概括頻率學派的做法,那貝氏統計又會怎麼做呢?貝氏統計有什麼好處呢?
一言以蔽之,貝氏統計將使用新獲得的資料證據,來不斷更新你現有的認知,綜合所有資訊描述世界的狀態。
這句話到底是什麼意思?我將在這則筆記介紹這短短一句話包含哪些迷人之處。這篇文章不談艱澀數學公式、將概念性地告訴你為何該學會應用貝氏統計來進行分析,它究竟有多厲害、讓學者會把它視為 過去幾十年最重要的統計研究領域之一。這則筆記會與你分享,貝氏統計並不只是特定的數學公式、而是一套分析框架,這套框架幫助你在模型加入個人觀點、讓統計模型隨著新的資料取得不斷進化、並且量化你對決策究竟有多麽「不確定」。希望讀完這則筆記後,你也會迫不及待地打開 書本、學習怎麼使用貝氏統計學!
(本文將介紹貝氏統計的重要觀念:先驗機率、後驗機率、以及參數分佈,如果你想直接瞭解貝氏在機器學習領域的實戰應用,推薦你閱讀這一篇 Naive Bayes 分類器介紹)
目錄
先驗機率:為模型加入你的經驗與智慧
每當我們談起統計學,幾乎都在談「資料」,貝氏統計則還會考慮「先備知識」。
在貝氏統計中,先驗機率(Prior)就是在將先備知識納入決策流程,貝氏定理公式裡的 P(A)
就是先驗機率。它指的是你目前對世界的認知,這項認知可以來自你過去累積的經驗、也可以只是一個直覺。先驗機率不需要 100% 正確,但它就是會影響決策,它的目的是讓你的統計模型知道,你的人類智慧是怎麼想的、這些智慧應該要考慮進去。
想在統計模型裡面加入一點「個人觀點」不是很理所當然的需要嗎?頻率學派用假設檢定的分析方法就不容易做到這點。又或者反過來說,如果只看資料、沒有注意到任何先備知識,會犯下什麼思考謬誤呢?筆者好豪在《數據的假象》書中讀到的「檢察官謬誤」就是一個例子,或者,我也很喜歡以下這個更簡化的 範例:
你剛認識一個新朋友,小明,他的舉手投足看起來十分內向。請問以下兩種對小明的狀態,比較可能為真?
- 小明是個內向的數學博士
- 小明是個內向的商學院學生
在我們的刻板印象中(請注意,絕對是刻板印象),數學博士好像該要很內向、而商學院的學生更外向且善於社交,對吧?所以,假設這個刻板印象成立,我們會猜小明更可能是數學博士。
然而,這項猜測犯下了忽略先驗機率的謬誤。全世界數學博士的總數量,應該遠遠少於商學院的學生才對,就算數學博士的內向人比例確實較高,考慮到博士與商學院學生的總數有巨大差異,小明依然較可能是商學院學生。
(延伸閱讀:不只檢察官謬誤!為何數據鬼扯如此氾濫?)
我們都知道,在職場擔任資料科學家時,領域知識以及商業經驗對於你的分析影響重大,貝氏方法讓你利用先驗機率有架構地加入這些智慧。或許你會懷疑,原本只看資料的「客觀」統計模型,加入這些人類的經驗,是否會因此變得太「主觀」?模型的確會因為加上人的想法而變得主觀,但現實是,資料科學的許多環節本來就存在人類主觀判斷的元素,舉例而言,在清理離群值(Outliers)資料時,離群值的判斷標準也是資料操作者主觀決定的。因此,我們不需害怕在模型加入我們想法而變得主觀,而是要更嚴謹地監視分析流程中的主觀元素,就像這小節介紹的,貝氏統計有彈性的模型就能做到這一點。
(註記:正是因為可能會變得主觀,「如何設定先驗機率」本身就形成一個巨大的研究領域)
瞥一眼貝氏定理的公式,即可清楚看出來你的經驗與智慧會以先驗機率的形式融入統計模型,接下來我們要看,究竟我們看到的新資料在貝氏統計的模型中是用什麼方式呈現呢?
後驗機率:不斷更新知識
想像一下,你正在做問卷調查,想知道你居住的鄰里老年人口比例,是否超過 全台灣平均 的 17%?再想像,你每天出門發問卷的時間都不一樣:
- 第 1 天,你清晨五點站在巷子口對路過的人調查,有許多阿公阿嬤出門運動,蒐集的全都是老年人口樣本
- 第 2 天,你則是在下午一點、太陽最大的時候出門調查,只有出來吃中餐的上班族路過,蒐集到的則大多是青壯年的樣本
- …
還記得我們在統計學課本學到的(頻率學派)假設檢定流程嗎?如果你對第 1 天的樣本與全台灣平均比較、做老年人口差異的假設檢定,肯定會得到顯著差異的結果;然而,加上第 2 天的樣本之後再做一次假設檢定,反而沒有顯著差異!這就是頻率學派的假設檢定遇到抽樣誤差會發生的 持續監控問題。
(延伸閱讀:別偷看你的檢定!從 A/B Test 案例認識持續監控問題)
在上述問題中,頻率學派的假設檢定每次都在做一個是否老年人口比例「存在差異」的二分法決定,貝氏統計在此則有不一樣的想法,貝氏統計會告訴你,模型認為老年人口比例的「分佈」有何變化,這個分佈會隨著你每天搜集新的資料不斷更新。也就是說,貝氏統計不會決定你的預測結果、而是更新你的認知。
新資料將「更新」你的知識,這是貝氏統計最重要的概念之一。頻率學派的分析,通常會輸出一個點估計,例如上述範例,我們蒐集完問卷樣本後會算出一個老年人口比例的估計值;而貝氏統計則是會輸出參數估計的分佈,例如量化老年人口比例是 15% 的可能性有多大?是 13% 的可能性又有多大?
再回到本小節一開始搜集問卷的情境,貝氏統計方法隨資料「更新」的概念,會這樣運作(以下流程舉例並非精確):
- 開始搜集問卷以前,你把你所知道的全台灣平均設為先驗機率,認為你的鄰里老年人口比例最可能是 17%
- 第 1 天,你搜集的全都是老年人口樣本、樣本裡老年人口佔比 100%,但因為樣本數不大,你只把你認知的該鄰里老年人口比例更新成 20%
- 第 2 天你搜集到的樣本青壯年很多、老年人口比例是 5%,你再度依照新資料更新你的認知,你認知的鄰里老年人口比例更新成 19.2%
- …
一開始,我們對世界存在某種認知。得到新資料後,我們更新我們的認知、並且更加相信(或者更不相信)我們的認知。
貝氏統計是不是很符合人類大腦的決策流程呢?
因為貝氏統計輸出的是會不斷更新的參數估計分佈、而不是「有無顯著差異」的二分法決定,參數估計分佈也同時量化了模型對於預測結果的不確定性,控制風險、不輕易做決策,所以它可以避免本小節討論的持續監控問題。下個小節我們繼續討論貝氏統計如何描述不確定性。
量化你的「不確定」程度
上個小節,我們多次強調貝氏統計的輸出是參數估計的分佈、而不是單一個估計值,正因為輸出是分佈,我們可以同時看出對估計的不確定性,我們就直接以下圖為例:
綠色跟藍色線都是模型對於某參數的估計值分佈,你能看出誰比較有信心嗎?
- 藍色線認為參數值最可能是 0.63,但是 0.5 ~ 0.75 這個大範圍之間的值,看起來都滿有可能的
- 綠色線認為參數值最可能是 0.55,而且 0.5 ~ 0.6 這個狹小範圍之間的值,機率遠遠高於其他數值
換句話說,又瘦又高的分佈(綠色線)表示模型較有信心、而又寬又矮的分佈(藍色線)表示模型較為不確定。貝氏統計描述參數估計分佈的同時,也描述了模型對估計分佈的不確定程度。
在你資料量小、而且決策影響力重大的時候,量化「不確定」顯得格外重要。當你在思考你的對象是否適合結婚的時候,比起只有 3 個人說對象是好人,有其他 300 個人說對象是好人,聽起來「不確定性」小多了,不是嗎?但你並不總是能拿到這麼多資料作為參考,貝氏統計在你搜集到少少資料點的時候,就幫你清楚量化估計的不確定性有多大,讓你有個標準可以決定該不該採用這項估計做決策。可以說,貝氏統計的參數估計分佈讓你知道你還有多少「不知道」。
2021 年,台灣超熱門 Podcast 《股癌》的製作人發表了同樣熱賣的著作《灰階思考》,如其書名,作者認為,人生的課題都沒有黑與白絕對的答案,我們得在帶狀的灰色色階中尋找屬於自己的最佳決策。貝氏統計方法正是帶有這種「灰階思考」的哲學,不管你有多少資料、有多相信自己在先驗機率的認知,貝氏統計模型最後都會給你對估計的分佈、而不是「是或否」這種二分法回答,就算你從分佈看得出某個事件最有可能發生,其他事件發生的機率也不會是零、你需要有意識地注意到他們不是不可能發生。
貝氏統計也不是萬能
在這篇文章,我熱切地想跟你分享貝氏統計是多麽有趣、多麽值得你投入學習的領域,但是,它當然不是沒有缺點的。
首先,貝氏統計學習門檻較高。前面提過,貝氏統計方法是一套思考框架,並且具有高度彈性,讓資料科學家能將不同的假設融入模型,也因此,你更需要了解你要用的統計方法背後的假設是什麼、以及採用那些假設的理由。筆者好豪曾經聽過業界貝氏分析專家的建議:最好要先熟悉頻率學派的假設檢定再來學習貝氏統計會更有效率,否則,連古典統計的 信賴區間解讀方法 都搞不懂的話,貝氏統計介紹另一種「可信區間」時,你只會一個頭兩個大。
其次,貝氏統計通常計算量需求會特別高。就以一個 y = ax + b
的超簡單迴歸分析模型為例,頻率學派就只會算出 a
與 b
兩個數值、最多各自加上信賴區間;而貝氏統計則可以用分佈來各自描繪 a
與 b
兩個參數,我們需要母體平均數與變異數兩個參數才能描述一個常態分佈,貝氏統計會同時對這兩個參數做估計,這樣簡單算起來,貝氏統計會為 a
與 b
算出總共四個分佈(不是四個值而已!),可想而知這個運算量會增加多少。聽完這個範例,要是你還想多知道一點,2017 年的 PyData 演講 有詳細解析深度學習模型改成貝氏方法後,會增加多少計算量。
最後,在筆者好豪的主觀經驗,數據量大的時候,結論跟頻率學派的假設檢定會很相似。前個小節我們談到,比起頻率學派,貝氏統計對不確定性能更好的建模,但如果你能讓數據量蒐集到足夠大,不論你用頻率學派還是貝氏方法,資料帶給你的不確定性都很小,那使用貝氏統計反而變得沒有額外好處,你最後做的決策可能還跟頻率學派沒什麼不同。當然,不是數據量大、就完全不需要用貝氏統計,有興趣的話,你可以看看這篇 StackExchange 上的爭論。
結論
貝氏統計背後隱含的假設更多、使它運用起來較有難度,再加上高中與大學的初等統計學通常不會對此著墨太多,所以大多數人對貝氏統計都不熟悉。實際上在某些情境,貝氏統計比頻率學派更能精準描述真實世界的狀態,學習貝氏統計絕對能讓資料科學家獲得更多元且強力的分析武器!本文介紹了三個貝氏統計特別有優勢的情境:
- 你需要把你的領域知識加入統計模型中
- 你的決策影響大、但是資料量小,特別需要清楚知道每次新資料如何「更新」模型
- 你不只要預測,還需要知道預測的未知風險多大
如果你的分析工作符合以上三種情境的任何一種,趕快加入貝氏統計這個領域,一起來增強自己的資料科學分析武器吧!
而貝氏統計該如何開始學習呢?依照不同的需求,筆者有不同的建議參考資料:
- 如果你只是好奇、想稍微了解貝氏方法的哲學:
- 如果你想馬上學會應用貝氏統計、動手寫 Python 程式來解決分析問題:
- Udemy 線上課程:貝氏 A/B 測試
- Udemy 線上課程:機器學習必備的 Naive Bayes 模型 Python 教學
- 我修習這門課的 心得分享
- 要是你不想一知半解,想扎實學會貝氏統計的運作:
- 中文課本:《從做中學貝氏統計》
我在好幾年前就在 Udemy 學過 貝氏的 A/B Testing 方法了,但就算我能背下影片裡教的方法流程,實際上仍只有囫圇吞棗、不夠理解背後的數學邏輯,我今年好好讀了《從做中學貝氏統計》才終於有豁然開朗的感覺,這本書是難得的中文、而且架構完整的貝氏統計課本,我過去一直是用原文書學貝氏統計、學得很辛苦,今年終於有好的中文課本,十分心懷感恩。
《從做中學貝氏統計》內容不只讓我更完整地理解貝氏統計變來變去的條件機率,書中還詳細介紹 Gibbs 抽樣、貝氏網路、還有決策樹等等,這些主題對我工作中常用的 A/B 測試、因果推論、還有機器學習模型預測都超重要。更重要的是,台灣譯者與編輯還附上了 Python 程式碼,讓讀者能自己動手畫出書中的重要圖表與分佈,著實如書名是在實作中扎實學習貝氏統計的數學理論。如果這篇文章有成功燃起你想學習貝氏統計的心,相當推薦你細細品味《從做中學貝氏統計》這本書!
如果這篇資料科學筆記有幫助到你,歡迎追蹤好豪的 Facebook 粉絲專頁,我會持續跟你分享我學習到的資料科學知識、以及讀過的好書;也可以點選下方按鈕,分享這篇文章給對貝氏統計有興趣的朋友們。