데이터 분석에서 그룹 간 평균 차이가 통계적으로 유의한지 확인하고 싶을 때, 우리는 보통 t-검정을 사용합니다. 그리고 그룹 간 분산이 같은지 여부를 판단할 땐 F-검정을 사용합니다. 이 글에서는 Python을 활용하여 다양한 유형의 t-검정과 F-검정을 예제와 함께 시각화하며 정리하겠습니다.
2025.04.03 - [Data] - LS 빅데이터 스쿨 / 정규분포와 t분포 / Python
LS 빅데이터 스쿨 / 정규분포와 t분포 / Python
가설검정이란?가설검정(Hypothesis Testing)은 통계학에서 어떤 주장이나 가설이 옳은지를 데이터 기반으로 판단하는 절차입니다. 주어진 데이터로부터 모집단의 특성을 추정하고, 이 추정값을 바탕
kiminchae.tistory.com
T분포에 대해서 자세하게 살펴보시려면 위에 포스팅을 참고해주세요.
0. t-검정이란?
t-검정은 모집단의 평균에 대한 가설을 검정하는 방법입니다.
- 모집단의 평균이 특정 값과 같은지 (1표본 t-검정)
- 두 그룹의 평균이 같은지 (독립 2표본 t-검정)
- 같은 집단에서 변화가 있는지 (대응표본 t-검정)
t-분포란?
- 표본 수가 적고, 모분산을 모를 때 정규분포 대신 사용하는 분포
- 자유도(df)가 커질수록 정규분포에 수렴
1. 독립 1 표본 t-검정 (One-Sample t-test)
모집단의 평균이 특정 값과 같은지
예시: 어떤 시험의 평균 점수가 10점이라는 주장을 검정
from scipy.stats import ttest_1samp
import numpy as np
x = np.array([9.76, 11.1, 10.7, 10.72, 11.8, 6.15, 10.52, 14.83, 13.03, 16.46, 10.84, 12.45])
t_stat, p_value = ttest_1samp(x, popmean=10)
print(f"t통계량: {t_stat:.2f}, p-value: {p_value:.4f}")
- 귀무가설(H0): 평균은 10이다.
- p-value > 0.05 → 기각할 수 없음 → 평균이 10이라고 볼 수 있다
2. 독립 2표본 t-검정 (Independent Samples t-test)
두 그룹의 평균이 같은지
예시: 남학생과 여학생의 점수가 다른가?
from scipy.stats import ttest_ind
import pandas as pd
sample = [9.76, 11.1, 10.7, 10.72, 11.8, 6.15, 10.52, 14.83, 13.03, 16.46, 10.84, 12.45]
gender = ["F"]*7 + ["M"]*5
df = pd.DataFrame({"score": sample, "gender": gender})
female = df[df["gender"]=="F"]["score"]
male = df[df["gender"]=="M"]["score"]
t_stat, p_val = ttest_ind(male, female, equal_var=False)
print(f"t통계량: {t_stat:.2f}, p-value: {p_val:.4f}")
equal_var = False?
→ 두 집단의 분산이 다를 수도 있다는 전제하에 검정 (Welch’s t-test)
3. 대응표본 t-검정 (Paired t-test)
같은 집단에서 변화가 있는지
예시: 교육 전과 후의 점수 차이
from scipy.stats import ttest_rel
before = np.array([9.76, 11.1, 10.7, 10.72, 11.8, 6.15])
after = np.array([10.52, 14.83, 13.03, 16.46, 10.84, 12.45])
t_stat, p_val = ttest_rel(after, before)
print(f"t통계량: {t_stat:.2f}, p-value: {p_val:.4f}")
4. F-검정이란?
두 집단의 분산이 같은지 다른지를 비교할 때 사용합니다.
- 분산이 다르면 equal_var=False 로 t-검정을 해야 하기 때문에 선행 테스트로 사용됨
- F-통계량 = 큰 집단 분산 / 작은 집단 분산
1. F-검정 직접 계산하기
from scipy.stats import f
s1 = np.var(male, ddof=1)
s2 = np.var(female, ddof=1)
f_stat = s1 / s2
p_value = 2 * min(f.cdf(f_stat, dfn=len(male)-1, dfd=len(female)-1),
1 - f.cdf(f_stat, dfn=len(male)-1, dfd=len(female)-1))
print(f"F 통계량: {f_stat:.2f}, p-value: {p_value:.4f}")
2. 등분산성 검정 (Levene / Bartlett)
from scipy.stats import levene, bartlett
levene_stat, p_levene = levene(male, female)
bartlett_stat, p_bartlett = bartlett(male, female)
print(f"Levene's Test: p-value = {p_levene:.4f}")
print(f"Bartlett's Test: p-value = {p_bartlett:.4f}")
- p-value > 0.05 → 등분산성 가정 OK (→ ttest_ind + equal_var=True)
- p-value < 0.05 → Welch's t-test 사용 (→ ttest_ind + equal_var=False)
요약표
검정 유형 | 조건 | 사용 함수 | 설명 |
1표본 t검정 | 평균 = 특정값 | ttest_1samp | 모평균과 비교 |
독립 2표본 t검정 | 두 그룹 평균 비교 | ttest_ind | 서로 다른 그룹 |
대응표본 t검정 | 전후 비교 | ttest_rel | 같은 집단 비교 |
F-검정 | 분산 비교 | f | 선행 조건 확인 |
등분산성 검정 | 분산 같음 여부 | levene, bartlett | 분산 비교 보조 |
'Data > 통계' 카테고리의 다른 글
비모수 검정 모수 검정 비교 / 윌콕슨 순위합 검정 / 맨휘트니 U 검정 / 브루너 문젤 검정 / 크루스칼 왈리스 검정 (0) | 2025.04.08 |
---|---|
사후 검정 / 본페로니 검정 / 튜키 검정 / Post-hoc Test (0) | 2025.04.08 |
분산분석(ANOVA) / 수치형 데이터 비교 분석 / 카이제곱 검정과의 차이점 (0) | 2025.04.07 |
카이제곱(Chi-Square) 검정 / 범주형 데이터 분석 / 독립성 검정 / 동질성 검정 / 적합도 검정 (1) | 2025.04.07 |
정규성 검정 / Shapiro-Wilk / Anderson-Darling / Kolmogorov–Smirnov / Q-Q Plot (0) | 2025.04.04 |