데이터분석/학습기록지

빅데이터분석기사 제3작업형(카이제곱 검정)

Null to One 2025. 6. 3. 22:22

카이제곱 검정의 종류에는 적합도 검정, 독립성 검정, 동질성 검정 등이 있습니다. 카이제곱 검정은 범주형 데이터에 대한 검정에 사용하는 방식입니다.

 

1. 적합도 검정

1개의 범주형 변수에 대해 검정합니다. 이 변수가 특정 분포를 따르는지를 확인하는 절차입니다.

따라서 H0, H1을 다음과 같이 설정합니다.

  • H0: ~는 특정 분포를 따른다.
  • H1: ~는 특정 분포를 따르지 않는다.

마찬가지로 지금까지 주구장창 사용해왔던 scipy 패키지를 사용합니다. chisquare라는 함수를 사용하면 관측치들에 대해 특정 분포를 따르는지 여부를 검정해볼 수 있습니다.

예를 들어보면 다음과 같은 경우가 있을 수 있습니다.

한 선거구에서 200명을 대상으로 대선 후보 선호를 조사했을 때, 1번 후보가 80명, 2번 후보가 70명, 3번 후보가 50명이었고, 전국민을 대상으로 선호도를 조사해 나온 비율은 1번 후보 50%, 2번 후보 30%, 3번 후보 20%였습니다.

이때 선거구의 후보 선호가 전국적인 선호도의 비율과 동일한지 아닌지를 검정할 수 있습니다.

카이제곱 적합도 검정 결과 p-value가 0.01로, 유의수준 5%하에서 귀무가설을 기각할 수 있습니다. 즉, 해당 선거구의 대선 후보 선호도는 전국 선호도와 동일하지 않습니다.


2. 독립성 검정

2개의 범주형 변수에 대해 서로 독립인지 아닌지를 검정하는 것입니다.

  • H0: 두 변수는 독립이다.
  • H1: 두 변수는 독립이 아니다.

scipy의 chi2_contingency라는 함수를 사용하여 독립성 검정을 수행할 수 있습니다. 교차표가 주어진다면 pandas의 DataFrame함수를 이용해 직접 만들어 쓰면 되고, 만약 raw data가 제공될 경우는 pandas의 crosstab함수를 적용해 교차표로 만들어주는 과정이 필요합니다.

독립성 검정의 예는 다음과 같은 것이 있습니다. 노년층이냐 청년층이냐에 따라 트로트를 선호하는지 조사하였더니 다음과 같은 결과를 얻었다고 합니다. 그냥 예시입니다.

  트로트 선호 트로트 비선호
청년 20 80
노년 70 30

이 경우, pd.DataFrame으로 이 교차표를 만들어 사용해주면 됩니다. 청년과 노년이 index가 될텐데, 사실 index는 카이제곱 독립성 검정에서 굳이 만들어줄 필요는 없습니다. 그래도 DataFrame 함수에 익숙해지기 위해 그냥 만들겠습니다.

네, 잘 생성되었습니다.

 

이후, chi2_contingency함수를 사용해 독립성 검정을 수행해주면 됩니다. correction은 연속성 보정 여부인데 True가 기본값입니다.

 

독립성 검정을 진행한 결과, 유의수준 5%하에서 귀무가설을 기각할 수 있습니다. 즉, 연령과 트로트 선호도는 연관되었습니다.

expected_freq라는 것은 기대 빈도라는 것으로 청년과 둘 다 좋아함과 좋아하지 않음을 선택할 것으로 기대되는 수가 각각 45랑 55로 나와있네요.

 

문제에서 csv로 주어지는 raw data의 경우, 이를 pd.crosstab에 집어넣어주면 됩니다. 독립성을 검정할 컬럼을 골라 crosstab함수에 넣어주면 알아서 만들어줍니다. 그걸 chi2_contingency에 넣어주면 끝입니다.


3. 동질성 검정

여러 집단의 분산들 간의 동질성을 검정합니다.

  • H0: 모든 집단의 분포와 비율이 동일하다.
  • H1: 각 집단의 분포와 비율은 동일하지 않다.

동질성 검정에는 독립성 검정과 동일한 chi2_contingency함수를 그대로 사용합니다.

이와 같은 검정을 적용하는 예로 다음과 같은 경우를 생각해볼 수 있습니다. 성격이 내향적이냐 외향적이냐에 따라 축제에 참여한 사람 수를 비교하는 경우, 귀무가설을 다음과 같이 세울 수 있습니다.

  • H0: 두 성격집단의 축제 참여 비율이 동일하다.

동질성 검정은 독립성 검정에서와 동일한 함수를 사용하되 해석만 조금 다르게 조정해서 하는 것이므로 그 점을 유의하면 됩니다.