A/B/n 與多因子設計
一個單純的 A/B 測試 只比較同一樣東西的兩個版本:現有的體驗(對照組,control)和一個新點子(實驗組,treatment)。你把使用者隨機分成兩群,各看一個版本,再比較某個指標。但現實很少給你乾淨的二選一。設計師一次帶來四個候選的結帳按鈕,而不是一個;行銷團隊有三個他們都喜歡的信件標題。很自然的做法就是一次全部測——這就是 A/B/n 測試:一個對照組加上好幾個實驗組,同時並行,把流量分配給它們。
用 n 個版本而不是兩個,會在兩個地方付出代價,而這兩點都值得直說。第一,你的流量現在被切成更多桶,每個桶都更小。群體越小,估計就越吵雜,也就越難偵測到真正的差異——你已經悄悄地降低了每一組比較的 統計檢定力。第二,也更陰險的是,每多一個版本就是多一次比較,而每一次比較都是又擲了一次骰子,純粹因為運氣而生出一個偽陽性。
有 m 次獨立比較、每次的顯著水準都是 α 時,至少出現一次誤報的機率。當 α = 0.05、m = 10 次比較時,這大約是 0.40——即使每個版本都沒用,也有四成機率會狼來了。
Bonferroni 校正:要讓 m 次比較的整體誤報率維持在 α 附近,就改要求每一次比較都跨過這個更嚴格的門檻。
比起把一堆各自獨立的版本丟到牆上,還有一個更聰明的替代方案。假設你想測一個新的按鈕顏色和一個新的標題。與其做兩個各自獨立的實驗,不如做一個多因子設計(factorial design):一個把兩種改動交叉起來的小網格。一個 2×2 的多因子設計有四格——舊/新顏色交叉舊/新標題。用同一批使用者,你就能學到顏色的主效果、標題的主效果,還有最值錢的——它們的交互作用:新顏色搭配新標題時,幫助是更大還是更小。在相同流量下,這比兩個孤立的測試多出太多資訊了。
一張漏斗圖:一股進來的使用者流量分成好幾條並排的欄位,標示為對照組、B、C、D,各自經過相同的階段逐漸收窄,最後匯到一個轉換指標。
序貫檢定:正確地提前停止
這裡有個每個團隊都會感受到的誘惑。你上線了一個原本要跑兩週的測試,但在第三天,儀表板就已經顯示實驗組以顯著的結果勝出。何必等?上吧。問題在於你並不是只看了一次——你在第一天、第二天、第三天都看了,並在結果一越線的那一刻就停下。這就是 偷看,它會嚴重灌水你的偽陽性率,因為每多看一次,就是又給了普通的隨機雜訊一次機會,讓它晃過顯著的門檻。
在虛無假設 H₀(沒有真實差異)之下,一個為「只看一次」而設計的測試,誤報率是 α。但若反覆偷看、並在第一次出現顯著時就停下,真實的誤報率就會遠遠爬到 α 之上——對一個名目上 5% 的測試,常常會到 20–40%。
把 p 值到底是什麼講清楚會很有幫助,因為偷看正是在濫用它。p 值是:假如虛無假設(沒有真實效果)為真,看到至少這麼極端的資料的機率。它絕對不是「你的版本比較好」的機率,也不是「虛無假設為真」的機率。整套古典檢定的機制都假設你事先固定樣本數、而且只看一次。偷看很多次,你就已經偷偷改變了這個實驗,於是 p 值不再是表格上所說的那個意思了。
但團隊確實需要監看一個正在跑的測試——好盡快砍掉有害的版本,或更早推出明確的勝利。誠實的做法是序貫檢定(sequential testing):一整族從一開始就為「持續監看」而打造的方法。你會遇到兩個概念。Alpha 花費法(alpha-spending,群組序貫設計)把你 5% 的誤報預算當成錢:你在每一次預定查看時花掉一點點,所以前期的門檻較嚴,而總額維持受控。永遠有效推論(always-valid inference)則產生一種 p 值與信賴序列,無論你選在何時停下都依然可信——你想看多頻繁都行。
一張互動折線圖,顯示隨樣本累積、p 值隨時間的變化;即使真相是沒有差異,這條線仍會抖動、偶爾跌到 0.05 線以下,說明反覆停手如何灌水偽陽性。
CUPED:用實驗前的資料削掉雜訊
一個典型指標裡的大部分變異,跟你的實驗一點關係都沒有。想像你在測一個購物 App 的改動,而你的指標是每位使用者的營收。有一位使用者上個月花了 500 美元、另一位只花了 2 美元,而不管你給他們看哪個按鈕,他們大致都會繼續這樣。使用者之間這種巨大的、既有的落差,就是雜訊,它淹沒了你要找的那個小訊號——你的新按鈕可能多賺到的那幾塊錢。
CUPED——全名是「使用實驗前資料的受控實驗」(Controlled-experiment Using Pre-Experiment Data)——是一個把那個可預測部分移除掉的巧妙手法。對每位使用者,你同時看他在實驗開始之前的數值(比如上個月的花費)。因為實驗前的大戶通常在實驗期間也是大戶,你就可以把「從過去就能預測到」的那部分行為減掉,只分析剩下的部分。處理效果原封不動,但雜訊縮小了。
調整後的指標。Y 是使用者在實驗期間的數值、X 是他在實驗之前的數值、X̄ 是實驗前期的平均、θ 則是一個經過挑選、用來盡量移除雜訊的數字。減去一個與處理無關的量,能讓效果維持不偏。
你削掉了多少雜訊。ρ 是「實驗前」與「實驗期間」兩個數值之間的相關係數。如果它們的相關是 0.7,你就把變異數砍掉了大約一半(1 − 0.49 ≈ 0.51)——而且是免費的,只是用了你本來就有的資料。
為什麼削減變異數這麼重要?因為你需要的使用者人數正是由它驅動的。所需的樣本數會隨指標的變異數而變大、隨你想偵測效果的平方而變小。把變異數砍半,你需要的使用者大致也砍半——或者等價地說,用一半的時間就能跑完同樣的測試。CUPED 之所以是業界最受寵愛的手法之一,正是因為它在不多收一個使用者的情況下,就把額外的檢定力交到你手上。
樣本數的直覺:需要的使用者數 n 隨指標的變異數 σ² 上升、隨你在乎的最小效果 δ 的平方下降。CUPED 直接攻擊分子裡的那個 σ²。
一個互動計算器,有基準率、最小可偵測效果、變異性與檢定力的滑桿;把變異性滑桿調低,所需的樣本數與測試時長會明顯減少。
多臂吃角子老虎機:邊賺邊學
古典的 A/B 測試是純粹的學習:你承諾一個固定的分配比例——比如 50/50——並在整個測試期間都維持它,即使有一邊明顯落後也一樣。當你的目標是一個可信的測量時,這麼做是對的。但有時你的目標不同:你主要想的是在弄清楚哪個選項最好的同時,賺到最多的回報。一個只有一天的限時搶購標題,或是五封促銷信要寄哪一封,講求的是今天的成果,而不是一個給檔案室收藏的乾淨估計。
這就是探索與利用的取捨(explore–exploit tradeoff),而對應的工具就是 多臂吃角子老虎機。這名字來自吃角子老虎——單台吃角子老虎是「單臂強盜」,所以一排賠率未知、各不相同的機台就是「多臂強盜」。你必須持續探索各個臂,才能學到哪一個賠最多;同時又要利用目前看來最好的那個臂,才不會白白丟掉回報。一個吃角子老虎演算法會動態地做這件事:當證據累積出某個版本正在勝出,它就自動把更多流量導向那邊、餓死落後者——而不是固執地連續兩週把一半使用者餵給一個已知的輸家。
兩種常見的做法可以給你直覺。Epsilon-greedy(ε-貪婪)最簡單:大多數時候把使用者送到目前看來最好的臂,但有一小部分時間(ε)隨機挑一個臂,純粹為了繼續學習。Thompson 抽樣(Thompson sampling)更優雅:對每個臂的真實比率各保有一個信念,從每個信念各抽一個隨機樣本,再把使用者導向抽出來最高的那個。你不確定的臂自然會被探索;明顯較差的臂則悄悄淡出。
保留組與衡量長期效果
一個實驗通常跑一兩週,但你真正在乎的效果,是那個能持續好幾個月的效果。短短的窗口會以可預測的方式誤導你。一個花俏的新功能會帶來一陣好奇心的高峰——也就是新奇效應——它在不再新鮮之後就會消退。相反的「先入效應」(primacy effect)則發生在使用者一開始感到困惑、需要時間學習這個改動時,於是一個真正好的功能會有一陣子看起來很差。無論哪種,你在第一週測到的,都不是你在第六個月會得到的。
解法是保留組(holdout group,又稱對照保留組):一小片使用者——常常只有 1%——你刻意讓他們長時間(數週或數月)停留在舊體驗上,即使你已經把新版本推送給其他所有人。之後你把這些被保留的使用者與其餘的人比較,這個落差就是你對「你推出的一切」之累積效果,最誠實、最持久的估計。它的一個變體叫長期保留或反向實驗(reverse experiment):你把一個已經上線的功能,對一小群人暫時關回去,重新衡量它真正持續的價值。
一個具體的畫面:一個推薦系統的改動在第一週顯示出令人振奮的 +5% 互動率。你把它上線了,但保留了 1% 的保留組。三個月後,保留組的比較顯示持久的提升其實只有 +1%——仍然真實、仍然值得擁有,但只有上線報告所吹噓的五分之一。要是沒有保留組,你的產品路線圖就會建立在一個悄悄蒸發掉的數字上。
打造實驗文化
本指南裡的每一項技術都只是工具,而工具救不了一個不信任自己實驗的團隊。學得最快的公司,並不是擁有最聰明統計手法的那些——而是把「跑一個可信的實驗」做成無聊的預設值的那些。這比較是一項文化成就,而非技術成就,而它是由少數幾個習慣堆起來的。
- 建立一個中央平台。一個共用、單一的系統來開測試,會用同一套方式處理隨機分派、紀錄與分析——這樣結果才可比較,也沒人需要重造接線(或它的臭蟲)。
- 預設就值得信任。把安全檢查內建進去:自動的樣本比例不符警報、能擋下明顯傷害的護欄指標、事先設定好的顯著水準,以及能正確處理偷看的統計方法。
- 預先登記計畫。在上線前,把假設、主要的整體評估準則,以及最小可偵測效果寫下來。事先決定「什麼算成功」,是事後不自欺最便宜的防線。
- 保存組織記憶。一份可搜尋的紀錄,記下每一個過去的實驗及其結果,能阻止團隊重跑同一個點子,也讓新的成果能站在舊知識之上。
- 教學與審查。像審查程式碼一樣同儕審查實驗設計,並在新人掉進陷阱之前,教他們那些陷阱——偷看、多重比較、新奇效應。
- 誠實記分。回報點子失敗的頻率,而不是只報喜。一個把「乾淨的負面結果」當成「省下的一個錯誤」來慶祝的文化,才是一個會學習的文化。
最後那個習慣值得強調,因為它最反主流文化。像微軟和 Google 這樣的公司,團隊曾回報:在設計良好的實驗中,只有少數——常常大約三分之一或更少——真的把目標指標往預期的方向推動。這不是這套制度的失敗,而正是它的全部意義所在。大多數聽起來合理的點子根本沒用,而實驗的價值,就在於它能在這些點子以一副自信滿滿的胡說上線之前,把它們攔下來。
接下來往哪裡鑽
你現在握有進階實驗的工具箱了。當兩組還不夠時,A/B/n 與多因子設計能一次測很多點子——只要你對多出來的比較加以校正。當你想誠實地監看一個正在跑的測試時,序貫檢定讓你能提前停止而不灌水偽陽性。當指標很吵雜時,CUPED 用你本來就有的資料免費削減變異數。當「賺」比「量」重要時,多臂吃角子老虎機會邊學邊把流量挪向贏家。而當短期會說謊時,保留組會在幾個月後告訴你真相。
這些概念也向外連到資料科學的其他部分。當你真的無法隨機分派時,因果推論那一軌會教你如何仍然做出站得住腳的因果主張——並再一次提醒你,相關不等於因果。CUPED 的共變量調整其實只是迴歸的偽裝,所以迴歸那一軌能把它講得更深。而你跑的每一個實驗都會產生資料,這些資料必須被儲存、清理與供應,這正是現代資料技術棧那一軌在談的事。
若想要一本把整個實驗學科收攏在一起的書,標準參考是 Ron Kohavi、Diane Tang 與 Ya Xu 合著的《Trustworthy Online Controlled Experiments》(值得信賴的線上受控實驗)——他們正是在微軟、Google 與 LinkedIn 打造這些系統的實務工作者。再搭配大型科技公司的實驗工程部落格,本指南裡的那些陷阱,在那裡會以真實、昂貴的戰場故事被一一講述。讀完它們,然後去跑一個你自己的乾淨實驗吧。