深入解析A/B Testing

吳定群
8 min readJun 29, 2022

--

架構

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流程簡介

  1. 建立假設:我們假設某按鈕的顏色改變會使使用者的點擊大幅上升
  2. 建立User Funnel
  3. 建立衡量指標:Click-Though-Probability(CTP)
  4. 設計實驗
  5. 分析結果

註解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

求樣本數,在此附上相關網站。關於減少需要的樣本數,我們有以下幾種做法:

  1. 增加α, β 或是d_min。
  2. 使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卻不顯著。

--

--

吳定群
吳定群

Written by 吳定群

Tsing Hua University Master for Engineering | ML & statistic | Data Science

No responses yet