Pythonで学ぶA/Bテスト
Moe Lotfy, PhD
Principal Data Science Manager
# バリアント別のページ滞在時間の平均と件数を算出
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
# 再現用の乱数シード設定
np.random.seed(40)
# 各バリアントから25件を無作為抽出
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']
# マン・ホイットニーU検定を実行
mwu_test = pingouin.mwu(x=ToP_samp_A,
y=ToP_samp_B,
alternative='two-sided')
# 結果を出力
print(mwu_test)
U-val alternative p-val RBC CLES
MWU 441.0 two-sided 0.013007 -0.4112 0.7056
ホームページのサインアップ率 A/B テスト
帰無仮説: ランディングページ C と D のサインアップ率に有意差はない
対立仮説: それらの間に有意差がある
# グループ C と D のユーザー数を計算
n_C = homepage[homepage['landing_page'] == 'C']['user_id'].nunique()
n_D = homepage[homepage['landing_page'] == 'D']['user_id'].nunique()
# 各グループの一意のサインアップ数を算出
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
# サインアップ表を作成
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))
# p 値を計算
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テスト