A/B测试项目练习(数据来自kaggle)

一、背景

某电商公司非常注重自己的落地页设计,希望通过改进设计来提高转化率。以往该公司全年转化率平均在13%左右,现在希望设计的新页面能够带来更高的转化率,希望新页面的转化率能有2%的提升,达到15%。在正式推出新页面之前,该公司希望通过AB测试在小范围的用户中进行测试,以确保新页面的效果能够达到预期目标。

二、实验设计

(1)提出假设
        在本案例中,我们并不能确定新页面的性能一定比当前的页面更好。所以,这里选择双尾检验。
        原假设H0:新版落地页转化率与旧版落地页转化率相比没有变化
        备择假设H1:新版落地页转化率与旧版落地页转化率相比有变化
    (2)确定样本量
        方法一:公式计算
            N=\frac{\sigma ^{2}}{\delta ^{2}}\left ( Z_{1-\frac{\alpha }{2}} +Z_{1-\beta }\right )^{2}
            \sigma ^{2}= P_{A}\left ( 1- P_{A}\right )+ P_{B}\left ( 1- P_{B}\right )
            其中P_{A}=13%,P_{B}=15%,𝛼=0.05,𝛽=0.2

         计算出最小样本量为4715

         方法二:Python计算

        

import numpy as np 
import pandas as pd 
import scipy.stats as stats 
import statsmodels.stats.api as sms
#计算效果量
effect_size = sms.proportion_effectsize(0.13,0.15)
#计算样本量
sample_size = sms.NormalIndPower().solve_power(
    effect_size,
    power = 0.8,
    alpha = 0.05,
    ratio = 1
)
np.ceil(sample_size)
运行结果为4720.0

        方法三: 网页计算器(方便)

三、数据清洗 

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

#查看数据
df.head()

 

 

df.info()

 

字段名称含义:

user_id:用户ID
timestamp:用户访问页面的时间
group:用户分组情况(新落地页为treatment组,旧版落地页为control组)
landing_page:每位用户看到的落地页(分为新旧两版落地页)
converted:是否成功转化(1代表成功转化,0代表未转化)

 

df.value_counts('group')
df.value_counts('landing_page')

 

 

#处理时间字段
date = pd.to_datetime(df['timestamp'],format='%Y-%m-%d').dt.strftime('%Y-%m-%d')
df['timestamp']=date
df.head()

 

#检查缺失值
df.isnull().sum()

 

#检查重复值
df.duplicated().sum() #整体数据
#结果为0

 

#检查用户ID重复值
df['user_id'].duplicated().sum()
#结果为3894

df[df['user_id'].duplicated()]['user_id']

 

#随机抽取其中一个用户ID查看
df[df['user_id']==698120]

 

#去除重复值
del_id=df[df['user_id'].duplicated()]['user_id'].values
df2=df[-df['user_id'].isin(del_id)]
df2

 

#确保control组看到旧页面,treatment组看到新页面
pd.crosstab(df2['group'],df2['landing_page'])

 

四、假设检验 

 由于样本非常大,所以使用Z检验

 

from statsmodels.stats.proportion import proportions_ztest, proportion_confint

control_group=df2[df2['group']=='control']['converted']
treatment_group=df2[df2['group']=='treatment']['converted']

n_con=control_group.count()
n_treat=treatment_group.count()
successes=[control_group.sum(),treatment_group.sum()]
nobs=[n_con,n_treat]

z_zast,pval=proportions_ztest(successes,nobs=nobs)

(lower_con, lower_treat), (upper_con, upper_treat) = proportion_confint(successes, nobs=nobs, alpha=0.05)

print(f'z statistic:{z_zast:.2f}')
print(f'p-value:{pval:.3f}')
print(f'ci 95% for control group):[{lower_con:.3f},{upper_con:.3f}]')
print(f'ci 95% for treatment group:[{lower_treat:.3f},{upper_treat:.3f}]')
print(f'置信区间:[{lower_treat - lower_con:.4f} , {upper_treat - upper_con:.4f}]')

五、分析结果及建议 

由于计算出来的P值0.232高于显著水平α=0.05,所以不能拒绝原假设,这意味着新版落地页与原版落地页没有明显不同。
而且置信区间为[-0.0014 , -0.0015],表明实验组指标小于对照组指标,说明新版落地页的真实转化率更有可能不如原版落地页的真实转化率。进一步证明了,新版设计并不是一个很好的改进。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Kaggle是一个面向数据科学家和机器学习爱好者的在线平台,提供了各种数据集、竞赛和学习资源。使用Kaggle进行数据分析可以按照以下步骤进行: 1. 注册Kaggle账号:在Kaggle官网上注册一个账号,这样你就可以参与竞赛、下载数据集和提交结果。 2. 探索数据集:在Kaggle上浏览并搜索你感兴趣的数据集。你可以通过数据集页面上的描述、特征列和样本预览来了解数据集的基本信息。 3. 下载数据集:一旦你找到了感兴趣的数据集,你可以点击"Download"按钮来下载数据集。通常情况下,数据集会以CSV或者其他常见的数据格式进行存储。 4. 数据清洗和预处理:在开始分析之前,你可能需要对数据进行清洗和预处理。这包括处理缺失值、去除异常值、标准化数据等。 5. 数据可视化:使用数据可视化工具(如Matplotlib、Seaborn等)来探索数据的分布、关系和趋势。可视化可以帮助你更好地理解数据。 6. 特征工程:根据你的问题和数据集,进行特征工程来创建新的特征或者选择合适的特征。这可以提高模型的性能。 7. 模型选择和训练:根据你的问题类型(分类、回归等)选择合适的模型,并使用训练数据对模型进行训练。 8. 模型评估和调优:使用验证集或者交叉验证来评估模型的性能,并对模型进行调优,以提高其准确性和泛化能力。 9. 提交结果:如果你参与了Kaggle的竞赛,你可以使用测试集来验证你的模型,并将结果提交到Kaggle上进行评估。 总的来说,Kaggle提供了一个丰富的数据科学社区和工具,可以帮助你进行数据分析和机器学习实践。通过参与竞赛和与其他数据科学家交流,你可以不断学习和提高自己的技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_45100787

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值