卡方分布—chi-square distribution, χ2-distribution:
若k個獨立的隨機變量Z1, Z2,..., Zk 滿足標准正態分布 N(0,1) , 則這k個隨機變量的平方和:
為服從自由度為k的卡方分布,記作:
或者
卡方檢驗—χ2檢驗是以χ2分布為基礎的一種假設檢驗方法,主要用於分類變量之間的獨立性檢驗:
基本思想是根據樣本數據推斷總體分布與期望分布是否有顯著性差異,或者推斷兩個分類變量是否相關或者獨立。一般可以設原假設為 :觀察頻數與期望頻數沒有差異,或者兩個變量相互獨立不相關。實際應用中,我們先假設原假設成立,計算出卡方值,卡方表示觀察值與理論值間的偏離程度。
設A代表某個類別的觀察頻數,E代表基於H0計算出的期望頻數,A與E之差稱為殘差,卡方值計算公式:
(i=1,2,3,…,k)
Ai為i水平的觀察頻數,Ei為i水平的期望頻數,n為總頻數,pi為i水平的期望頻率。i水平的期望頻數Ei等於總頻數n×i水平的期望概率pi,k為單元格數。當n比較大時,χ2統計量近似服從k-1(計算Ei時用到的參數個數)個自由度的卡方分布。
由卡方的計算公式可知,當觀察頻數與期望頻數完全一致時,χ2值為0;觀察頻數與期望頻數越接近,兩者之間的差異越小,χ2值越小;反之,觀察頻數與期望頻數差別越大,兩者之間的差異越大,χ2值越大。換言之,大的χ2值表明觀察頻數遠離期望頻數,即表明遠離假設。小的χ2值表明觀察頻數接近期望頻數,接近假設。因此,χ2是觀察頻數與期望頻數之間距離的一種度量指標,也是假設成立與否的度量指標。如果χ2值“小”,研究者就傾向於不拒絕H0;如果χ2值大,就傾向於拒絕H0。至於χ2在每個具體研究中究竟要大到什么程度才能拒絕H0,則要借助於卡方分布求出所對應的P值來確定。
卡方檢驗實例:
某醫院對某種病症的患者使用了A,B兩種不同的療法,結果如表1,問兩種療法有無差別?
組別 | 有效 | 無效 | 合計 | 有效率(%) |
A組 | 19 | 24 | 43 | 44.2 |
B組 | 34 | 10 | 44 | 77.3 |
合計 | 53 | 34 | 87 | 60.9 |
可以計算出各格內的期望頻數:
第1行1列: 43×53/87=26.2
第1行2列: 43×34/87=16.8
第2行1列: 44×53/87=26.8
第2行2列: 44×34/87=17.2
先建立原假設:A、B兩種療法沒有區別。根據卡方值的計算公式,計算:卡方值=10.01。得到卡方值以后,接下來需要查詢卡方分布表來判斷p值,從而做出接受或拒絕原假設的決定。自由度k=(行數-1)*(列數-1)。 這里k=1.然后看卡方分布的臨界概率表,我們可以用如下代碼生成:
import numpy as np from scipy.stats import chi2 import pandas as pd percents = [ 0.95, 0.90, 0.5,0.1, 0.05, 0.025, 0.01, 0.005] df =pd.DataFrame(np.array([chi2.isf(percents, df=i) for i in range(1, 30)])) df.columns = percents df.index = df.index+1 pd.set_option('precision', 3) df
查表自由度為1,p=0.05的卡方值為3.841,而此例卡方值10.01>3.841,因此 p < 0.05,說明原假設在0.05的顯著性水平下是可以拒絕的。也就是說,原假設不成立。
ChiMerge分箱算法:
它主要包括兩個階段:初始化階段和自底向上的合並階段。
初始化階段:
首先按照屬性值的大小進行排序(對於非連續特征,需要先做數值轉換,比如轉為壞人率,然后排序),然后每個屬性值單獨作為一組。
合並的階段:
(1)對每一對相鄰的組,計算卡方值;
(2)根據計算的卡方值,對其中最小的一對鄰組合並為一組;
(3)不斷重復(1),(2)直到計算出的卡方值都不低於事先設定的閾值,或者分組數達到一定的條件(如最小分組數5,最大分組數8)。
下圖是著名的鳶尾花數據集sepal-length屬性值的分組及相鄰組的卡方值。最左側是屬性值,中間3列是class的頻數,最右是卡方值。這個分箱是以卡方閾值1.4的結果。可以看出,最小的組為[6.7,7.0),它的卡方值是1.5。
如果進一步提高閾值,如設置為4.6,那么以上分箱還將繼續合並,最終的分箱如下圖:
卡方分箱除了用閾值來做約束條件,還可以進一步的加入分箱數約束,以及最小箱占比,壞人率約束等。