天天看點

電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗

目錄

一、項目背景

二、字段說明 

三、資料處理

1.導入庫

2.讀取資料

3.檢視資料

4  資料預處理

4.1  檢查錯誤資料

5  假設校驗

5.1  提出零假設和備擇假設

5.2  确定抽樣分布類型

5.3  确定檢驗類型

5.4  确定檢驗方向

5.5  顯著性水準α

5.6  計算校驗統計量

一、項目背景

資料集來源于一家電商網站,希望通過對于一次AB測試資料的分析判斷新舊兩版頁面在使用者轉化上是否有顯著差別,幫助公司決定是應當采用新的頁面,還是保留老的頁面。

二、字段說明 

user_id :使用者ID  

timestamp :使用者行為時間戳      

group :分組标簽:control-對照組;treatment-實驗組   

landing_page :展示的頁面版本   

converted :是否轉化:0-沒有轉化;1-有轉化    

三、資料處理

1.導入庫

import pandas as pd
import os
from scipy.stats import norm
import numpy as np
           

2.讀取資料

df=pd.read_csv('ab_data.csv')
           

3.檢視資料

df.info()
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗
df.describe()
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗
df.describe(include='object')
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗
df.head()
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗

4  資料預處理

4.1  檢查錯誤資料

df[((df['group']=='control')&(df['landing_page']=='new_page'))|((df['group']=='treatment')&(df['landing_page']=='old_page'))]
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗

存在資料是對照組且為新頁面,實驗組且為舊頁面,需要删除

df=df[((df['group']=='control')&(df['landing_page']=='old_page'))|((df['group']=='treatment')&(df['landing_page']=='new_page'))]
           

 4.2  删除重複值

df.duplicated(subset='user_id').sum()
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗

 存在一條重複值,需要删除

df.drop_duplicates(subset='user_id',keep='first',inplace=True)
df.reset_index(inplace=True)
# 檢查流量占比
df[df.group=='control'].shape[0]/df[df.group=='treatment'].shape[0]
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗

 新、舊版本流量占比基本一比一

5  假設校驗

5.1  提出零假設和備擇假設

舊頁面的轉化率設為p1,新頁面的轉化率設為p2

  • 零假設: p1>p2 即p1-p2>0
  • 備擇假設: p1<p2 即p1-p2<0

5.2  确定抽樣分布類型

本次實驗滿足的判斷結果隻有0和1(轉化和未轉化),符合0-1分布

5.3  确定檢驗類型

獨立雙樣本,樣本n>30,總體的均值和标準差未知,用Z檢驗。

5.4  确定檢驗方向

判斷是否相等就是雙側,是否大于或小于就是單測。根據備擇假設,确定檢驗方向為單側(左尾)

5.5  顯著性水準α

本次檢驗α取0.05

5.6  計算校驗統計量

# 舊頁面的使用者數
n_old=df[(df.group=='control')].shape[0]
# 新頁面的使用者數
n_new=df[(df.group=='treatment')].shape[0]
# 舊頁面的轉化使用者數
n_convert_old=df[(df.group=='control')&(df.converted==1)].shape[0]
# 新頁面的轉化使用者數
n_convert_new=df[(df.group=='treatment')&(df.converted==1)].shape[0]
# 舊頁面的轉化率
p_old=n_convert_old/n_old
# 新頁面的轉化率
p_new=n_convert_new/n_new
print('舊頁面的轉化率{:.6f},新頁面的轉化率{:.6f}'.format( p_old, p_new))
# 轉化率的聯合估計
p_c=(n_convert_old+n_convert_new)/(n_old+n_new)
print('轉化率的聯合估計:', p_c)
# 檢驗統計量z
z=(p_old - p_new)/ np.sqrt(p_c*(1 - p_c)*( 1/n_old + 1/n_new))
print('檢驗統計量z:', z)
# z_alpha
z_alpha=norm.ppf(0.05) # 若為雙側,則norm.ppf(0.05/2)
print('z-alpha:{:.2f}'.format(z_alpha))
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗
if abs(z)>abs(z_alpha):
    print('拒絕零假設')
else:
    print('支援零假設')
           
電商頁面A/B測試分析一、項目背景二、字段說明 三、資料處理1.導入庫2.讀取資料3.檢視資料4  資料預處理5  假設校驗