
架構
1.什麼是A/B Testing?
- 1–1想達成的目標
- 1–2使用時機
- 1–3流程簡介
2.選擇合適的指標(Metric)
- 2–1建立指標的目的&可能遇到的問題
- 2–2選擇指標的3大步驟
- 2–3可能遇到的問題與解法
- 2–4指標的性質 Sensitivity & Robustness
3.實驗設計
- 3–1選擇Unit of Diversion
- 3–2選擇受眾 — Population or Cohort
- 3–3選擇受眾大小 Size
- 3–4持續時間Duration
4.結果分析
- 4–1Sanity Check (檢查不變量)
- 4–2辛普森悖論
什麼是A/B Testing?
1–1 想達成的目標
一般我們使用A/B Testing 去測試某個產品功能/UI,藉由將使用者分為Control Group和Experiment Group,我們可以分析使用者如何反應進而做出好的商業決策(Ex:哪個版本更受歡迎)。
1–2使用時機
一般會有以下幾個特徵:
- 短期
- 可劃分明確的Control / Experiment Group
- 可獲得持續的User Respond
之所以是短期,原因在於有時長期的目標不易設計實驗/不易取得資料,像是汽車銷售網站想知道某功能是否能增加回購率,但是換車的週期太長,難以衡量。
另外User experience相關的測試也不建議,可能會有Novelty Effect(出於好奇心的使用)還有Change Aversion(厭惡改變)的問題,必須格外小心。
1–3流程簡介
- 建立假設:我們假設某按鈕的顏色改變會使使用者的點擊大幅上升
- 建立User Funnel
- 建立衡量指標:Click-Though-Probability(CTP)
- 設計實驗
- 分析結果
註解1:CTR = # of click/# of page view,一般用來衡量Usability,像是一個按鈕是否容易被發現。CTP = # of unique visitors click/# of unique visitors view the page,一般用來看有多少人真的進入Funnel,因為排除了double click還有Reload的問題。
註解2:假設檢定大概長這樣(1是control,2是experiment)

選擇合適的指標(Metric)
2–1建立指標的目的&可能遇到的問題
一般我們會建立兩種不同用途的指標,一種是Sanity Check Metric,它協助你檢查Control Set和Experiment Set中,要保持一至的東西。另一個是Evaluation Metric,用來協助你衡量是否達成Business Goal。
註解3:一般來說Evaluation Metric還會再分成high level business metric(ex:revenue, # of user)還有detail metric。
2–2選擇指標的3大步驟(Evaluation Metric)
Step1 找到High Level Concept Metric。
以線上課程平台為例,我們可以由兩種角度切入。以公司的角度:指標可以和賣更多課程,創造更多收益有關。以User的角度,High Level 指標可以是學生成功找到工作..等等。
Step2 建立User Funnel,每一層都可以是指標。Ex: # of user visit home page

Step3 定義指標細節(Detail Metric)
以不重複Page View來說,如果有人在10:00看了一次,一小時後又回來看了一次,這樣算不算重複?以地區來說,是否只做美國地區?是否篩選數據..等等。
(Step4.)確定Single Summary Metric(可以用median, sum, average, count..)
2–3可能遇到的問題與解法
當現有的資料無法不足以幫助你建立指標,可以嘗試問卷調查、焦點群體、User Experience Research..等等方法,建立對與用者更深入的了解。
2–4指標的性質 Sensitivity & Robustness
一個好的指標,會反映我們關心的改變(Sensitivity),同時不會反映一些不重要的東西。我們可以使用A/A testing去測試這點。
A/A testing:針對完全一樣的版本進行測試。基本上我們會希望結果是沒有差異的。因為在沒有改動的狀況下,指標不應有反應(Robustness)
實驗設計
3–1選擇Unit of Diversion
Unit of test 的中文是分流單位,簡單來說就是選擇一個代表用戶的東西(proxy for user),讓我們可以分兩堆到控制、實驗組。常見的有:
- User id
- Cookie
- Event
以user id來說,當使用者登錄後,就會被分到某一組(控制、實驗組),之後就不會再變了。cookie就不一樣了,當使用者用電腦登入,他可能被分到控制組,但下次他用手機登入,手機可能有不同的cookie,組別就變了。
一般來說,使用者看不到的會採用event base的分流單位,像是延遲時間、排名。使用者看得到的改變會用cookie或是user id,才不會影響用戶體驗。
3–2選擇受眾 — Population or Cohort
- Population : 所有使用者
- Cohort : Population的子集,一般定義為同一時間進入實驗的一群人。或是定義成已經使用某功能2個月的用戶。
Cohort引進了時間的觀念,有時我們會希望實驗中的使用者保持穩定,去除不同時間線上可能在版本上的改動..變化。如果我們不考慮不使用者隨著時間行為的變化,那用population就好。
3–3選擇受眾大小 Size
求樣本數,在此附上相關網站。關於減少需要的樣本數,我們有以下幾種做法:
- 增加α, β 或是d_min。
- 使unit of diversion = unit of analysis,可使變異數變小
引導公式(常態母體平均數的樣本數): n=(Zα+Zβ)²σ²/(µ1-µ2)²,由公式很明顯可以看出增加α, β會使Z值變小,進而使n變小。
註解4 : unit of analysis =指標的分母。舉例來說,CTR的分母是# of page view,所以unit of analysis=# of page view。當unit of diversion等於unit of analysis的時候,變異會比較低。
3–4持續時間Duration
持續的時間和你一次要用多少流量有關,用的%數越多,實驗所需時間越短。你通常需要考慮以下兩個問題:
- 安全性考量:如果你要測試一個新功能,你完全不知道使用者會如何反應,這時最好用非常小部分的流量測試就好(跑多天一點)。
- 變異性考量:如果你用全部流量,只花了2天就完成實驗,有時會不準,盡可能讓時間包含Weekday和Weekend
結果分析
4–1Sanity Check
一般在分析結果之前,我們會先做一些檢查,像是控制組和實驗組是否是可比較的,不變量在統計上沒有顯著的差異。
假設今天實驗跑了2週,unit of diversion是cookie,cookie是隨機非配到實驗組還有控制組,今天我們想知道控制組的# of cookie和實驗組的是否相同,得到了以下結果:

做假設檢定

因為檢定的結果顯示不變量不同,這時候要做day-by-day的分析,同時可以採取以下幾種措施:
- 和工程師談unit of diversion是否出問題
- 做細分,看不同地區、平台..是否有差異(找到差異的來源)
- 檢查看是否有某一邊有更多new cookie
4–2辛普森悖論
辛普森悖論的原始意義可先參考連結,在實驗過程可能遇到明明subgroup的點擊率有明顯增加,但是全部加起來算整體的CTR卻不顯著。