JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

我們為什麼要做實驗

意見很廉價,觀察性資料會騙人。為隨機實驗辯護——它是我們最接近真相機器的東西。

「我們上線了,數字也漲了」這個陷阱

想像你在一個購物 App 工作。團隊為了結帳按鈕已經爭論好幾週了:有人把它從暗淡的灰色改成明亮、有自信的綠色,你在週一把這個改版推送給所有人,到了週五,營收比前一週高了 8%。整個辦公室一片歡騰。綠色按鈕成功了。該把每個按鈕都改成綠色了。

現在先停一下,問一個安靜的問題:那一週還有什麼也變了?也許剛好是發薪日。也許接著是連假。也許行銷在週三寄了一封大型電子報、競爭對手的網站在週四當機、天氣變了,或某個商品在社群上爆紅。你引以為傲的這 8%,其實是綠色按鈕的效果,和上面這些其他因素全部糾纏在一起的結果。光憑這一個數字,你無法把它們分開。

要真正把功勞歸給按鈕,你必須知道:同樣那一週、同樣那批購物者、同樣的天氣、同樣那封行銷電子報,但如果你留著舊的灰色按鈕,營收會是多少。這個平行世界——其他一切都相同,只有一個細節改變——就叫做反事實(counterfactual),而殘酷的事實是:你永遠無法直接觀察到它。那一週只發生了一次,而且是用綠色按鈕。那個完全相同、但用灰色按鈕的版本,已經不存在了。這道鴻溝,正是每一個關於因果問題的核心。

「改版前 vs 改版後」的比較感覺很像證據,但它悄悄地假設了:在這兩段期間內,除了你的改動之外,什麼都沒變。然而在真實世界裡,總是有東西在動。這就是為什麼「什麼有效」的意見很廉價,也是為什麼這篇指南要談那個能給我們誠實答案的工具:隨機實驗。

選擇偏誤:為什麼觀察性資料會騙人

一家公司手上的資料,大多是「觀察性資料」(observational data):你只是單純地觀看人們做了什麼、而不介入去改變任何事,所收集到的資料。伺服器日誌、註冊紀錄、問卷回答、購買歷史——這些全是世界對自己的紀錄。它量很大、很便宜,而且早就躺在你的資料庫裡了。但對因果問題來說,它也是一片地雷區。

有一個故事,你在每家公司都會聽到。分析師注意到:使用「功能 X」的使用者,回訪率遠高於不用的人——使用功能 X 的人有 80% 在一個月後仍然活躍,而其他所有人只有 30%。簡報上寫著:功能 X 帶動了留存——快推動所有人去用它!但想想看,一開始究竟是「誰」會去發掘並使用一個進階功能?通常是那些本來就已經很投入的重度使用者——那些本來就會留下來的人。在功能 X 還沒登場之前,這兩群人就已經不一樣了。功能不見得創造了忠誠;是忠誠的人主動去找了這個功能。

這就是選擇偏誤(selection bias):你在比較的這些組別,是被「非隨機」的某種因素分進去的,所以它們在許多與你的功能無關的面向上本來就不同。它有一個近親,叫做干擾因子(confounder)——一個潛伏的第三變數,同時影響你正在看的兩件事,於是憑空製造出兩者之間的相關。教科書上的例子:整個夏天裡,冰淇淋銷量和溺水死亡人數一起上升。冰淇淋並不會造成溺水。炎熱的天氣才是干擾因子;它各自獨立地把兩者都推高了。

干擾因子位在「假設的原因」與「結果」的上游,製造出一個並非因果的相關。一旦阻斷(調整)這個干擾因子,這條虛假的連結就會瓦解。

一張因果圖:一個箭頭從「炎熱天氣」指向「冰淇淋銷量」,另一個箭頭從「炎熱天氣」指向「溺水」,而冰淇淋銷量與溺水之間只畫了一條虛線、非因果的相關。

隨機分派究竟修好了什麼

接下來這一步,能把「猜測」變成「知識」。與其讓使用者自己分組,不如由你來替他們決定——而且是用機率決定。每當一位使用者到來,你就擲一枚(數位)硬幣。正面,他看到新的綠色按鈕;反面,他維持舊的灰色按鈕。使用者「是誰」這件事,完全碰不到這枚硬幣。這就是「隨機分派」(randomization),也是實驗中最重要的一個觀念。

為什麼擲一枚硬幣這麼有威力?因為這枚硬幣什麼都不在乎。在夠多使用者之下,兩組會在「所有特徵上同時」達到平衡——年齡、國家、裝置、原本投入的程度、是哪一天註冊的,甚至是他們碰巧會經歷到的天氣。而下面這一點,是再聰明的觀察性資料分析都比不上的:這兩組在「你從未測量、從未記錄、甚至從未想到」的那些東西上,也是平衡的。隨機分派能保護你,免於那些你根本不知道存在的干擾因子。

一旦兩組在每個面向上都相像、只差一件事——他們看到哪個按鈕——那麼他們結果上的任何差異,終於可以歸因到這個刻意安排的唯一差別。灰色按鈕組就成了反事實活生生的替身:它告訴你,綠色按鈕組「如果改看灰色」會有什麼表現。這就是為什麼隨機實驗,是我們在因果問題上最接近真相機器的東西。

接著,要把效果標上一個數字就清爽得令人意外。你量出每一組的平均結果,然後相減。如果綠色按鈕組有 5.0% 的人下單、灰色按鈕組有 4.6%,那麼你估計的效果就是提升了 0.4 個百分點。你正在估計的這個量有個名字——平均處理效果(average treatment effect)——而它最簡單的形式,就只是一個平均數減去另一個平均數。

\widehat{\text{ATE}} = \bar{Y}_{\text{treatment}} - \bar{Y}_{\text{control}}

估計的平均處理效果:拿到新版本那群使用者的平均結果(Ȳ),減去拿到舊版本那群的平均結果。上面那個小帽子代表「我們對……的估計」,因為它來自一份樣本,而不是整個世界。

實驗組、對照組,與一場公平的比較

兩個詞彙能讓這個領域接下來的內容都好讀很多。實驗組(treatment group)是拿到你正在測試的新東西的那群使用者——綠色按鈕。對照組(control group)是維持現有體驗的那群——灰色按鈕——它們充當你用來比較的基準線。實驗組是「改動」;對照組則是「一切照舊」。

對照組不是一個可以省略的形式。它是你在現實世界裡,對「反事實」所能做出的最佳估計——也就是實驗組「若沒有這項改動」會有的表現。省掉對照組、只跑實驗組,你就又掉回「數字漲了」的陷阱,無法把你的改動和連假、電子報、天氣分開。對照組會默默吸收所有這些背景因素,因為它經歷的,正是同一個那一週。

要讓比較公平,三件事必須對齊。兩組必須來自同一個母體、在同一段時間取得,而且只在一件事上不同——你的處理(treatment)。一次改兩件事(比方說,綠色按鈕,再加上只給實驗組看的折扣),實驗就毀了:成效可能來自任何一個,而你永遠不會知道是哪個。這條「一次只改一件事」的紀律,正是讓一個實驗能被詮釋的關鍵。

還有一個微妙的威脅:人們有時會因為「知道自己被觀察」、或因為「拿到了新奇閃亮的東西」而表現不同。在醫學上,這正是為什麼對照組仍然會拿到糖球——安慰劑(placebo)——也是為什麼病人和醫生都不會被告知誰拿到哪一種(這叫「盲化」blinding),好讓希望與期待平均地壓在兩組身上。在網路上,你通常根本不會告訴使用者他正參與實驗,但同樣的精神依舊適用:實驗組與對照組之間,唯一該不同的,就是處理本身。

一張圖看懂 A/B 測試

當一家科技公司在它的網站或 App 上跑隨機實驗時,通常會稱之為 A/B 測試(A/B test)。這個名字只是個簡寫:版本 A 是對照組(目前的體驗),版本 B 是實驗組(新點子)。當真實使用者到來,軟體會把每個人隨機分配到 A 或 B——常常是 50/50 對分——然後記錄他們做了什麼。A/B 測試並不是什麼奇特的東西,它就是一個披上產品外衣的隨機對照實驗

一道使用者的水流被隨機分成 A 和 B 兩股;每個版本各自把使用者導向目標(比方說,完成購買);最後你比較這兩個轉換率。最上方那一刀隨機切分,正是讓最下方那場比較值得信任的原因。

一張漏斗圖:進來的使用者以 50/50 分成 A 路徑與 B 路徑;每條路徑經過數個步驟逐漸收窄,直到一個轉換方塊;最後兩個轉換率並排放在一起以供比較。

每一個 A/B 測試的骨架都一樣,就是這五個動作。請注意,五個裡有四個是在你看到任何一筆結果「之前」就要決定的——實驗大半是規劃,最後那段分析反而是短的部分。

  1. 挑出那個決定成敗的「單一指標」——對結帳按鈕來說,就是購買轉換率。寫下哪個方向才算贏。
  2. 選擇要隨機分派的「單位」——通常是每位使用者——並把進來的使用者隨機切分成對照組(A)與實驗組(B)。
  3. 讓每一組接觸到各自的版本,並讓實驗在預定的期間內不受干擾地跑完。
  4. 在每一組裡量出選定的指標,並算出兩組之間的差異。
  5. 判斷這個差異是否為真(而非只是雜訊)、又是否大到值得在意——靠的是統計,不是直覺。
SELECT
    variant,                         -- 'A' (control) or 'B' (treatment)
    COUNT(*)                AS users,
    AVG(converted::float)   AS conversion_rate
FROM experiment_events
WHERE experiment = 'green_checkout_button'
GROUP BY variant;
整個分析可以從一句查詢開始:依使用者看到哪個版本來分組,再對「他有沒有轉換?」這個 0/1 欄位取平均,就得到每一組的轉換率。難的部分是這行字四周的一切——乾淨的分派與誠實的統計——而不是這個算術本身。

最後那一步藏了很多東西。你怎麼知道 0.4 個百分點的差距是真實效果,而不是「碰巧哪些使用者落到哪一組」的隨機運氣?你又得跑多久,才能給一個真實效果一個公平的機會冒出頭?這些問題,正是這條學習軌後續指南的主題——挑選指標與隨機分派單位,再用統計檢定力來估算測試規模。但現在,上面那張圖就是全部的核心概念:公平切分、接觸、衡量、比較。

何時無法、或不該做實驗

隨機實驗是黃金標準,但它並不總是可行、合乎倫理,或明智。一位誠實的實務工作者,既懂它的威力,也懂它的界限。以下是那些「擲硬幣」這條路走不通的常見情境。

  1. 違反倫理。你不能把人隨機分派去抽菸三十年,只為了測量罹癌風險。醫學與經濟學有很大一部分,必須從世界遞給我們的資料中學習,而不是靠我們本就拒絕進行的試驗。
  2. 不可能、或只有一次機會。你無法對一場十年一遇的品牌重塑、一條新的全國性法律,或一樁併購做 A/B 測試。它只有一份,而且是同時發生在所有人身上。
  3. 使用者之間互相干擾(網路效應)。如果你把一個新的社群或通訊功能給一半的使用者,實驗組會改變對照組的體驗——一則訊息有兩端。組與組之間乾淨的隔離就崩塌了。
  4. 太慢或太貴。有些效果——好幾年的流失率、顧客終身價值、品牌信任——要冒出頭的時間,遠超過任何產品團隊願意等待的程度,或是要做到夠大規模的代價太高。

當你真的無法隨機分派時,你並非束手無策——你會退而求其次,依靠觀察性資料,以及一套叫做「因果推論」(causal inference)的細膩工具,它試圖用世界給你的資料來逼近一場實驗。有時候,世界甚至會意外地替你跑了一場實驗——某個在特定日期啟動的政策、一場樂透、一條任意的門檻——這些自然實驗(natural experiment)幾乎可以像真的實驗一樣分析。這些方法既強大又優美,但它們永遠建立在一些「你必須去論證、卻無法完全證明」的假設之上。整條「因果推論」學習軌,就是專門在講如何把這件事做好。

實驗的心態

實驗不只是一種統計技術;它是一種「把自己的意見握鬆一點」的態度。這種心態是一個循環:形成一個清楚的假設、跑一場公平的測試、誠實地解讀結果,再把學到的東西餵進下一個點子。把這套內化的團隊,會停止爭論「誰的直覺比較好」,轉而讓現實投下那一票決定性的票。

那個驅動機器學習的「打造—衡量—學習」循環,同樣驅動著健康的實驗文化:提出假設、測試、學習、迭代——一圈又一圈,每一圈都比上一圈少錯一點。

一張環形圖,四個階段——假設、實驗、衡量、學習——以箭頭相連成一個連續的循環,並回饋到起點。

這是整個領域裡最令人解放的事實:大多數實驗都會失敗。在大型科技公司,被測試的點子中,只有三分之一或更少能把目標指標往對的方向推動;許多毫無作用,還有令人心痛的一部分反而把事情弄得更糟。這不是計畫壞掉的徵兆——這正是計畫在運作。實驗是一種便宜的方式,在壞點子上線給數百萬人之前先把它們殺掉,而一個清楚的「不行」,和一個「可以」一樣有價值。否則,掌舵的就會是 HiPPO——「薪水最高那個人的意見」(Highest-Paid Person's Opinion)——靠感覺悄悄地操縱著產品。

有兩個提醒要帶進後面的指南,因為好的實驗者正是在這裡展現價值。第一,一個結果「統計上顯著」,並不代表它「重要」:在數百萬使用者之下,連一個毫無意義的 0.01% 提升都可能被標記為真,所以永遠要問:這個效果大到值得採取行動嗎?(你很快會遇到相關的概念——p 值(p-value)與信賴區間(confidence interval)——並學會不要太信前者、多倚靠後者。)第二,你越是偷看一個正在跑的測試、越是檢查更多指標,你就會製造出越多假警報——實驗「之前」的紀律,才是保護你的東西。

  1. 在開始之前,先把假設和那一個成功指標寫下來——一個「你有可能錯」的預測。
  2. 好好地隨機分派,而且只改動一件事,好讓結果可以被詮釋。
  3. 事先決定好跑多久、樣本數要多少,別只因為數字看起來不錯就提早收手。
  4. 同時判斷:這個效果是否為真,以及它是否大到值得你付出上線它所帶來的成本與複雜度。
  5. 不論結果如何,把你學到的東西寫下來——一個能殺掉壞點子的失敗實驗,本身就是一場成功。

這就是為實驗辯護的全部論點:意見很廉價、觀察性資料有偏誤,而世界很少主動奉上一個乾淨的反事實——所以當你做得到時,你就用一枚硬幣的擲落,親手造出一個。下一篇指南,我們會切入實務設計:如何挑選真正能捕捉「成功」的指標、你要在什麼單位上隨機分派,以及那些護欄指標——它們能避免一個實驗在拉高某個數字的同時,悄悄地傷害了另一個。