執行 A/B Test 的時候,你有沒有懷疑過為什麼顯著水準只能是 0.05?我們知道 P 值小於顯著水準 0.05,就拒絕虛無假設、採用 A/B Testing 結果,如果把標準改成顯著水準 0.01,P 值拒絕虛無假設的範圍就更小,變得更不容易看到顯著的 A/B 測試結果,這樣就可以說實驗「足夠嚴格」了嗎?
答案是:不見得!
以下是 GuessTheTest 網站在 2021 年曾經分享過的 A/B 測試真實案例,分析某網站在不同設計的連結點擊轉換率:
A/B 實驗 | 網站訪客數 | 點擊人數 | 點擊轉換率 | 轉換率提升 |
---|---|---|---|---|
控制組(A組) | 82 人 | 3 人 | 3.7% | — |
實驗組(B組) | 75 人 | 12 人 | 16.0% | 337% |
當時統計專家算出 P 值是 0.009,明顯小於我們常用的 0.05 顯著水準,宣稱是統計上的顯著。然而,網站的兩種設計之間,其中一種會讓連結點擊轉換率提升 337% 之多,實在好到讓人不敢相信。是不是只要把顯著水準改成 0.01,就能輕易地說「顯著水準 0.01 已經比一般水準嚴格了」,我們可以有足夠信心說此實驗可信?
這篇文章將會探討已經結束的 A/B Test 如何設定顯著水準來維持實驗可信程度。文章內會討論上述範例這個常見情境:搜集完資料後看到顯著結果,卻懷疑統計檢定力不足,不敢下結論,本文最後將會介紹以上範例該如何調整顯著水準(並控制偽陽性率)來解決這個問題。
(如果你的任務是設計新的 A/B 測試,並且願意遵守先決定樣本數、再進行實驗(而不是亂搜集少少的樣本),顯著水準設定成 0.05 已經是恰當的做法了,歡迎跳過這篇文章,或者我更推薦你閱讀 此文章 了解如何設定新的 A/B 測試樣本數)
這篇統計學筆記紀錄了筆者好豪在 A/B Test 專家 Ron Kohavi 的學術文章《A/B Testing Intuition Busters》學到的內容,本文終極目標是回答「A/B Test 該如何選擇顯著水準」,在這之前,這篇筆記將陸續介紹 P 值、偽陽性率、以及決策品質的關聯,幫助你理解決策品質將如何影響 A/B 測試顯著水準的選擇,因此,以下將有三項學習子目標:
- 解除對 P 值的誤解、了解我們真正有興趣的問題是偽陽性率
- 了解偽陽性率如何與顯著水準、統計檢定力、以及決策品質相關
- 如何透過調整顯著水準來控制偽陽性率
目錄
問題詳述:顯著水準改成 0.01 的話…
顯著水準代表的是願意接受 型一錯誤 的可能性,學界與業界常見的標準都是設定 顯著水準 = 0.05
,若 P 值 < 0.05
、看到統計顯著的結果,就拒絕虛無假設。
我在 另一篇文章 提到過,如果把顯著水準從 0.05 改成 0.01,這是更嚴格的標準,P 值 < 0.01
比 P 值 < 0.05
更困難,資料中需要有更強烈的證據才能拒絕虛無假設、決策變得保守,更嚴格的標準同時也讓 統計檢定力 降低了。
什麼情境下我們會想把顯著水準變嚴格(例如調整成 0.01)?常見的情境包含:
- 更嚴謹的研究領域:型一錯誤的成本特別高的時候,或許會需要更嚴格的顯著水準,例如 法院判決
- 多重檢定:Bonferroni 校正來降低顯著水準,把 Family-Wise Error Rate 控制在 5%
- 分析統計檢定力不足的 A/B Test
本文探討的就是上述情境的最後一項:統計檢定力不足的 A/B Test。樣本數不足、但是看到顯著結果的 A/B Test,很有可能就是檢定力不足,如同前言的範例,在基礎比率 3.7%、期望看到的相對變化(MDE)是 10%、並且檢定力與顯著水準都設定為標準的 80% 與 0.05 時,可以 算出來 需要的 A/B 測試樣本數要超過 5 萬人,然而,範例中只有 80 人左右的樣本、卻看到顯著結果,你敢相信這個 A/B Test「夠力」嗎?會不會只有 80 人的低樣本數 A/B 測試,只是「假的」顯著?
現在問題來了,這種統計檢定力不足的 A/B 測試,我如果把顯著水準降低,讓宣稱顯著的標準變嚴格、不輕易宣布顯著,能否避免低樣本數造成型一錯誤的問題?再更進一步問,如果降低顯著水準是一種可行做法,那顯著水準降到 0.01 夠嗎?為什麼不是 0.025 就夠?又或者為何不該降到更低的 0.001?
接下來,我們詳細探討這個問題。
P 值:它有回答你心中想的問題嗎?
要理解顯著水準,當然要從與它息息相關的 P 值(P-value)開始。
前言提及,A/B Test 看到顯著的結果,我們想知道此實驗是否「可信」。通常,我們心中想的「可信」指的是「當看到顯著結果時,對立假設是否確實是真相」,換言之,我們想看 觀測到現有資料時,虛無假設不為真的機率
。而統計分析中,我們高度仰賴 P 值來幫我們解決問題,但是,P 值跟我們上面想看的「可信」意思一樣嗎?並不是!我們先回顧 P 值的正式定義:
假設虛無假說為真時,觀測到至少與實際觀測樣本相同極端的樣本的機率
來源:維基百科
它的正式定義十分拗口又難懂!稍微簡化一下,暫且把 P 值稱為 虛無假設為真時,觀測到現有資料的機率
,你會發現,即使我們整天看 P 值、這根本也不是我們在乎的「可信」問題!
如果把機率反過來看、再稍稍把 為真
調整成 不為真
,得到:
觀測到現有資料時,虛無假設不為真的機率
你會發現這才是你想知道「可信」的機率。恐怖的是,這並不是 P 值的意義,如果你嘴巴說著要回答 觀測到現有資料時,虛無假設不為真的機率
、卻拿 P 值定義的 虛無假設為真時,觀測到現有資料的機率
來解釋數據,那當然是大錯特錯!
(囉唆補充:上述其實只是要解釋 P( A | B )
與 P( B | A )
的不同)
偽陽性率:這才是你真正想看的「成功率」
「A/B Test 看到顯著結果(觀測到現有資料時
),就代表它符合真相(虛無假設不為真
)嗎?」,這是我們有興趣的問題,只要確認「顯著 = 真相」,就代表實驗可信、值得我們做出改變。而這個問題轉換成統計學語言的機率表達會是:
P ( 拒絕虛無假設 | 看到顯著結果 )
這是商業實驗的成功機率,如果這個機率(很理想地)是 100%,表示我們確實每次看到實驗有顯著,代表真相 100% 確實如此、我們可以立即做出改變。所以現在問題變成:這個成功機率究竟多高呢?
Kohavi 的 論文 提出,用 貝氏定理 就可以明確地看出「偽陽性率」(只是我們上述問題的微調:100% - P ( 拒絕虛無假設 | 看到顯著結果 )
):
- \(SS\):看到顯著結果(Statistical Significant)
- \(\alpha\):顯著水準 alpha,常用 0.05
- \(\beta\):型二錯誤,常用 0.2(也代表統計檢定力 80%)
- \(\pi\):\(P(H_0)\) 虛無假設的先驗機率,可以姑且想成虛無假設的發生機率
- (我們有興趣的
P ( 拒絕虛無假設 | 看到顯著結果 )
是 \(P(H_1|SS)\),這裡只是改成算 \(P(H_0|SS)\))
看到統計顯著的結果,明明應該拒絕虛無假設,對吧?\(P(H_0|SS)\) 計算的意義是「即使資料呈現統計顯著的結果,虛無假設依然為真」的機率,稱為偽陽性率(False Positive Risk),它是 A/B Test 結果不該採信的機率。\(P(H_0|SS)\) 落落長的公式,不用全部看懂沒關係,我們只需要根據公式的尾端、先記得簡單的小結論:
決定是否該採信 A/B Test,需要看偽陽性率
因此,論文 中也建議研究者觀測 A/B Test 結果時,不只看 P 值、還得要參考偽陽性率
而偽陽性率取決於虛無假設的發生機率 \(\pi\)、顯著水準 \(\alpha\)、以及統計檢定力 \(1- \beta\)。
衡量決策品質:承認吧!你的決策大部分是錯的
虛無假設的發生機率 \(\pi\) 是什麼意思?這個機率衡量你的決策品質有多糟糕。
在 A/B 測試之中,虛無假設通常代表現況、而對立假設是你的新決策,例如現在 APP 某個按鈕是紅色,虛無假設會是「紅色按鈕點擊率較高」,而你的新決策是藍色,對立假設是「藍色按鈕點擊率較高」,如果 A/B 實驗顯著(且可信),就拒絕虛無假設、決議新的藍色按鈕較好。
因此,\(\pi\) 這個 虛無假設的先驗機率
\(P(H_0)\),代表的是「不採用新決策比較好的機率」,這是新決策的失敗率,更簡單地說,\(\pi\) 衡量你的決策品質。從上述公式我們也(驚訝地)學到,原來決策品質 \(\pi\) 會影響 A/B Test 的偽陽性率!
這就有趣了,我相信每個人做決策的時候,都相信自己的決定很棒才會開口決策的吧,要怎麼知道自己的決策實際成效如何呢?Kohavi 的文章內幫我們搜集了一些大公司的新決策成功率(\(P(H_1)\) = \(1 – \pi\) = 新決策經過實驗後,真的對正向商業影響力的機率):
資料來源 | 新決策成功率 | 偽陽性率 |
---|---|---|
Microsoft | 33% | 5.9% |
Avinash Kaushik(資深科技業策略家) | 20% | 11.1% |
Bing 搜尋引擎 | 15% | 15.0% |
Google 數位廣告、Netflix、Booking.com | 10% | 22% |
Airbnb(搜尋平台) | 8% | 26.4% |
筆者好豪第一次看完這份數據後,很有自信地相信:連大公司的決策正確率都不太高了,我自己的決策正確率肯定低於 20%!
這份表格也幫你整理出了對應的偽陽性率(設定顯著水準 0.025 與檢定力 80%),我們可以很簡單地看出來決策品質與偽陽性率的關係:
- 決策品質越高,偽陽性率越低
- 如果決策成功率只有 8%,偽陽性率會高達 26.4% – 你每看到 4 個顯著結果的 A/B Test,就有一個是假的、不是真正的好決策!
顯著水準究竟該如何設定?
終於,我們回到原始問題:如何為 A/B Test 設定顯著水準 \(\alpha\)?至此,我們已經學到,其實我們真正想達成的目的是「控制偽陽性率」,畢竟,如果偽陽性率過高,就算看到 A/B 測試顯著結果也不敢相信,豈不是浪費時間?
所以我們要搞清楚我們的目標與任務:
目標:控制偽陽性率(越低越好)
任務:透過調整顯著水準 \(\alpha\) 來控制偽陽性率
在本文前言的「顯著水準從 0.05 改成 0.1,A/B Test 肯定會更快、更好」這句話錯誤,理由就在於:「顯著水準怎麼調比較好,取決於我們能接受的偽陽性率」。
顯著水準的選擇方法,來自前面小節我們學到的偽陽性率的公式:
假設我們的目標是把偽陽性率控制在 5% 的水準,只要代入 \(P(H_0|SS) = 0.05\) 並排列組合一下,就可以得到顯著水準:
公式中直白地看到,顯著水準的選擇取決於統計檢定力與決策品質。
(這裡的 \(\alpha\) 除以二,是因為常用的 雙尾檢定 之中,我們實際做 A/B Test 只會選擇其中一邊。)
根據前面提過的大公司資料,加上 Ron Kohavi 的大師 建議,我們主觀地設定決策成功率為 15%(\(\pi\) 為 85%)。顯著水準的選擇會再簡化成:
(再次提醒,這行公式假設偽陽性率控制在 5%,並且決策品質 \(\pi\) 為 85%)
- 如果設定檢定力 = 80%,公式建議顯著水準是 0.015
- 如果設定檢定力 = 50%,公式建議顯著水準是 0.009
- 如果設定檢定力 = 20%,公式建議顯著水準是 0.004
檢定力越低,建議顯著水準會更小。這也滿符合直覺的,如果希望偽陽性率保持在 5% 不動,但檢定力又很低,A/B Test 對顯著的要求當然更嚴格、才能確保偽陽性率不會隨著低檢定力而提升。
真實案例:GuessTheTest
現在,我們終於回到本文前言 GuessTheTest 網站提到的「點擊轉換率提升 337%」範例:
A/B 實驗 | 網站訪客數 | 點擊人數 | 點擊轉換率 | 轉換率提升 |
---|---|---|---|---|
控制組(A組) | 82 人 | 3 人 | 3.7% | — |
實驗組(B組) | 75 人 | 12 人 | 16.0% | 337% |
我們從公式學到顯著水準的選擇取決於統計檢定力 \(1 – \beta\) 與決策品質 \(\pi\)。再一次,我們假設目標是偽陽性率要控制在 5%。
目前的統計檢定力 \(1 – \beta\),透過 Python statsmodels
套件的 tt_ind_solve_power()
函式可以算出來。這個函式的功能是,在 Two-sample t-Test 之中,效果大小(Effect Size 也就是 MDE)、樣本數、統計檢定力、以及顯著水準這四個參數,給定其中三個、函式會算出另外一個。根據範例,如果設定顯著水準是原始的 0.025(同前述,雙尾檢定取單邊)、樣本數是 80 人、期望看到 10% 的 MDE,使用函式可以算出統計檢定力只有 3%:
import statsmodels.api as sm
_effect_size = sm.stats.proportion_effectsize(0.037, 0.037*(1+0.1))
_n = 80
_alpha = 0.05/2
sm.stats.tt_ind_solve_power(effect_size=_effect_size, nobs1=_n, alpha=_alpha)
# 0.026
承上個小節最後的小結論,我們希望透過調整顯著水準讓 A/B Test 對顯著的要求更嚴格、確保偽陽性率不會隨著 3% 這麼低的檢定力而提升。所以我們嘗試用不同的檢定力 + 決策品質 + 顯著水準組合,用公式試算出以下表格:
統計檢定力 | 決策成功率 \(1 – \pi\) | 顯著水準 | 偽陽性率 |
---|---|---|---|
3% | 33% | 0.05 | 63% |
3% | 33% | 0.01 | 25% |
3% | 33% | 0.005 | 14% |
3% | 33% | 0.0015 | 5% |
3% | 15% | 0.05 | 83% |
3% | 15% | 0.01 | 49% |
3% | 15% | 0.005 | 32% |
3% | 15% | 0.0015 | 12% |
3% | 15% | 0.0005 | 5% |
# 表格第一列的算法示範:
_alpha = 0.05 / 2
_success = 0.33
_power = 0.03
_beta = 1 - _power
_pi = 1 - _success
fpr = _alpha*_pi / (_alpha*_pi + (1-_beta)*(1-_pi))
fpr # 0.6285
這個表格的試算的第 1 列告訴我們:即使你的決策品質跟微軟一樣高、決策成功率有 33%,當你以顯著水準 0.05 為標準做 A/B 測試,仍有高達 63% 的偽陽性錯誤,這種 A/B Test 就算顯著也完全不能信嘛!
同時,也從試算表的第 4 列得知,決策成功率 33% 時,你的 P 值需要小於 0.0015,這樣宣告的顯著才能維持 5% 的偽陽性率,顯著水準要到 0.0015 這麼嚴格、才足以說 A/B 測試結果可信。
筆者好豪也在試算表格的後面 5 列附上決策成功率改為 15% 時,顯著水準與偽陽性率相互變化。在檢定力低至 3% 時,顯著水準需要設定成 0.0005 才足夠維持偽陽性率 5%,超級嚴格。
實務上,決策成功率到底該選 33%、15%、還是其他的?Ron Kohavi 的專業 建議 是在沒有頭緒的時候用 15%。稍進階的作法則是觀測與紀錄最近幾次 A/B Test 決策的成功率,例如,最近半年 A/B 測試總共有 1,000 種不同版本,其中 100 種呈現顯著結果,可以概算出近期的決策成功率是 10%。
結語
在這篇統計學筆記,我們釐清想解析一個 A/B 測試結果是否「可信」時,我們真的在乎的 觀測到現有資料時,虛無假設不為真的機率
其實是偽陽性率、而不是 P 值,我們希望透過調整顯著水準來控制偽陽性率、使其越低越好。反過來說,利用公式,我們也可以先控制偽陽性率足夠低(例如 5%),再代入檢定力與決策品質參數算出顯著水準,就能知道怎麼為 A/B 測試結果選擇適當的顯著水準了。
這篇筆記的內容來自我在 Ron Kohavi 的學術文章《A/B Testing Intuition Busters》所學,如果你讀完這篇後、對偽陽性率有更多興趣,請務必一讀原始論文。另外,本篇引用的數據其搜集方式與採集時間,都來自此文章。
參考資料:
- Ron Kohavi – Trustworthy Online Controlled Experiments : A Practical Guide to A/B Testing
- 《資料科學的商業應用》
- Udemy 課程:貝氏機器學習 A/B 測試
如果你對 A/B Testing 有興趣,相信你會喜歡我的 A/B Testing 系列文章:
- A/B Testing 樣本數設定問題:「偷看結果」將成為最大的錯誤
- 比例資料的 A/B Testing 該用卡方還是 Z 檢定?
- 多重檢定問題:一定會有人中樂透
- A/B Test 看到顯著也不能信?小心統計檢定力不足!
未來我也會持續撰寫我學習與實作 A/B Testing 的心得、也分享更多資料科學知識,有興趣的讀者歡迎追蹤 好豪的 Facebook 粉絲專頁 或 Threads 帳號。