电商页面A/B测试分析

目录

一、项目背景

二、字段说明 

三、数据处理

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()

df.describe()

 

df.describe(include='object')

 

df.head()

 

4  数据预处理

4.1  检查错误数据

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

 

存在数据是对照组且为新页面,实验组且为旧页面,需要删除

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()

 

 存在一条重复值,需要删除

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]

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

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))

if abs(z)>abs(z_alpha):
    print('拒绝零假设')
else:
    print('支持零假设')

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值