非母數統計檢定

Python 的 A/B 測試

Moe Lotfy, PhD

Principal Data Science Manager

母數檢定的假設條件

  1. 隨機抽樣
    • 資料由母體隨機抽樣。
    • 檢視資料蒐集/抽樣流程。
  2. 獨立性
    • 各觀測值彼此獨立。
    • 忽略相依性會提高錯誤率。
  3. 常態性
    • 資料近似常態分佈。
    • 樣本數需足夠大。
      • 兩樣本 t 檢定:每組 n >= 30。
      • 兩樣本母體比例檢定:每組成功 >=10 且失敗 >=10。
Python 的 A/B 測試

Mann-Whitney U 檢定

  • 檢定統計顯著性的非母數方法
  • 判斷兩個獨立樣本是否來自相同母體分佈
  • 名次和檢定
  • 非配對資料
Python 的 A/B 測試

在 Python 進行 Mann-Whitney U 檢定

# Calculate the mean and count of time on page by variant
print(checkout.groupby('checkout_page')['time_on_page'].agg({'mean', 'count'}))
                    mean  count
checkout_page                  
A              44.668527   3000
B              42.723772   3000
C              42.223772   3000
# Set random seed for repeatability 
np.random.seed(40)
# Take a random sample of size 25 from each variant
ToP_samp_A = checkout[checkout['checkout_page'] == 'A'].sample(25)['time_on_page']
ToP_samp_B = checkout[checkout['checkout_page'] == 'B'].sample(25)['time_on_page']
Python 的 A/B 測試

在 Python 進行 Mann-Whitney U 檢定

# Run a Mann-Whitney U test
mwu_test = pingouin.mwu(x=ToP_samp_A,
                        y=ToP_samp_B,
                        alternative='two-sided')
# Print the test results
print(mwu_test)
     U-val alternative     p-val     RBC    CLES
MWU  441.0   two-sided  0.013007 -0.4112  0.7056
Python 的 A/B 測試

卡方獨立性檢定

  • 不受母數檢定假設限制
  • 檢定兩個或以上類別變數是否相互獨立
    • 虛無假設:變數彼此獨立。
    • 對立假設:變數不獨立。
Python 的 A/B 測試

在 Python 進行卡方檢定

首頁註冊率 A/B 測試

虛無假設:版面 C 與 D 的註冊率沒有顯著差異。

對立假設:它們之間存在顯著差異。

# Calculate the number of users in groups C and D
n_C = homepage[homepage['landing_page'] == 'C']['user_id'].nunique()
n_D = homepage[homepage['landing_page'] == 'D']['user_id'].nunique()
# Compute unique signups in each group
signup_C = homepage[homepage['landing_page'] == 'C'].groupby('user_id')['signup'].max().sum()
no_signup_C = n_C - signup_C
signup_D = homepage[homepage['landing_page'] == 'D'].groupby('user_id')['signup'].max().sum()
no_signup_D = n_D - signup_D
Python 的 A/B 測試

在 Python 進行卡方檢定

# Create the signups table
table = [[signup_C, no_signup_C], [signup_D, no_signup_D]]
print('Group C signup rate:',round(signup_C/n_C,3))
print('Group D signup rate:',round(signup_D/n_D,3))

# Calculate p-value
print('p-value=',stats.chi2_contingency(table,correction=False)[1])
Group C signup rate: 0.064
Group D signup rate: 0.048
p-value= 0.009165
Python 的 A/B 測試

一起來練習吧!

Python 的 A/B 測試

Preparing Video For Download...