【整理向】老闆讓我用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進行機器學習的假設檢驗(附鏈接&代碼)

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