文章目录
- 案例背景
- 假设检验解读
- 一、提出假设
- 二、检验统计量
- 三、代码实现
- 四、结论
- 源码地址
案例背景
产品经理对APP做了许多改动,想要通过AB测试评估一下改动后的效果如何?
其中有一项评估是:签到按钮从蓝色改为红色后,客户点击的次数有没有发生变化。
于是,随机向200名客户投放测试连接,进行了一个月的内测体验。
内测结果数据如下:
userid:参与内测的用户id
group:参与内测用户使用的版本,分为A版本和B版本
click:参与内测用户点击签到按钮的次数
根据以上200条数据,通过AB测试的方法进行评估。
假设检验解读
假设检验的基本思想:在少量的实验中,小概率事件几乎不可能发生。
一、提出假设
**原假设:**在本次测试中,A版本与B版本的平均点击次数在统计学中没有显著性差异
**备择假设:**在本次测试中,A版本与B版本的平均点击次数在统计学中有显著性差异
我在查找资料时,一直在思考一个问题:
什么是小概率事件?
以下是我的一些想法,不足之处还请各位指出,不胜感激!
假设我们做了 10000 组测试,每组都有200人参与测试,将每一组实验中的AB版本的签到按钮点击数分别求均值得到,在用A版本的平均值减去B版本的平均值,这样会得到 10000 个平均值差的数据比如:【-20,-14,0,1,2,3,,…】
然后自定义划分一些区间,比如【-30,-28】、…【0,2】、【2,4】等,统计一下每个区间的有多少数据,绘制出的频数直方图,如下图所示:
用曲线拟合后,如下图所示:
在曲线图中画了一部分阴影,我们设定阴影部分的面积占全部曲线面积的5%,即:0.05。在统计学中,我们把这个值称为显著性水平。
小概率事件就是指我们计算的平均值差值落入阴影部分中。
继续思考一个问题:
那我们应该如何计算这次测试的结果是不是小概率事件呢?
二、检验统计量
经过很多人的研究后,发明了一种T检验统计量,公式如下:
经过该公式计算出对应的T值后,经过查表就能得到对应的P值。即:我们这次测试的结果在曲线图中,对应的面积占比有多大。
如果P值大于0.05,图像可能如下所示:
说明我们本次的测试的结果在统计学上并不是一个小概率事件,而是大概率会出现的。即原假设中A版本与B版本没有显著性差异是大概率会出现的事件,A版本与B版本没有太大差异。
如果P值小于0.05,图像可能如下所示:
说明我们本次测试的结果是一个小概率事件,根据假设检验的基本思想:在少量的实验中,小概率事件几乎不可能发生。 但是我们这次的测试发生了小概率事件,所以我们的原假设有问题,需要拒绝。即假设中A版本与B版本没有显著性差异是小概率事件。A版本与B版本有差异。
三、代码实现
import random
import pandas as pd
import numpy as np
from scipy import stats
df = pd.read_excel("./AB测试数据.xlsx")
a = df[df["group"]=="A"]["click"]
b = df[df["group"]=="B"]["click"]
print(a.mean(),b.mean())
# 15.22 15.96
# 检验方差齐次性
print(stats.levene(a, b))
# 独立样本T检验
# 如果LeveneResult中的pvalue<0.05,equal_var=False,否则equal_var=True
print(stats.ttest_ind(a, b, equal_var=True))
print(stats.ttest_ind(a, b, equal_var=False))
运行结果如下:
LeveneResult(statistic=0.19467268623024872, pvalue=0.6595371210000016)
Ttest_indResult(statistic=-0.6277510508489583, pvalue=0.5308903548838031)
Ttest_indResult(statistic=-0.6277510508489583, pvalue=0.5308924610673192)
四、结论
检验方差齐次性结果pvalue>0.05,说明两组数据方差同质性。
使用独立同方差样本T检验,结果pvalue为0.53>0.05,所以接受原假设,即:A版本与B版本没有太大差异。
源码地址
链接:https://pan.baidu.com/s/14EU6EK3FnfM_MovvasjGeg?pwd=4b3i
提取码:4b3i