Cute Hello Kitty 3
본문 바로가기
Data/통계

T-검정과 F-검정 / 독립 표본 t 검정 / 대응 표본 t 검정 / Python 예제 / 시각화

by 민 채 2025. 4. 10.
 
 
 

 

데이터 분석에서 그룹 간 평균 차이가 통계적으로 유의한지 확인하고 싶을 때, 우리는 보통 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 분산 비교 보조