실기 실무 3강. 작업형 제3유형 통계 검정
3유형은 모델을 만드는 문제가 아닙니다. 어떤 검정을 골라야 하는지만 알면 코드는 두 줄입니다.
풀고 시작
고르는 것이 시험입니다
3유형에서 코드는 대부분 한두 줄입니다. 진짜 문제는 어떤 검정을 고를 것인가이고, 그 판단은 2과목 6강에서 배운 그대로입니다. 자료의 종류와 집단의 수, 그리고 짝지어져 있는지만 확인하면 답이 나옵니다.
| 상황 | 검정 |
|---|---|
| 한 집단의 평균이 특정 값과 다른가 | 단일표본 t검정 |
| 같은 대상의 전후 비교 | 대응표본 t검정 |
| 서로 다른 두 집단의 평균 비교 | 독립표본 t검정 |
| 세 집단 이상의 평균 비교 | 일원배치 분산분석 |
| 두 범주형 변수가 관련 있는가 | 카이제곱 독립성 검정 |
| 관측 분포가 기대 분포와 맞는가 | 카이제곱 적합도 검정 |
| 정규성 확인 | 샤피로윌크 검정 |
코드는 짧습니다
from scipy import stats
# 단일표본: 평균이 100과 다른가
print(stats.ttest_1samp(df["score"], 100))
# 대응표본: 같은 대상의 전후
print(stats.ttest_rel(df["before"], df["after"]))
# 독립표본: 두 집단 비교, 등분산을 가정하지 않는 편이 안전
a = df[df["group"] == "A"]["score"]
b = df[df["group"] == "B"]["score"]
print(stats.ttest_ind(a, b, equal_var=False))
# 세 집단 이상
print(stats.f_oneway(g1, g2, g3))
# 정규성
print(stats.shapiro(df["score"]))
범주형 자료는 교차표를 먼저 만듭니다.
table = pd.crosstab(df["성별"], df["구매여부"])
chi2, p, dof, expected = stats.chi2_contingency(table)
print(round(chi2, 3), round(p, 3), dof)
반환값의 순서를 외워 두세요. 카이제곱 통계량, p값, 자유도, 기대빈도 순입니다. 문제가 자유도를 물으면 세 번째 값이고, 기대빈도를 물으면 네 번째입니다.
회귀 결과를 묻는 문제에는 statsmodels를 씁니다.
import statsmodels.api as sm
from statsmodels.formula.api import ols, logit
m = ols("y ~ x1 + x2", data=df).fit()
print(m.summary()) # 계수, p값, 결정계수가 한 표에
print(round(m.params["x1"], 3))
lm = logit("target ~ x1 + x2", data=df).fit()
print(round(np.exp(lm.params["x1"]), 3)) # 오즈비
로지스틱 회귀에서 오즈비를 물으면 계수에 지수를 취해야 한다는 것, 3과목 3강에서 본 그대로입니다. 계수를 그대로 적으면 틀립니다.
답을 쓰는 법
3유형은 소문항으로 쪼개져 나옵니다. 검정통계량, p값, 그리고 결론을 차례로 묻는 식이죠. 여기서 지켜야 할 것이 셋입니다.
반올림 자리를 정확히 맞추세요. 소수 셋째 자리라고 하면 round로 셋째 자리까지 만듭니다.
결론은 유의수준과 비교해 쓰세요. p값이 유의수준보다 작으면 귀무가설을 기각합니다. 여기서 표현을 조심해야 하는데, 기각하지 못했다고 해서 귀무가설이 참임을 증명한 것은 아닙니다. 채택이라는 말보다 기각하지 못했다는 표현이 정확합니다.
가설의 방향을 확인하세요. 크다 또는 작다를 묻는 단측 검정인지, 다르다를 묻는 양측 검정인지에 따라 p값의 처리가 달라집니다. 파이썬의 기본 반환은 양측 기준입니다.
여기까지가 이 서가의 마지막 강입니다. 남은 일은 하나뿐입니다. 오답노트에 쌓인 문제를 다시 푸는 것. 읽어서 아는 것과 꺼내 쓸 수 있는 것은 다르고, 시험장에서 쓰이는 것은 후자입니다.
인출 문제
이전: 2강 작업형 제2유형 예측 모형 · 서가 처음으로: 빅데이터분석기사