电子商务网站运营 AB 测试

此项目数据集来源于一家电子商务网站,数据集大小为294478,经过清洗后保留290584。公司在节假日期间设计了一个新的“落地页”,希望借此提高“潜在用户->注册用户“的转化率,现在借助A/B测试来判断是否应该保留原有网页还是采用新页面。
columns:user_id timestamp group(control,treatment) landing_page (old_page,new_page) converted(0,1)

在这里插入图片描述

预处理
获取数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from IPython import display
%matplotlib inline
df = pd.read_csv('ab_data.csv')
df.head(

清洗数据

由于treatment组对应的是new_page,而control组对应的是old_page,需要将不规范的数据去除。

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

```python
df_clean = df_clean.drop_duplicates(subset='user_id').reset_index(drop=True)
描述统计


# treatment与control组数量
c_new = df_clean[df_clean['group']=='treatment'].shape[0]
c_old = df_clean[df_clean['group']=='control'].shape[0]
print('c_new:',c_new)
print('c_old:',c_old,'\n')
# treatment与control组转化数量
c_c_new = (df_clean[df_clean['group']=='treatment'].converted==1).sum()
c_c_old = (df_clean[df_clean['group']=='control'].converted==1).sum()
print('c_c_new:',c_c_new)
print('c_c_old:',c_c_old,'\n')
# treatment与control组转化方差
s_new = (df_clean[df_clean['group']=='treatment'].converted==1).std()
s_old = (df_clean[df_clean['group']=='control'].converted==1).std()
print('s_new:',s_new)
print('s_old:',s_old,'\n')
# treatment与control组转率(平均值)
p_new = (df_clean[df_clean['group']=='treatment'].converted==1).mean()
p_old = (df_clean[df_clean['group']=='control'].converted==1).mean()
print('p_new:',p_new)
rint('p_old:',p_old)

c_new: 145310c_old: 145274c_c_new: 17264c_c_old: 17489s_new: 0.3235636406751732s_old: 0.3254138459199159p_new: 0.11880806551510564p_old: 0.1203863045004612
平均数值显示用户处于control组时的转化率高于treatment组,但仅仅一个数据点难以进行判断,需要进行A/B测试。

推论统计
双独立样本检验 双尾检验

α=5%
零假设是,在这两网页转换率之间没有什么区别。
备择假设是,在有两网页转换率之间有显著差异。

使用proportions_ztestfrom statsmodels,它返回z分数和p值。

import statsmodels.api as sm
z_score, p_value = sm.stats.proportions_ztest([c_c_new, c_c_old], [c_new, c_old])
print('z_score:',z_score)
print('p_value:',p_value)

z_score: -1.3109241984234394
p_value: 0.18988337448195103

from scipy.stats import norm
# 计算z-score的显著程度
z = norm.cdf(z_score)
print(z)

0.09494168724097551

由于z得分0.09494168724097551小于临界值1.959963984540054,我们无法拒绝零假设,A版本和B版本不存在显著差异

置信区间

se=np.sqrt(np.square(s_new)/c_new + np.square(s_old)/c_old )
sample_mean=p_new - p_old
a=sample_mean - z * se
b=sample_mean + z * se
print('两个平均值差值的置信区间,95置信水平 CI=[%f,%f]' % (a,b))
两个平均值差值的置信区间,95置信水平 CI=[-0.001693,-0.001464]

新页面的转化率要低于1.5%到1.7%。

#合并标准差
sp=np.sqrt(((c_new-1)*np.square(s_new) + (c_old-1)* np.square(s_old) ) / (c_new+c_old-2))
#效应量Cohen's d
d=(p_new - p_old) / sp
print('d:',d)
d: -0.004863753093161925

描述统计分析
新版本转化率(平均值)是11.88%,标准差是0.3236
旧版本转化率(平均值)是12.04%,标准差是0.3254
推论统计分析
1)假设检验
独立双样本z=0.095,p=1.96(α=5%),双尾检验
接受零假设,统计不显著。
2)置信区间
两个平均值差值的置信区间,
95%置信水平CI=[-0.001693,-0.001464]。
3)效应量 d= -0.0049,效果不显著。
新页面的转化率不如旧页面,应该保留原页面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值