[心得] 影響 A/B Test 所需樣本數的要素

看板DataScience作者 (S.Duncan_JB)時間1年前 (2023/06/27 23:12), 1年前編輯推噓7(703)
留言10則, 9人參與, 最新討論串1/1
[關鍵字]: A/B Testing [重點摘要]: - 幹嘛管 A/B Test 的樣本數?樣本數太少會怎麼樣嗎? - 實驗檢定力會不足、測不出有用的結果 - A/B Test 的樣本數不是越多越好嗎?太多又可能有什麼問題? - 經常看見顯著、但是效果小到沒有幫助 - 多蒐集樣本在商業上也是一種成本 - 是什麼因素影響 A/B Test 所需樣本數? - 樣本標準差、Minimum Detectable Effect、還有型一、型二錯誤 A/B Test 是個看似簡單,實際上充滿統計學學問的領域 一個小動作做錯、也可能鑄成錯誤決策 「樣本數怎麼算」就是做 A/B Test 的產品設計者、行銷專家 還有資料科學家們永遠都在問的萬年問題 如果沒有在實驗前想清楚這個問題 很有可能讓你的產品團隊精心準備的實驗成為浪費時間 以下我將和大家分享三個議題: *為什麼要計較 A/B Test 的樣本數? *是哪些要素影響 A/B Test 所需樣本數? *所需樣本數可以用什麼公式計算? 更完整的數學公式加上 Python 程式碼圖文介紹 歡迎參考我的網誌文章: https://haosquare.com/calculate-ab-testing-sample-size/ ## 為什麼要計較 A/B Test 的樣本數? 我們先稍微聊聊究竟資料分析為什麼要這麼在意 A/B Test 的樣本數有多少。難道,不是 只要做好隨機對照實驗(RCT)、在假設檢定看到顯著就能馬上下結論嗎?沒這麼簡單! 當 A/B Test 樣本數過少時,統計檢定力往往會不足,也就是,即使你的產品新設計確實 對使用者有幫助,商業實驗也看不出顯著性。更麻煩的問題是,如果產品每天能蒐集的樣 本很少,我們常會急切地天天盯著 A/B Test 結果看,如果看到資料反映出統計檢定顯著 ,馬上下結論、結束實驗,這種在樣本數不足下「偷看」的動作會造成持續監控問題,其 中的抽樣偏誤會使得實驗的統計錯誤大大提高!此「偷看」問題我過去曾在本板分享過, 如果你有興趣,歡迎參考之前的文來複習:#1VGG3_Pu 而當 A/B Test 樣本數過多也不全然是好事情,不是資料越多就一定越好。首先,對某些 使用者流量還不太高的產品而言,每個樣本都超珍貴、多蒐集幾個樣本可能要花不少時間 。如果你蒐集了比你實際上需要還多很多的樣本,就會多浪費好幾天蒐集樣本、還對實驗 沒什麼貢獻。而且別忘了,A/B Test 會讓你的使用者看到跟平常不一樣的產品,這個不一 樣或許是暫時的、未來或許會變回原狀(因為你的實驗有可能告訴你使用者其實不青睞新 設計),因此我們當然希望因為 A/B Test 而看到這個「不一樣」的使用者樣本越少越好 ,我們不會想讓太多人看到我們反反覆覆修改著產品設計的過程。 此外,當樣本數超級大的時候,通常 P 值(P-value)都會很小,換言之,只要你的樣本 數超多,幾乎都能看到統計顯著、拒絕虛無假設 但樣本數過多的統計顯著往往只伴隨著很小很小的效果 會是「不實用」的統計顯著。 (Statistically significant, but not practically significant) 舉例而言,假設有藥廠發明了一種藥,可以讓身高增加 0.2 公分,他們找了超大一群樣本 、也真的在實驗看出統計顯著性,但你會為了想長高 0.2 公分冒險吃這種藥嗎?這就是統 計顯著不太「實用」(Practical Significance)的意思。如果你還想知道樣本數過大還 會造成哪些其他 P-value 問題,推薦你細細品嚐以下這篇 Too big to fail 論文: https://reurl.cc/XERbqg 總之,想要為產品高效率執行 A/B Test,我們要找個剛剛好的樣本數 不能太低、也不適合太高 ## 決定所需樣本數的四大要素 ### 1. 樣本標準差 > 樣本標準差越大、A/B Test 需要的樣本數越多 樣本標準差(Standard Deviation)衡量樣本內數值的離散程度,樣本內的數值如果很發 散,我們會更難結論兩組數據間的差異。直接舉個例子來想像,假設已經知道A地區的平 均身高是 165 公分: * 如果你在B地區抽樣出 5 個人:158、163、170、172、177 公分 * 即使樣本平均是 168 公分,但是數據很發散(樣本標準差很大) * 讓你不敢斷言「B地區平均身高高於A地區」,或許還要 30 個樣本以上才能下結論 * 如果你在C地區抽樣出 5 個人:166、166、167、168、169 公分 * 雖然平均數只比A地區高 2 公分,但是每筆數據都很接近 167 公分、資料相當集中 (樣本標準差很小) * 你可能會在心中想著:只要再抽樣 3 個人、他們身高也同樣接近 167 公分的話,你 或許已經願意相信「B地區平均身高高於A地區」 樣本標準差的影響亦可以用鐘型曲線來視覺化。統計學常會對估計值畫出鐘型曲線來呈現 其分佈,A/B Test 兩組的樣本平均數分佈可以各自畫出鐘型曲線,很概略地說,(見下圖 )兩個鐘型曲線只要重疊的部分很少、就會有統計顯著。所以,樣本標準差對決定樣本數 的影響可以這樣思考: * 鐘型曲線越「瘦高」,越不容易重疊(越容易統計顯著) * A/B Test 樣本數越多,標準誤會越小、鐘型曲線會越瘦高 * 而當樣本標準差越小,標準誤也會越小 * 那就表示樣本標準差很小的時候,樣本數可以不用那麼多,鐘型曲線也能保持同樣瘦高 、同樣容易呈現統計顯著 * 「容易呈現統計顯著」的程度就是統計學家口中的檢定力(Statistical Power) https://imgur.com/ezHFIOm
### 2. Minimum Detectable Effect (MDE) > MDE 越大、A/B Test 需要的樣本數越少 Minimum Detectable Effect(MDE)是期望最小的指標效果差異,它是主觀設定的,它可 能取自於你的產品設計理念,例如幫 APP 某個按鈕換造型預計提升 10% 點擊率;也可能 來自於商業策略問題,例如這個 APP 按鈕的點擊率如果無法成長 10%,那將會不符成本、 不值得改變產品。 決定樣本數的時候就把 MDE 考慮進去,將會解決剛剛提到的「不實用」統計顯著問題,因 為你事先設定好你的數據至少要看到多大差異才算是實用,只要你使用剛剛好的樣本數來 做商業實驗,最後如果看到實驗呈現出統計顯著,其效果肯定不小於 MDE、必然是「實用 」的統計顯著(Practical Significance)。 Practical Significance 參考說明: https://online.stat.psu.edu/stat200/book/export/html/119 在此囉唆提醒,MDE 是在 A/B Test 開始之前就(主觀)決定好的,MDE 不是指實際實驗 數據的兩組平均數差異(因為實驗還沒開始做、不知道實際差異)。 當你設定的 MDE 越小,實驗需要的樣本數越高;反之,MDE 越大,需要樣本數越少。就用 上個小節的「長高藥」來舉例吧,假設已知控制組的平均身高是 165 公分: * 如果實驗者設定 MDE 為 1 公分 你陸續蒐集了幾個樣本分別是 166 公分、164 公分、172 公分 * 實驗組平均雖然比控制組高了 2 公分,你可能還是會心想:「不能結論長高藥有效! 或許有抽樣偏誤存在,是運氣好抽到一位特別高的樣本才有這種結果」 * 還要多蒐集很多樣本才敢結論到底有沒有長高效果 * 如果實驗者設定 MDE 為 20 公分 而你目前蒐集到幾個樣本分別是 187 公分、174 公分、189 公分 * 實驗組平均只比控制組高了 18 公分、不到 MDE 設定的 20 公分 * 但光是實驗組蒐集這少少 3 個樣本相對於控制組都有很大的效果 你是否也開始相信這個長高藥好像真的有效了? 此外,MDE 對樣本數的影響也同樣可以用鐘型曲線來想像。 * A/B Test 樣本數越多,標準誤會越小、鐘型曲線會越瘦高 * 而 MDE 越大,對照組的鐘型曲線會越往右邊平移、與另個鐘型曲線的重疊會越少 * 換言之,MDE 越大,樣本數即使少一點、鐘型曲線矮胖一點,也同樣容易出現統計顯著 https://imgur.com/D3lBpFE
### 3. 型一與型二錯誤 > 允許的型一與型二錯誤率越高、A/B Test 需要的樣本數越少 統計方法不是完美的,不管你進行假設檢定之後看到顯著或不顯著,都還是有機會讓你造 成錯誤結論。有可能抽樣時恰好運氣不佳,使得你抽到的樣本對於母體不具有代表性、無 法反映出母體的真實特徵,這種出現抽樣偏誤的隨機性會使我們錯誤推論資料。統計學家 將這種 A/B Test 「預期會發生」的錯誤分成兩種: * 型一錯誤(α 或 Type-1 Error): A/B 兩組其實並沒有差異,統計檢定卻因為隨機性判定成有差異(偽陽性錯誤) * 型二錯誤(β 或 Type-2 Error): A/B 兩組確實有差異,統計檢定卻沒有偵測到顯著(偽陰性錯誤) 如同人做的決策不可能完美無缺,統計檢定的型一與型二錯誤也不可能完全消除、但可以 被控制,分析者可以自己決定容許統計方法有多少型一與型二錯誤存在。在資料越多時, 你對估計值的衡量就越精確,(通常)也表示會產生的決策錯誤越少;反過來說,如果你 允許發生的型一與型二錯誤越少,需要的樣本數就會越多。 在此又要囉唆地註記,很多資料科學家會用檢定力(Statistical Power)來描述型二錯誤 ,檢定力其實就只是 1-β、與原本的型二錯誤 β 一體兩面,只需要注意樣本數計算的統 計直覺會變成:如果分析者要求 A/B Test 的檢定力(1-β)越高、需要的樣本數也會越 多。 相對於剛剛討論的另外兩個因素(樣本標準差由資料決定、MDE 由產品設計者決定),一 般來說,我們執行 A/B Test 會選擇的型一與型二錯誤率幾乎都是按照統計學的慣例、不 太會更動: * 型一錯誤設定為 α = 0.05 * α 也被稱為顯著水準(Significance Level) * 這也是為什麼我們常常看到 95% 信賴區間 * 型二錯誤設定為 β = 0.2 * 也就是檢定力 = 1-β = 80% ## 究竟樣本數計算公式是什麼? 進行 A/B Test 的正確做法是預先決定實驗樣本數、並且禁止在蒐集到這個樣本數之前偷 看。那麼實驗樣本數究竟是怎麼算出來的呢?以下是計算方法的「經驗法則」: n = 16 * sigma^2 / delta^2 https://imgur.com/A9qOqMQ
經驗法則的意思是,此公式已經經過不少簡化, 並且計算內容已蘊含了上述的四大要素 更重要的是, 我們使用時要注意其包含了幾項假設: * 實驗的 A 與 B 兩組樣本數大小相同 * n 是 A 與 B 其中一組的樣本數至少要是多少(注意 n 不是 A 與 B 的樣本數總和) * 型一與型二錯誤依照慣例設定 α = 0.05 與 β = 0.2 * 假設實驗的 A 與 B 兩組樣本變異數相同(樣本標準差相同) (如果你的實驗要改變以上假設, 就不能再用此經驗法則、要去找更完整的數學公式) 這個簡化後的經驗法則公式不限於資料型態,不管你的 A/B Test 目標是連續型資料還是 比例資料都能適用。我們可以用 Python 程式跑些模擬來驗證我們算出來樣本數的正確性 對模擬流程有興趣的話,請參考我放在 GitHub 的 Python Notebook: https://reurl.cc/y7vaaE 此外,這個簡短的樣本數計算公式還可以用效果量的觀點來理解 統計學課本所說的 效果量(Effect Size)是衡量兩個變數之間關係的強度,我自己則更 喜歡把效果量想成考慮資料離散程度(變異數)後的效果大小相對值,又或者,效果量可 以想成是為效果標準化、以統一尺度來衡量效果。 在 A/B Test 情境,效果量經常使用 Cohen’s d 來計算。而上面這個公式,可以用 Cohen's d 來改寫(以下 Cohen's d 以 ES 表示): n = 16 * sigma^2 / delta^2 = 16 / ES^2 where ES = delta / sigma https://imgur.com/6bIGdPb
由此改寫後的公式來看,A/B Test 樣本數取決於標準化後的效果大小 換言之,樣本數是 Cohen’s d 的函數。 依此能看出把樣本數轉換成 Cohen’s d 的函數來理解的好處: 幫我們一眼看出「樣本數取決於效果大小」的統計直覺 ## 小結 如果你在網路上用英文關鍵字搜尋過「Sample Size」 很可能看過 Evan Miller 設計的熱門 A/B Test 樣本數計算機 https://www.evanmiller.org/ab-testing/sample-size.html 網頁提到他用的正是 n = 16 * sigma^2 / delta^2 這個經驗法則公式 而網站中對公式說明不多、也無法一眼看出用到了哪些假設 希望這篇文章能幫助各位板友 更清楚理解網路上搜尋到的各種 A/B Test 樣本數計算機究竟算了什麼 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.5.200 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1687878735.A.FB3.html

06/28 07:32, 1年前 , 1F
06/28 07:32, 1F
※ 編輯: AgileSeptor (36.225.15.165 臺灣), 06/28/2023 11:27:01 ※ 編輯: AgileSeptor (36.225.15.165 臺灣), 06/28/2023 11:29:09

06/29 10:51, 1年前 , 2F
推推!之前學姊在做大專生計畫時,收案也有估算所需
06/29 10:51, 2F

06/29 10:51, 1年前 , 3F
樣本數
06/29 10:51, 3F

06/30 19:46, 1年前 , 4F
推推 從文章學到很多
06/30 19:46, 4F

07/03 02:46, 1年前 , 5F
07/03 02:46, 5F

07/05 12:08, 1年前 , 6F
07/05 12:08, 6F

07/07 20:05, 1年前 , 7F
07/07 20:05, 7F

07/14 23:11, , 8F
07/14 23:11, 8F

10/19 18:11, , 9F
10/19 18:11, 9F

01/27 16:19, , 10F
01/27 16:19, 10F
文章代碼(AID): #1aclnF-p (DataScience)
文章代碼(AID): #1aclnF-p (DataScience)