카이제곱 검정, 설문 데이터에서 차이가 진짜인지 보는 법

카이제곱 검정, 설문 데이터에서 차이가 진짜인지 보는 법

카이제곱 검정, 설문 데이터에서 차이가 진짜인지 보는 법

들어가며

설문 결과를 받았다. “20대 여성의 만족도가 남성보다 5%p 높다.” 디자인 보고서에 그렇게 적었다. 회의에서 한 줄 인용된다. “여성 만족도가 더 높다니까요.” 그 한 줄이 신규 디자인 방향을 정한다.

그런데 며칠 뒤 디자이너 동료가 묻는다. “근데 그 차이, 진짜인가요? 응답자가 30명씩이면 우연일 수도 있지 않아요?” 그 질문이 디자인 보고서에서 자주 나오는 질문이다. 그리고 잘못 답하기 쉬운 질문이기도 하다. 두 그룹의 차이를 실제 차이로 보고 디자인 방향을 잡으면, 그 차이가 표본 우연일 수 있다. 반대로 차이를 우연으로 보고 디자인을 보수적으로 바꾸면, 실제로 존재하는 차이를 놓친다.

어느 쪽이 진짜인지는 응답자 수와 표 구성만 보고는 답할 수 없다. 그 답을 주는 통계 도구가 있다. 카이제곱 검정이다. 이 글에서는 그 도구를 디자인 보고서 입장에서 다시 살펴본다. 교차분석이 무엇인지, 카이제곱 검정이 그 위에서 무엇을 답하는지, 언제 쓰고 언제 못 쓰고, 결과를 어떻게 읽는지, 어디서 함정이 나오는지. R에서 어떻게 쓰는지도 가볍게 본다.

교차분석과 카이제곱 검정이란

들어가며에서 본 장면을 그대로 이어가자. 설문 응답자 60명을 성별과 만족도 두 축으로 정리한다. 행은 성별(여성, 남성), 열은 만족도(만족, 보통, 불만족). 각 칸에는 그 칸에 해당하는 응답자 수를 적는다. 이 표가 교차표다. 두 범주형 변수의 관계를 한눈에 보여주는 가장 단순한 장치다.

만족보통불만족합계
여성1210830
남성9111030
합계21211860

표를 보는 것만으로 이미 한 가지가 보인다. 여성 응답자 중에 만족이라고 답한 비율은 12/30 = 40%다. 남성 응답자 중에 만족이라고 답한 비율은 9/30 = 30%다. 10%p 차이. 들어가며의 5%p 차이보다 큰 격차가 여기서도 나온다. 그런데 표는 그 이상을 말해주지 않는다. 이 10%p 차이가 우연의 범위 안인지 밖인지는 알려주지 않는다.

그 답을 주는 도구가 카이제곱 검정(chi-square test of independence)이다. 한 줄 정의는 이렇다. 교차표 위에서, 두 변수가 서로 독립이라는 귀무가설 하에서 기대되는 분포와 실제 관측된 분포가 유의하게 다른지 검정하는 도구. 영문은 chi-square test. 이 글에서는 카이제곱으로만 적는다.

핵심 메커니즘은 단순하다. 두 변수가 독립이라면, 각 칸의 기대빈도는 행과 열 합계로 계산한다. 전체 응답자 60명 중 만족이라고 답한 비율은 21/60 = 35%다. 만약 성별과 만족도가 독립이라면, 여성 30명 중에서도 같은 35%가 만족이라고 답해야 한다. 기대빈도는 30 × 0.35 = 10.5. 실제 관측은 12. 차이는 1.5.

카이제곱 통계량은 이 차이를 모든 칸에 대해 합산한 값이다. 각 칸에서 (관측빈도 − 기대빈도)² / 기대빈도를 더한다. 그 합이 충분히 크면, 두 변수가 독립이라는 귀무가설을 기각한다. 반대로 합이 작으면, 두 변수의 차이는 우연의 범위 안에 있다고 본다. 카이제곱 통계량은 관측과 기대 사이의 거리다. 거리가 멀수록 두 변수가 독립이라고 보기 어렵다.

이 글에서 카이제곱을 별도 도구처럼 다루지만, 실제로는 교차표 위에서 한 발 더 나간 검정이다. 교차분석이 표를 그리는 행위라면, 카이제곱 검정은 그 표에서 보이는 차이가 우연인지 아닌지 답하는 행위다. 둘은 한 쌍이다.

언제 사용하고, 언제 못 하는가

카이제곱이 답하는 질문은 좁다. 두 변수가 모두 범주형이어야 하고, 응답이 서로 독립이어야 하고, 표의 기대빈도가 충분해야 한다. 이 중 하나라도 어기면 카이제곱은 답을 못 주거나, 답이 있어도 신뢰하기 어렵다.

첫째, 두 변수가 모두 범주형이어야 한다. 성별, 만족도, 디바이스, 전환처럼 응답이 몇 개의 카테고리로 떨어지는 값만 넣는다. 키, 체류시간, 리커트 점수처럼 연속적이거나 순서만 있는 값은 카이제곱에 넣지 않는다. 그런 데이터는 회귀, 상관, t-test, ANOVA 쪽으로 간다. 둘 중 하나라도 연속형이면 카이제곱의 자리가 아니다.

둘째, 기대빈도가 5 미만인 칸이 전체의 20%를 넘으면 카이제곱 근사가 흔들린다. 이때는 R의 chisq.test() 대신 fisher.test()를 쓴다. 2×2 표에서 한 칸이라도 기대빈도가 5 미만이면 피셔로 간다. 표가 더 커지면 피셔의 계산 비용도 커지지만, 정확한 답이 필요할 때는 그래도 피셔를 쓴다.

셋째, 응답이 서로 독립이어야 한다. 같은 응답자가 표 안에 두 번 들어가거나, 같은 사용자의 행동이 한 행에 묶여서 들어가는 경우 가정이 깨진다. 디자인 보고서의 설문 응답자 데이터는 응답자 한 명에 한 줄이라 이 조건이 자연스럽게 맞는다. 반면 AB 테스트 로그처럼 사용자 한 명이 여러 행동을 하는 데이터를 그대로 카이제곱에 넣으면 안 된다. 사용자 단위로 한 번 집계한 뒤에 넣어야 한다.

또 한 가지, 카이제곱은 한 번의 비교에 답한다. 같은 표에서 셀을 골라 따로 p-value를 적거나, 여러 표에 같은 응답자를 반복으로 넣으면 다중비교 문제가 생긴다. 보고서에서 가장 차이가 큰 칸 하나를 골라 유의성을 강조하는 패턴에서는, 우연으로 유의하게 나올 확률이 더 커진다.

내가 본 디자인 보고서의 설문 데이터는 대개 2×2 또는 2×3 교차표였다. 기대빈도가 자연스럽게 5 이상이 되고, 응답자 단위로 한 번씩 들어가고, 한 표 한 번의 비교다. 이 경우 카이제곱은 정확히 맞는 도구다. 이 조건을 하나만 어겨도 답이 흔들리므로, 표를 그리기 전에 이 조건에 들어맞는지부터 확인한다.

결과를 어떻게 읽는가

R에서 chisq.test()를 돌리면 결과가 한 줄로 나온다. 앞 섹션의 60명 표를 그대로 행렬로 만들어 넣어보자.

# 성별 × 만족도 교차표 (행: 여성/남성, 열: 만족/보통/불만족)
survey_data <- matrix(c(12, 10, 8,
                        9, 11, 10),
                      nrow = 2, byrow = TRUE,
                      dimnames = list(성별 = c("여성", "남성"),
                                      만족도 = c("만족", "보통", "불만족")))

chisq.test(survey_data)

이 한 줄을 돌리면 결과가 이렇게 나온다.

        Pearson's Chi-squared test

data:  survey_data
X-squared = 0.69841, df = 2, p-value = 0.7052

이 출력에서 세 가지를 읽는다. X-squared, df, p-value.

X-squared는 카이제곱 통계량이다. 앞 섹션에서 본 (관측빈도 − 기대빈도)² / 기대빈도를 모든 칸에 대해 합한 값이다. 값이 클수록 관측과 기대의 거리가 멀다. 0.698은 거리가 작다는 뜻이다.

df는 자유도(degrees of freedom)다. (행 수 − 1) × (열 수 − 1)로 계산한다. 2행 3열이면 (2−1) × (3−1) = 2. 자유도는 카이제곱 분포의 모양을 정한다. 통계량 값은 이 자유도 위에서 p-value로 환산된다.

p-value는 카이제곱 검정이 답으로 주는 핵심이다. 두 변수가 독립이라는 귀무가설이 사실일 때, 지금과 같은 표 또는 더 극단적인 표가 나올 확률이다. 0.7052는 70.52%. 이 정도면 흔한 결과다. 우연이라고 봐도 무방하다.

디자인 보고서에서는 보통 0.05를 기준으로 삼는다. p-value < 0.05면 “통계적으로 유의하다"고 적는다. 두 변수가 독립이 아니라고 본다. p-value ≥ 0.05면 “유의하지 않다"고 적는다. 독립이라고 본 건 아니지만, 표본에서 보인 차이가 우연의 범위 안이라는 뜻이다.

이 기준은 통계학의 약속이지 절대적인 진리가 아니다. 0.05 대신 0.01을 쓰는 분야도 있고, 0.1을 쓰는 탐색적 분석도 있다. 디자인 보고서에서는 0.05가 무난하다. 하지만 기준 하나만 강조하지 말고, 실제 p-value 값 자체를 함께 적는 게 낫다. p-value = 0.04와 0.0001은 둘 다 0.05 미만이지만, 근거의 강도가 다르다.

흔한 오해가 있다. p-value는 귀무가설이 참일 확률이 아니다. 앞의 정의는 귀무가설이 참일 때라는 조건을 전제한 확률이다. 잘못 읽으면 “남녀 만족도 차이가 우연일 확률이 70.52%“로 해석하기 쉽다. 그건 틀린 해석이다. p-value는 표가 주어졌을 때 귀무가설 하에서 그 정도 격차가 (또는 더 큰 격차가) 관측될 확률이지, 귀무가설 자체의 확률이 아니다.

또 하나, p-value는 실제 차이의 크기를 말해주지 않는다. 응답자가 십만 명쯤 되면 p-value = 0.001이 나와도, 두 그룹의 차이는 1%p에 불과하다. 표본이 충분히 크면 아주 작은 차이도 유의하게 나온다. 그래서 카이제곱 검정은 “차이가 있다/없다"만 답하고, “차이가 얼마나 큰가"는 답하지 않는다. 그 답을 주는 별도 지표가 있다. Cramér’s V다.

Cramér’s V는 0과 1 사이의 값이다. 0에 가까우면 두 변수의 관계가 약하고, 1에 가까우면 강하다. R에서는 assocstats(table) 한 줄로 Cramér’s V를 포함한 여러 연관성 지표를 같이 본다. Cramér’s V는 흔히 0.1이면 약한 관계, 0.3이면 중간, 0.5이면 강한 관계로 읽는다. 단, 이 기준은 자유도와 분야에 따라 달라진다.

assocstats()를 쓸 때 한 가지 주의점이 있다. 패키지 설치가 필요하다. install.packages("vcd")를 한 번 돌리고, 분석할 때마다 library(vcd)로 불러야 한다. 매번 설치할 필요는 없지만, 새 환경에서 첫 분석을 돌릴 때는 한 번씩 미리 깔아두는 편이 좋다.

지금까지의 결과를 정리하자. p-value = 0.7052, X-squared = 0.698, df = 2, Cramér’s V ≈ 0.108. 이 데이터를 디자인 보고서에 어떻게 적을까. “남녀 만족도 차이는 통계적으로 유의하지 않다 (χ²(2) = 0.698, p = 0.705). 표본에서 보인 차이가 우연의 범위 안이므로 디자인 방향 결정의 근거로 삼기 어렵다.” 이렇게 한 단락으로 적는다. χ²(df)와 p-value를 괄호 안에 같이 적는다. Cramér’s V도 같이 적으면 더 낫다. “효과 크기는 작다 (V = 0.1).” 한 줄이 더해지면 p-value와 함께 효과 크기까지 보고서에 담긴다.

보고서에서 자주 빠지는 것들

여기까지 카이제곱 검정의 정의, 사용 조건, 결과 읽는 법을 정리했다. 그래도 디자인 보고서를 다시 읽으면 흔히 빠지는 항목이 있다. 여기서는 그런 빠뜨림을 짚는다.

첫째, 표만 그리고 검정을 안 돌린 경우가 있다. 남성 만족도 30%, 여성 만족도 40%로 표를 채우고 끝낸다. 표는 그 차이가 진짜인지를 답하지 않는다. 앞에서 본 표에서 10%p 차이는 우연의 범위 안이었다. 표 다음에는 항상 카이제곱 (또는 피셔) 검정이 따라와야 한다.

둘째, p-value만 적고 효과 크기를 빠뜨리는 경우다. p < 0.05로 유의하다고만 적힌 보고서를 자주 본다. 앞에서 본 Cramér’s V가 빠지면, 그 차이가 실질적으로 얼마나 큰지 보고서 독자에게 전달되지 않는다. 유의성과 효과 크기는 한 단락에 같이 적어야 한다.

셋째, 셀을 골라서 따로 비교하는 패턴이다. 2행 3열 표에서 여성-만족 칸과 남성-만족 칸의 차이만 따로 적고 p-value를 강조하는 보고서를 가끔 만난다. 같은 표 안에서 여러 셀을 골라 비교하면 다중비교(multiple comparisons) 문제가 생긴다. 우연으로 유의하게 나올 확률이 그만큼 커진다. 표 전체를 한 번 검정하고, 셀별 차이는 표 안에 그대로 두는 편이 안전하다.

넷째, 표본 크기와 응답 구조를 안 적는 경우다. 같은 p-value가 나와도 응답자가 30명일 때와 300명일 때의 효과 크기는 다르다. 보고서에는 응답자 수, 표 구성(2×2 등), 데이터 출처(설문 응답자 단위인지 AB 테스트 로그인지)를 짧게 적어두는 편이 좋다.

이 네 가지가 디자인 보고서에서 가장 자주 빠지는 항목이다. 표가 그려졌으면 검정이 따라오고, 검정이 돌았으면 p-value와 효과 크기가 같이 나오고, 셀 비교는 표 전체를 기준으로 하고, 응답 구조가 짧게 적혀 있다. 이 순서만 지켜도 카이제곱 검정 결과를 보고서에 안전하게 옮길 수 있다.

들어가며에서 본 질문으로 돌아가자. “근데 그 차이, 진짜인가요?” 이 글의 답은 이렇다. 교차표를 그린다. 기대빈도 조건을 확인한다. 카이제곱 검정을 돌린다. X-squared, df, p-value를 읽는다. 0.05를 기준으로 유의성을 본다. 흔한 오해에 빠지지 않는다. Cramér’s V로 효과 크기를 본다. 한 단락으로 정리해 보고서에 적는다. 빠뜨림 네 가지를 점검한다.

이 순서가 디자인 보고서에서 카이제곱 검정을 쓰는 전부다. 통계 도구가 답을 주긴 하지만, 답을 읽고 옮기는 건 디자이너 몫이다. 30명 설문에서 “남녀 만족도 차이는 통계적으로 유의하지 않다"는 결론을 읽었다면, 그 다음은 디자인 방향 결정이다. 통계가 디자인 결정을 대신하지 않는다.

이 글, 어떠셨어요?

이 글에 오류가 있나요?

사실이 틀렸거나 오탈자, 깨진 링크를 발견하셨다면 알려주세요. 확인하고 고치겠습니다.