数据简介
数据集包含了2017年1月2日至2017年1月24日共23天的一家教育公司网站落地页的访问量详情。
落地页有两种方案:
control-访问课程资料
treatment-开始免费试学
变量 | 描述 |
---|---|
user_id | 用户ID |
timestamp | 访问时间 |
group | 访问页面组别,control为控制组,treatment为实验组 |
landing_page | 落地页类型,old_page为旧页面,new_page为新页面 |
converted | 是否转化,1转化,0未转化 |
数据清洗
df.shape
-> (294478, 5)
数据集共294478行、5列
缺失值
import pandas as pd
df.isnull().sum()
->
user_id 0
timestamp 0
group 0
landing_page 0
converted 0
dtype: int64
数据集无缺失值
异常值
删除控制组+新页面、实验组+旧页面的记录
drop1=df[(df.group=='control')&(df.landing_page=='new_page')].index.to_list()
drop2=df[(df.group=='treatment')&(df.landing_page=='old_page')].index.to_list()
drop=drop1+drop2
df1=df.drop(axis=0, labels=drop)
df1.shape
-> (290585, 5)
重复值
删除同一个用户id的重复记录
df2=df1.drop_duplicates(subset='user_id')
df2.shape
-> (290584, 5)
检验样本量
df2[df2.group=='control'].converted.mean()
-> 0.1203863045004612
控制组转化率约为12%,如果我们希望能够检测出1%的提升,则需要至少16000的样本量
df2.group.value_counts()
->
treatment 145310
control 145274
Name: group, dtype: int64
数据集的样本量满足条件
可视化
from matplotlib import pyplot as plt
import seaborn as sns
df3=df2.copy()
df3['day']=pd.to_datetime(df2.timestamp).dt.floor('d')
trend=pd.DataFrame(df3.groupby(['day', 'group'])['converted'].mean())
trend=trend.reset_index()
sns.lineplot(x='day', y='converted', hue='group',data=trend)
新旧版本落地页的转化率并无明显区别
假设检验
原理
设控制组的转化率为 p 0 p_0 p0,实验组的转化率为 p 1 p_1 p1