多重檢定問題:一定會有人中樂透

by 好豪
Published: Updated:

「狂賀!本店開出 3 億頭獎!」

你是否看過樂透彩券行這樣子的紅布條呢?這句話帶有暗示地散播喜氣,但這是否真的代表這家彩券行比其他家更容易開出大獎呢?統計學告訴你:不是如此!

不用統計學也能想想看:即使中頭獎的機率是百萬分之一的困難,當全台灣賣出了五百萬張樂透彩,就算有一、兩個人中頭獎,從期望值來思考,看起來不就變得很合理嗎?你會因此認為那一、兩位得獎者比其他人更有實力、更會買樂透彩嗎?當然不會。

這個樂透彩案例就是多重檢定要討論的問題,有趣的是,這個看似直觀的概念,出現在資料科學的日常就變成常見的陷阱。如果我們同時做很多個假設檢定,其中看到幾個拒絕虛無假設的「頭獎得主」,反而容易錯誤地解讀、認為它們比其他人更容易得獎!

這篇文章將和你分享什麼是多重檢定問題,他到底跟樂透、A/B Test、或者探索性資料分析有什麼關聯,並且介紹用來解決多重檢定問題的 Bonferroni 校正。

本文的撰寫靈感,來自閱讀 《資料科學的統計實務》 這本書的心得、以及過去面試與 A/B 測試實作的經驗。


什麼是多重檢定?

多重檢定問題:當我們做越多次的假設檢定,越有可能單純因為隨機性而錯誤地拒絕虛無假設

進行假設檢定的時候,我們會設定 顯著水準(Significance Level),代表當虛無假設為真的時候,統計檢定會因為隨機性判定成有差異的機率。我們常將顯著水準設定成 5%,就是為了將偽陽性錯誤率(Type-1 Error)控制在 5% 以內。

(延伸閱讀:A/B Test 的顯著水準一定要是 0.05 嗎?改成 0.01 行不行?

接著,為了開始認識多重檢定問題,讓我們試想一個情境,我們需要做 3 次假設檢定,每次檢定都同樣使用 5% 的顯著水準:

  • 第 1 次假設檢定,偽陽性錯誤率是 5%
  • 第 2 次假設檢定,偽陽性錯誤率也是 5%
  • 第 3 次假設檢定,偽陽性錯誤率仍是 5%

跟我們已知的一樣,毫無意外。問題在於:

這 3 次檢定之中,至少有一次發生偽陽性錯誤的機率是多少?

\(P(no\ type\ 1\ error\ at\ all) = (1 – 5\%) \times (1 – 5\%) \times (1 – 5\%) = 85.74\%\)
\(P(at\ least\ one \ type\ 1\ error) = 1 – 85.74\% = 14.26\%\)

做了三次假設檢定,至少有一次錯誤地拒絕虛無假設的機率,從我們以為的 5%、提升到 14%,這就是多重檢定問題!此例計算出的 14.26%,我們稱為 Family-Wise Error Rate(FWER)。

筆者在此整理一下認識多重檢定需要知道的觀念與定義:

  • 顯著水準控制的偽陽性錯誤率,只限定於當下的那唯一一次檢定
  • 換言之,只要你做第二次、或者更多次假設檢定,所有檢定的偽陽性錯誤率就不再只是 5%、而是更高
  • 所有假設檢定之中,發生至少一次偽陽性錯誤的機率,稱為 Family-Wise Error Rate(以下簡稱 FWER
  • 多重檢定問題:做越多次的假設檢定,越有可能單純因為隨機性而提高 FWER、錯誤地拒絕虛無假設

補充:多重檢定問題的英文關鍵字是 Multiple Testing 或者 Multiple Comparisons Problem。


文章至此,我們可以再回到前言提到的樂透案例來思考多重檢定。如果我們已知樂透中頭獎的機率是百萬分之一,又如果全台灣賣出了五百萬張樂透彩券:

  • 沒有人中頭獎的機率將會是 \((1 – \frac{1}{1,000,000})^{5,000,000} = 0.67\%\)
  • 至少有一人中頭獎的機率是 \(1 – 0.67\% = 99.33\%\)

一場樂透彩中,幾乎一定會有至少一個人中頭獎、機率超過 99%( (σ′▽‵)′▽‵)σ 可惜不是你)。當我們對每一個樂透參與者都進行假設檢定,中頭獎的那個人會拒絕「中獎率等於百萬分之一」的虛無假設、而採納「中獎率大於百萬分之一」這個對立假設,但顯然這樣結論是錯誤的!多重檢定問題告訴我們,越多人參與樂透、至少一人中頭獎的機率就越高,也就是 FWER 越高,甚至可能像此案例一樣逼近 100%。因此,任一個樂透投注站開出頭獎都絲毫不必大驚小怪,更不該做出「中頭獎者運氣高於其他人」這種錯誤結論。

看過樂透的思考謬誤後,以下將介紹資料科學家日常工作經常會遇到的多重檢定問題場景:A/B Testing 與探索性資料分析。


A/B Testing 的多重檢定問題

當我們提起 A/B Testing,最常見的情境就如字面上:是 A 與 B 兩個版本比較成效差異。有些時候,資料科學家也需要延伸運用 A/B Testing,同時進行多個版本的實驗,這時就會遇到多重檢定問題了!例如以下的範例:

A/B Testing 多重檢定的假想範例(製圖:好豪)

上圖的範例中假設我們的產品是一個社群網站(請用 Facebook 來想像),我們想要測試「不同的按讚圖示,是否能提高按讚按鈕的點擊率」,而設計師總共設計出 100 種新圖示想要測試。

將實驗對象的客戶分成 100 群、讓他們各自看到不同版本的按讚圖示、最後蒐集完成 足夠樣本數 之後,為了用統計工具得知究竟哪個按讚圖示成效最高,我們需要每個版本各自與原始版本比較點擊率(使用 Two-Sample Z-Test)

  • 版本 1 新圖示的點擊率與原始版本的點擊率進行假設檢定
  • 版本 2 新圖示的點擊率與原始版本的點擊率進行假設檢定
  • 版本 100 新圖示的點擊率與原始版本的點擊率進行假設檢定

在同一個 A/B Test 實驗設計中,為了 100 個新按讚圖示、總共要做 100 次假設檢定。在這 100 次假設檢定中,如果看到拒絕虛無假設的顯著結果,會有兩種可能性:

  1. 該新圖示真的有提高按讚點擊率,也成功被我們的統計工具偵測出來
  2. 該新圖示根本對提高點擊率沒幫助,會拒絕虛無假設只是湊巧

第二種可能性是我們不希望它發生的偽陽性錯誤,而多重檢定問題告訴我們:我們在 A/B Testing 同時測試越多版本越可能發生這種偽陽性錯誤率。在此範例情境中,如果我們檢定使用的是 5% 顯著水準,從我們在前面學到的 FWER 算法,我們可以得知「100 個新圖示,至少有一個新按讚圖示的點擊率會拒絕虛無假設」的機率是 \(1 – (1 – 5\%)^{100} = 99.4\%\)。

FWER 告訴我們,100 個新圖示有超過 99% 的機率會發生偽陽性錯誤、產生拒絕虛無假設的結果。那麼,作為負責此實驗的資料科學家,當你看到了顯著的 P-Value,你還能勇敢地做結論、説出「這個按讚新圖示就是比較好」嗎?

當然,本文會介紹如何在 A/B 測試遇到多重檢定問題該怎麼解決,在此之前,我們先接著看另個資料科學常會遇到多重檢定的情境:探索性資料分析。


探索資料的多重檢定問題

當我們拿到一筆全新的資料,完全不理解變數之間有什麼關聯時,其中一種探索性資料分析技巧,就是對所有變數兩兩進行相關性分析,例如在 Python 的 Seaborn 套件使用 pairplot()、或是用 R 語言內建的 pairs()。我們除了用相關係數以及視覺化的方式來判讀變數之間的關聯以外,還會用 相關性檢定 的統計工具來幫助我們找回答「此兩個變數是否相關」。

範例:對所有變數兩兩進行相關性分析(Source: Seaborn 套件)

《資料科學的統計實務》 對於這種探索相關性的方法,提出多重檢定問題的警語:

資料中包含許多的變數時,我們研究其中變數的相關性,有可能恰巧出現兩個變數有較大的相關性。
本來變數之間沒有任何相關性,卻在我們透過探索式資料分析後,會誤判變數有相關性!

《資料科學的統計實務》

以下範例,筆者直接引用自 《資料科學的統計實務》

探索性資料分析的多重檢定問題(Source: 《資料科學的統計實務》 第 9 章)

在上圖中,此書作者只是用常態分佈隨機產生 5 個變數,變數之間根本毫無相關性。然而,用 5% 的顯著水準做了 相關性檢定 之後,卻發現總共 10 組相關性檢定中的其中 2 組出現了顯著差異!從這個範例我們學到,我們反覆探索變數與變數之間是否具有相關性、這個看似單純的行為,也要小心多重檢定問題的存在。

Spurious Correlations 網站設計了更戲謔的呈現,網站內特別選出許多看起來非常明顯不該有相關性、但是相關係數卻非常高的事件,來反映我們常陷入相關性以及多重檢定的思考謬誤。例如下圖中,「溺水人數」跟「尼可拉斯凱吉 演出的電影數」居然有相關性?!當你看到統計學告訴你有相關性、不代表數據之間真的有因果關係,有可能只是做了多次檢定而出現的偽陽性錯誤,多重檢定問題更告訴我們,做越多次檢定、你可能看到的相關性謬誤會越多!

尼可拉斯凱吉的電影數量跟溺水人數有相關性?我是不信啦!(Source:Spurious Correlations

解決方案:Bonferroni 校正

我們使用 5% 顯著水準,當 P-Value < 5% 時,拒絕虛無假設,顯著水準可以想成是一種門檻,數值的差異需要大到勝過門檻、才拒絕虛無假設。延伸這個門檻的想像,當我們同時做很多個假設檢定,卻發現 FWER 這項偽陽性錯誤率提高時,直觀的解決方案就是提高門檻Bonferroni 校正 (Bonferroni correction)是一種常見的提高拒絕虛無假設門檻的方法,Bonferroni 校正背後的想法是:不要把每個 P-Value 視為獨立,應把所有同時在做的假設檢定整體一起看。

在 Bonferroni 校正中,若檢定個數為 M 次,原本設定的顯著水準就要除以 M

《資料科學的統計實務》

延續剛剛探索相關性分析的書中範例來說明,5 個變數兩兩做相關性檢定、所有變數組合總共要做 10 次假設檢定。因此,根據 Bonferroni 校正,拒絕虛無假設的顯著水準門檻,要從 5%,改成 5% / 10 = 0.005。如此校正後,圖中原本看起來相關性較高的兩個 P-value:0.007 與 0.036,都沒有小於 Bonferroni 校正後的新顯著水準門檻 0.005,不能拒絕虛無假設、也不會做出偽陽性錯誤的結論了。

而在上方 A/B Testing 做 100 個按讚圖示同時測試的範例,Bonferroni 校正則是把 5% 的顯著水準修改成 P-Value < 0.0005 才能拒絕虛無假設、才能結論該按讚圖示點擊率更高。

要理解 Bonferroni 校正的運作,我們可以用 P-Value 的分佈特性來想像。筆者好豪在先前寫的 A/A Test 教學文章 曾經提及:

  • 如果實際上差異不存在,多個檢定的 P-Value 會是均勻分布
  • 反之,若差異確實存在,P-value 大多會遠小於 0.05、集中分佈在更靠近 0 的數值

所以,即使校正後,要讓 P-Value 低於新門檻(例如 0.005),看起來超級困難,只要是遇到差異確實存在的情況,P-value 會很接近 0、要打敗新門檻也不該有問題。

Bonferroni 校正是個實用又好算的方法,在資料科學面試中,如果遇到多重檢定相關的問題,要是連這個招式都答不出來,可能就會被淘汰囉!然而,Bonferroni 校正並不是完美解決多重檢定的方案,同時檢定的個數要是太多(例如 1,000 個),校正後的顯著水準會超級小、拒絕虛無假設的門檻會變得超級高、幾乎無法拒絕虛無假設,反而變成變數間有存在差異卻無法偵測出顯著結果、造成偽陰性錯誤(Type-2 Error)。換言之,Bonferroni 校正的缺點在於,減少了偽陽性錯誤、卻提高了偽陰性錯誤,被認為是過度保守的方法。

除了 Bonferroni 校正,統計學家們還研究了許多其他的方法來處理多重檢定問題。其中,好豪認為 False Dicovery Rate(FDR)非常值得學習,以下這部影片的 FDR 教學簡潔明瞭、推薦想進階理解多重檢定問題的你馬上看看,筆者未來也會找時間寫文章分享。

False Discovery Rate Explained (Source: StatQuest)

結語

這篇文章從「一定有人中樂透」的想法出發,提醒你不要看到有人中獎、就覺得他比其他人福星高照。同樣地,在做 A/B Test 或者探索性資料分析的相關性檢定,要是檢定次數很多、而沒有做 Bonferroni 校正這種特別處理的話,也「一定存在假設檢定會拒絕虛無假設」,卻不代表差異真的存在,而是來自偽陽性錯誤!

想要進一步研究的讀者,可以參考這篇 研究文章 了解多重檢定與 Bonferroni 校正更嚴謹的學術定義、或是在這篇 臺北醫學大學的講義 學習更多 False Discovery Rate 相關知識。

希望這篇文章能幫助讀者入門多重檢定問題以及 FWER,這是資料科學家在 A/B 測試的實踐與求職面試都必備的知識。在此也感謝旗標出版社提供 《資料科學的統計實務》 這本書的試閱,這本書主要著墨在建模以前就會遇到的統計學問題,我特別喜歡書中對於探索性資料分析需要注意的眉眉角角提出見解,包括抽樣偏誤、問卷資料本身的誤差、干擾因子處理、當然還有本篇提及的相關性分析會遇到的多重檢定問題,這些注重「分析品質」的議題,是連統計專家都有可能犯的錯誤,因此筆者認為這本書不論是數據分析的新手或老手,都值得一讀。

《資料科學的統計實務》(博客來連結)

data-science-practical-statistics


你正在學習 A/B Testing、還想知道更多相關知識嗎?推薦你繼續閱讀我的 系列文章

如果這篇文章有幫助到你,歡迎追蹤好豪的 粉絲專頁、我會持續撰寫 A/B Testing 與資料科學的知識文章;或者點選下方按鈕分享給需要的朋友們。

推薦閱讀