這篇文章會透過 Python 實作 Hypothesis Testing (假設檢定),以 statsmodels 中的範例資料集 fair 來講解,這是一份關於外遇的統計資料, 資料筆數 6367 筆,檢定主要希望可以看到一些有趣的訊息,舉例來說像是職業會不會影響婚外情。
首先感謝 Tainan.py 舉辦這次很棒的年會
如果大家有興趣的話可以關注一下他們的 Meetup 頁面、南部社群的臉書社團。
環境安裝及設定
首先當然是安裝 python 本人,如果需要在 cmd 中可以執行 python hello.py
,需要先在環境變數中增加相關路徑。
https://www.python.org/downloads/
另外 python 預設是將相關函式庫安裝在 global 的環境中,在開發的時候可能會常常需要做實驗,所以我們會需要一個實驗的環境,那就是安裝虛擬環境管理工具 Anacoda,在 node.js 中就是一個避免每次都執行 npm -g
的概念。
https://www.anaconda.com/distribution/
1 | pip3 install scipy # 沒有虛擬環境 |
conda 的常用指令
1 | conda list |
資料集簡介
這次很幸運的可以在社群聚會聽到 Mosky 大大的開示 (投影片在這裡),了解一些檢定在電商上可能的應用。不過由於商業機密的關係,這次講解的範例,主要以 statsmodels 中的範例資料集 fair 來講解,這是一份關於外遇的統計資料, 資料筆數 6367 筆,檢定主要希望可以看到一些有趣的訊息,舉例來說像是職業會不會影響婚外情。
假設檢定簡介
首先從我們的資料看起,在統計上分析可以分成兩種案例:
- 有母數:分佈相同可以代表樣本,那就可以從平均數來看一些假設
- 無母數:如果不確定分佈是否相同- 基本上就是中位數,像是台灣的薪水分佈
在做假設檢定的時候會有兩種假設
- null hypothesis: 是我們要推翻的假設,期望值相減等於零,可以直接建立模型
- alternative hypothesis: 我們想證明但可能不好觀察,透過否證法證明(推翻 null hypothesis)
其中我們會用到 p-value,簡單來說 p-value 就是觀察抽樣出來的機率密度,如果越低代表不可能,主要使用這個來判斷假設是否正確,當然可以接受的範圍要看資料內容,不能跟新聞一樣斷章取義 QQ
應用上舉例來說,在某個情境下,我們會定義一個模型,然後期待把資料丟進去算出機率。透過這樣的機率來判斷是否要相信我們的假設,通常這個要依據我們的商品而定,像是筆電負評率 1% 燈泡可能可以到 10%。
檢定可解決的問題
適合回答是否有改變的問題,像是男生和女生平均購物金額是否有差異,或是購買皮卡丘玩偶在不同年齡的男女比例是否有差異。另外一個問題是 sample size 要怎麼決定?假設今天只是猜男女這種五五波問題,sample size 假設需要一千,但如果需要猜測平均轉換率 2%,可能相對要十萬。
- 平均值問題:welche t-test
- 比例問題:卡方檢定
- 找出兩組不同的機率: power analysis
好用工具
在 python 中有相當多的好用工具:
- scipy 中提供相當多的數學計算公式,這次使用較多的為 stats
- pandas 可以從異質資料來源讀取檔案內容,並將資料放入 DataFrame 中,data frame 相當於 execl 中一個 sheet,DataFrame [] 相當於 filter 或是 sql 中的 select
- seaborn 講者大力推薦 python 中畫圖的一個函式庫,將統計數據視覺化,像是 pointplot、countplot
- matplotlib.pyplot 畫完圖如果要顯示可以用這個工具
實作
按照教學上的說明,我們要先安裝相關函式庫,有以下兩種方法:
1 | pip3 install jupyter numpy scipy sympy matplotlib ipython pandas seaborn statsmodels scikit-learn |
直接進入範例,範例中將看婚姻滿意度對外遇的影響,這裡定義數字小於 2 我們當作不滿意。
1 |
|
結果,最後真的可以看出有明顯差異,所以是否該開始照顧另一半的滿意度了!
喜歡這篇文章,請幫忙拍拍手喔 🤣