비즈니스 데이터로 배우는 카이제곱 검정 (Chi-square test)
카이제곱 검정(Chi-square test)은 범주형 데이터(categorical data)의 분석에 널리 쓰이는 통계 기법입니다. 이를 통해 두 범주형 변수 사이의 관계를 확인하거나, 하나의 범주형 분포가 예상과 얼마나 다른지 평가할 수 있습니다. 이번 포스트에서는 카이제곱 검정의 개념부터 비즈니스에 활용할 수 있는 사례, 그리고 Python을 활용한 실습 코드까지 중급 수준의 학습자를 대상으로 자세히 살펴보겠습니다.
1. 카이제곱 검정 개념
카이제곱 검정은 크게 두 가지 유형으로 나뉩니다. 독립성 검정(Chi-square test for independence)과 적합도 검정(Chi-square goodness-of-fit test)입니다. 두 검정 모두 카이제곱 분포를 활용하지만, 목적과 적용 상황이 다릅니다. 또한 검정 통계량 계산을 위해 기대 빈도(expected frequency)와 자유도(degrees of freedom) 개념을 이해해야 합니다.
독립성 검정 (Chi-square test for independence)
독립성 검정은 두 개의 범주형 변수 간에 연관성이 있는지를 검정합니다. 예를 들어, 고객 성별과 제품 선호도가 관련이 있는지, 지역에 따라 만족도 수준이 달라지는지 등을 알아볼 때 사용합니다. 귀무가설(H0)은 두 변수 사이에 관계가 없다(독립적이다)는 것이고, 대립가설(H1)은 관계가 있다(독립적이지 않다)는 것입니다
이 검정을 수행하려면 우선 두 변수로 교차표(분할표)를 만듭니다. 교차표(Contingency table)는 한 변수의 각 범주별로 다른 변수의 범주 빈도를 교차 분류한 표입니다. 예를 들어, 아래와 같은 교차표를 생각해봅시다:
- 행(Row): 매장 지역 (도심, 교외)
- 열(Column): 고객 만족도 (만족, 보통, 불만) | | 만족 고객 수 | 보통 고객 수 | 불만 고객 수 | 행 합계 | |---|---|---|---|---| | 도심 매장 | 90 | 30 | 20 | 140 | | 교외 매장 | 80 | 50 | 30 | 160 | | 열 합계 | 170 | 80 | 50 | 300 |
위 교차표에서 관측된 각 셀의 빈도가 관측 빈도(Observed frequency)입니다. 독립성 검정은 각 셀의 기대 빈도(Expected frequency)를 계산한 뒤, 관측 빈도와 얼마나 차이가 나는지 측정합니다. 기대 빈도는 귀무가설(두 변수가 독립일 때)에 따라 행 합계와 열 합계의 곱을 전체 표 합계로 나눈 값으로 계산합니다
예를 들어, 도심 매장의 “만족” 셀의 기대 빈도는 (도심 매장 행 합계 140 * 만족 열 합계 170) / 전체 합계 300으로 계산됩니다.
카이제곱 검정 통계량(Χ²)은 모든 셀에 대해 (관측값 - 기대값)² / 기대값을 합산하여 구합니다. 위 예시 교차표에서 계산된 Χ² 값이 충분히 크다면 (즉, 관측 빈도와 기대 빈도의 차이가 크다면) 두 변수는 독립이 아니라고 판단합니다. 반대로 Χ² 값이 작다면 (차이가 작다면) 두 변수는 독립적입니다.
독립성 검정의 자유도(df)는 (행 개수 - 1) * (열 개수 - 1)로 계산합니다. 예를 들어 위 교차표는 행 2개, 열 3개이므로 자유도 df = (2-1)*(3-1) = 2입니다. 자유도와 선택한 유의수준(예: α = 0.05)에 따라 카이제곱 분포의 임계값을 정하고, 계산된 Χ² 값과 비교하여 귀무가설 기각 여부를 결정합니다. 일반적으로 p-value(유의확률)이 α보다 작으면 귀무가설을 기각하고 두 변수 사이에 유의한 연관성이 있다고 해석합니다.
적합도 검정 (Chi-square goodness-of-fit test)
적합도 검정은 하나의 범주형 변수에 대해 관측된 분포가 기대되는 이론 분포에 잘 맞는지를 검정합니다. 쉽게 말해, 실제 빈도 분포가 예상 빈도 분포와 차이가 있는지를 평가합니다. 예를 들어, 고객들이 A, B, C 세 가지 제품을 선호하는 비율이 균등(1:1:1)하다고 예상했는데 실제 조사 결과는 그렇지 않을 때, 그 차이가 우연인지 의미 있는 차이인지 검정할 수 있습니다.
적합도 검정의 귀무가설(H0)은 관측 분포가 지정된 기대 분포와 같다는 것이고, 대립가설(H1)은 관측 분포가 기대 분포와 다르다는 것입니다 . 예를 들어 귀무가설을 “고객들은 세 제품을 똑같이 선호한다”로 두었다면, 기대 분포는 (33.3%, 33.3%, 33.3%)로 균등 분포가 됩니다.
카이제곱 적합도 검정의 통계량 계산도 독립성 검정과 유사하게 Χ² = Σ (관측값 - 기대값)² / 기대값 공식을 사용합니다. 자유도는 범주의 개수 - 1 입니다 . 예를 들어 제품이 3가지라면 자유도는 2입니다.
적합도 검정에서는 기대 확률 분포를 명시해야 합니다. 기대 분포는 균등일 수도 있고, 과거 데이터나 도메인 지식에 기반한 특정 분포일 수도 있습니다. 예를 들어 “작년 판매 비율과 올해 판매 비율이 동일하다”를 검정하는 경우, 작년 각 제품 판매 비율이 기대 확률이 될 것입니다. 기대 빈도는 기대 확률에 전체 관측치 개수를 곱하여 구합니다. 각 범주의 기대 빈도가 충분히 크지 않으면 (통상 기대빈도 ≥ 5 권장 ) 검정 결과의 신뢰도가 떨어질 수 있습니다.
기대 빈도와 자유도 계산 요약
- 기대 빈도 (Expected frequency): 귀무가설 하에서 각 셀이나 범주에 기대되는 빈도입니다. 독립성 검정에서는 행과 열의 비율을 고려하여 계산하고, 적합도 검정에서는 지정된 기대 확률 분포를 기반으로 계산합니다.
- 자유도 (Degrees of Freedom): 표나 범주의 독립적인 정보의 수를 나타냅니다. 독립성 검정에서는 df = (행-1)*(열-1), 적합도 검정에서는 df = (범주 수 - 1)로 구합니다. 자유도는 사용되는 카이제곱 분포의 모양을 결정하는 파라미터로, 범주 수가 늘어날수록 자유도가 증가합니다. 위 개념들을 토대로, 이제 비즈니스 맥락에서 카이제곱 검정을 어떻게 활용할 수 있는지 사례를 살펴보겠습니다.
2. 비즈니스 활용 사례
카이제곱 검정은 시장 조사, 고객 행동 분석 등 비즈니스 데이터 분석에서도 다양하게 활용됩니다. 다음은 실무에서 접할 수 있는 세 가지 예시입니다.
고객 만족도 설문 결과 분석
한 기업이 고객 만족도 설문조사를 실시했다고 가정해봅시다. 설문에는 **“서비스에 만족하셨습니까?”**라는 문항이 있고 응답은 만족, 보통, 불만 세 가지로 받았습니다. 이제 경영진은 지점별로 만족도에 차이가 있는지 알고 싶어합니다. 이 경우 각 지점(예: A지점, B지점)의 만족도 응답 분포를 교차표로 만들고 카이제곱 독립성 검정을 수행할 수 있습니다.
- 적용 시나리오: A지점과 B지점 고객들의 만족/보통/불만 응답 비율이 유사한지 또는 유의하게 다른지 검정합니다.
- 귀무가설: 지점과 만족도는 관련이 없다 (지점에 관계없이 만족도 분포는 동일하다).
- 대립가설: 지점과 만족도는 관련이 있다 (어느 지점에서는 만족 비율이 더 높거나 낮다 등 차이가 있다). 검정 결과 두 지점의 만족도 분포에 유의한 차이가 있다면, 특정 지점의 서비스 품질 문제나 지역적 특성을 의심해볼 수 있습니다. 예컨대 B지점에서 불만 응답 비율이 유난히 높다면 B지점의 서비스 개선이 시급하다는 인사이트를 얻을 수 있습니다. 반대로 유의한 차이가 없다면, 지점별로 일관된 서비스 수준이 유지되고 있다고 볼 수 있겠죠.
제품 선호도 비교
신제품을 출시한 회사에서 A, B, C 세 가지 제품 중 어떤 제품이 가장 인기 있는지 알아보고자 합니다. 만약 소비자 선호도가 세 제품에 똑같이 분산되어 있을 것이라고 예상했다면 (즉, 각 제품이 전체 선호도의 33.3%씩 차지할 것으로 예상), 실제 조사된 선호도 응답 수와 비교하여 적합도 검정을 할 수 있습니다.
- 적용 시나리오: 소비자 선호도 조사 결과(예: A 50명, B 30명, C 20명)를 가지고, 예상된 균등 분포(각 33.3명에 해당하는 비율)와 차이가 유의한지 검정합니다.
- 귀무가설: 소비자들은 세 제품을 동일하게 선호한다 (관측된 선호도 비율 = 33.3%, 33.3%, 33.3%).
- 대립가설: 특정 제품을 더 선호하거나 덜 선호한다 (관측 분포가 균등 분포와 다르다). 만약 검정 결과 유의미한 차이가 나오면, 가장 선호되는 제품이나 기피되는 제품이 있다는 의미입니다. 예를 들어 A 제품 선호도가 예상보다 높고 C 제품은 낮다면, 마케팅이나 생산 전략을 A 제품 위주로 조정하거나 C 제품의 개선이 필요할 수 있습니다. 반면 예상과 차이가 없다면, 제품별 선호도가 비슷하다는 뜻이므로 균형 잡힌 마케팅을 이어가면 될 것입니다. 이러한 적합도 검정은 시장 조사에서 자주 활용됩니다. 여러 브랜드에 대한 선호도, 여러 광고 캠페인에 대한 기억률 비교 등에서도 각 항목이 동일하게 선호되는지 검정해볼 수 있습니다.
매장 방문율 차이 분석
리테일 비즈니스에서 여러 지점을 운영하는 경우, 각 매장의 방문객 수 또는 방문율에 차이가 있는지를 분석하고 싶을 때가 있습니다. 가령, 주말 동안 세 개의 매장에 방문한 고객 수가 각각 120명, 80명, 100명이었다면, 이 수치들이 우연 범주 내의 변동인지 아니면 유의한 차이인지를 알고자 할 수 있습니다.
- 적용 시나리오 1: 세 매장의 방문객 수 (120, 80, 100)이 균등한지 검정. 기대값을 동일한 방문객 수로 설정 (전체 300명이 균등히 분배되면 각 100명씩). -> 카이제곱 적합도 검정 사용.
- 적용 시나리오 2: 또는 요일별 방문율 차이를 볼 수도 있습니다. 예를 들어 월~일 방문객 분포가 일정한지, 특정 요일에 편중되는지 검정할 때도 적합도 검정을 활용합니다 (기대분포를 균등 1/7씩으로 두거나, 또는 과거 평균 분포로 둘 수 있음). 또 다른 접근으로, 독립성 검정을 할 수도 있습니다. 예를 들어 프로모션 시행 여부에 따라 방문율이 달라지는지를 2x2 교차표(프로모션 실시/미실시 vs 방문객 많음/적음)로 검정할 수 있습니다. 귀무가설은 프로모션과 방문객 수준이 독립적이라는 것이고, 대립가설은 연관이 있다는 것입니다. 매장 방문율에 대한 이러한 분석을 통해 특정 매장이 유독 방문자가 적다면 그 원인을 조사하고 개선할 수 있고, 요일별 편차가 크다면 피크 타임에 맞춘 인력 배치나 프로모션 일정 조정 등의 조치를 할 수 있습니다. 以上のように, 카이제곱 검정은 고객 행태와 선호를 파악하고 비즈니스 의사결정에 필요한 통찰을 제공하는 데 유용합니다. 다음으로, 실제 데이터를 가지고 파이썬으로 카이제곱 검정을 수행하는 방법을 실습해보겠습니다.
3. Python 실습 코드
이번 실습에서는 Python을 활용하여 카이제곱 검정을 직접 수행해보겠습니다. Kaggle 등에서 제공하는 공개 데이터셋을 활용하면 더욱 현실적인 분석을 할 수 있는데, 여기서는 이해를 돕기 위해 간략화된 예제를 사용하겠습니다. 실제 데이터로 적용하는 방법도 함께 설명할 예정이니, 원리를 익힌 후 Kaggle의 데이터셋으로 확장해보세요.
분석에 필요한 주요 패키지는 pandas, scipy.stats, 그리고 시각화를 위한 matplotlib 또는 seaborn입니다. pandas는 데이터를 불러오고 표 형태로 다루는 데 사용되고, scipy.stats 모듈의 카이제곱 검정 함수를 사용하여 통계량과 p-value를 구할 수 있습니다.
아래에서는 두 가지 예제를 다룹니다:
- 예제 1: 고객 만족도 설문 데이터를 가정하여 독립성 검정 수행 (두 범주형 변수: 지점 vs 만족도).
- 예제 2: 제품 선호도 데이터를 가정하여 적합도 검정 수행 (한 범주형 변수: 제품 선호 분포 vs 기대 분포). 먼저 파이썬 환경에서 필요한 라이브러리를 임포트합니다:
import pandas as pd
import numpy as np
from scipy.stats import chi2_contingency, chisquare
import matplotlib.pyplot as plt
import seaborn as sns예제 1: 고객 만족도 교차표를 이용한 독립성 검정
앞서 고객 만족도 설문 결과 분석 사례에서 가정한 교차표를 사용해보겠습니다. 두 지점(A, B)의 만족도 조사 결과를 표로 만들어 카이제곱 독립성 검정을 실시합니다.

우선, 데이터프레임으로 교차표 데이터를 구성해보겠습니다. (실제라면 Kaggle에서 설문조사 CSV를 불러와 pd.crosstab으로 교차표를 만들 수 있지만, 여기서는 직접 값을 넣겠습니다.)
# 예제 교차표 데이터: A지점 vs B지점의 만족도 응답 분포
observed = pd.DataFrame({
"만족": [45, 20], # A지점 45명 만족, B지점 20명 만족 (예시 수치)
"보통": [40, 60], # A지점 40명 보통, B지점 60명 보통
"불만": [15, 20] # A지점 15명 불만, B지점 20명 불만
}, index=["A지점", "B지점"])
print(observed)
위 코드에서는 A지점과 B지점의 만족도 수준별 응답자 수를 지정하여 observed라는 데이터프레임을 만들었습니다. 출력해보면 다음과 같은 교차표가 생성됩니다:
만족 보통 불만
A지점 45 40 15
B지점 20 60 20
이제 scipy.stats.chi2_contingency 함수를 이용해 카이제곱 검정을 수행해보겠습니다. 이 함수는 교차표 (피벗테이블 형태의 2차원 배열)을 입력으로 받아, 검정 통계량 Χ², p-value, 자유도, 그리고 기대빈도 표를 반환합니다.
chi2, p, dof, expected = chi2_contingency(observed)
print(f"Chi-square statistic: {chi2:.4f}")
print(f"p-value: {p:.4f}")
print(f"Degrees of freedom: {dof}")
print("Expected frequencies:\n", np.round(expected, 2))
chi2: 계산된 카이제곱 통계량p: p-value (유의확률)dof: 자유도expected: 기대빈도 표 (관측 표와 동일한 모양의 2차원 배열) 예제의 출력 결과는 다음과 같을 것입니다 (임의의 수치로 가정한 데이터이므로 결과도 예시입니다):
Chi-square statistic: 14.3297
p-value: 0.0008
Degrees of freedom: 2
Expected frequencies:
[[30.5 fifty. 19.5]
[34.5 49.nineteen 15.5]] (예시 출력)
(위 기대빈도 표는 각 셀의 기대값을 소수점 두 자리로 반올림해 표시한 것입니다.)
이 결과를 해석해보면, Χ² ≈ 14.33이고 자유도 2일 때 p-value ≈ 0.0008로 유의수준 0.05보다 매우 작습니다. 따라서 귀무가설을 기각하며, 이는 A지점과 B지점의 만족도 분포에 유의미한 차이가 있다는 뜻입니다. 다시 말해, 지점에 따라 고객 만족도 결과가 독립적이지 않고 서로 관련이 있다고 볼 수 있습니다.
참고로 chi2_contingency가 계산한 기대빈도(expected) 표도 함께 출력했습니다. 예를 들어 A지점 “만족” 셀의 기대빈도는 약 30.5로 계산되었는데, 실제 관측값 45와 차이가 있음을 알 수 있습니다. 이러한 차이들이 통계적으로 유의한지를 보는 것이 독립성 검정입니다.
분석 결과를 시각화하면 이해하기 쉽습니다. 예를 들어 지점별 만족도 응답 분포를 막대그래프로 나타내 보면 다음과 같습니다 (코드 상으로 구현):
# 교차표를 이용한 그룹 막대그래프 시각화
observed.plot(kind="bar", figsize=(6,4))
plt.title("지점별 만족도 응답 분포")
plt.ylabel("응답자 수")
plt.show()
위 코드로 생성되는 그래프에서는 A지점과 B지점 막대가 나란히 비교됩니다. 각 만족도 수준마다 두 지점의 응답 수 차이를 한 눈에 볼 수 있어, B지점에서는 “만족” 응답이 훨씬 적고 “보통” 응답이 많다는 사실을 시각적으로 확인할 수 있습니다.
예제 2: 제품 선호도 분포에 대한 적합도 검정
이번에는 제품 선호도 비교 사례를 코드로 실습해보겠습니다. 가상의 예로, 설문 조사에서 고객들에게 세 가지 제품(A, B, C) 중 가장 선호하는 것을 하나 고르게 한 결과 다음과 같다고 합시다:
- A 제품 선호 고객: 50명
- B 제품 선호 고객: 30명
- C 제품 선호 고객: 20명
총 응답자는 100명입니다. 회사는 원래 세 제품 모두 비슷하게 선호될 것(각 약 33명씩)으로 기대했는데, 실제 결과가 약간 차이를 보였습니다. 이 차이가 통계적으로 유의한지 검정해보겠습니다.
적합도 검정은 하나의 범주형 변수에 대한 분포 검정이므로,
scipy.stats.chisquare함수를 사용합니다.chisquare(f_obs, f_exp)형태로, 관측 빈도 배열과 기대 빈도 배열(또는 기대 확률에 기반한 빈도)을 입력합니다. 기대빈도를 명시하지 않으면 자동으로 균등 분포로 간주합니다. 여기서는 우리가 기대하는 분포가 균등이므로 명시적으로 적어주지 않아도 되지만, 이해를 돕기 위해 기대빈도를 계산하여 넣어보겠습니다.
# 관측 빈도 배열
observed_counts = np.array([50, 30, 20])
# 기대 빈도 배열 (균등 분포: 총 100명 * 각 1/3)
total = observed_counts.sum()
expected_counts = np.array([total/3, total/3, total/3])
chi2_gof, p_gof = chisquare(f_obs=observed_counts, f_exp=expected_counts)
print(f"Chi-square statistic (Goodness-of-fit): {chi2_gof:.4f}")
print(f"p-value: {p_gof:.4f}")
위에서 observed_counts는 [50, 30, 20], expected_counts는 [33.33, 33.33, 33.33]으로 계산됩니다. chisquare 함수는 자유도를 자동으로 (범주-1)로 계산하여 p-value를 구해줍니다. 예상 출력 결과는 다음과 같습니다:
Chi-square statistic (Goodness-of-fit): 14.0000
p-value: 0.0009
Χ² ≈ 14.0, p ≈ 0.0009 정도로 나왔는데, 유의수준 0.05보다 작으므로 귀무가설(균등한 분포)을 기각하게 됩니다. 즉, 세 제품 선호도가 균등하지 않다는 결론을 얻습니다. 이러한 결과는 앞서 수치만 보고도 짐작할 수 있었겠지만, 통계적으로도 유의한 차이임을 확인한 것입니다. 어느 제품이 기대보다 많이 선호되고 덜 선호됐는지도 파악해야겠죠. 관측치와 기대치를 비교하면, A 제품은 기대 33명보다 훨씬 많은 50명이 선호(기대 대비 +17), C 제품은 기대 33명보다 적은 20명이 선호(기대 대비 -13)되었습니다. 따라서 A 제품이 특히 인기가 높고, C 제품은 상대적으로 덜 인기 있다는 것을 알 수 있습니다. 이 결과도 그래프로 시각화해보겠습니다. 관측 빈도와 기대 빈도를 함께 막대그래프로 표시하면 차이를 쉽게 전달할 수 있습니다:
categories = ["A 제품", "B 제품", "C 제품"]
# 막대의 x좌표 설정
x = np.arange(len(categories))
width = 0.35
plt.bar(x - width/2, observed_counts, width=width, label='관측 빈도')
plt.bar(x + width/2, expected_counts, width=width, label='기대 빈도(균등 가정)')
plt.xticks(x, categories)
plt.ylabel("응답자 수")
plt.title("제품 선호도 관측치 vs 기대치")
plt.legend()
plt.show()
위 코드로 생성되는 그래프에서는 각 제품마다 두 개의 막대가 나타납니다. 파란 막대는 실제 설문 응답 수, 주황 막대는 기대했던 수치(균등 분포 가정)입니다. A 제품의 파란 막대가 기대치보다 훨씬 높고, C 제품은 낮은 모습을 한눈에 볼 수 있습니다. B 제품은 실제 30명 vs 기대 33명으로 비교적 근접하네요.
이처럼 Python을 활용하여 교차표 생성, 카이제곱 통계량 계산, 그래프 시각화를 해봄으로써 데이터에 담긴 의미를 쉽게 해석할 수 있습니다. 앞서 사용한 예시는 간단한 가상이지만, 실제 현업 데이터에도 동일한 방법을 적용하면 됩니다. 예를 들어 Kaggle의 스타벅스 고객 설문 데이터를 불러와서 (가상 컬럼 예: StoreLocation vs SatisfactionLevel) 카이제곱 독립성 검정을 하거나, 항공사 만족도 데이터에서 만족/불만족 비율이 예측과 맞는지 적합도 검정을 해볼 수 있습니다. 중요한 것은 데이터를 적절히 전처리하여 범주형 형태로 만들고, 위와 같은 접근을 취하는 것입니다.
4. 분석 결과 해석 및 시사점
카이제곱 검정의 숫자 결과만 보면 어렵게 느껴질 수 있지만, 핵심은 p-value를 통한 귀무가설 기각 여부 판단 그리고 관측값 vs 기대값 차이의 방향 해석입니다. 앞서 실습한 결과들을 토대로 해석하는 방법과 시사점을 정리해보겠습니다.
- 독립성 검정 결과 해석: 예제 1에서 p-value ≈ 0.0008로 매우 유의미한 차이를 보였죠. 이 경우 “A지점과 B지점의 만족도 분포는 차이가 있다”고 결론짓습니다. 시사점으로는 B지점의 만족 고객 비율이 낮은 문제에 주목할 수 있습니다. 경영진은 왜 B지점에서 만족도가 떨어졌는지 원인을 조사하고 개선책을 마련해야 할 것입니다. 만약 p-value가 0.5처럼 매우 컸다면, 두 지점의 차이는 통계적으로 유의하지 않으므로 지점별 만족도는 대체로 비슷하다고 볼 수 있고, 서비스 품질이 균일하게 유지되는 긍정적 신호로 해석할 수도 있습니다.
- 적합도 검정 결과 해석: 예제 2에서는 균등 기대분포와 실제 선호도 차이가 유의하게 나타났습니다(p ≈ 0.0009). 따라서 “소비자들은 세 제품을 똑같이 선호하지 않는다”고 볼 수 있습니다. 추가로 관측 빈도와 기대 빈도의 차이를 살펴 A 제품이 특히 인기 높음을 발견했죠. 이 결과의 시사점은 인기 제품에 대한 집중 투자입니다. 회사는 A 제품에 대한 공급을 늘리거나 해당 제품을 주력으로 마케팅할 수 있습니다. 반면 C 제품은 개선이 필요하거나, 수요가 적으므로 재고 관리에 주의해야 합니다. 만약 검정 결과 p-value가 0.2 정도로 기각되지 않았다면, “세 제품 선호도가 비슷하다”는 결론이므로 특정 제품이 치우치지 않은 균형 잡힌 선호라고 해석할 수 있고, 세 제품 모두 고르게 신경 쓰는 전략을 이어가면 될 것입니다.
- 결과 보고 및 시각화: 카이제곱 검정은 결과적으로 “유의하다/유의하지 않다”로 귀결되지만, 어떤 범주에서 차이가 큰지를 파악하는 것도 중요합니다. 단순히 p-value만 보고 끝내지 말고, 교차표의 셀별로 관측 vs 기대를 비교하거나, 그래프로 나타내어 구체적인 인사이트를 도출해야 합니다. 예를 들어 독립성 검정에서 유의한 차이가 났다면, 어느 카테고리 조합에서 기여도가 큰지 standardized residual 등을 볼 수도 있지만, 중급 분석 수준에서는 각 셀의 관측-기대 차이만 봐도 방향성을 알 수 있습니다. 이러한 추가 해석을 통해 실행 가능한 인사이트로 연결하는 것이 데이터 분석의 목표입니다.
- 의사결정에 활용: 통계적으로 유의한 차이가 나타났다면, 그에 맞게 행동을 취해야 합니다. 예시의 경우 B지점 만족도 저하 -> 지점장 교육 혹은 프로모션 실시, A제품 인기 -> 생산량 증대 등의 구체적인 조치를 생각할 수 있습니다. 반대로 유의한 차이가 없다면, 현재 전략을 유지하거나 다른 요인에 초점을 맞춰야 함을 의미합니다. 예컨대 제품 선호도가 비슷하다면, 제품 라인업을 유지하되 다른 경쟁사의 움직임이나 가격 정책 등이 더 중요한 요소일 수 있겠죠. 요약하면, 카이제곱 검정 결과는 단순한 숫자가 아니라, 데이터에 담긴 이야기를 꺼내는 도구입니다. 그 이야기를 올바르게 읽어내고 비즈니스 맥락에 맞게 해석해야 비로소 의미 있는 결론에 도달할 수 있습니다.
5. 주의사항 및 한계
카이제곱 검정은 강력하고 활용도 높은 방법이지만, 올바르게 사용하기 위해 염두에 둘 점들이 있습니다:
- 데이터 준비와 기대빈도 조건: 카이제곱 검정은 모든 기대 빈도가 5 이상일 때 이론적으로 유효하다고 알려져 있습니다. 만약 어떤 셀의 기대빈도가 너무 작다면 (특히 0에 가깝다면) 검정 결과를 신뢰하기 어렵습니다. 이런 경우 데이터 수집을 더 하거나, 범주를 재분류(예: 드문 범주들을 “기타”로 합치기)할 필요가 있습니다. 2x2 표에서 빈도가 작다면 피셔의 정확검정(Fisher’s Exact Test) 같은 대안을 고려합니다.
- 표본의 무작위성: 데이터가 랜덤하게 샘플링된 것이라는 전제가 필요합니다. 설문 조사라면 응답자가 모집단을 대표해야 하고, 실험이나 관찰 데이터라면 관측치들이 서로 독립적이어야 합니다. 만약 표본 수집 과정에 편향이 있다면 카이제곱 검정 결과도 편향될 수 있습니다.
- 인과 관계 해석의 유의: 독립성 검정에서 두 변수 간 관계를 발견해도, 이는 어디까지나 상관관계이지 인과관계를 입증하는 것은 아닙니다. 예를 들어 지점과 만족도에 연관성이 있다고 해서 지점 위치가 만족도를 “유발”한다고 단정할 수는 없습니다. 숨은 제3의 변수(예: 도심/교외에 따른 고객 기대치 차이 등)가 작용했을 가능성도 항상 염두에 둬야 합니다.
- 범주 구간 설정: 연속형 데이터를 범주화해서 카이제곱 검정을 쓸 때는 구간 나누는 방법에 따라 결과가 달라질 수 있습니다. 예를 들어 연령대를 카테고리로 나눠 만족도와 교차분석 할 때, 연령대를 10대/20대/30대…로 나누는 것과 10대-20대/30대-40대 식으로 나누는 것은 다르게 나타날 수 있습니다. 따라서 도메인 지식과 균형 잡힌 구간 설정이 중요합니다.
- 해석상의 한계: 카이제곱 검정 자체는 차이의 유무만 알려줄 뿐, 어느 범주에서 얼마나 차이가 나는지 정량적으로 알려주지 않습니다. 앞서 언급한 대로 잔차 분석이나 다른 지표(Cramér’s V 등)를 추가로 사용하면 관계의 강도를 알 수 있지만, 이는 심화된 주제입니다. 중급 단계에서는 카이제곱 검정 결과와 함께 세부 분포를 직접 살펴보는 것으로 충분합니다.
- 다중 비교 문제: 여러 범주형 변수 쌍에 대해 반복적으로 독립성 검정을 수행할 경우, 유의수준 보정을 고려해야 합니다. 예를 들어 20개의 변수 쌍을 각각 검정했다면, 우연히 5% 유의수준을 넘기는 결과가 몇 개 나올 수 있습니다. 이때는 보통 본페로니 보정 등으로 거짓 양성 오류를 통제합니다.
이상으로 비즈니스 데이터를 활용한 카이제곱 검정의 개념부터 사례, 실습 코드, 그리고 결과 해석과 주의사항까지 살펴보았습니다. 카이제곱 검정은 고객 행동과 선호를 파악하는 데 유용한 도구이므로, 실제 분석 업무에서 자주 마주치게 될 것입니다. 이번 기회에 개념과 활용법을 정리해두고, Kaggle의 다양한 데이터셋에 직접 적용해 보세요. 예를 들어 스타벅스 고객 설문 데이터나 항공 승객 만족도 데이터 등을 가져와 우리가 한 것처럼 교차표를 만들고 카이제곱 검정을 실행해보면 실력이 한층 향상될 것입니다. 데이터에 숨겨진 의미를 통계적으로 검증하며, 비즈니스에 인사이트를 제공하는 유능한 데이터 분석가로 거듭나시기를 응원합니다!
ⓒ RazielLabs All right reserved