본문 바로가기
독립성(연관성), 동질성 검정의 차이와 그들의 정체 - χ² 카이스퀘어 검정

"서로 독립이라면, 계산 해 낼 수 있다" . 이 편에서는 뜬금 없더라도 이 말을 꼭 가슴에 품고 읽기 시작했으면 합니다. 

일단 검정을 시작했으니 어찌 되었든 웬만한 검정은 해보기로 하겠습니다. 이렇게 한번 하고 나면 분석을 공부하는 쪽도 웬만한 걱정거리를 덜게 되는 것 아닐까 합니다. 

일단, 이번에는 독립성, 동질성 검정이라는 것을 살펴볼 것인데, 이거 이거 이름부터 심상치 않습니다. 독립성검정은 무엇이고, 동질성검정은 무엇이란 말인가. 그런데 두 검정 모두 χ² 검정을 합니다. 잠시 이런 카오스의 시작에 대 묵념.

묵념이 끝났다면, 이 검정의 정의들에 대해서 명확하게 먼저 짚고 넘어가 줘야 그야말로 길을 잃고 헤매지 않는 밝은 길이 열릴 것이라 믿습니다. 

일단, 중요한 것은 독립성은 "변수"끼리의 독립성을 보는 것입니다. 조금 더 쉽게 이야기하면 독립이다 하고 가정한 후 진짜 독립인가를 확인하는 것인데요,  한 개의 표본 집단에서 변수들을 뽑아서 확인하는 검정입니다. 2개의 변수가 관련이 있는가를 보는 거죠. 그리고, 동질성은 서로 다른 표본 집단의 변수의 동질성을 보는 것이니까, 서로 다른 집단에서 같은 변수를 표집 해야 합니다.라고 했지만, 결국에는 χ²검정 한 가지를 이용한다는 점이 정말 이건 뭐지 하는 느낌입니다. 그래도 어슬렁어슬렁 읽어나가다 보면 결국은 별거 아니잖아 싶어지지 않을까요?

χ² 검정의 기본적 아이디어는 관측빈도와 예측할 수 있는 기대빈도의 차이를 비교하는 것입니다. 독립성 검정일 때에는 독립일 떄의 기대빈도와 관측빈도가 같다면 독립입니다. 한마디로 "독립이라면 빈도가 예측 가능하다." 이게 가장 중요한 포인트입니다. 조금 더 유식하게 정의해 보자면, χ² 검정의 p value의 해석은 범주형 변수 간에 관측빈도와 독립일 때의 기대빈도가 차이가 있는가? 차이가 있다면 독립이 아니다.라는 이야기입니다. 마찬가지로 동질성 검정도 "표집 집단 끼리의 예측한 기대 빈도와 관측 빈도의 분포가 같다면 동일한 성질을 갖다고 말할 수 있다"를 이용하는 것입니다. 

그러면 자세한 얘기를 시작하기 전에 Null Hypothesis와 Alternative Hypothesis를 얘기하고 시작하면 조금 편리할 것 같아서 먼저 다뤄 보면 말이죠.

독립성검정은, 기본적으로 변수끼리의 독립을 가정하고, 
H0 : 관심 Feature끼리 서로 관련이 없다(독립적이다. 예측한 기대빈도와 동일하다, 예측 기대 빈도는 $P_{ij} = P_i P_j $로 예측할 수 있다)
H1 : 관심 Feature끼리 서로 관련이 있다(독립적이지 않다, 예측한 기대빈도와 많이 다르다)

동질성검정은,
H0 : 두개의 그룹이 각 변수(Feature)에 대하여 서로 분포가 동일하다, 분포 가정이 가능하다. ($P_{i1}, P_{i2}, \cdots P_{in} = P_{j1}, P_{j2}, \cdots P_{jn} $)
H1 : 두개의 그룹이 각 변수(Feature)에 대하여 서로 분포가 동일하지 않다

더 자세하게 이야기 하자면, 교차표로 만들었을 때 독립성검정과 동질성검정은 무엇이 다른가 하면 독립성 검정은 교차표의 행과 열이 독립적인지(관계가 없는지)를 검정하는 것이고, 동질성 검정은 교차표의 행끼리 분포가 서로 같은지를 검정하는 것입니다. 이게 무슨 말장난이란 말인가요. 
 
그러니까 독립성 검정은 "하나의 모집단"에서 뽑은 표본에서 두 개의 요인 간에 차이가 있는지를 확인하는 것이고, 동질성 검정은 "다른 두 개의 모집단"에서 뽑은 표본의 분포가 비슷한지를 보는 것입니다. 아, 이제 좀 달라 보이네요. 흠.  독립성 검정의 경우, 그냥 느낌적으로는 제멋대로 비율이 달라야 뭔가 제멋대로 구는 느낌이라 서로 독립일 것 같지만, 독립의 성질을 이용해서 그 비율을 예측이 가능하다면, 그 예측 비율과 관측 비율의 결과가 비슷할까? 라는 답에 예쓰라고 할 수 있어야 독립입니다. 

독립성 검정에 대한 재미있는 예를 든다면, 남녀 간 여당 지지 비율에 대해서 서로 독립이라면 남녀와 상관없이 독립의 성질을 이용하여 예측한 비율과 똑같이 나와야 하고, 독립이 아니라면 예측한 비율과 다르게 나와야 합니다.  즉, 남자와 여자의 조건(범주,입장)에 따라 예측한 비율과 다르다면 그것은 결국 남녀라는 것이 여당 지지율에 영향을 미친다는 의미입니다.  

그리고 이제까지의 접근과 마찬가지로 당연하게도 비율이 예측 가능해서 비율을 정할 수 있는 경우를 귀무가설로 둬야, 분포를 정의할 수 있고, 각각 독립을 가정했을 때의 값들을 예측해서 채워 넣을 수 있습니다. 그래야  귀무가설을 검정을 통해 증명할 수 있겠죠.

그러니까, 두 개 변수 사이에 비율이 기댓값과 잘 맞는가? 를 보는 거라서 goodness of fit이라고도 부릅니다.  확률적으로 독립에 접근을 한다면 
$ P(i|j)=P(i), P(j|i)=P(j), P(i,j) = P(i)\cdot P(j)$ 를 의미하고, 이게 성립한다는 것은 $P(i) \cdot P(j)$를 이용해서 예측한 비율과 맞아떨어진다는 이야기 이니까요.  만약 두 변수가 전혀 연관이 없다면, 즉 독립이라면 확률의 곱 법칙에 의해 남자이면서 여당 지지성향을 보일 확률은 남자일 확률과 여당지지성향을 보일 확률을 곱으로 나타낼 수 있다는 것입니다. 

이해를 돕기 위해 또 다른 예를 들면, 독립성검정은 한 가지의 상황(TV 프로그램 시청 반응)을 분석할 때 성별이 반응과 독립인지 검정할 수 있습니다. 

이 문제를 완전히 다른 방식으로 표현하면 남자 여자에 따라 의견의 차이가 있는가?로 전혀 다르게 보이게 표현할 수도 있습니다. 성별과 반응의 관측 비율이 독립을 가정하여 구한 예측 비율과 차이가 없다면 독립이다.라고 이해하는 것이 맞습니다. 그래서 성별과 반응은 서로 독립이니까 서로 관련이 없고, 남자냐 여자냐는 꿀잼, 노잼, 노이해 반응에 영향을 미치지 않는다는 의미로 해석할 수 있습니다. 영향을 미치지 않으니까, 남자와 여자라는 조건은 반응에 차이를 만들지 않는다는 의미이고, 그러니까 성별에 대한(의한) 차이가 없다고 표현하는 것입니다. 말장난 같기도 하고.

정리하면 독립을 가정하고 예측한 비율과 차이가 없다 → 독립이다 → 영향을 미치지 않는다 → 변수의 값에 따라 차이가 나지 않는다.가 모두 같은 말 처럼 통용됩니다. 이런 같은 말 관계를 잘 이해해야 결론을 이해할 수 있습니다. 

동질성검정은 행끼리 차이가 있는지를 보는데, 진짜 다른 두 집단에 차이를 해석하는 것입니다. 그럼 예를 든다면, 두 가지 교재 A, B의 효과를 비교하기 위해서 150명의 학생을 대상으로 조사를 하는데, 임의로 추출된 80명에게는 교재 A를 적용하고, 나머지 70명에게는 교재 B를 적용한 후 다음 시험에서 각 학생의 성적에 따라 분류하면 다음과 같습니다. 

서로 다른 두 집단에서 각 교재 간의 차이가 있느냐 - 각 교재간의 성적의 차이가 있는가- 를 다룬다고 생각하면 동질성검정입니다. (각 교재에 따라 성적의 (분포의) 차이가 있는가?) 답은 교재에 따른 성적(분포)의 차이가 있다. 없다. 가 되겠습니다. 

이때는 P(교과서A, 성적오름) = P(교과서, B성적오름), P(교과서A, 성적그대로) = P(교과서B, 성적그대로), P(교과서 A, 성적떨어짐) = P(교과서B, 성적떨어짐) 을 Null Hypothesis로 한다고 보면 이해하기 쉽습니다. 교재에 따라 같은 분포를 갖는지를 보는 것이니까요. 뭐 이러니 저러니 해도 행을 비교대상으로 두고 그에 대한 데이터를 열로 두고 보면 일관성 있게 해석할 수 있고, 편리합니다. 

독립성과 동질성을 위해 교차표를 이용하는 손쉬운 방법을 정리하면 다음과 같습니다. 꽤나 유용하게 이용해 먹고 있습니다만.

그러면, 어째서 이런 데이터는 χ² 분포를 이용해서 검정하는가는 이미 "통계분석에 사용되는 검정 검정 3형제 (2)"편에서 보았지만 말이죠. 미워도 다시 한번 들여다보자면, χ² 분포가 z²(표준정규분포 제곱)의 합이고  자유도가 n인 카이제곱 분포를 따른다는 것을 다시 한번 생각해 보면 (O는 관측, E는 기대치입니다)

$\sum\limits_{i=1}^{n} \cfrac{\left(O_{i}-E_{i}\right)^{2}}{E_{i}} \sim \chi^{2}_{(n-1)}$ 이렇게 됩니다.   
일반화된 $\sum\limits_{i=1}^{n} \cfrac{\left(O_{i}-E_{i}\right)^{2}}{E_{i}} \sim \chi^{2}_{(n-1)}$ 는 대~충 이까짓 거 $\sum Z^2$의 형태라는 정도로 기억해 두면 좋겠습니다. 

엣헴. 

그러면, 한번 실제로 독립성 검정을 해볼까 합니다. 술을 마시고 안 마시는 사람에 따라 담배를 피우는 것이 서로 독립인지(차이가 있는지)를 보겠습니다. 

어떤 회사에서 담배를 피우는 사람과 술을 마시는 사람의 통계를 교차표 형태로 제공했는데, 독립인지 확인해 보겠습니다. 

자, 데이터를 보시죠. 보니까, 어떤가요? 제 느낌으로는 피우는 사람이 마시고, 안 피우는 사람이 마시는 그런 느낌인데, 그러니까 술을 마시는 사람에 따라 담배를 피우는 것은 연관이 있다.는 결론이 날 것 같은 느낌입니다. 진짜 그런가 χ²검정을 해보시죠. 

검정에 들어가기 전에 잠시 χ²검정의 자유도를 따져본다면, (행의 수 - 1)×(열의 수 -1)이 이 검정의 자유도입니다. 2×2 데이터에서  합계는 정해져 있다고 생각하면 각 행과 열에서 1개는 자유롭게 정할 수 있지만, 나머지는 1개를 정하는 순간 정해져 버리니까 그렇습니다. 이것도 이미 "n-1은 왜 자유도라고 불리는가요? 자유도의 정체와 직관적인 이해"편에서 자세히 보았으니 다행입니다. 

Null Hypothesis : 술과 담배는 서로 독립이다. 
Alternative Hypothesis : 술과 담배는 서로 독립이 아니다. 

일단, 기대 도수를 구해야 되는데, 기대도수를 구하는 방법은 매우 쉽습니다. 담배를 피우는 사람과 술을 마시는 사람의 기대 도수는 (담배 피우는 사람 × 술을 마시는 사람) / 전체라고 보면 됩니다. 간단하죠.이지만 실제로 왜 그런지 잘 살펴본다면 마시는 사람을 D, 피우는 사람을 S라고,  했을 때, 
$ P(D∩S) = P(D)P(S) $ 이니까요, = $\cfrac{D}{Total}\cdot \cfrac{S}{Total}$ 이것이 기대 비율이 되고요, 결국 기대 도수는 확률×전체개수이니까 $P(D∩S)\cdot Total$ 입니다. 결국, $\cfrac{D\cdot S}{Total}$ 값이  기대 도수가 됩니다. 

그러니까, 이렇게 하여 술과 담배가 독립인지를 보는 것인데요, 그러면 실제 데이터 옆에 괄호 안에 기대 도수를 구해보고 이것으로 χ²값을 구해 보면 좋겠군요. 괄호 안의 기대 도수로 채워진 교차표는 귀무가설인 독립이라면 이렇게 될 것이다라는 예측 표입니다. 

그러니까, χ² 카이제곱 통계량을 계산해보면, 

$\begin{align} \chi^2 = \,\, & \cfrac{(48-31.92)^2}{31.92} + \cfrac{(8-24.08)^2}{24.08} \\& +\cfrac{(9-25.08)^2}{25.08}+\cfrac{(35-18.92)^2}{18.92} = 42.8142 \end{align}$

아항, χ²값이 42.8142나 나왔네요. 5% 유의수준에서의 자유도 1에서의 χ² 값은 3.8415니까, 유의수준보다 훨씬 큰 검정통계량이 나왔습니다. 이러면, 술과 담배는 서로 독립이 아니다라는 결론에 이르겠네요. 그러니까, 음주는 흡연과 연관이 있다. 정도의 결론이 나오겠습니다. 원래 처음에 느낀 그 느낌 느낌적으로 예상한 것과 같네요. 결과가 놀랄 일이 없으니 조금 아쉽습니다.

그러면 이것도 소프트웨어의 도움을 받아서 해결해 볼까요. 

from scipy.stats import chi2_contingency
import pandas as pd

row1, row2 = [48, 8], [9, 35]
chi2, p, dof, expected = chi2_contingency([row1, row2])
msg = 'Statistic: {}\np value: {}\ndof: {}'
print(msg.format(chi2, p, dof))
print(expected)

 

이렇게 하면 결과를 볼 수 있는데, 

Statistic: 40.193043390717804
p value: 2.300660511300079e-10
dof: 1
[[31.92 24.08]
 [25.08 18.92]]

 

이렇게 결과가 나옵니다..어? Statistic이 우리가 손으로 구한 건 42.8142인데, 40.1930이 나왔네요? 어, 뭐가 문제인가요.라고 생각해 보면 scipy의 chi2_contingency는 df가 1인 경우에는 Yates’ correction for continuity를 적용한다고 합니다. Yates 수정식에 관련하여 조금 이야기한다면 χ²에 관련하여 교차표의 모든 cell에서 기대 도수≥5인 경우에 χ² 검정이 동작을 하는데, 기대 도수≤5인 경우 에도 사용할 수 있도록 해 주는 수정 식입니다. 그러니까 이 경우에는 충분히 기대 도수가 크므로, 일단 그것을 적용하지 않고 해 보면, (correcion=False)

row1, row2 = [48, 8], [9, 35]
chi2, p, dof, expected = chi2_contingency([row1, row2], correction=False)
msg = 'Statistic: {}\np value: {}\ndof: {}'
print(msg.format(chi2, p, dof))
print(expected)

Statistic: 42.81422371997646
p value: 6.019290099276929e-11
dof: 1
[[31.92 24.08]
 [25.08 18.92]] → 이것은 예측치

 

요렇게 42.814가 잘 나옵니다. 야홋! 결과 그대로 Null Hypothesis를 기각, 흡연자와 금연자 간에 음주 관계는 독립이지 않다고 결론 맺을 수 있습니다. 결국 흡연과 음주는 영향을 미치고 있고, 술 마심과 술 안마심에 따라 흡연 비흡연이 차이가 난다고 표현할 수 있겠습니다. 

이런 접근은 마케팅에서도 많이 이용되는데, 그것이 동질성 검정입니다. 동질성 검정을 A/B테스트에 이용하기도 합니다. 특히 A/B가 서로 다른 집단인 경우에 유용합니다. 예를 들어, 

 

이런 식의 데이터가 있다면, 
Null Hypothesis는 광고 A와 광고 B는 서로 분포가 같다. P(광고A, 전환) = P(광고B, 전환), P(광고A, 이탈) = P(광고B, 이탈) 
Alternative Hypothesis는 광고A와 광고B는 서로 분포가 다르다가 되겠습니다. 

오른 쪽 합계를 잘 보면 200으로 같은데, 동질성 검정의 경우 두 집단에서 표집하고, Feature의 분포를 비교하기 때문에 표집수를 같은 수로 하는 경우가 많습니다. 이때 예측할 수 있는 기대 빈도는 광고에 따른 집단과는 관계없이 전환 확률이 같고, 이탈 확률이 같으면 됩니다. 그러니까 간단하게 광고A에 의한 전환사용자와 광고B에 의한 전환사용자를 합한 후 2로 나누면 됩니다. 이탈 사용자도 마찬가지 입니다. 이렇게 계산하게 되면 각 기대 빈도는 각 Feature의 합/2가 됩니다. 

이런 식으로 기대 빈도를 구할 수가 있고, 검정 통계량은 

$ \chi^2 = \cfrac{(44-53)^2}{53} + \cfrac{(62-53)^2}{53} + \cfrac{(156-147)^2}{147} + \cfrac{(138-147)^2}{147} = 4.158644$ 으로 계산할 수 있습니다. 

표집수를 같게 하면, 독립이라는 가정하래 기대 빈도를 예측할 때 반드시 각 Feature 합을 집단의 수로 평균 낸 것이 기대 빈도가 됩니다. 이 경우에는 2로 나누었죠. 그러니까 집단 당 표집 수만 같으면 손쉽게 기대 빈도를 구할 수 있습니다. 

 

(그렇지만 표집수가 같지 않더라도 기존의 독립성 검정과 똑같은 방법으로 카이스퀘어 검정을 이용할 수 있습니다. 그러니까 chi2_contingency도 그대로 이용할 수 있습니다. 걱정 No No) 어쨌든 방금한 걸 파이썬으로 계산해 보면,

from scipy.stats import chi2_contingency

row1 = [44, 156]
row2 = [62, 138]

chi2, p, dof, expected = chi2_contingency([row1, row2], correction=False)
msg = 'Statistic: {}\np value: {}\ndof: {}'
print(msg.format(chi2, p, dof))
print(expected)

Statistic: 4.158644589911436
p value: 0.04142253879330136
dof: 1
[[ 53. 147.]
 [ 53. 147.]]

 

가 결과가 되고, p value = 0.041 이므로, Null Hypothesis를 기각하고, 두 개의 광고 간에 전환과 이탈은 차이가 있다.(같은 분포가 아니다). 정도로 결론 맺을 수 있겠습니다. 

그러니까 결국에는 똑같은 χ²검정을 씁니다만, 어쨌든 표집을 어떻게 했느냐가 검정의 이름을 결정한다고도 볼 수 있겠습니다. 

독립성검정과 동질성검정은 범주형 데이터의 서로 관계가 있는지를 확인하는 통계기법이고요, 참고로 연속형인 경우에는 공분산을 분석합니다. 

χ²검정을 하려면 조건이 있는데, 기대 빈도가 5 이하인 데이터 셀이 전체의 20% 가 넘지 않도록 해야 합니다. 이런 경우에는 표본을 늘리던지, 그룹을 더 줄여서 (묶어서) 5 이하의 빈도가 나오지 않게 하는 방법이 있고, 그래도 안된다면 Fisher 검정을 해야 합니다. 이 지점에서 조심해야 할 부분은 5 미만인 관측값이 전체 셀의 25%를 넘으면 피셔의 정확검정을 한다고 잘못 생각할 수가 있는데, 관측값이 아닌 "기대도수"가 그런지 보아야 합니다. 즉, 기대값이 5미만인 셀이 전체 셀의 25%를 넘으면 피셔의 정확검정을 한다. 고 알고 있으면 틀림없습니다. 

χ² 검정에 의한 독립성 검정 결과는 두 범주형 변수 간에 관계가 있는지 없는지를 검정하게 되는데, 두 변수 간 관계가 얼마나 강하게 있는지에 대한 강도는 알 수 없습니다. 참고로 상관분석은 관계의 강도를 알 수 있다는 점도 잘 알아야 합니다. 그런 식의 분석은 "교차분석의 완성 = Cross Tabulation + χ² Testing + Cramer V 연관도" 편에서도 다루게 되니 참고해 주세요. 후후.

다시 한번 정리하면 독립성 검정하기란, 두 변수 간에 서로 영향을 주는가를 검정하는 것이고, 서로 독립이라는 것은 서로 관련성이 없다는 것을 의미하는데, 중요한 점은 관련이 있다 없다는 상관관계가 있다 없다는 문제가 아니라 독립이냐 아니냐(영향을 미치냐 아니냐)의 문제입니다. 아주 중요한 지점이니 기억해 주세요.

친절한 데이터 사이언스 강좌 글 전체 목차 (링크) -



댓글





친절한 데이터 사이언스 강좌 글 전체 목차 (링크) -