数据蛙数据分析每周作业

相关比例检验

2019-08-11  本文已影响3人  哈嘿_af77

网站投放广告的时候,一开始给大家看到的落地页是访问课程资料,现在又推出了开始免费试学这个落地页,网站的两个不同的落地页(老版本,新版本),想知道哪个版本的落地页能带来更多的转化率,这时候就要检测两个落地页的转化效果,下面是测试的24天数据


一、描述统计分析

#读取数据

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

df = pd.read_csv('C:/Users/mxl/Desktop/小鸟计划/ab_data.csv')

df.head()

user_id-用户,timestamp-用户访问页面的时间,group-旧方案control和新方案trement分组, landing_page-落地页是旧页(访问课程资料)或新页(开始免费试学),converted-1表示已转化

#查看每一列的数据类型

df.dtypes

#描述统计信息

df.describe()

#数据集中有treament和new_page不一致的数据,要对数据集中的这些数据进行剔除,观察treatment有写成treament

df.loc[(df["group"] == "treatment")!=(df["landing_page"] == "new_page")].count()

#剔除错误记录,剩下的作为测试数据

df_test = df.loc[~((df["group"] == "treatment")!=(df["landing_page"] == "new_page"))]

#查看有没有重复用户,若有就去重

df_test.user_id.nunique()

#对重复的数据用duplicate进行删除,对象是User_id,保留第一个

df_test = df_test.drop_duplicates(subset=["user_id"],keep='first')

#样本均值

a_mean=df_test.loc[df_test['landing_page']=='new_page']['converted'].mean()

b_mean=df_test.loc[df_test['landing_page']=='old_page']['converted'].mean()

#样本数量

n_a=df_test.loc[df_test['group']=='treatment'].shape[0]

n_b=df_test.loc[df_test['group']=='control'].shape[0]

print('A版本平均值=',a_mean,'转化量')

print('B版本平均值=',b_mean,'转化量')

 二、推论统计分析

1、问题是什么

自变量是指原因。因变量是指结果,也就是自变量发生变化导致改变的值就是因变量。

自变量:我们有两组实验数据,第一组是落地页是新网页。第二组落地页是旧网页。所以自变量是落地页的类型

因变量:落地页带来的转化量

所以,我们要考察的是自变量(落地页)两种情况下对因变量(网页成交转化量)的影响。

零假设和备选假设

测试用户分为两部分,一部分用新页面A,一部分用旧页面B,经过一定时间后,收集到两方案的观测数据,要研究的问题是A和B方案的转化率的差异性。由于我们期望是A方案页面的成交转化率高于B方案页面的成交转化率,所以提出下面两个互为相反的假设:

零假设:u_a-u_b= 0

零假设总是表述为研究没有改变,没有效果,不起作用等。

备选假设:u_a-u_b>0

A版本和B版本有差别,也就是A版本平均值大于B版本平均值。

检验类型

由于两种数据是相关样本,采用的是相关比例检验

相关比例检验只关注每组数据相关比例的差值

检验方向

备选假设是A版本和B版本有差别,也就是A版本转化率平均值大于B版本转化率平均值,所以我们使用右尾检验。

2、证据是什么

在零假设成立前提下,得到样本平均值的概率p是多少?

'''用python统计包statsmodels.stats.proportion.proportions_ztest自动计算

基于正态z检验的比例检验:http://www.statsmodels.org/dev/generated/statsmodels.stats.proportion.proportions_ztest.html#statsmodels.stats.proportion.proportions_ztest

'''

#导入统计模块

import statsmodels.stats.proportion as sm

#计算转化在新网页和旧网页的样本比例

convert_new = df_test.query('group == "treatment" & converted == 1').shape[0]

convert_old = df_test.query('group == "control" & converted == 1').shape[0]

z_score,p_value = sm.proportions_ztest([convert_new,convert_old],[n_a,n_b],alternative='smaller')

这里alternative表示备择假设可以是双侧检验two-sided,也可以是单侧检验之一,smaller表示备择假设为prop < value,较大的表示prop >value。在两个样本检验中,smaller表示备择假设为p1 < p2,较大的表示p1 > p2,其中p1为第一个样本比例,p2第二个样本的比例。

z_score,p_value

z_score,p_value

3、判断标准是什么

显著水平 alpha=0.05

4、做出结论

#右尾判断条件:p_value<alpha时,拒绝原假设

if(p_value<alpha):

    print('拒绝零假设,有统计显著,也就是接受备选假设')

    print('备选假设:A版本和B版本有差异')

else:

    print('接受零假设,没有统计显著')

    print('零假设:A版本和B版本没有差异')

5、置信区间

#1)置信水平对于的z值

#2)计算上下限

#置信区间上限=样本平均值-z_score*标准误差

#置信区间下限=样本平均值+z_score*标准误差

a=(a_mean-b_mean)-z_score*np.sqrt(a_mean*(1-a_mean)/n_a + b_mean*(1-b_mean)/n_b)

b=(a_mean-b_mean)+z_score*np.sqrt(a_mean*(1-a_mean)/n_a + b_mean*(1-b_mean)/n_b)

6、效应量

#总体比例差平均值差值对应的值是0

pop_mean=0

#样本比例差平均值差值对应的值是0

sample_mean=a_mean-b_mean

#总体比例差平均值差值的标准差

sample_std=np.sqrt(a_mean*(1-a_mean)/n_a + b_mean*(1-b_mean)/n_b)

d=(sample_mean - pop_mean) / sample_std

print('d=',d)

三、数据分析报告总结

1、描述统计分析

A版本平均值= 0.11880806551510564 转化量

B版本平均值= 0.1203863045004612 转化量

2、推论统计分析

1)假设检验

本次假设检验是基于正态(z)检验的比例检验 z_score=-1.3109241984234394,p_value=0.094941687240975514,单侧检验(右侧) 统计上不存在显著差异,接受零假设

2)置信区间

总体比例差的95%的置信区间 CI=[-3.5520257269348876e-09,-0.0031564744186853865]

3)效应量

d= -1.31092714883,效果显著

参考链接:

1、数据集

https://www.jianshu.com/go-wild?ac=2&url=https%3A%2F%2Fpan.baidu.com%2Fs%2F1KFernlpMtqgSt2Zp9yZa1g

2、数据分析AB测试实战项目

https://www.jianshu.com/p/1c0c4c3ea889

上一篇 下一篇

猜你喜欢

热点阅读