Python數據分析之假設檢驗(T檢驗、Z檢驗、比率檢驗等)

閱讀提示

本文將從多個方面介紹假設檢驗中的幾種常見檢驗方法,t檢驗、Z檢驗、單樣本的Z檢驗等方法。

在這裏插入圖片描述

一、假設檢驗

假設檢驗,也稱爲顯著性檢驗,是通過樣本量的統計量來判斷與總體參數之間是否存在差異(差異是否顯著)。即我們對總體參數進行了一定的假設,然後通過收集到的樣本數據,來驗證我們之前做出的假設(總體參數)是否合理。在假設檢驗中,我們會建立兩個完全對立的假設,分別爲:

  • 原假設
  • 備擇假設

然後通過對樣本信息進行判斷,選擇接受原假設還是拒絕原假設(接受備擇假設)

流程: 建立原假設與備擇假設→假設原假設爲真→判斷→接受原假設還是備擇假設



二、小概率事件

一次實驗中出現概率很小的事件,並且一般不會出現的事件,也就是說違反邏輯與常規的結論,就是小概率事件。一旦小概率事件發生,就有理由拒絕原假設。



三、中心極限定理

樣本的均值會落在任一區域,但概率不同。在以均值爲中心,一倍的標準差範圍內可涵蓋68%的數據;兩倍的標準差範圍內可涵蓋95%的數據;三倍的標準差範圍內可涵蓋99.7%的數據



四、P-Value與顯著性水平

P值代表的是支持原假設的概率,如果P < 0.05,就拒絕原假設



五、假設檢驗的步驟

1、設置原假設和備擇假設

2、設置顯著性水平α(通常選擇0.05)

3、根據問題選擇不同的假設檢驗方法

4、計算統計量,並獲得P值

5、根據P與α的值,判斷是否接受原假設



六、Z檢驗

服從正態分佈、總體標準差已知。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MRfB9EVY-1588658726299)(G:\md文件\typora圖片\Z檢驗.png)]

上式可以理解爲: 樣本均值-總體均值(也就是他們之間的距離) 除以一個樣本標準差,得到的就是他們之間的距離等於幾倍的標準差,如果大於2,也就是說偏移超過了2倍的標準差,則落入了拒絕域中。其中本均值分佈的標準差由中心極限定理給出


舉個簡單的例子:抽樣出的五批牛奶冰點溫度分別爲**-0.547, -0.532, -0.548, -0.531, -0.535**,而天然牛奶的冰點溫度服從正態分佈,均值爲-0.545℃,標準差爲0.008℃,如果摻水則冰點溫度會上升且逐漸趨於0℃

Z檢驗案例:

import numpy as np
from scipy import stats


# 設定抽樣的5批牛奶冰點溫度
a = np.array([-0.547, -0.532, -0.548, -0.531, -0.535])

# 設定總體的均值和標準差
mean, std = -0.545, 0.008

# 計算樣本均值
sample_mean = a.mean()

# 計算標準誤差(總體標準差/根號下 樣本總體數目)
se = std / np.sqrt(len(a))

# Z統計量
Z = (sample_mean - mean) / se

print('Z統計量爲{}'.format(Z))

# P值
P = 2 * stats.norm.sf(abs(Z)) # 這裏stats.norm.sf() 是返回Z右邊部分的面積 所以要 * 2 得到的就是Z左右兩邊的面積和
 
print('P值爲{}'.format(P))

輸出:

Z統計量爲1.788854381999821
P值爲0.07363827012030438

如果這樣看的話,P>0.05,所以我們要接受原假設,也就是說這批牛奶符合標準,沒有摻水, 但這個問題實際上是一個單邊檢驗, 我們需要考慮的只是溫度大於冰點溫度的那一部分牛奶,而小於冰點溫度的牛奶屬於正常牛奶,不摻水。

越往左,原假設越被接受,那要的就是右邊的面積當處在最左邊的時候,P值接近爲1 。



七、t檢驗

案例:員工對老闆說商品的日均銷量一定會到達 50,一週下來銷售情況爲: 50, 48, 50, 47, 46, 48, 51,員工稱是因爲波動造成的,自己的承諾可靠

:這還是一個單邊檢驗,只考慮大於50的,不考慮沒達到50的情況。

t檢驗與Z檢驗的區別在於t檢驗總體的標準差是未知的

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZwAjaOZX-1588658726303)(G:\md文件\typora圖片\t檢驗.png)]

t統計量服從t分佈,隨着自由度(樣本容量 - 1)的增大,t分佈會逐漸趨向於正態分佈。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1srB8rPj-1588658726305)(G:\md文件\typora圖片\T.png)]

t檢驗案例:

#  設定商品銷量
b = np.array([48, 50, 47, 46, 48, 51])

# 樣本容量
n = len(b)

# 設定樣本均值和樣本標準差
mean, std = b.mean(), b.std(ddof=1)

# 計算標準誤差
# 如果是Z檢驗的話那就是用總體標準差除以根號n,但t檢驗因爲總體標準差是未知的,所以用樣本的標準差來代替
se = std / np.sqrt(n)

# t檢驗
t = (mean - 50) / se

print('t統計量爲{}'.format(t))

# P值
P = stats.t.cdf(t, df= n-1)

print('P值爲{}'.format(P))

輸出:

t統計量爲-2.1926450482675697
P值爲0.03991506316282129



八、比率檢驗

案例: 預期將轉換率提升到10%,一週後廣告點擊500次,轉換用戶45人,是否完成任務了?

比率檢驗條件:

  • 需求爲總體比率的檢驗
  • 樣本容量n ≥ 30
  • np ≥ 5 且 n(1-p) ≥ 5 (P爲樣本比率)
  • 廣告是否轉換 服從二項分佈,當n較大的時候二項分佈近似於正態分佈

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZH0nozCy-1588658726307)(G:\md文件\typora圖片\比率檢驗.png)]

比率檢驗案例:

原假設: π ≥ πo 即 π ≥ 10% (任務完成)

備擇假設: π < 10% (任務失敗)

# 樣本比率
p = 45 / 500

# 總體比率
pi_0 = 0.1

# 樣本容量
n = 500

# Z統計量
Z = (p-pi_0) / np.sqrt(pi_0 * (1 - pi_0) / n)

print('Z統計量{}'.format(Z))

P = stats.norm.cdf(Z)  # sf是取右邊的面積,cdf是取左邊的面積

print('P值{}'.format(P))

輸出:

Z統計量-0.7453559924999305
P值0.22802827012512783

此時, P > 0.05 ,所以我們沒有理由拒絕原假設,也就是不能判斷是否完成任務,需要進一步觀察。


九、總結

假設檢驗貫穿整個數據分析工作,還存在於A/B測試等多個領域,本文提到的只是很小很小的一部分,其餘知識點還需要各位讀者總結與補充,感謝閱讀。

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