HOME
home
About
home

카이제곱(\chi^2) 검정의 이해

카이제곱 검정은 범주형(명목형) 자료를 분석할 때 핵심적인 통계적 방법이므로, 실제 연구나 실무에서 매우 자주 활용됩니다.

카이제곱(χ2\chi^2) 검정의 이해

1. 개요

1.1 기본 개념

*카이제곱 검정(Chi-square test)**은 범주형 자료 간의 관계나 분포 적합도를 검정하는 데 사용되는 통계 기법입니다.
주로 독립성 검정(두 범주형 변수 사이에 연관성이 있는지), 적합도 검정(하나의 범주형 변수 분포가 특정 이론이나 기대 분포와 일치하는지), 동질성 검정(서로 다른 모집단들의 범주형 분포가 동일한지) 등에 활용됩니다.

1.2 범주형 자료 예시

성별(남/여), 지역(서울/부산/대전/…), 제품 구분(A/B/C/…), 구매 여부(구매/미구매), 질병 유무(있음/없음) 등과 같이 명목척도(혹은 순서척도가 아닌 범주)로 구분되는 변수를 말합니다.

2. 카이제곱 검정의 주요 유형

2.1 적합도(goodness-of-fit) 검정

하나의 범주형 변수가 어떤 특정한 기대 분포(이론적 분포)에 적합한지 확인.
예: 유전자 분리에 관한 멘델의 법칙 비율(3:1 등)에 실제 데이터가 적합한가?
귀무가설(H0H_0): 관측된 분포 = 기대 분포(차이 없음)

2.2 독립성(independence) 검정

두 개의 범주형 변수가 서로 독립인지, 아니면 연관성이(독립이 아님) 있는지 확인.
예: “성별”과 “제품 선호도(A/B/C)”가 독립적인가?
귀무가설(H0H_0): 두 범주형 변수는 서로 독립

2.3 동질성(homogeneity) 검정

*여러 모집단(집단)**이 동일한 분포를 보이는지 검정.
예: 지역(서울/부산/대구/...)별로 제품 선호도(A/B/C)가 동일한 분포인지 확인.
독립성 검정과 통계적으로는 유사한 방식으로 진행되지만, 해석상 "서로 다른 모집단들이 동일한 분포를 보이는지"를 묻는 점이 다릅니다.
귀무가설(H0H_0): 여러 집단 간 범주형 분포는 모두 동일
실제로는 독립성 검정과 동질성 검정이 동일한 수리적 접근(χ2\chi^2 계산 방식)을 공유하지만, 연구 설계 또는 표본 추출 방식 등 맥락에 따라 ‘독립성’ vs ‘동질성’ 개념으로 분류합니다.

3. 수학적 기초

3.1 관측도수 vs 기대도수

카이제곱 검정에서는 **분할표(contingency table)**를 구성해, 셀(cell)별로 “관측된 도수(observed frequency)”와 “기대 도수(expected frequency)”를 비교합니다.
기대도수란, 귀무가설이 참이라고 가정했을 때 이론적으로 해당 셀에 기대되는 관측값입니다.

3.2 검정 통계량(χ2\chi^2)

카이제곱 검정 통계량은 다음처럼 계산됩니다.
χ2=(OE)2E\chi^2 = \sum \frac{(O - E)^2}{E}
O: 관측도수(Observed frequency)
E: 기대도수(Expected frequency)
각 셀마다 을 구해 더합니다.
(OE)2/E(O - E)^2 / E

3.3 자유도(df)

2×2 표의 경우 자유도 = (행의 개수-1) × (열의 개수-1).
일반적으로 분할표에서 자유도 = r×cr \times c
(r1)×(c1)(r-1)\times(c-1)

3.4 χ2 \chi^2 분포

계산된 통계량은 χ2\chi^2 카이제곱 분포( 분포)를 따르며, 자유도를 기준으로 해당 분포에서 p-값을 구합니다.
p-값 < 유의수준(보통 0.05) → 귀무가설 기각 → (독립성 검정 예시) “두 변수는 독립이 아니다(연관 있음).”

4. 카이제곱 검정 절차

1.
데이터 수집 & 분할표 작성
두 범주형 변수가 있다면, 교차표(crosstab)를 만든다(예: 행=성별, 열=제품 선호).
2.
기대도수 계산
독립성 검정의 경우, 각 셀의 기대도수 = .
(해당행의합)×(해당열의합)전체표본수\dfrac{(해당 행의 합) \times (해당 열의 합)}{전체 표본 수}
적합도 검정의 경우, 이론적으로 주어진 비율(또는 분포)에 전체 표본 수를 곱해 기대치 도출.
3.
χ2\chi^2 통계량 계산
∑(O−E)2E\sum \frac{(O - E)^2}{E}
각 셀의 를 모두 합산
(관측−기대)2/기대(관측-기대)^2 / 기대
4.
자유도, p-값 확인
자유도()를 사용해 분포표나 소프트웨어에서 p-값 구함
dfdf
χ2\chi^2
5.
결과 해석
p-값이 작으면 귀무가설(독립/동일/적합)을 기각 → 통계적으로 유의한 차이/연관성/부적합이 존재

5. 검정 가정 & 주의사항

1.
표본의 독립성
측정된 샘플들이 서로 독립적이어야 함(한 사람이 중복으로 여러 행에 걸쳐 포함되지 않도록).
2.
기대도수가 5 이상
각 셀의 기대도수가 5 미만인 셀이 여러 개 있으면, 분포 근사가 불안정해짐.
χ2\chi^2
이를 해결하기 위해, 일부 셀을 합치거나, 더 정확한 검정(Fisher의 정확검정 등)을 고려할 수 있음.
3.
표본 크기
극단적으로 적은 표본은 분할표 구성 자체가 무의미해질 수 있음.
4.
연속성 보정(continuity correction)
2×2 표에서 정확도를 높이기 위해 Yates의 연속성 보정(Yates’ correction)을 적용하기도 함.

6. 해석과 보고

6.1 독립성 검정 예시

귀무가설(H0H_0): “성별”과 “제품 선호”는 독립적이다.
결과: p-값 < 0.05 → 귀무가설 기각 → “성별에 따라 제품 선호가 유의미하게 달라진다(독립 아님).”

6.2 적합도 검정 예시

귀무가설(H0H_0): 실제 관측된 자료의 분포와 이론적(기댓값) 분포가 동일.
결과: p-값 < 0.05 → 기대 분포와 다른 결과가 나타났음을 의미.

6.3 동질성 검정 예시

귀무가설(H0H_0): 지역 A, B, C 간의 선호도 분포가 모두 동일.
결과: p-값 < 0.05 → 지역 간 선호 패턴이 다르다고 결론.
보고 시에는 교차표, χ2\chi^2 통계량, 자유도, p-값 등을 명시하고, 어떤 범주가 특히 많이/적게 차이를 보이는지 세부 분할표로 해석해주면 좋습니다.

7. 카이제곱 검정의 사후분석

카이제곱 검정이 “유의미한 차이(또는 연관성) 존재”라고 결론지었을 때, 구체적으로 어떤 범주가 주로 차이를 일으키는가를 살펴볼 수 있습니다.
1.
잔차(Residual) 분석:
셀별로 값을 비교하여, 기대보다 많이 관측된 범주가 어디인지, 적은 범주가 어디인지 판단.
(O−E)(O - E)
표준화 잔차(standardized residual)가 |1.96|보다 크면 통계적으로 유의하게 기대값과 다름을 의미(유의수준 0.05 기준).
2.
쌍별 비교:
동질성 검정 상황에서 “어떤 집단끼리 차이가 많이 나는지” 추가 비교가 가능하지만, 범주형 데이터의 쌍별 비교는 다중비교 문제로 인해 보정이 필요합니다.

8. 장단점

8.1 장점

1.
분석이 간단하고 직관적: O, E 도수만으로 계산 가능.
2.
범주형 자료 전용: 범주형 변수 사이 관계를 논리적으로 파악.
3.
이해하기 쉬운 결과: p-값을 통해 귀무가설 기각 여부 판단이 명확.

8.2 단점

1.
기대도수 5 이상 조건: 셀이 너무 많이 분할되거나 표본 크기가 작으면 사용 어려울 수 있음.
2.
원인-결과 분석 제한: 카이제곱 검정은 인과관계를 보장하지 않음(연관성만 파악).
3.
집단의 세부적 차이 파악 어려움: 유의미하다면, 추가 분석(잔차 분석 등)을 통해 구체적 차이를 확인해야 함.

9. 실무 적용 시 고려사항

1.
데이터 구조 파악
각 범주(행, 열)별 관측 빈도가 충분한지, 일부 셀에 데이터가 몰려 있지 않은지 확인.
2.
기대도수 5 미만 셀
셀이 여러 개면, 검정 결과 왜곡. 셀 병합 혹은 다른 검정(Fisher 정확검정 등) 활용 고려.
3.
결과 해석
p-값만 보지 말고, 잔차분석을 통한 세부 해석 또는 **효과크기(Cramer’s V, Phi 계수)**도 추가로 제시하면 좋다.
4.
표본추출 방식
동질성 검정 vs 독립성 검정 구분 시, 사전에 표본 추출 방식 및 연구 설계를 명확히 정의해야 한다(예: 사전에 할당된 집단 vs 무작위 표본 등).

마무리

*카이제곱 검정(Chi-square test)**은 범주형 변수 간의 연관성과 분포 적합성을 확인하는 핵심 통계 기법입니다.
독립성 검정: 두 범주형 변수가 독립인지, 연관성이 있는지 확인.
적합도 검정: 관측된 범주형 자료가 예상(이론) 분포와 일치하는지 확인.
동질성 검정: 여러 집단이 동일한 범주 분포를 갖는지 여부 확인.
결과가 유의미하다고 나왔다면, 잔차 분석을 통해 어느 범주에서 차이가 두드러지는지 파악해야 합니다. 또한 카이제곱 검정은 연관성만 보여줄 뿐 인과관계를 직접적으로 증명할 수 없으므로, 연구 목적과 자료 특성에 맞는 **추가 분석(로지스틱 회귀, 공변량 통제 등)**을 고려할 수도 있습니다.
이처럼 카이제곱 검정은 사회과학·자연과학·의학·마케팅 등 다양한 분야에서 범주형 데이터를 다룰 때 최우선적으로 떠올리는 기법이므로, 위 가정과 절차를 잘 숙지해두면 실제 데이터 분석에서 강력한 도구가 됩니다.

예시 시나리오

2개의 집단(행)과 3가지 범주(열)가 있을 때, 집단과 범주 간의 독립 여부를 카이제곱 검정으로 파악
예: 두 지역(도시 A, 도시 B)과 제품 선호도(선호1, 선호2, 선호3) 분할표
import numpy as np import pandas as pd from scipy.stats import chi2_contingency from math import sqrt # ------------------------------------------------ # 1) 예시 데이터 (관측도수 표: 2행 x 3열) # ------------------------------------------------ # 예) 도시 A (행1), 도시 B (행2) # 카테고리 3개 (열1, 열2, 열3) obs = np.array([[10, 15, 25], # 도시 A의 분포 [20, 25, 5]]) # 도시 B의 분포 # 행/열 이름을 붙여보고 싶다면 DataFrame으로 관리: df_obs = pd.DataFrame(obs, index=['City_A','City_B'], columns=['Prefer_1','Prefer_2','Prefer_3']) print("== 관측도수(Observed Frequencies) ==") print(df_obs, "\n") # ------------------------------------------------ # 2) 카이제곱 독립성 검정 # ------------------------------------------------ chi2, p, dof, expected = chi2_contingency(obs) print("== 카이제곱 검정 결과 ==") print(f"Chi2 통계량: {chi2:.4f}") print(f"p-value: {p:.4f}") print(f"자유도(df): {dof}") df_expected = pd.DataFrame(expected, index=['City_A','City_B'], columns=['Prefer_1','Prefer_2','Prefer_3']) print("\n[기대도수(Expected Frequencies)]") print(df_expected) # 유의수준 설정 (예: 0.05) alpha = 0.05 if p < alpha: print("\n=> 귀무가설 기각: 통계적으로 유의한 연관성이 있다고 판단합니다.") else: print("\n=> 귀무가설 채택: 유의한 연관성을 찾지 못했습니다.") # ------------------------------------------------ # 3) 잔차(Residual) 분석 # ------------------------------------------------ # 표준화 잔차: (관측값 - 기대값) / sqrt(기대값) std_res = (obs - expected) / np.sqrt(expected) df_std_res = pd.DataFrame(std_res, index=['City_A','City_B'], columns=['Prefer_1','Prefer_2','Prefer_3']) print("\n== 표준화 잔차(standardized residuals) ==") print(df_std_res) # 특정 기준(예: ±1.96) 이상이면 통계적으로 유의하게 기대보다 많거나 적다는 해석 가능 sig_mask = np.abs(std_res) > 1.96 df_sig_mask = pd.DataFrame(sig_mask, index=['City_A','City_B'], columns=['Prefer_1','Prefer_2','Prefer_3']) print("\n[잔차 > ±1.96 여부]") print(df_sig_mask) # ------------------------------------------------ # 4) 효과크기: Cramer's V # ------------------------------------------------ # Cramer's V = sqrt( (chi2 / n) / (k-1) ) # - n: 전체 표본 크기 # - k: min(행-1, 열-1) n = obs.sum() phi2 = chi2 / n r, c = obs.shape k = min(r-1, c-1) # 독립성 검정에서는 (행-1, 열-1) 중 작은 값 cramers_v = sqrt(phi2 / k) print(f"\n== Cramer's V (효과크기) ==") print(f"Cramer's V: {cramers_v:.4f}")
Python
복사

코드 실행 예시 해석

1.
교차표(분할표) 생성
obs 배열이 실제 관측된 빈도수를 나타냅니다.
예시에서는 2행×3열 구조로, “도시 A/B”와 “선호1/선호2/선호3”의 빈도 수.
2.
카이제곱 검정
chi2_contingency(obs)를 통해 , p-값, 자유도, 그리고 기대도수(Expected)를 반환합니다.
χ2\chi^2
결과 해석:
p < 0.05 → “두 변수(도시와 선호)는 독립이 아니다(연관 있음).”
p ≥ 0.05 → “두 변수는 독립적이라고 볼 수 있다(연관 없음).”
3.
잔차(Residual) 분석
셀별로 (Observed - Expected)/sqrt(Expected)를 계산한 뒤, 그 절댓값이 **1.96(약 ±2)**보다 크면, 해당 셀에서 유의하게 기대보다 많거나 적다고 해석할 수 있습니다(95% 신뢰수준 기준).
이를 통해 특정 범주의 기여도(어디서 주로 차이가 났는지)를 살펴볼 수 있습니다.
4.
Cramer's V (효과크기)
카이제곱 검정이 유의하더라도, 실제로 얼마나 강한 연관성을 보이는지는 Cramer's V를 통해 확인합니다.
0에 가까울수록 연관성이 약하고, 1에 가까울수록 강한 연관성을 의미합니다(범위: 0~1).

주의사항

1.
기대도수 5 이상:
카이제곱 검정에서는 기대도수가 5 미만인 셀이 너무 많으면 결과 해석이 왜곡될 수 있습니다.
예시 데이터가 작으면, 실제 연구에서는 더 큰 표본을 확보하거나, 셀을 합치는 방식을 고려해야 합니다.
2.
표본 추출 방법:
동질성 검정 vs 독립성 검정은 표본 추출·할당 방식이 다릅니다. 코드 구현은 유사하지만, 연구 설계에 맞춰 해석해야 합니다.
3.
인과관계 주장 불가:
카이제곱 검정은 범주형 변수 간의 연관성을 파악하는 것이므로, 원인과 결과를 구분하여 단정짓기는 어렵습니다.
4.
정확 검정:
2×2 표의 경우 기대도수가 작은 셀이 있을 때, **Fisher의 정확검정(Fisher’s exact test)**을 고려할 수 있습니다.

정리

카이제곱(χ2\chi^2) 검정은 범주형 자료(명목형 변수)에서 두 변수 간 독립성을 테스트하거나, 하나의 범주형 변수 분포가 기대분포와 적합한지(적합도 검정), **여러 모집단 분포가 동일한지(동질성 검정)**를 판단할 때 사용합니다.
Python에서 scipy.stats.chi2_contingency 함수를 이용해 손쉽게 검정을 수행할 수 있으며, 잔차 분석을 통해 어떤 범주에서 차이가 의미 있게 나타나는지 구체적으로 파악할 수 있습니다.
결과 보고 시에는 교차표, 카이제곱 통계량(χ2\chi^2), p-값, 자유도 등 기본 지표와 함께, 필요에 따라 잔차 분석, Cramer's V 등의 효과크기 정보를 같이 제시해주면 더욱 충실한 해석이 가능합니다.