【整理向】老板让我用SPSS做A/Btest,我偏要用python

老板:小果子
我:老板您说
老板:那个,这个页面中间按钮我们换了个颜色,你用斯罢斯验证一下点击率呗
我:…好的,老板的发音还是那么清新脱俗
老板:怎么样,我昨天专门练的,厉害吧
我:numpy!numpy!(npnp:牛皮牛皮)

我,数据之果,身为一名专业的数据分析师我们当然要体现出我们的专业水平,打开我的斯噗斯斯!准备窗口!哼!一个小小的A/B test做出来只需要分分…

(SPSS过期了…)

怎么办,新公司电脑新安装的斯噗斯斯过期了,机智的我赶紧到网上搜索破解程序,一打开…

在这里插入图片描述
西巴shake it啊
盗版软件植入广告都这么猖獗了吗(眼泪不争气的从我的嘴角流了下来)

这个时候再去找大佬要破解版或者再搜索就太花时间了
不行,身为一名专(xin)业(shou)的数据分析师怎么能如此低效
话说python不是有个统计包叫scipy嘛,容我去百度搜搜,这一搜就搜出来好多好东西,整理一下:

单样本T检验
单样本t检验是确定样本均值是否与已知或假设的总体均值具有统计学差异的带参数检验:
假设我们有总体的页面点击率10%和改动后的十天的页面点击率数据,想知道样本数据和总体数据在设定p值阈值为0.05的情况下,两者是否有显著性差异:

F1=[round(random.uniform(10,14),2) for i in range(10) ] #随机抽取正态分布十个在(10,14)的随机浮点数
F1_mean = np.mean(F1)
print(F1_mean)
test, pval = ttest_1samp(F1, 10)
print('p-values',pval)
if pval < 0.05:    # alpha value is 0.05 or 5%
   print(" we are rejecting null hypothesis")
else:
   print("we are accepting null hypothesis")

结果显示为:
在这里插入图片描述

但是这只是估算样本与总体差异的单样本检验而已,万一只是瞎猫碰上死耗子呢,万一中间有其他的因素在干扰呢,于是我们控制周期变量(选取历史数据上月没有变动的两个十天的数据,周期平移到本月,在最后十天进行改动得到新一组点击率和老十天点击率),或者同时有两种方法同时测评,得到两组样本进行:

配对样本T检验

F1_mean = np.mean(F1)
F2_mean = np.mean(F2)

print("week1 mean value:",F1_mean)
print("week2 mean value:",F2_mean)

ttest,pval = stats.ttest_rel(F1, F2)
print("p-value",pval)
if pval <0.05:
  print("we reject null hypothesis")
else:
  print("we accept null hypothesis")

结果是:
在这里插入图片描述

那要是我们本来有两版页面,我们同时进行了一个按钮的改动,想要看出变动是否有差异,则可以使用:

双样本T检验

一般用于判断两总体是否有显著差异的时候才会用双样本T检验
注意在进行双样本T检验的时候,一定要验证总体的方差齐性

def ftest(s1,s2):
    '''F检验样本总体方差是否相等'''
    print("Null Hypothesis:var(s1)=var(s2),α=0.05")
    p_val=stats.levene(s1, s2).pvalue
    print(p_val)
    if p_val < 0.05:
        print("Reject the Null Hypothesis.")
        equal_var=False
    else:
        print("Accept the Null Hypothesis.")
        equal_var=True
    return equal_var
    
def ttest_ind_fun(s1,s2):
    '''t检验独立样本所代表的两个总体均值是否存在差异'''
    equal_var = ftest(s1,s2)
    print("Null Hypothesis:mean(s1)=mean(s2),α=0.05")
    ttest,pval = ttest_ind(s1,s2,equal_var=equal_var)
    if pval < 0.05:
        print("Reject the Null Hypothesis.")
    else:
        print("Accept the Null Hypothesis.")
    return pval

s1 = norm.rvs(loc=1,scale=1.0,size=20)
s2 = norm.rvs(loc=1.5,scale=0.5,size=20)

ttest_ind_fun(s1,s2)

结果是:在这里插入图片描述
ANOVA(F-检验)

要是有两组以上的页面同时进行了改动,相互的两两比较不能充分说明问题,则要用ANOVA检验(F-检验):

s1 = norm.rvs(loc=1,scale=1.0,size=20)
s2 = norm.rvs(loc=1.5,scale=0.5,size=20)
s3 = norm.rvs(loc=1.5,scale=0.5,size=20)
F, p = stats.f_oneway(s1,s2,s3)
print("p-value for significance is: ", p)
if p<0.05: 
   print("reject null hypothesis")
else:  
  print("accept null hypothesis")

结果是:
在这里插入图片描述
借鉴他人链接如下,整理方便之后自查:
charie411:t检验及python代码实现
zrx731935354:利用python进行T检验
使用Python进行机器学习的假设检验(附链接&代码)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章