目錄
A/B testing 是統計推論進到產品決策後最常見的形式。你要回答的是:新版平均分數較高,是否真的來自改動?效果有多大?不確定性多高?副作用能不能接受?
這篇接在實驗設計之後。實驗設計先處理 treatment、control、randomization、primary metric;A/B testing 則把這些設計落到實際產品:分流、估效果、看區間、做檢定、檢查 guardrail,再決定要不要上線。
一個 A/B test 要先定什麼
第一,定 treatment 和 control。Treatment 是新版本,control 是現行版本。改動要盡量單一,否則結果很難解釋。
第二,定實驗單位。若以使用者分流,同一位使用者的所有事件都應該留在同一組。若一次 session 可以跨組,使用者體驗和統計獨立性都會出問題。
第三,定 primary metric。這是主要判斷標準,例如 conversion rate、retention、task success rate、人工偏好勝率。
第四,定 guardrail metric。這是避免副作用的指標,例如 latency、crash rate、complaint rate、成本、違規率。
第五,定停止規則。事後一直偷看結果,看到顯著就停,會讓錯誤率膨脹。
treatment effect 怎麼估
若 outcome 是比例,常見效果是:
p_B - p_A
若 outcome 是平均值,常見效果是:
mean_B - mean_A
接著要估標準誤、信賴區間或 p-value。完整報告不該只寫「B 比 A 高」,而要寫差距、區間、樣本數、主要指標和 guardrail。
手算例題:兩組轉換率
假設 A 組有 1,000 人,其中 100 人轉換:
p_A = 100 / 1000 = 0.10
B 組有 1,000 人,其中 108 人轉換:
p_B = 108 / 1000 = 0.108
效果估計是:
p_B - p_A = 0.108 - 0.10 = 0.008
也就是 0.8 個百分點。
兩比例差的近似標準誤可用:
SE = sqrt(p_A(1 - p_A)/n_A + p_B(1 - p_B)/n_B)
代入:
SE = sqrt(0.10 × 0.90 / 1000 + 0.108 × 0.892 / 1000)
= sqrt(0.00009 + 0.0000963)
= sqrt(0.0001863)
≈ 0.0136
95% 近似區間:
0.008 ± 1.96 × 0.0136
= 0.008 ± 0.0267
= (-0.0187, 0.0347)
這個區間包含 0。報告時不能把它寫成穩定提升。比較好的說法是:「B 組轉換率點估計高 0.8 個百分點,但在此樣本下 95% 近似區間約為 -1.9 到 3.5 個百分點,資料尚不足以支持穩定提升。」
sample ratio mismatch 要先查
A/B test 常預期 50/50 分流。如果最後 A 組 10,000 人、B 組 6,000 人,這叫 sample ratio mismatch 的警訊。
它可能來自分流 bug、追蹤漏資料、某些使用者被錯誤排除、實驗設定互相干擾。表面上是樣本數不一樣,真正的警訊是 randomization 可能壞掉。
遇到 sample ratio mismatch,先查實驗管線,不要急著解讀 treatment effect。隨機化如果壞了,後面的檢定再漂亮也沒有可信基礎。
peeking 和多指標問題
如果你每天看一次 p-value,看到小於 0.05 就停,實際 false positive rate 會高於原本設定。因為你給自己很多次中獎機會。
如果你同時看 30 個 metric,最後只挑顯著的那個講,也會有類似問題。這就是 multiple testing / p-hacking 的風險。
比較好的做法是實驗前定 primary metric、分析窗口和停止規則。探索性分析可以做,但要標成探索,不要包裝成事前假設檢定。
guardrail 讓上線決策不只看主指標
假設新推薦模型讓 CTR 上升,但 latency 增加、退訂率上升、投訴變多。主指標變好不代表一定上線。
Guardrail metric 的作用,是把「不能犧牲的東西」放進決策。對 ML/AI 產品來說,常見 guardrail 包括延遲、成本、安全違規率、人工審核量、使用者回報、長期留存。
A/B testing 的結論應該像決策備忘錄,而不只是統計檢定答案。
paired A/B 和一般獨立兩組不同
線上產品分流常是兩個獨立使用者組。這時用兩樣本比例或平均差很常見。
但模型評估常是 paired:同一批題目給 A 模型和 B 模型作答。這時每題難度會同時影響兩個模型分數,分析要保留配對。可以用 paired difference、sign test、paired bootstrap 或適合的 paired test。
把 paired 資料當成獨立兩組,通常會浪費資訊,也可能估錯標準誤。
這在 ML / AI 哪裡會用到
產品 ML 常用 A/B testing 決定模型是否上線。離線分數變好只是候選證據,真正部署還要看線上指標、延遲、成本、分群效果與長期副作用。
LLM 產品也一樣。新 prompt、新 retriever、新 reranker、新模型版本,都可能在線下 eval 表現更好,卻在線上造成回覆變慢、拒答變多、工具呼叫成本增加,或特定族群體驗變差。
所以 ML/AI 的 A/B test 報告至少要包含:實驗單位、分流比例、primary metric、guardrail metrics、樣本數、效果估計、區間或檢定、分群檢查、是否有 SRM、是否按預定停止規則結束。
題型怎麼辨識
看到兩組比例,先估 p_B - p_A,再接標準誤、區間或檢定。
看到 treatment/control,先確認 random assignment 和實驗單位。
看到同一使用者、同一題目、同一評審比較 A/B,先想 paired design。
看到分流比例異常,先查 sample ratio mismatch。
看到很多 metric 或中途偷看,回答 multiple testing、peeking 和停止規則。
常見錯誤
- 只看平均提升,沒有估不確定性。
- 沒有先定 primary metric,結果出來後挑最好看的指標。
- 把使用者層級實驗分析成事件層級,低估標準誤。
- 發現 sample ratio mismatch 還繼續解讀效果。
- 離線模型分數變好,就直接跳過線上 guardrail。
練習題
- 設計一個 A/B test:寫出 treatment、control、primary metric、guardrail metric 與隨機分派單位。
- 兩組轉換率分別是 12% 與 14%,各 1000 人。寫出你會用哪個檢定或區間比較效果。
- 說明 sample ratio mismatch 為什麼會讓實驗結果不可信。
- 為什麼中途一直偷看 p-value 會提高 false positive 風險?
- 在 ML 產品中,離線模型分數變好但線上 A/B test 沒變好,列出兩個可能原因。
下一篇怎麼接
A/B testing 把實驗設計變成產品決策。下一篇會進到 causal inference:當你沒有完美隨機實驗時,統計還能怎麼接近「效果」這個問題。
章節級參考對照
- OpenIntro 與 OpenStax 支撐兩比例比較、信賴區間、假設檢定與實驗設計基礎。
- Stanford CS109 支撐從抽樣誤差走到產品實驗不確定性的直覺。
- scikit-learn Model Evaluation 支撐離線指標情境;本文把它和線上 A/B test 的證據層級區分開。
參考資料
Loading...