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

樣本數與統計檢定力

要跑多久?在你在乎的效果、雜訊,以及錯過真正成效的風險之間如何取捨。

四個旋鈕:效果、雜訊、顯著性、檢定力

假設你剛把線上商店的結帳按鈕重新設計過。你覺得新設計會讓多一點訪客下單——但你並不確定,而且你絕對不想上線一個會悄悄讓情況變糟的改動。要弄清楚,專業的做法是做一個 A/B 測試:把舊按鈕顯示給一半的訪客(對照組),把新按鈕顯示給另一半(實驗組),等一段時間,再比較兩組的行為。第一個實務問題——也是這整篇要回答的——看似簡單:每組需要多少訪客,因此這個測試又該跑多久?

很容易會想回答「跑到數字好看為止」。這是做實驗時最昂貴的一個錯誤,而這篇有很大一部分就是為了用更誠實的東西取代它。實驗要跑多久,不是品味或耐心的問題——它幾乎是機械式地由四個你事先決定的量所決定。把這四個量算出來,叫做檢定力分析(power analysis),它算出的數字就是你的樣本數計算。請養成習慣:在你寫下任何一行實驗程式之前,先把它算好。

以下就是這四個旋鈕。請慢慢讀——日後幾乎所有關於實驗的混淆,都來自把其中兩個混為一談。

  1. 你在乎的效果。不是你期望的效果——而是「小到這個程度,仍然會改變你『要不要上線』的決定」的那個最小改善。這就是最小可偵測效果(MDE)。目標訂得越小,需要的資料越多。
  2. 雜訊。即使完全沒有任何改動,你的指標在不同人之間也會自然上下跳動,跳動的大小就是雜訊。我們用變異數、或它的平方根——標準差——來衡量它。越吵雜的指標,需要越多資料。
  3. 假警報率。你能容忍多少次「宣告了一個其實不存在的贏家」。這就是顯著水準 α,依長久慣例設為 5%。把不存在的當成存在,叫做型一錯誤
  4. 檢定力。如果一個你目標大小的真實效果確實存在,你有多大機會能抓到它。慣例是 80%。它的反面——錯過一個真實效果——就是型二錯誤,而檢定力剛好就是「1 減去這個風險」。這正是大家最常忘記的旋鈕。
整個計算濃縮成一張圖。左邊的鐘形曲線,是「新按鈕毫無作用時」你的指標會長的樣子(虛無情況)。右邊的曲線,是「真實效果剛好等於你的 MDE 時」它會長的樣子。中間那條垂直線是判定門檻。左曲線越過門檻的那一小條紅色尾巴是 α(假警報);右曲線越過門檻、被塗色的部分就是檢定力;右曲線剩下、被困在門檻錯誤一側的部分,就是 β——錯過真實效果的機率。

同一座標軸上兩條重疊的鐘形曲線,中間有一條垂直判定門檻。左邊(虛無)曲線越過門檻的小尾巴標示為 alpha;右邊(對立)曲線越過門檻的大部分標示為檢定力(power);右曲線剩下的左半部標示為 beta。

最小可偵測效果:值得抓到的是多少

每一次樣本數計算,都從一個「統計學給不了你、必須由你提供」的數字開始。它是「小到這個程度,仍然值得你採取行動」的最小效果。統計學家稱它為最小可偵測效果(MDE),這名字其實有點誤導:它不是你的測試「最小能注意到」的效果,而是你決定「大到值得在乎、並且要讓測試有把握偵測到」的那個最小效果。

把它具體化。假設今天每 100 個走到結帳頁的訪客中,大約有 5 個完成購買——基準轉換率(baseline conversion rate)是 5%。你和產品團隊坐下來問:在考慮了工程成本與出小錯的風險之後,最小要提升多少,才值得上線這顆新按鈕?假設你們同意答案是半個百分點——從 5% 提升到 5.5%。這 0.5 個百分點就是你的 MDE。

請注意剛剛發生了什麼:你是用商業推理、而不是用統計學來設定 MDE 的。挑選它的誠實方式,是去問這個效果「值多少」。如果連 0.1 個百分點的微小提升都能帶來數百萬、而且這改動上線是零成本,那你可能會想偵測非常小的效果——代價就是龐大的樣本。如果要相當大的躍升才划得來、才值得後續維護的負擔,你就能設一個比較大的 MDE,並且早得多收工。MDE 是一個「關於價值的決定」,只是被包裝成一個數字。

MDE 住在哪裡。訪客沿著一個漏斗往下流——抵達、看購物車、走到結帳、購買——每一步都有人流失。你的基準 5%,就是最後那道箭頭的寬度。整個實驗,就是在賭新按鈕能把最後這一步加寬,哪怕只是一點點。而 MDE,就是你決定「值得去追」的那個加寬幅度。

一個轉換漏斗,從頂端的大量訪客逐步收窄,經過四個階段,到底部變成一道細窄的「購買」箭頭,最後一個階段標示為「實驗試圖改善的基準轉換率」。

為什麼越小的效果需要越大的樣本

先講直覺,再講代數。偵測一個效果,就像聽人說話。一聲大喊,即使在擁擠的咖啡館裡也容易聽清楚;同樣的吵雜中,一句輕聲細語卻會被淹沒。要確定你真的聽到了那句耳語,你要嘛需要一個更安靜的房間(更少雜訊),要嘛需要聽得久得多(更多資料)。小的 MDE 就是一句耳語。而房間——你指標的自然變異——就是那麼吵。所以唯一還能轉的旋鈕,就是資料量。

為什麼更多資料有幫助?因為你蒐集得越多,平均數就越穩定。樣本平均數的散布程度——如果你重跑一次實驗,它會跳動多少——就是它的標準誤,而它會以一種很特定的方式縮小:與「樣本數平方根的倒數」成正比。這個單一事實——它源自中央極限定理——正是整個計算的引擎。

\text{SE} \;=\; \frac{\sigma}{\sqrt{n}}

平均數的標準誤,等於指標的標準差 σ 除以樣本數 n 的平方根。把 n 變成四倍,你估計值的雜訊只會減半——不是減為四分之一。進步是真的,但很慢;而這正是「精準很昂貴」的原因。

現在把兩個想法合起來。要把一個效果稱作「真的」,你的訊號(MDE,記作 Δ)必須在標準誤之上凸顯出來。既然標準誤以「根號 n 分之一」的速度縮小,你需要的樣本數,就會以「變異數除以你所追逐效果的平方」的方式增長。

n \;\propto\; \frac{\sigma^{2}}{\Delta^{2}}

每組所需的樣本數,隨變異數 σ² 增長,而且關鍵在於——隨 MDE 也就是 Δ 的平方的倒數增長。那個平方,就是這一整節的重點。

一個信封背面的樣本數公式

一旦你把假警報率和檢定力定下來,「n 隨 σ²/Δ² 增長」這個比例關係就會變成一個實際的數字。對於標準選擇——5% 顯著水準、80% 檢定力——那個比例常數算出來幾乎剛好是 16。這給了一條有名的拇指法則,有時稱為「16 法則」(rule of 16),你在信封背面就能算。

n \;\approx\; \frac{16\,\sigma^{2}}{\Delta^{2}} \qquad \text{(per group)}

對於一個標準差為 σ、目標效果為 Δ 的指標,在常用的 5% / 80% 設定下,每一組——對照組與實驗組——都各需要大約 16 σ²/Δ² 個觀測值。

當你的指標是一個「是/否」結果——買了或沒買、點了或沒點——還有一個更友善的版本,因為一個比例的變異性,是由那個比例本身決定的:它就是 p 乘以 (1 − p)。把這個代入 σ²,就得到大多數 A/B 計算器在底層使用的式子。

n \;\approx\; \frac{16\,p\,(1-p)}{\Delta^{2}} \qquad \text{(per group)}

對於一個轉換率 p、絕對 MDE 為 Δ 的情形,這就是每組的樣本數。這裡 p 是寫成小數的基準率(5% 就是 0.05),Δ 是你想偵測的絕對提升(0.5 個百分點就是 0.005)。

把我們的結帳例子套進去。基準是 p = 0.05,所以 p(1 − p) = 0.05 × 0.95 = 0.0475。MDE 是半個百分點,Δ = 0.005,所以 Δ² = 0.000025。算式很乾淨:

n \;\approx\; \frac{16 \times 0.0475}{0.000025} \;=\; \frac{0.76}{0.000025} \;=\; 30{,}400 \quad \text{per group}

你需要在對照組約 30,400 名訪客、實驗組再 30,400 名——合計約 60,800 名——才有 80% 的機會,在 5% 水準下偵測到一個真實的 0.5 個百分點提升。

現在來感受平方反比律咬人的力道。如果你把 MDE 放寬到整整一個百分點(Δ = 0.01),分母變成 0.0001,每組樣本數掉到 16 × 0.0475 / 0.0001 = 7,600——剛好是四分之一。在乎一個只有一半大小的效果,代價是四倍的資料。這個單一取捨——效果對樣本——就是實驗規劃的核心。

p, mde = 0.05, 0.005            # baseline rate, absolute MDE
n = 16 * p * (1 - p) / mde**2    # rule of 16, per group
print(round(n))                 # 30400 per group  ->  ~60800 total

# In real work, reach for a library that uses the exact z-values
# and lets you change alpha/power, e.g. statsmodels in Python:
# from statsmodels.stats.power import NormalIndPower
三行就寫完的 16 法則。對規劃討論來說已經夠準;一旦你想調整 α 或檢定力、或處理非 50/50 的分組,就改用正式的檢定力函式庫(Python 的 statsmodels、R 的 pwr)。

檢定力:抓到真實效果的機率

我們一直在用「檢定力」這個詞,卻還沒完全把它拆開。乾淨的定義是:統計檢定力是「當真的存在一個你所瞄準大小的效果時,你的測試會宣告結果顯著」的機率。80% 的檢定力意味著:如果新按鈕真的把轉換率提升了你的 MDE,你有 80% 的機會抓到它——而且,令人不安地,有 20% 的機會跑完整個實驗、卻仍然下了「沒有效果」的結論。

那 20% 的錯過,是有名字的。測試出錯的兩種方式,坐在相對的兩肩上。型一錯誤是假警報:明明沒有真實效果,雜訊卻把你推去宣告了一個贏家。它的發生率是 α,也就是顯著水準。型二錯誤是錯過:明明有真實效果,你卻沒能偵測到。它的發生率叫做 β,而檢定力就是「1 減去 β」。

\text{power} \;=\; 1 - \beta, \qquad \alpha = \Pr(\text{false alarm}), \qquad \beta = \Pr(\text{miss})

兩種錯誤率,以及它們與檢定力的關係。依慣例,我們把假警報率 α 上限設為 5%,並把檢定力瞄準 80%(所以 β = 20%)。注意這個不對稱:我們把一次假警報,當成比一次錯過嚴重四倍——這是一種選擇,不是定律。

回頭看第一節那張雙曲線圖,因為它一次把這一切都畫了出來。判定門檻由 α 固定——把它往左滑,你會抓到更多真實效果(檢定力更高),但同時也拉高了假警報率。當真實效果更大、或當更多資料讓每條曲線變得更窄時,兩條曲線就會分開;無論哪一種,重疊都會縮小、檢定力都會上升。樣本數,可以說字面上就是那個「把這些鐘形曲線壓得夠瘦、好讓它們拉得開」的旋鈕。

在真實例子上跑計算器

讓我們把結帳測試從頭到尾走一遍,就像你某個週一早上會做的那樣,並把樣本數轉換成日曆上的一個日期——因為「每組 30,400 人」對你主管來說毫無意義,直到它變成「跑兩週」。

  1. 釘住基準。拉出上個月的資料:5.0% 的結帳訪客會購買。這就是你的 p = 0.05;而它也同時固定了雜訊,因為對一個比例來說,變異數就是 p(1 − p)。
  2. 從價值出發選 MDE。團隊同意 0.5 個百分點的絕對提升(到 5.5%)是最小值得上線的成效。所以 Δ = 0.005。
  3. 固定 α 與檢定力。沿用慣例:α = 5%、檢定力 = 80%。把它們寫下來,免得有人看到結果後又來重新談判。
  4. 算出每組大小。16 法則(或下方的計算器)給出每組約 30,400 人,合計約 60,800 名訪客。
  5. 換算成時間。如果每天有 10,000 名訪客走到結帳、你以 50/50 分流,每組每天增加 5,000 人。30,400 ÷ 5,000 ≈ 6.1 天——但請進位到完整的一到兩週,以吸收平日/週末的節奏。
  6. 開跑前就承諾。現在就決定運行長度,不要只因為數字好看就提前停止。(下一篇會清楚解釋為什麼「偷看」會背叛你。)
把你自己的數字輸進去。設定基準率、MDE、顯著水準與檢定力,計算器就會回傳你每組需要的樣本數——而且,如果你給它每日流量,還會算出那是幾天。試著把 MDE 砍一半,看著所需樣本數大約變成四倍,剛好就如平方反比律所預測的那樣。

一個互動式樣本數計算器,有基準率、最小可偵測效果、顯著水準 alpha 與檢定力的輸入欄位,會回傳每組所需的樣本數,並在給定每日流量時估算所需天數。

常見的樣本數錯誤

你現在懂了這套機制。最後一項工作,是認出它在實務中被悄悄破壞的各種方式——因為這些錯誤幾乎每一個,都會讓測試看起來比實際上更有定論。

  1. 沒有事先固定樣本數。如果你是看著資料才決定跑多久,那你等於完全拋棄了這個計算。先算出 n,再開跑。
  2. 一看到顯著就停手——偷看。反覆查看、並在第一次看到顯著時就停,會把你真正的假警報率從 5% 推到 20% 甚至更高。事先選好結束日期並遵守它(或改用正規的序貫方法)。
  3. 搞混絕對與相對 MDE。把「10% 的相對提升」餵進一個預期「0.005 絕對提升」的公式,會讓測試的樣本數算錯一百倍。決定你指的是哪一種,並且一以貫之。
  4. 忘了 n 是「每組」的。公式給的是每一臂的大小;你必須蒐集的訪客總數,至少是它的兩倍。
  5. 把你期望的效果拿來當 MDE。樂觀的 MDE 會生出小得令人安心的樣本,以及嚴重檢定力不足的測試。請以「最小值得偵測的效果」來定樣本數,而不是你簡報上的那個。
  6. 一次盯著二十個指標。檢驗夠多的結果,總會有一個純靠運氣越過 5%——這就是多重比較的陷阱。事先指定一個主要指標;其餘的當成探索性的,或當成護欄指標

誠實地規劃這四個旋鈕、在開跑前就解出樣本數、並讓實驗跑完它完整的歷程——你就完成了 A/B 測試中最難、也最受敬重的部分。把測試的樣本數定對之後,下一篇要轉向同樣兇險的工作:在不自欺的前提下,解讀結果。