什麼是 A/B 測試?

Python 的 A/B 測試

Moe Lotfy, PhD

Principal Data Science Manager

A/B 測試入門

  • A/B 測試是…

     
    • 用來比較哪個版本更好的一種實驗
    • 依據指標:註冊率、人均銷售額等
    • 使用隨機分派並分析結果
Python 的 A/B 測試

該做 A/B 測試嗎?

A/B 測試的好用情境:

  • 最佳化轉換率
  • 釋出新功能
  • 評估廣告的增量效果
  • 評估藥物試驗的影響

以下情況不要做 A/B 測試:

  • 流量不足/樣本太小
  • 沒有明確、合乎邏輯的假設
  • 有倫理疑慮
  • 機會成本高
Python 的 A/B 測試

A/B 測試的基本步驟

  1. 明確目標與設計/體驗
  2. 隨機抽樣使用者加入實驗
  3. 隨機將使用者分派至:
    • 控制組:現況
    • 實驗組:新設計
  4. 記錄行為並計算指標
  5. 檢定是否有統計上顯著差異

A/B 測試步驟

Python 的 A/B 測試

隨機化的價值

  • 可推廣性與代表性
  • 降低組間偏差
  • 隔離處理效果以建立因果關係

 

隨機抽樣與隨機分派示意圖

1 https://www.statology.org/random-selection-vs-random-assignment/
Python 的 A/B 測試

Python 隨機分派範例

checkout.info()
RangeIndex: 9000 entries, 0 to 8999
Data columns (total 6 columns):
 #   Column         Non-Null Count  Dtype  
 0   user_id        9000 non-null   int64  
 1   checkout_page  9000 non-null   object 
 2   order_value    7605 non-null   float64
 3   purchased      9000 non-null   float64
 4   gender         9000 non-null   object 
 5   browser        9000 non-null   object 
dtypes: float64(2), int64(1), object(3)
memory usage: 422.0+ KB
Python 的 A/B 測試

Python 隨機分派範例

checkout['gender'].value_counts(normalize=True)
F    0.507556
M    0.492444
Name: gender, dtype: float64
sample_df = checkout.sample(n=3000)
sample_df['gender'].value_counts(normalize=True)
M    0.506333
F    0.493667
Name: gender, dtype: float64
Python 的 A/B 測試

Python 隨機分派範例

checkout.groupby('checkout_page')['gender'].value_counts(normalize=True)
checkout_page  gender
A              M         0.505000
               F         0.495000
B              F         0.507333
               M         0.492667
C              F         0.520333
               M         0.479667
Name: gender, dtype: float64
Python 的 A/B 測試

一起來練習吧!

Python 的 A/B 測試

Preparing Video For Download...