t-test는 두 집단의 평균이 통계적으로 유의미하게 다른지를 검정하기 위한 가설 검정 방법이다. 보통 표본 수가 작고( < 30), 모집단의 표준편차를 모를때 사용한다. 정규 분포가 아닌 t-분포를 기반으로 평균 차이를 검정 하는 방법이다.
하나의 표본 평균이 특정 기준값(모평균)과 유의미하게 다른지를 검정한다.
검정 종류 | 설명 | ||
---|---|---|---|
양측 검정 | 평균 차이 여부 일반 검정 | ||
단측 (우측) | 실험군이 더 높다고 주장 | ||
단측 (좌측) | 실험군이 더 낮다고 주장 |
# 예시: 고객 만족도 설문 평균이 3.5 이상인지 검정할 때 사용
from scipy import stats
sample = [3.6, 3.9, 3.4, 3.7, 3.5]
t_stat, p_val = stats.ttest_1samp(sample, popmean=3.5)
서로 독립적인 두 집단의 평균이 유의하게 다른지를 검정한다.
검정 종류 | 설명 | ||
---|---|---|---|
양측 검정 | 평균 차이 여부 일반 검정 | ||
단측 (우측) | 실험군이 더 높다고 주장 | ||
단측 (좌측) | 실험군이 더 낮다고 주장 |
보통, 단측 검정은 확실한 근거가 있을 경우 사용하며 특별한 사전 지식이 없다면 양측 검정을 기본으로 하는 것이 좋다. 섣부른 단측 검정에 사용은 검정력 오용에 대한 위험을 가질 수 있기 때문이다.
독립표본 t-test는 등분산을 가정하는 경우와 가정하지 않는 경우로 나눌 수 있다.
등분산 가정 (Equal Variance Assumption)
등분산 가정 없음 (Welch’s t-test)
# 예시: 남성과 여성 고객의 평균 소비 금액이 다른지 비교
from scipy import stats
group1 = [12, 15, 13, 14, 16] # 남성 그룹
group2 = [10, 11, 12, 13, 12] # 여성 그룹
# 등분산 가정 O
t_stat1, p_val1 = stats.ttest_ind(group1, group2, equal_var=True)
# 등분산 가정 X
t_stat2, p_val2 = stats.ttest_ind(group1, group2, equal_var=False)
등분산
등분산의 가정은 두 모집단의 분산이 같다는 가정이다. () 이 가정을 기반으로 pool된 분산 를 사용하는 것이 가능하며, 등분산을 가정하면 더 간단하고 검정력이 높은 t-통계량을 쓸 수 있지만, 실제로는 모집단 분산이 다를 수 있으므로 사전 확인이 필요하다.
- Levene’s Test (르빈 검정) : 분산의 동질성을 검정하며, 정규성에 대한 가정이 없어 실무에서 널리 사용되는 방식이다.
- 각 그룹의 중앙값을 구한다.
- 각 관측값에서 중앙값의 절대 편차를 구한다. →
- 이 값을 대상으로 ANOVA를 수행하여 - 값을 도출한다.
- 라면, 등분산이 아니고 라면, 등분산을 가정할 수 있다.
from scipy.stats import levene group1 = [12, 15, 13, 14, 16] group2 = [10, 11, 12, 13, 12] stat, p_value = levene(group1, group2)
Bartlett’s Test (바틀렛 검정) : 정규분포를 가정한 분산 동질성 검정이므로 정규성에 매우 민감하다.
- : 공통 분산
- : 각 집단의 분산
- : 각 집단의 크기
from scipy.stats import bartlett group1 = [12, 15, 13, 14, 16] group2 = [10, 11, 12, 13, 12] stat, p_value = bartlett(group1, group2)
같은 대상에 대해 전후 변화를 측정할 때 사용하거나 메칭 된 쌍 간의 차이를 비교하기 위해 사용한다. 즉 같은 대상에 대상의 2가지 시점을 비교 하므로, “운동 전/후 혈압 측정 값을 비교”하거나, “광고 노출 전/후 클릭률 비교” 등에 활용할 수 있다.
(쌍별 차이의 평균은 0),
# 예시: 광고 노출 전/후 클릭률 비교
from scipy import stats
before = [120, 122, 121, 119]
after = [115, 117, 118, 116]
t_stat, p_val = stats.ttest_rel(before, after)