카이제곱검정 기초개념
.
Data_Preprocessing_TIL(20210708)
[학습자료]
패스트캠퍼스 온라인 강의 “파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online.” 를 공부하고 정리한 내용입니다.
URL : https://fastcampus.co.kr/data_online_preprocess
[학습내용]
- 개요
목적 : 두 범주형 변수가 서로 독립적인지를 검정
영가설 : 두 변수가 서로 독립이다.
대립가설 : 두 변수가 서로 종속된다.
시각화 방법 : 교차 테이블
- 교차 테이블과 기대값
교차테이블은 두 변수가 취할 수 있는 값의 조합의 출현 빈도를 나타냄
아래 그림에서 검정색 숫자는 실제값이고, 빨간색 숫자는 기대값을 의미한다.
기대값이라는 것은 만족도와 성별이 서로 독립일때 남자와 여자를 합쳤을때 만족도별 평균인 것이다.
- 카이제곱 검정의 통계량
카이제곱 검정에 사용하는 카이제곱 통계량은 기대값과 실제값의 차이를 바탕으로 정의됨
아래 그림과 같이 기대값과 실제값의 차이가 크면 클수록 통계량이 커지고, 통계량이 커지면 커질수록 영가설을 기각하는 근거가 된다.
기대값과 실제값의 차이가 클수록 통계량이 커지며, 통계량이 커질수록 영가설이 기각될 가능성이 높아짐(즉, 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 |