카이제곱검정 기초개념

2021-07-08

.

Data_Preprocessing_TIL(20210708)

[학습자료]

패스트캠퍼스 온라인 강의 “파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online.” 를 공부하고 정리한 내용입니다.

URL : https://fastcampus.co.kr/data_online_preprocess

[학습내용]

  • 개요

목적 : 두 범주형 변수가 서로 독립적인지를 검정

영가설 : 두 변수가 서로 독립이다.

대립가설 : 두 변수가 서로 종속된다.

시각화 방법 : 교차 테이블

  • 교차 테이블과 기대값

교차테이블은 두 변수가 취할 수 있는 값의 조합의 출현 빈도를 나타냄

아래 그림에서 검정색 숫자는 실제값이고, 빨간색 숫자는 기대값을 의미한다.

기대값이라는 것은 만족도와 성별이 서로 독립일때 남자와 여자를 합쳤을때 만족도별 평균인 것이다.

1

  • 카이제곱 검정의 통계량

카이제곱 검정에 사용하는 카이제곱 통계량은 기대값과 실제값의 차이를 바탕으로 정의됨

아래 그림과 같이 기대값과 실제값의 차이가 크면 클수록 통계량이 커지고, 통계량이 커지면 커질수록 영가설을 기각하는 근거가 된다.

2

기대값과 실제값의 차이가 클수록 통계량이 커지며, 통계량이 커질수록 영가설이 기각될 가능성이 높아짐(즉, pvalue가 감소함)

  • 파이썬을 이용한 카이제곱 검정

1) 교차 테이블 생성

코드

pandas.crosstab(S1,S2)

결과해석

Series S1과 S2로 구성된 교차 테이블을 생성

2) 카이제곱 검정

코드

scipy.stats.chi2_contingency(obs)
# obs : 실제값으로 위와 같은 교차테이블 형태가 들어감

결과해석

교차 테이블의 실제값에 대한 기대값 계산

보통 pandas.crosstable의 결과에 대한 values를 입력으로 투입

result = (chi2, pvalue, dof, expected)

** 변수설명

chi2 : 카이제곱 통계량

pvalue : p-value

dof : 자유도

expected : 기대값

  • 실습

성별 만족도에 대해서 만족도와 성별이 서로 독립적인지를 검증

# data 불러오기
import os
import pandas as pd
# pwd 시 경로 : /c/Users/user/Desktop/aa/2. 탐색적 데이터 분석/데이터
os.chdir(r"C:/Users/user/Desktop/aa/2. 탐색적 데이터 분석/데이터/")

df = pd.read_csv("성별에따른만족도.csv", engine = "python")
df
만족도 성별
0 불만족 남성
1 보통 여성
2 불만족 여성
3 보통 남성
4 만족 여성
... ... ...
195 보통 남성
196 보통 여성
197 보통 여성
198 보통 남성
199 보통 여성

200 rows × 2 columns

교차테이블 생성

cross_table = pd.crosstab(df['만족도'], df['성별'])
cross_table
성별 남성 여성
만족도
만족 50 40
보통 40 30
불만족 10 30
obs = cross_table.values
obs
array([[50, 40],
       [40, 30],
       [10, 30]], dtype=int64)

카이제곱 통계량 및 p-value 산출

from scipy.stats import *
statistics, pvalue, dof, expected = chi2_contingency(obs)
print("카이제곱 통계량 : ", statistics)
print("p-value : ", pvalue)
# pvalue가 0.0018로 영가설 기각. 즉, 두 변수 간 독립이 아님을 확인
카이제곱 통계량 :  12.53968253968254
p-value :  0.001892528960792166

기대값 출력

pd.DataFrame(expected, columns = cross_table.columns, index = cross_table.index)
성별 남성 여성
만족도
만족 45.0 45.0
보통 35.0 35.0
불만족 20.0 20.0