📊 교차 검정


📌 교차 검정이란?

  • 정의
    - 범주형 독립변수와 범주형 종속변수 간의 관계를 파악하기 위한 검정 방식
    예) 표본의 부모학력자식 진학여부의 관계









📊 독립성(관련성) & 동질성 카이제곱검정


📌 독립성(관련성) 카이제곱검정

  • 정의
    - 하나의 집단 내에서 두개의 독립변수를 대상으로 관련성 검정
    [ 두 개의 독립변수 사이의 연관성 검정 ]

  • 예시
    - 하나의 집단 내에서 부모의 학력수준자식의 진학여부 사이의 연관성 검정


📌 동질성 카이제곱검정

  • 정의
    - 두 개 이상의 집단 간의 분포가 동일한지를 검정
    [ 두 개 이상의 집단 사이의 분포 동일성 검정 ]

  • 예시
    - 연령대별로 집단을 나누어 각 집단의 sns 이용현황 분포의 동일성 검정









📊 카이제곱 문제 (독립성[관련성] 검정)


📌 카이제곱 문제1

  • 부모학력 수준이 자녀의 진학여부와 관련이 있는가?를 가설검정하시오
    - 예제파일 : cleanDescriptive.csv
    - 칼럼 중 level - 부모의 학력수준, pass - 자녀의 대학 진학여부
    - 조건 : level, pass에 대해 NA가 있는 행은 제외한다.

  • 가설 세우기
    - 독립변수 : 부모학력 수준
    - 종속변수 : 자녀의 진학여부
    - 1) 대립가설 세우기 : 부모학력 수준이 자녀의 진학여부와 관련이 있다.
    - 2) 귀무가설 자동확정 : 부모학력 수준이 자녀의 진학여부와 관련이 없다.
    [ 참고 ] 가설검증은 대립가설 중심으로 흘러간다.

1. 라이브러리 Import

import pandas as pd
import scipy.stats as stats

2. 데이터세트 준비 + Null 값 제거

data1 = pd.read_csv("../testdata/cleanDescriptive.csv").dropna(subset=['level', 'pass'])
print(data1.head())
#    resident  gender  age  level  cost  ...  resident2  gender2  age2  level2 pass2
# 0       1.0       1   50    1.0   5.1  ...        특별시       남자   장년층      고졸    실패
# 1       2.0       1   54    2.0   4.2  ...        광역시       남자   장년층      대졸    실패
# 2       NaN       1   62    2.0   4.7  ...        NaN       남자   노년층      대졸    합격
# 4       5.0       1   51    1.0   5.0  ...        시구군       남자   장년층      고졸    합격
# 6       2.0       2   56    1.0   4.1  ...        광역시       여자   장년층      고졸    실패

3. Null값 확인

print(data1.isnull().sum())
# resident     17
# gender        0
# age           0
# level         0
# cost          0
# type         11
# survey       77
# pass          0
# cost2        72
# resident2    17
# gender2       0
# age2          0
# level2        0
# pass2         0
# dtype: int64

4. 유니크값 확인

print(data1['level'].unique())
print(data1['pass'].unique())
# [1. 2. 3.]
# [2. 1.]

5. 이원카이제곱 분석을 위한 크로스테이블 생성

ctab = pd.crosstab(
    index=data1['level'],
    columns=data1['pass']
)
ctab.columns = ["합격", "불합격"]
ctab.index = ["중졸","고졸","대졸"]
print(ctab)
#     합격  불합격
# 중졸  49   40
# 고졸  55   27
# 대졸  31   23

6. 이원카이제곱 분석
- chi2 : 검정통계량(카이제곱값)
- p-value : 유의확률

chi2, p, ddof, _ = stats.chi2_contingency(ctab)
print(f'chi2:{chi2}, p:{p}, ddof:{ddof}')
# chi2:2.7669512025956684, p:0.25070568406521365, ddof:2
# 분석 결과
# 0.25(p-value) > 0.05(유의수준)
# -> 관련이 있다는 대립가설이 유의수준을 넘어서 유의미한 결과를 낼 수 없다고 판단
# -> 대립가설 기각
# -> 귀무가설 채택 ==> 관련이 없다.









📊 카이제곱 문제 (동질성 검정)


📌 카이제곱 문제2

  • 연령대별 sns 이용률의 동질성 검정
    - 20대에서 40대까지 연령대별로 서로 조금씩 그 특성이 다른 SNS 서비스들에 대해 이용 현황을 조사한 자료를 바탕으로 연령대별로 홍보 전략을 세우고자 한다.
    - 연령대별로 이용 현황이 서로 동일한지 검정해 보도록 하자.

  • 가설 세우기
    - 독립변수 : 연령대
    - 종속변수 : sns별 이용률
    - 1) 대립가설 세우기 : 연령대별 sns별 이용률의 차이가 있다.
    - 2) 귀무가설 자동확정 : 연령대별 sns별 이용률의 차이가 없다.
    [ 참고 ] 가설검증은 대립가설 중심으로 흘러간다.

1. 라이브러리 Import

import pandas as pd
import scipy.stats as stats

2. 데이터세트 준비

data = pd.read_csv("../testdata/snsbyage.csv")
print(data.head())
#    age service
# 0    1       F
# 1    1       F
# 2    1       F
# 3    1       F
# 4    1       F

3. 유니크값 확인

print(data['age'].unique())
print(data['service'].unique())
# [1 2 3]
# ['F' 'T' 'K' 'C' 'E']

4. 이원카이제곱 분석을 위한 크로스테이블 생성

ctab = pd.crosstab(
    index=data['age'],
    columns=data['service']
)
ctab.index = ['10대', '20대', '30대']
print(ctab)
# service    C   E    F    K    T
# 10대       81  16  207  111  117
# 20대      109  15  107  236  104
# 30대       32  17   78  133   76

5. 이원카이제곱 분석
- chi2 : 검정통계량(카이제곱값)
- p-value : 유의확률

chi2, p, ddof, _ = stats.chi2_contingency(ctab)
print(f'chi2:{chi2}, p:{p}, ddof:{ddof}')
# chi2:102.75202494484225, p:1.1679064204212775e-18, ddof:8
# 분석 결과
# 1.16e-18(p-value) < 0.05(유의수준)
# -> 대립가설[차이가 있다.]의 p-value 값이 유의수준보다 작은 값이므로 유의미한 결과를 도출할 수 있다고 판단
# -> 대립가설 채택
# -> 귀무가설 기각
# 대립가설 선택 : 연령대별 sns 이용률의 차이가 있다.


profile
데이터 사이언티스트를 목표로 하는 개발자

0개의 댓글