본문 바로가기
자격증/[빅분기] 빅데이터분석기사

[작업형3] 범주형 데이터 분석 - 적합도검정

by 바다의 공간 2024. 11. 9.

범주형 데이터분석에는 

카이제곱, 적합도, 독립성 검정 이렇게 3가지 가있습니다.


 

🔶 1. 적합도 검정

 

[문제] 지난 3년간 빅데이터 분석기사 점수 분포가 60점 미만: 50%, 60-70점 35%, 80점이상 15%로였다. 이번 회차부터 단답형을 제외하고, 작업형3을 추가하여 300명을 대상으로 적용한 결과 60점 미만: 150명, 60-70점: 120명, 80점이상: 30명이었다. 유의수준 0.05일 때, 새로운 시험문제 유형과 기존 시험문제 유형은 점수에 차이가 없는지 검정하시오.

  • 귀무가설(H0): 새로운 시험문제는 기존 시험문제 점수와 동일하다.
  • 대립가설(H1): 새로운 시험문제는 기존 시험문제 점수와 다르다.
#관찰
ob = [150, 120, 30]
# 기대
ex = [0.5*300, 0.35*300, 0.15*300]

#적합도 검정
from scipy import stats
stats.chisquare(ob, ex)

🔶결과

Power_divergenceResult(statistic=7.142857142857142, pvalue=0.028115659748972056)

0.02로 대립가설채택입니다.


🔶2. 독립성 검정

 

 

[문제] 빅데이터 분석기사 실기 언어 선택에 따라 합격 여부를 조사한 결과이다. 언어와 합격 여부는 독립적인가? 가설검정을 실시하시오. (유의수준 0.05)

  • 귀무가설(H0): 언어와 합격 여부는 독립이다.
  • 대립가설(H1): 언어과 합격 여부는 독립이지 않다.

 

2-1 교차표 데이터

🔶사용할 데이터자료 입니다

  • R: 합격 80명, 불합격 20명,
  • Python: 합격 90명, 불합격 10명

.

데이터프레임을 만들어야합니다.

작업형3을 할때 음.. 만약 어렵다면 index까지는 안 해도 되지만 사실 한 줄 더 쓰는거라서 

그렇게 어렵진 않을것같습니다 (혹은 아래에 나오는 2d array방법사용)

import pandas as pd
df = pd.DataFrame({
    '합격':[80, 90],
    '불합격':[20, 10]
    },index=['R', 'P']
)

 

사용방법은 

stats.chi2_contingency(df) 입니다.

#정규성검정
from scipy import stats

stats.chi2_contingency(df)

🔶결과

Chi2ContingencyResult(statistic=3.1764705882352944, pvalue=0.07470593331213068, dof=1, expected_freq=array([[85., 15.],
       [85., 15.]]))

코랩에서 실행했을때는 pvalue값이랑 statistic이 나오지만 실기 구름으로 실행했을때는 값이 나오지 않습니다

시험볼때는 업데이트가 될 수도 있고 안 될수도있는데 만약 안나오더라고 2번째값으로 확인할 수 있습니다.


데이터프레임 2d array로 만드는 방법

df = [[80,20],[90,10]]
stats.chi2_contingency(df)

2-2 로우 데이터

시험장에서는 물론 csv파일로 제공이 되겠지만 혹시 로우데이터로 나온다면?

# 데이터 생성
import pandas as pd
data = {
    '언어': ['R']*100 + ['Python']*100,
    '합격여부': ['합격']*80 + ['불합격']*20 + ['합격']*90 + ['불합격']*10
}
df = pd.DataFrame(data)

데이터의 모양을 확인하기 위해서 sample을 하나 뽑아보고

df.sample(1)
df = pd.crosstab(df['언어'], df['합격여부'])
df

stats.chi2_contingency(df)

🔶결과

Chi2ContingencyResult(statistic=3.1764705882352944, pvalue=0.07470593331213068, dof=1, expected_freq=array([[15., 15.],
       [85., 85.]]))

로 확인할 수 있습니다.

동질성 검정

  • 두 개 이상의 집단에서 동질성을 갖는지 확인
  • 검정 절차는 독립성과 같음

 동질성검정은 독립성검정과 같습니다.