데이터 분석/통계(Statistics)

[Python] 카이제곱 검정(교차분석)

Jerry Jun 2020. 9. 3. 14:36
728x90

# 카이제곱 검정(Chi-square : χ2)

  • 질적자료와 질적자료간에 서로 통계적으로 관계가 있는지 판단하는 검정
  • 카이제곱 분포를 기반으로 관찰된 빈도와 기대되는 빈도와 의미있게 다른지 여부를 검증한다.

 

 

예시를 통해 알아보자.

pyo

- 예제 데이터 수집

 

귀무가설 : 성별과 사람이 안경을 쓰는 것은 관련성이 없다.

대립가설 : 성별과 사람이 안경을 쓰는 것은 관련성이 있다.

 

 

 

originexpected

만약 합계는 변하지 않는다고 가정했을 때 귀무가설이 맞다면 예상할 수 있는 값이 있을 것이다.

그것이 바로 기대값(Expected Value) 이다. 

그래서 관찰된 값과 기대값 사이의 차이가 거의 없으면 귀무가설을 따를 수 있다.

하지만 관찰된 값과 기대값 사이의 차이가 많다면 대립가설을 따를 수 있다.

 

 

 

이 때, 기대값을 모두 더한 값은 무조건 0 이 된다. (편차를 모두 더하면 0이 되는 성질)

그래서 우리는 제곱을 한다.

gongsik

이 값이 크면 대립가설이 될 것이고, 0에 가까우면 귀무가설을 따를 것이다. (마이너스는 나올 수 없다.)

 

 


다른 예를 하나 더 보자.

A : 결혼식을 한다고 할 때 200명쯤 올 것이다. 하는 것은 기대치이고, 결혼식 당일 220명이 왔다.관찰치이다.

B : 집들이를 한다고 할 때 20명이 올 것이다. 하는 것은 기대치이고, 집들이 당일 40명이 왔다.관찰치이다.

 

 

A 와 B 경우의 기대치-관찰치 차이는 20으로 똑같다. 하지만 정말 같은 차이일까?

 

marry

제곱한 것에 대해 기대치로 나누어주었다

이런 경우 "당황되는 정도"는 집들이가 10배 정도 클 것이다.

다시 첫 번째 예시로 돌아간다.

 


gongsik2

이전 예시를 보아 공식을 적용한 이것이 Chi-square 이다.

이 값이 0 에 가까워지면 기무가설을 지지하고, 0보다 아주 많이 크다면 대립가설을 지지한다.

 

만약 Chi-square 가 0.3 이 나온다고 한다면 귀무가설을 따를까, 대립가설을 따를까...... 역시 모른다.

χ2(Chi-square)의 분포를 알아보자.

 


chisquare

χ2(Chi-square)의 분포는 자유도를 따른다. 자유도는 이 경우 (행의 개수 - 1) x (열의 개수 - 1) 이다.

지금까지의 정규분포와는 다르게 비대칭의 구조를 띈다.  자유도가 클 수록 정규분포와 비슷한 형상을 지닌다.

행의 개수가 2이고 열의 개수가 1이니 χ2(1) 이 된다.

 

 


# 파이썬

import pandas as pd
import scipy.stats as stats

 

귀무가설 : cut(품질)과 color(색상) 간에는 관련성이 없다.
대립가설 : cut(품질)과 color(색상) 간에는 관련성이 있다.

 

result = pd.crosstab(diamonds.cut, diamonds.color)
result

resultimage

pandas.crosstab() 을 통해 두 질적 자료의 빈도표를 나타내었다.

 

 

stats.chi2_contingency(observed = result)
----------------------------------------------
(310.31790052115434,
 1.394512091985105e-51,
 24,
 array([[ 202.22005933,  292.42065258,  284.80941787,  337.04338154,
          247.85761958,  161.83574342,   83.8131257 ],
        [ 616.2059696 ,  891.06566555,  867.87267334, 1027.04026696,
          755.27296997,  493.1466815 ,  255.39577308],
        [2706.85993697, 3914.25930664, 3812.37749351, 4511.56640712,
         3317.7512792 , 2166.28702262, 1121.89855395],
        [1732.18437152, 2504.82808676, 2439.63147942, 2887.05917686,
         2123.1083426 , 1386.25884316,  717.92969967],
        [1517.52966259, 2194.42628847, 2137.30893585, 2529.29076752,
         1860.00978865, 1214.47170931,  628.96284761]]))

[결과 해석]

(1) 310.31790052115434 : Chi-Square 값 (소수점 셋째자리까지 표현)
(2) 1.394512091985105e-51 : p-value
(3) 24 : df(degree of freedom)
(4) array : 기대치(Expected Value)

 

유의확률이 0.000 이므로 유의수준 0.05 에서 cut 과 color 간에는 통계적으로 유의한 관련성이 있는 것으로 나타났다.

 

 

 


귀무가설 : cut(품질)과 clarity(투명도) 간에는 관련성이 없다.
대립가설 : cut(품질)과 clarity(투명도) 간에는 관련성이 있다.

result = pd.crosstab(diamonds.cut, diamonds.clarity)
result

result2

 

stats.chi2_contingency(observed = result)
-----------------------------------------------
(4391.398067200364,
 0.0,
 28,
 array([[  22.11735261,   53.42788283,  389.96384872,  274.4223211 ,
          243.88783834,  365.87652948,  109.09436411,  151.20986281],
        [  67.39610679,  162.80571005, 1188.29977753,  836.22106044,
          743.17623285, 1114.90077864,  332.43288839,  460.76744531],
        [ 296.05656285,  715.17037449, 5219.94466073, 3673.33878383,
         3264.61292176, 4897.51868743, 1460.30598813, 2024.05202076],
        [ 189.45367075,  457.65461624, 3340.36735261, 2350.65728587,
         2089.1038376 , 3134.03926585,  934.48470523, 1295.23926585],
        [ 165.97630701,  400.94141639, 2926.4243604 , 2059.36054876,
         1830.21916945, 2745.6647386 ,  818.68205413, 1134.73140527]]))

[결과 해석]

(1) 4391.398067200364 : Chi-Square 값 (소수점 셋째자리까지 표현) 
(2) 0.0 : p-value 
(3) 28 : df(degree of freedom) 
(4) array : 기대치(Expected Value)

 

[결론]
유의확률이 0.000 이므로 유의수준 0.05에서
cut 과 clarity 간에는 통계적으로 유의한 관련성이 있는 것으로 나타났다.


* 실습출처 :  2020 SBA아카데미 AI 데이터분석 개발자과정 : 기초 통계 (이부일 CEO님)

300x250