一瓣距、背景
現(xiàn)在有一個教育平臺的初創(chuàng)網(wǎng)站,到了前期推廣階段代咸,它的主要目的是讓大家加入微信學習社群〉竿瑁現(xiàn)在需要給網(wǎng)站投放“廣告”,剛開始給用戶看到的落地頁是訪問課程資料呐芥,這部分內(nèi)容是免費的逻杖,并且在每一塊課程上都會加上微信群的二維碼,并介紹網(wǎng)站的付費項目贩耐;現(xiàn)在新增了開始免費試學這個落地頁弧腥,本次試驗的主要任務(wù)是利用A/B測試思想,用測試24天之后拿到的數(shù)據(jù)潮太,檢測兩個落地頁的轉(zhuǎn)化效果管搪,分析決定是否應(yīng)該使用新的頁面或保留舊的頁面,或者應(yīng)該將測試時間延長铡买,之后再做出決定更鲁。
二、測試實驗步驟
2.1 AB測試的基本步驟
三奇钞、AB測試檢驗
3.1 數(shù)據(jù)處理
1. 導(dǎo)入數(shù)據(jù)
import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt
df = pd.read_csv('ab_data.csv')
df.head()
2. 數(shù)據(jù)字段含義
user_id: 用戶id
timestamp:用戶訪問頁面的時間
group: 新舊落地頁的分組澡为;把新的落地頁分到treatment組,把舊的落地頁分到了control組
landing_page:表示落地頁
converted:表示是否轉(zhuǎn)化景埃,1表示轉(zhuǎn)化媒至,0表示未轉(zhuǎn)化
3.查看數(shù)據(jù)維度
df.shape
(294478, 5)
4.查看數(shù)據(jù)信息
df.info()
5.查看缺失值
df.isnull().sum()
6.對于treatment和 new_page,或者control和old_page會出現(xiàn)不一致的行谷徙,將其剔除
df.loc[(df['group'] == 'treatment') != (df['landing_page'] == 'new_page')].count()
# 去除無效數(shù)據(jù)拒啰,并將其賦值到df2中
df2 = df.loc[~((df['group'] == 'treatment') != (df['landing_page'] == 'new_page'))]
df2.count()
7.刪除重復(fù)值(user_id)
# 刪除重復(fù)id,保留重復(fù)項中的第一項
df2 = df2.drop_duplicates(subset=['user_id'], keep='first') #
8.查看數(shù)據(jù)維度判斷是否還有重復(fù)值
# 查看df2的維度
print(df2.shape)
# 查看df2中是否還有重復(fù)值
print(df2.user_id.nunique())
(290584, 5)
290584
3.2 計算用戶轉(zhuǎn)化率
# 整體轉(zhuǎn)化率
df2['converted'].mean()
0.11959708724499628
# 新頁面轉(zhuǎn)化率
df2[df2['landing_page'] == 'new_page']['converted'].mean()
0.11880806551510564
# 舊頁面轉(zhuǎn)化率
df2[df2['landing_page'] == 'old_page']['converted'].mean()
0.1203863045004612
# 用戶收到新頁面的概率
df2[df2['landing_page'] == 'new_page'].shape[0] / df2.shape[0]
0.5000619442226688
- 整體頁面轉(zhuǎn)化率為:11.96%
新頁面轉(zhuǎn)化率為:11.88%
舊頁面的轉(zhuǎn)化率為:12.04%
用戶收到新舊頁面的概率參半 - 看似使用舊頁面效果更好,是本身就是如此完慧,還是由于一些隨機因素導(dǎo)致的呢谋旦? 對此需要進行顯著性檢驗:
3.3 進行假設(shè)檢驗
3.3.1 建立原假設(shè)和備擇假設(shè)
由于目標是新頁面轉(zhuǎn)化率高于舊頁面轉(zhuǎn)化率,設(shè)計原假設(shè)和備擇假設(shè)如下:
H0: P_new - P_old <= 0
H1: P_new - P_old > 0
3.3.2 構(gòu)建檢驗統(tǒng)計量
# 新頁面轉(zhuǎn)化率
p_new = df2[df2['landing_page'] == 'new_page']['converted'].mean()
# 舊頁面轉(zhuǎn)化率
p_old = df2[df2['landing_page'] == 'old_page']['converted'].mean()
# 新頁面數(shù)量
n_new = df2[df2['landing_page'] == 'new_page'].shape[0]
# 舊頁面數(shù)量
n_old = df2[df2['landing_page'] == 'old_page'].shape[0]
# 引入SciPy庫
from scipy.stats import norm
# 計算顯著性檢驗Z值
z_score = (p_old - p_new) / np.sqrt(p_old * (1 - p_old) / n_old + p_new * (1 - p_new) / n_new)
z_score
1.3109271488301917
# 計算置信區(qū)間
norm.ppf(1-0.05)
1.6448536269514722
1- norm.cdf(z_score1)
0.09494118879424318
3.3.3 結(jié)論
- 由于z_score=1.31小于norm.ppf(1-0.05)=1.64,落在95%的置信區(qū)間中册着,所以無法拒絕原假設(shè)拴孤,建議延長測試時間,繼續(xù)觀測情況甲捏。