只需要加減法的 A/B Testing?

by 好豪
Published: Last Updated on

在我的 另一篇文章 中,提過 A/B Testing 禁止偷看結果,樣本蒐集到預期數量之前,不可以提早做統計檢定,否則會增加決策錯誤的機率。不過,標準的假設檢定不是唯一一種 A/B Testing 的方法。在 Evan Miller 的 文章,他介紹了 Sequential A/B Testing,它有幾項神奇的好處:

  • 允許偷看數據、隨時檢驗是否顯著都可以
  • 在特定情況下,比標準假設檢定需要的樣本數還少、可以更快結束實驗
  • 檢驗甚至只需要加減法,不需要算 P-value!

事實上,專門做 A/B Testing 的公司 Optimizely 也以 Sequential A/B Testing 相關的 機率理論 為基礎,發展出 New Stats Enigine 來加速實驗流程。本文將介紹較基本的方法。

Optimizely 採用的 A/B Testing,允許 Continuous Monitoring(偷看實驗結果)。本篇筆記介紹的方法也同樣允許偷看結果、還能加速實驗流程、實作也較簡單(Source: Optimizely

筆者第一次看到 Sequential A/B Testing 方法的時候覺得它簡單到莫名其妙,所以在這則筆記,除了介紹 Sequential A/B Testing 以外,我也寫程式驗證此方法是否真的這麼神奇,並用資料視覺化的方式呈現此方法在哪些情境下特別有優勢。想一起動手做的讀者,可以打開好豪寫的 Google Colab Notebook 一起玩玩看。

Sequential A/B Testing 介紹

超簡單的檢定


對二項式比率(此稱為轉換率)執行單尾檢定:

  1. 決定好你對實驗假設的顯著力、檢定力、以及期望的轉換率差異量之後,使用 計算機 或者 查表,選出轉換成功樣本數大小 N
  2. 開始 A/B Testing
  3. 持續觀測實驗組(B 組)的轉換成功數量 T、以及控制組(A 組)轉換成功數量 C
  4. 如果 T - C 超過 2\sqrt{N},宣告實驗組較好,結束實驗
  5. 如果第 4 點不成立,且 T + C 累積到超過 N,無法宣告任一方較好,結束實驗

樣本數 N 選擇

Sequential A/B Testing 的樣本大小選擇,是根據 The Gambler’s Ruin 機率理論,你可以依照 公式、自己寫程式找出所需樣本數,然而,我認為簡單的查表就足以應付大部分的 A/B Testing 使用情境,不見得需要自己寫程式計算樣本數。

以下是假設顯著力 95%、檢定力 80% 時,你可以用的來查詢的表格:(Source:Evan Miller 的計算機

期望轉換率相對差異量轉換成功樣本數大小 N勝敗差異樣本數大小 d
50%17026
40%24331
30%39139
20%80856
10%2922106

例如,目前觀察到廣告點擊率(CTR)是 1%,團隊做了小更動,預期可以將成效提升 10%、讓 CTR 提升到 1.1%。根據查表,你的 A/B Testing 實驗過程中,只要實驗組比對照組多 106 個成功點擊數,就可以宣告新的更動是更好的;相反地,如果兩組總共蒐集 2,922 個成功點擊時,還沒有任何一組勝過另一組至少 106 個成功點擊的話,那兩組就沒有輸贏。

方法有效性

由於這個方法只有加減法、沒有計算 P-value,實在讓筆者好豪半信半疑,所以試著寫程式驗證這個方法是否有效。驗證方法是觀察實驗錯誤率是否符合上方查表假設的顯著力 95% 與檢定力 80%:

  • 設置 A/B 兩組實際上沒有差異,預期只能有 5% 的時候會誤判出顯著差異
  • 設置 A/B 兩組實際上存在差異,預期 80% 的時候會檢定出顯著差異、也就是 20% 會誤判以為沒差異

寫程式驗證之後,Sequential A/B Testing 看起來方法簡單,但是以上兩項假設確實都符合!

(詳細驗證流程請參考好豪的 Python Notebook

方法特色

看到這裡,Sequential A/B Testing 有幾項值得讀者注意的特色:

  • 兩組比較的是轉換成功的絕對數字差異,而不是轉換成功比率差異
  • 也可以說,此方法只在乎轉換成功、而不管轉換失敗的數目
  • 如上方的表格所示,此方法需要的樣本數與基礎轉換率無關
    • 相較之下,標準假設檢定的固定樣本數方法,A/B Testing 所需樣本數會受基礎轉換率影響

也因為這些特色,Sequential A/B Testing 在特定場合較為實用。

Sequential A/B Testing 適用場合

「適用」的意思,是我們想知道在什麼情境下 Sequential A/B Testing 會比標準假設檢定的 固定樣本數方法 好用。以下實驗數據主要是比較 Sequential A/B Testing 相對於標準假設檢定節省了多少樣本數量。實驗中,刻意設計幾種情境,觀察檢定方法是否判定 A/B 兩組有差異:

  • A/A Test: A/B 兩組實際上並無差異
  • A/B Test: A/B 兩組存在差異,差異量恰好為期望差異量
  • Blockbuster Test: A/B 兩組存在差異,而且差異量是期望差異量的兩倍

適用場合視覺化

Sequential A/B Testing 適用場合(Source: 好豪的 Python Notebook

在圖示中,節省樣本數量大於零(黑色實線以上),代表 Sequential A/B Testing 需要的樣本數比標準假設檢定的固定樣本數方法更少、可以更快結束實驗:

  • 如果 A/B 兩組實際上並無差異,Sequential A/B Testing 相對於標準假設檢定的節省量是負值、也就是 Sequential A/B Testing 需要更多樣本數才能結束實驗
  • 如果 A/B 兩組存在差異,而且基礎轉換率較小(1 ~ 5%)、期望相對差異量也較小(10 ~ 30%)的話,Sequential A/B Testing 需要的樣本數,會比標準假設檢定少 10 ~ 20%
    • Sequential A/B Testing 能更快偵測出兩組差異、並結束實驗
  • 如果實驗組實際上效果超乎預期的好,Sequential A/B Testing 節省的樣本數量甚至超過 30%

舉例而言,如果你剛上架一款新的手機遊戲,新玩家的付費率目前是 2%。你希望更多玩家願意花錢,所以幫付費按鈕增加了閃爍特效,預期轉換率提升 20%:

  • 如果為此新特效執行標準假設檢定 A/B Testing 的固定樣本數方法,你預期需要一個月才能搜集完成樣本
  • 使用 Sequential A/B Testing 的話,如果新特效真的有效益,你可以預期節省約 15% 的樣本數,大約三週就可以檢定出效果
    • 相反地,如果新特效其實沒效益,用 Sequential A/B Testing 需要多花一週時間才會結束實驗

更簡單地說明此例,當你用固定樣本數方法預期要一個月才能搜集完樣本時,採用 Sequential A/B Testing 的話:

  • 如果新特效真的有用,你可以提早一週結束實驗、讓所有用戶付費率提高到 2.2%,賺更多錢!
  • 如果新特效實際上沒用,實驗會晚一週結束,但是你的付費率依然維持 2%,也不會有損失

決定是否該用 Sequential A/B Testing 的經驗法則

在上面的資訊圖表中,告訴我們基礎轉換率以及期望差異量越小的時候,Sequential A/B Testing 可以更快速結束實驗,但究竟要小到什麼程度呢?Evan Miller 在他的 文章 提出一個經驗法則:

1.5 * 基礎轉換率 + 相對差異 < 36%

決定是否該用 Sequential A/B Testing 的經驗法則(Source: 好豪的 Python Notebook

只要想實驗的目標轉換率與相對差異量符合這個經驗法則,讀者就可以考慮使用 Sequential A/B Testing。在基礎轉換率小於 5% 的時候,大多可以預期所需樣本數比固定樣本數法減少至少 10%。

結語

在商業場景中,如果你的新設計(B 組)確實成效較好,決策者當然希望越早採用它越好、盡快提升產品整體表現;相反地,如果實驗結果告訴你 A/B 兩組對使用者來說根本沒差異,那就算 Sequential A/B Testing 會讓所需樣本數增加、讓 A/B 兩組實驗久一點,也是可以接受的犧牲。

因此,如果你的實驗基礎轉換率較低的話,不妨試著採用 Sequential A/B Testing,讓你的團隊能有機會更快看出實驗成效也更快最佳化你的產品


參考資料:

還想知道更多 A/B Testing 相關知識嗎?推薦你閱讀好豪的 A/B Testing 系列文章

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

推薦閱讀