在分析類別型資料的時候,卡方檢定(Chi-square test)至今仍是最常用的無母數統計方法。資料科學家們讀的第一本統計課本之中,卡方檢定都會跟 ANOVA、t 檢定、還有相關性檢定等等關鍵字一起出現,是必備的分析技能。問題是,大家在看統計學課本的時候,很容易被數學公式給淹沒,反而沒搞清楚卡方檢定究竟好用在哪裡。
筆者好豪將在這篇文章分享資料科學家在實戰應用中,卡方檢定能發揮威力的三大使用時機與用途:多組別的 A/B 測試、評估二分類模型、以及機器學習模型特徵選擇,並解釋如何在這些情況下運用卡方檢定。卡方檢定看似複雜,但實際上它在實戰中非常有用。在這篇文章認識卡方檢定的實際應用之後,相信你不只會更深刻了解這項檢定、更會拓展你的資料分析技能工具箱!
(如果你單純想理解卡方檢定的定義與使用方法,歡迎先閱讀筆者的另一篇文章:白話介紹卡方檢定)
目錄
多組別的 A/B 測試
如果你的 A/B 測試,不只有 A 與 B 兩組,而是有更多實驗組別,你會需要卡方檢定。
A/B 測試的最典型作法,是讓控制組(A 組)與對照組(B 組)使用者看到不同版本的產品,實驗者依此觀察兩組之間的使用者反應差異。而有不少的時候,產品設計者會貪心地想要一次測試多個組別,也就是有更多 C、D、E 等等組別的「多變量測試(Multivariate test)」。
我們知道,A/B 測試要比較兩組之間的數據表現,經常使用 Z 檢定。現在想像一下,如果 Facebook 的產品設計者,正在改善按讚按鈕,想知道按讚按鈕改成不同的文字能不能讓使用者更愛按讚:
- A 組(控制組,現在版本):「讚」
- B 組:「超讚」
- C 組:「棒」
- D 組:「很棒」
- E 組:「好棒棒」
以上總共有五種版本,需要進行 A/B/C/D/E 測試,但 Z 檢定只能在兩組之間比較數據大小差別,這樣要做幾次 Z 檢定的兩兩比較呢?總共是 10 次!
- A 組與 B 組比較
- A 組與 C 組比較
- A 組與 D 組比較
- … 以此類推 …
- D 組與 E 組比較
(提示:10 次的算法是 5 + 4 + 3 + 2 + 1,或者用排列組合方法的 C 5 取 2
)
明明是只有唯一一個按讚按鈕想要更新,因為同時測試版本很多,所以 Z 檢定要進行 10 次之多,有沒有覺得哪裡怪怪的呢?這確實會產生「多重檢定(Multiple Testing」的問題,讓你的偽陽性錯誤比預期還高。
卡方檢定的同質性檢定(Test of Homogeneity)正可以解決這項問題,即使是 A/B/C/D/E 這麼多組別的測試,卡方檢定只需要做一次檢定(而不是 10 次),就可以看出組別之間差異是否存在顯著差異。以上方案例來說,每個版本的按鈕想看使用者「按讚的比率(click-through rate)」多高,透過同質性檢定,可以在一次檢定看出 5 個組別的比率是否一模一樣,如果不一樣,就表示存在某些版本的按鈕使用者更喜歡、另一群版本的按鈕使者比較討厭。
此 A/B/C/D/E 測試的卡方檢定分析方法,我在 這一篇文章 有簡短的計算方法範例,供你參考。
在此也補充,A/B/C/D/E 測試進行同質性檢定之後,即使看到顯著的結果,也只代表組別之間存在差異,但不知道表現較好的組別究竟是哪一組、不知道實際該讓使用者採用哪種新版本設計,因此卡方檢定先看到顯著之後,仍需要做下一步檢定才能清楚產生結論,這種做法稱為 Post Hoc Test,這篇文章 有很簡單的範例介紹。若是求知慾暴增的讀者,我更推薦你花時間看這一篇學術文章:「卡方檢定顯著了,然後呢?」,了解更詳細的作法與背後原理。
評估二分類模型
事實上,要評估機器學習的二分類模型(Binary classification),卡方檢定並不是最常用或最直覺的方法,雖然可以用卡方檢定的 獨立性檢定(Test of Independence)來檢驗兩個類別變數有沒有關聯性,但二分類問題中,我們更關注機器學習模型能不能預測出正確的類別,而不是「預測類別」與「正確類別」之間的獨立性。
然而,卡方檢定依然對評估二元分類器的特定面向很有幫助,尤其是以下兩個場景:
首先,用卡方檢定檢驗二元分類器是否比完全隨機「亂猜」更聰明。假設我們建立了一個二分類模型用來預測惡意 Email,你可以建立一個 2 x 2 的 列聯表:預測為惡意郵件(是/否) v.s. 實際上是惡意郵件(是/否)。如果我們的模型表現跟亂猜差不多,卡方的獨立性檢定不會展現任何顯著性;相反地,如果得到低的 p 值、看到顯著性,表示模型預測惡意郵件的成效比亂猜還要好。
另一種應用是比較兩個二分類模型的差異。假設我們建立了多個二分類模型來預測惡意 Email,有的模型演算法用隨機森林、有的用深度學習等等,卡方檢定可以幫助我們比較兩個模型之間的成效。需要為兩個模型(A 與 B)建立列聯表:模型 A 預測正確(是/否)、模型 B 預測正確(是/否)。其背後的邏輯其實很簡單,如果模型 A 與 B 表現相同,那就不太會發生很多資料點「模型 A 預測正確、但模型 B 預測錯誤」的情形,而這種情形透過卡方的同質性檢定可以清楚地量化與總結。
以上兩種應用場景,筆者好豪推薦你閱讀這篇 Towards Data Science 文章 的範例說明。再次強調,卡方檢定其實不是評估二分類模型最主要的方法,通常我們會伴隨使用 Accuracy、Precision、Recall、或者 ROC 曲線 來一起評估二分類問題的成效,建議以先這些指標為主要評估,再用上述兩個卡方檢定應用場景來進一步解析二分類模型的改進方向。
機器學習模型特徵選擇
卡方檢定是幫機器學習模型選擇特徵的方法之一。
建立機器學習模型時,選擇出「好」的特徵當作模型輸入是至關重要的,然而,不論你為特徵工程(Feature Engineering)下了多少功夫,並不是每個特徵都同等重要!特徵選擇(Feature Selection)的任務正是要找出最能幫助模型正確預測的那些特徵,卡方檢定會在這裡發揮功能。
在二分類問題的情境,可以用卡方檢定的 獨立性檢定 來檢視類別型特徵與預測目標(同樣是類別型)是否存在關聯,如果觀察到特徵與目標變數非獨立(亦即存在關聯性),與目標變數有關聯性的特徵會是對模型預測準確度更有幫助的特徵。
卡方檢定的特徵選擇十分常見,所以 Python 必備的機器學習函式庫 scikit-learn
也提供了卡方檢定特徵選擇的函式 chi2()
,它只能用於篩選數值不為負數的特徵,包括布林變數(是/否)與頻率變數(次數)。篩選方法非常直覺,chi2()
幫每個特徵都會算出卡方統計量(chi-squared statistic),此統計量越高、表示該特徵越重要,反過來說,卡方統計量太低的變數通常會被我們從模型之中刪除。
這種透過給每個特徵「分數」(例如卡方統計量)來比大小、排列出特徵重要性的特徵選擇做法稱為 Univariate feature selection,當然, Univariate feature selection 還有卡方檢定,並不是特徵選擇的唯一方法,其他還有很多特徵選擇方法,有興趣的話,推薦你直接從 scikit-learn
的 官方文件 學習。
結語
卡方檢定是統計學中一個重要的概念,但它往往讓人望而卻步,通常都是因為大家都是先從統計學課本裡面的一大堆數學公式認識它,而不熟悉它的應用。
在本文中,我們通過實用的範例,揭開卡方檢定的神秘面紗 — 卡方檢定在資料科學家的日常實戰其實超級常用!
- 為多組別的 A/B test 解決多重檢定問題
- 評估二分類模型是否比「亂猜」更準確,並且能比較兩個二分類器的表現差異
- 給予每個特徵卡方統計量分數,高效率地執行特徵選擇
相信這篇文章介紹的卡方檢定使用時機與用途,能幫助你理解如何將卡方檢定應用於自己的研究和分析中。
如果你還想多了解一點卡方檢定,筆者好豪還有幾篇相關文章,推薦你繼續閱讀:
參考資料:
- Chi-Square Test is Statistically Significant: Now What?
- 《資料科學家的實用統計學》:Python 的 Scipy 套件進行統計檢定
- 《資料科學的統計實務》
如果這篇文章有幫助到你,歡迎追蹤好豪的 Facebook 粉絲專頁 或是 Threads 帳號,我會持續分享統計學與資料分析知識;也可以點選下方按鈕,分享給對卡方檢定或更多統計學有興趣的朋友們。