python 卡方專題及常見問題 - CSDN

2021-01-07 CSDN技術社區

卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬於非參數檢驗的範疇,主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變量的關聯性分析。其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。(更多參考:卡方檢驗、卡方分布)

 

不講過多理論,主要使用 python 實現卡方驗證。之前對於元素/特徵/屬性 異常值的選擇情況,可以使用直方圖、箱型圖、Z分數法等篩選。如 Python 探索性數據分析(Exploratory Data Analysis,EDA) ,數據探索的同時,也可以排除單個變量的異常值。而對於離散屬性(或離散化)的分類,可以使用 等距分類、等頻分類 等,但是這樣分類不能體現出與其他屬性或結果的相關性。

 

當前則使用卡方驗證來將屬性分類。如客戶的婚姻情況對於貸款後是否回款還是有影響的,所以當前校驗離散值怎麼分類更好。現在有一組數據,客戶的「婚姻情況」,更複雜點計算的話,「婚姻+年齡+性別」 相互作用還是比較強的,可同時將這幾個變量計算。此處只是有 婚姻情況測試。這些數據是歷史數據,有點客戶已經回款,有的未回款。

但是這些數據哪些是異常值,這些異常值是刪除,還是歸到其他類中呢?

首先進行粗分類,觀測他們的佔比情況:

表1,基於客戶婚姻情況的粗分類

比值較近的可以劃分為同一類,如把 「再婚」 歸為 「已婚」 ,「初婚」 歸為 「未婚」 。這時機器的算法,當然我們可以評經驗來分類 ,「再婚」、「初婚」 、「復婚」 其實都屬於「已婚」。

 

表2,該表格為各婚姻情況客戶是否回款的頻數

 

 

每個類別都是相互獨立,沒有交叉的,現在用另一種方法計算。假設是否回款的客戶的分布與總體保持一致。計算「已婚未回款的客戶數」 =  4124x5498/12405 = 1826(以所在行列的匯總值計算),最終結果如下:

 

表3,該表格為各婚姻情況客戶是否回款的期望頻數分布(理論推算值)

 

兩個表的數字差距越大,兩個表的獨立性越強,就表示兩個表的依賴度越高、粗分類結果越好。現在使用計算卡方距離:

 

 Ai為i水平的實際的觀察頻數,Ei為i水平的期望頻數。代入公式:

這就是卡方值,再計算卡方的 自由度 v:

v=(行數-1)(列數-1)=(2-1)(3-1) = 2

 

表4,卡方臨界值表部分數據

卡方臨界值 為 (一般取 p=0.05):

該臨界值小於實驗中的卡方值 23,差異明顯,拒絕0假設。

 

使用 python 腳本實現:

# -*- coding: UTF-8 -*-# python 3.5.0# 卡方計算__author__ = 'HZC'import mathimport sqlalchemyimport numpy as npimport pandas as pdclass CHISQUARE: def __init__(self,d): self.engine = sqlalchemy.create_engine("mssql+pymssql://%s:%s@%s/%s" %(d['user'],d['pwd'],d['ins'],d['db'])) def get_df_from_query(self,sql): df = pd.read_sql_query(sql, self.engine) return df def get_variance(self,df): row_count = df.shape[0]-1 col_count = df.shape[1]-1 v = (row_count-1)*(col_count-1) return v #轉為矩陣求卡方距離 def get_chi_square_value(self,df1,df2): df1 = df1.drop(['col_total']) df2 = df2.drop(['col_total']) del df1['row_total'] del df2['row_total'] mtr1 = df1.astype(int).as_matrix() mtr2 = df2.astype(int).as_matrix() mtr = ((mtr1-mtr2)**2)/mtr2 return mtr.sum() #分類頻數 def get_classification(self,table_name,col_result,col_pred): sql = "select %s,%s from %s" % (col_result,col_pred,table_name) df = self.get_df_from_query(sql) df = df.groupby([col_result,col_pred]).agg({col_result:['count']}) df = df.reset_index() df.columns = [col_result,col_pred, 'count'] df = pd.pivot_table(df, values = 'count', index=col_result, columns = col_pred).reset_index() df['row_total'] = df.sum(axis=1) df.set_index(col_result, inplace=True) df.loc['ratio(%)'] = df.loc[0]*100/df.loc[1] print("==========================================================") print("原始數據粗分類:(百分比相近的可劃分為同一類)") print("==========================================================") print(df.astype(int)) df = df.drop(['ratio(%)']) df.loc['col_total']=df.sum(axis=0) print("==========================================================") print("分類頻數匯總:(實際值)") print("==========================================================") print(df.astype(int)) df2 = df.copy() total = df2[['row_total']].loc[['col_total']].values[0][0] for col in df2: df2[col] = df2[[col]].loc[['col_total']].values[0][0] * df2['row_total']/total df2 = df2.drop(['col_total']) df2.loc['col_total']=df2.sum(axis=0) print("==========================================================") print("期望頻數分布:(理論推算值)") print("與上表差距越大,兩表的獨立性越低、依存度越高,粗分類效果越好") print("==========================================================") print(df2.astype(int)) print("==========================================================") x = self.get_chi_square_value(df,df2)#順序:(實際df,推算df) v = self.get_variance(df2) # v=(行數-1)(列數-1) print("卡方值:χ2 = %s" % x) print("自由度:v = %s" % v) print("==========================================================")if __name__ == "__main__": conn = {'user':'用戶名','pwd':'密碼','ins':'實例','db':'資料庫'} cs = CHISQUARE(conn) cs.get_classification("V_ClientInfoAll","是否回款","婚姻狀況") #cs.get_classification(表或視圖,回歸只/判斷值,"分類元素")

只可分析兩個變量之間的關係值,輸出結果如下:


相關焦點

  • python卡方分析專題及常見問題 - CSDN
    卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬於非參數檢驗的範疇,主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變量的關聯性分析。其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。
  • python 卡方檢驗專題及常見問題 - CSDN
    卡方檢驗可以用於判斷兩個類別變量的相關性是否顯著。在分類的應用場景中可以用卡方檢驗選擇特徵,特徵與目標變量的相關性越顯著說明特徵越重要,預測力越強。      一、先簡單介紹一下卡方檢驗的步驟。假設y為目標變量,取值為好和壞,x為特徵變量取值為高、中、低。
  • 卡方檢驗結果分析專題及常見問題 - CSDN
    R語言卡方檢驗與結果可視化1,卡方分析簡介與實例2,R語言chisq.test()3,基於ggstatsplot包的可視化分析卡方分析簡介與實例:卡方檢驗是生物學中應用很廣的一種假設檢驗,可以通過對構成比,率進行檢驗,進而判斷分類資料間的偏差程度。
  • 卡方檢驗相關性專題及常見問題 - CSDN
    相關係數法、卡方檢驗法和互信息法是進行特徵選擇時常用的幾種過濾式方法。 卡方檢驗和卡方分布卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬於非參數檢驗的範疇,主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變量的關聯性分析。其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。它在分類資料統計推斷中的應用,包括:兩個率或兩個構成比比較的卡方檢驗;多個率或多個構成比比較的卡方檢驗以及分類資料的相關分析等。
  • python卡方檢驗 - CSDN
    卡方檢驗可以用於判斷兩個類別變量的相關性是否顯著。在分類的應用場景中可以用卡方檢驗選擇特徵,特徵與目標變量的相關性越顯著說明特徵越重要,預測力越強。      一、先簡單介紹一下卡方檢驗的步驟。假設y為目標變量,取值為好和壞,x為特徵變量取值為高、中、低。
  • python的int類型專題及常見問題 - CSDN
    在以前的Python2中,整型分為int和long,也就是整型和長整型, 長整型不存在溢出問題, 即可以存放任意大小的數值,理論支持無限大數字。因此在Python3 中,統一使用長整型,用int表示,在Python3中不存在long,只有int。
  • python平穩性檢驗專題及常見問題 - CSDN
    lags=None, boxpierce=False)函數檢驗無自相關lags為延遲期數,如果為整數,則是包含在內的延遲期數,如果是一個列表或數組,那麼所有時滯都包含在列表中最大的時滯中boxpierce為True時表示除開返回LB統計量還會返回Box和Pierce的Q統計量返回值:lbvalue:測試的統計量pvalue:基於卡方分布的
  • python一元線性回歸分析專題及常見問題 - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • python時間序列平穩性檢驗專題及常見問題 - CSDN
    在做時間序列分析時,我們經常要對時間序列進行平穩性檢驗,而我們常用的軟體是SPSS或SAS,但實際上python也可以用來做平穩性檢驗,而且效果也非常好,今天筆者就講解一下如何用python來做時間序列的平穩性檢驗。首先我們還是來簡單介紹一下平穩性檢驗的相關概念。圖1.
  • 卡方分布與卡方檢驗
    本文轉載自CSDNsselssbh的卡方分布與卡方檢驗 https://blog.csdn.net/bitcarmanlee
  • spss卡方_spss卡方檢驗 - CSDN
    analyze--descriptive--crosstabs,打開交叉表對話框 2、將性別放到行列表,將對讀物的選擇變量放到列,這樣就構成了一個交叉表  3、設置輸出的結果,點擊statistics,打開一個新的對話框   4、勾選chi-square(卡方檢驗
  • 卡方檢驗中的p值計算 - CSDN
    卡方檢驗作為一種常見的假設檢驗,在統計學中的地位是顯而易見的,如果你還不太清楚可以參看這篇博文:卡方檢驗用於特徵選擇,寫的非常的淺顯易懂,如果你還想再擴展點卡方檢驗方面的知識,可以參看這篇博文卡方檢驗基礎,寫的也很有意思。
  • python 顯著性水平專題及常見問題 - CSDN
    R2 = RSS/TSSprint(R2)'''0.987979715684'''T-Distribution統計測驗表明塔的傾斜程度與年份有關係,一個常見的統計顯著性測試是student t-test。這個測試的基礎是T分布,和正態分布很相似,都是鍾型但是峰值較低。
  • 平穩性檢驗結果分析專題及常見問題 - CSDN
    這裡以Python為例:#pythonimport numpy as npfrom statsmodels.tsa.stattools import adfullerss = np.random.randn(10000)adfuller(ss)#(-100.04436307924058,#
  • python浮點數表示專題及常見問題 - CSDN
    print(a.as_integer_ratio())print(b.as_integer_ratio())print(a == b)(1351079888211149, 4503599627370496)(5404319552844595, 18014398509481984)False為了解決運算中的問題
  • f檢驗 matlab專題及常見問題 - CSDN
    15.71985 15.91986 15.71987 16.71988 15.31989 16.11990 16.2MATLAB實現參考網上多個代碼可得https://www.ilovematlab.cn/thread-246993-1-1.htmlhttps://blog.csdn.net
  • 白噪聲檢驗專題及常見問題 - CSDN
    卡方檢驗基於此強大的統計結果: k個相同的標準正態隨機變量的平方和是具有k個自由度的卡方分布隨機變量。 對於任何給定的時間序列,可以檢查Q值是否以統計學上顯著的方式偏離零,從而在卡方表中針對k個自由度查找測試統計量的p值。 通常,小於0.05的p值表示無法歸因於偶然性的顯著自相關。
  • spss卡方檢驗 - CSDN
    統計學統計學:SPSS計算標準差、作圖等,各種秩和檢驗統計學經典:如何用SPSS做秩和檢驗、組間兩兩比較國外論文:用統計學預測《權力的遊戲》角色壽命卡方檢驗,非常常用,SPSS很快搞定。比如
  • python 月初 月末專題及常見問題 - CSDN
  • Python編程常見問題與解答
    答:如果是Windows系統的話,可以使用瀏覽器打開https://www.lfd.uci.edu/~gohlke/pythonlibs/下載合適版本的whl文件,然後離線安裝。遇到這種情況時,仔細檢查代碼的邏輯和問題的要求是否一致,是否把>寫成>=了,或者忽略了range()函數返回的是左閉右開區間了,是不是把運算符**寫成*了,是不是代碼縮進有錯誤。22.問:明明記事本程序文件是存在的,為什麼會提示「FileNotFoundError: [WinError 2] 系統找不到指定的文件。