数据分析之AB testing实战(附Python代码)
编辑 | JackTian
微信公众号 | 杰哥的IT之旅(ID:Jake_Internet)
作者介绍:
大家可以叫我黄同学(博客名:Huang Supreme),一个应用统计硕士,爱好写一些技术博客,志在用通俗易懂的写作风格,帮助大家学到知识,学好知识!
目录
后台回复:AB testing实战,获取完整代码
1、增长黑客
1)前言
2)运用分析指标框架,驱动互联网产品和运营
现在分享一个链接,供大家了解:
http://www.woshipm.com/data-analysis/439849.html
这样上述几个部分就形成了一个良好的闭环,不断地去良性的发展。
3)增长黑客大致分为如下几个步骤
2、AB testing介绍
1)AB testing对比方案图示展示
图示一:天猫两个网页的改版
图示二:微信两个版本的改版
2)什么是反馈呢?
3)如何选取这样一批小流量用户呢?
4)到底什么是AB testing?
5)如何做AB testing?
提出想法,设定假设;
预估成本,设定优先级;
设计方案;
根据几组用户的真实数据反馈,科学的帮助产品进行决策;
3、AB testing 实战
1)AB testing 的统计学基础(独立双样本的假设检验)
大家如果感兴趣,可以看一下这篇文章:https://blog.csdn.net/weixin_41261833/article/details/104623377
2)AB testing 演示的 python 代码
import pandas as pd
---------------------------------------------------------
# 读取数据,查看前5行
df = pd.read_csv("ab_test.csv")
df.head()
---------------------------------------------------------
# 数据预览,查看数据有多少行、多少列
df.shape
---------------------------------------------------------
# 查看数据中是否有空值
df.isnull().any()
df.info()
---------------------------------------------------------
# 查看数据中的错误行
print((True) != (True))
print((True) != (False))
print((False) != (True))
print((False) != (False))
"""
true != true fasle treatment new_page
true != false true treatment old_page
false != true true control new_page
false != false false control old_page
"""
# 下面这句代码,展示的就是group=treatment且landing_page=old_page和group=control且landing_page=new_page,这样的错误行;
num_error = df[((df.group == "treatment")!=(df.landing_page == "new_page"))].shape[0]
num_error
---------------------------------------------------------
# 去掉错误行后,再次查看是否还存在错误行
print("没有删除错误行之前的记录数:", df.shape[0])
df2 = df[~((df.landing_page == "new_page")&(df.group == "control"))]
df3 = df2[~((df2.landing_page == "old_page")&(df2.group == "treatment"))]
print("删除错误行之后的记录数:", df3.shape[0])
print("错误行共有",str(df.shape[0]-df3.shape[0]),"条记录")
num_error2 = df3[((df3.group == "treatment")!=(df3.landing_page == "new_page"))].shape[0]
num_error2
---------------------------------------------------------
# 查看是否有重复行
print("数据的记录数为:", df3.user_id.shape[0])
print("将user_id去重计数后的记录数为:", df3.user_id.nunique())
"""
通过上述分析,可以看出:user_id中有一条记录数是重复的。接下来,我们可以找出这条重复的记录,并去重。
"""
---------------------------------------------------------
# 查看重复的行
df3[df3.user_id.duplicated(keep=False)]
# 去除重复的行
df4 = df3.drop_duplicates(subset=["user_id"],keep="first")
df4.shape[0]
---------------------------------------------------------
# 我们来看一下control组的转化率
control_converted = df4.query('group=="control"').converted.mean()
control_converted
# 再来看一下treatment组的转化率
treatment_converted = df4.query('group=="treatment"').converted.mean()
treatment_converted
"""
自己下去思考一下:根据上述结果,老页面的转化率比新页面的转换率好,是不是就可以说明老页面好呢?
"""
---------------------------------------------------------
# 进行独立两样本的假设检验
import statsmodels.stats.proportion as ssp
converted_old = df4[df4.landing_page == "old_page"].converted.sum()
converted_new = df4[df4.landing_page == "new_page"].converted.sum()
n_old = len(df4[df4.landing_page == "old_page"])
n_new = len(df4[df4.landing_page == "new_page"])
data = pd.DataFrame({"converted":[converted_old, converted_new],
"total":[n_old ,n_new]})
display(data)
z_score, p_value = ssp.proportions_ztest(count=data.converted, nobs=data.total, alternative="smaller")
print("Z值为:", z_score)
print("P值为:", p_value)
---------------------------------------------------------
结果如下:
结果分析:
3)AB testing 拓展
Reference
http://www.woshipm.com/data-analysis/439849.html
https://blog.csdn.net/weixin_41261833/article/details/104623377
http://m.blog.itpub.net/31555699/viewspace-2653832/
https://www.jianshu.com/p/61e6c34d0704
m
」获取!
作者往期精彩文章: 1、精心整理的 52 页 Python 操作 excel、word、pdf 文件【附获取方式】
2、520情人节,不懂送女朋友什么牌子的口红?没关系!Python 数据分析告诉你。
3、“罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
4、利用 Python 进行多 Sheet 表合并、多工作簿合并、一表按列拆分
5、Python 自动化办公之"你还在手动操作“文件”或“文件夹”吗?"关注微信公众号『杰哥的IT之旅』,后台回复“1024”查看更多内容,回复“微信”添加我微信。
好文和朋友一起看~
评论