深入解析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卻不顯著。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

吳定群
吳定群

Written by 吳定群

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

No responses yet

Write a response