안녕하세요. 데이터 분석 업무를 하면서 t-test는 자주 사용했는데, 3개 이상 그룹 비교가 필요한 프로젝트를 맡게 되면서 ANOVA를 제대로 공부할 필요성을 느꼈습니다. 실무에서 "그냥 t-test 여러 번 돌리면 되는 거 아니에요?"라는 질문을 몇 번 받았는데 이번 기회에 왜 ANOVA를 써야 하는지 그리고 실무에서 놓치기 쉬운 부분들을 정리해보았습니다.

1. 다중 비교 문제 - 왜 t-test를 반복하면 안 되는가
1.1 실무에서 흔한 상황
실무에서 흔한 상황을 예로 들어보겠습니다. 마케팅 팀에서 4가지 광고 채널(검색광고, SNS광고, 디스플레이광고, 이메일)의 전환율을 비교하고 싶다고 합니다.
검색 vs SNS : t-test (유의수준 α = 0.05)
검색 vs 디스플레이 : t-test (유의수준 α = 0.05)
검색 vs 이메일 : t-test (유의수준 α = 0.05)
SNS vs 디스플레이 : t-test (유의수준 α = 0.05)
SNS vs 이메일 : t-test (유의수준 α = 0.05)
디스플레이 vs 이메일: t-test (유의수준 α = 0.05)
총 6번의 검정
각 검정에서 귀무가설이 참인데도 기각할 확률(Type I Error)은 5%입니다. 하지만 6번의 검정을 모두 수행했을 때 적어도 한 번은 잘못된 결론을 내릴 확률은:
전체 오류율(Family-wise Error Rate) = 1 - (1 - 0.05)^6
= 1 - 0.735
= 0.265
= 26.5%
설계 단계에서 5%의 오류율을 목표로 했지만 실제로는 26.5%의 확률로 잘못된 결론을 내리게 됩니다. 이는 통계적 방법론의 신뢰성을 심각하게 훼손합니다. 그룹 수가 더 많아질수록 문제는 더 심각해집니다:
- 3개 그룹 (3번 비교): 14.3%
- 4개 그룹 (6번 비교): 26.5%
- 5개 그룹 (10번 비교): 40.1%
- 6개 그룹 (15번 비교): 53.7%
6개 그룹을 비교할 경우, 절반 이상의 확률로 잘못된 결론에 도달하게 됩니다.
1.2 ANOVA의 해결책
ANOVA는 이 문제를 근본적으로 해결합니다. 모든 그룹을 한 번의 검정으로 동시에 비교함으로써 전체 오류율을 설계한 유의수준 α(보통 0.05)로 유지합니다.
2. ANOVA 란?
2.1 분산분석이라는 이름의 의미
ANOVA(Analysis of Variance)를 직역하면 "분산 분석"입니다. 처음 이 용어를 접했을 때 의문이 들었습니다. "그룹 간 평균을 비교하고 싶은데 왜 분산을 분석한다는 거지?" 이 질문에 대한 답이 ANOVA의 핵심 아이디어입니다.
핵심 인사이트:
집단 평균 자체만으로는 차이를 판단할 수 없습니다. 왜냐하면 데이터가 얼마나 흩어져 있는지를 고려하지 않았기 때문입니다.
ex)
시나리오 A:
- 그룹 1: 평균 100, 데이터: [98, 99, 100, 101, 102]
- 그룹 2: 평균 105, 데이터: [103, 104, 105, 106, 107]
- 평균 차이: 5
시나리오 B:
- 그룹 1: 평균 100, 데이터: [50, 75, 100, 125, 150]
- 그룹 2: 평균 105, 데이터: [55, 80, 105, 130, 155]
- 평균 차이: 5
두 시나리오 모두 평균 차이는 5로 동일하지만, 시나리오 A는 명확한 차이가 있어 보이는 반면, 시나리오 B는 데이터가 너무 흩어져 있어 평균 차이 5가 의미가 있는지 불분명합니다. 이처럼 분산(데이터의 흩어진 정도)을 함께 고려해야 평균 차이의 통계적 유의성을 판단할 수 있습니다.
2.2 변동분해
ANOVA에서 말하는 변동 분해란, 데이터 전체의 흔들림(변동)을 여러 원인(요인 또는 처리)별로 나누어 보는 것을 의미합니다. 이를 통해 어떤 요인이 결과값에 영향을 주었는지를 통계적으로 확인하고 설명할 수 있습니다.
기본 공식:
Total Variation = Between-group Variation + Within-group Variation
총 변동 = 집단 간 변동 + 집단 내 변동
SS_Total = SS_Between + SS_Within
이를 수식으로 표현하면:
Σ Σ (y_ij - ȳ_total)² = Σ n_j(ȳ_j - ȳ_total)² + Σ Σ (y_ij - ȳ_j)²
여기서:
- y_ij: j번째 그룹의 i번째 관찰값
- ȳ_j: j번째 그룹의 평균
- ȳ_total: 전체 평균
- n_j: j번째 그룹의 샘플 크기
2.3 집단 간 변동 (Between-group Variance)
집단 간 변동은 각 그룹의 평균이 전체 평균으로부터 얼마나 떨어져 있는지를 측정합니다.
물리적 의미:
- 이 값이 크다 = 각 그룹의 평균이 전체 평균에서 멀리 떨어져 있다
- = 그룹 간 차이가 명확하다
- = 독립변수(그룹)가 종속변수를 "설명"하는 정도가 크다
계산 공식:
SS_Between = Σ n_j × (ȳ_j - ȳ_total)²
여기서 n_j를 곱하는 이유:
각 그룹 평균이 전체 평균에서 벗어난 정도에 그룹 크기를 가중치로 부여
직관적 해석:
마케팅 채널 예시로 돌아가면, 집단 간 변동이 크다는 것은 "검색광고의 평균 전환율"과 "이메일의 평균 전환율"이 전체 평균에서 많이 벗어나 있다는 뜻입니다. 즉, 채널별로 전환율 차이가 뚜렷하다는 것입니다.
2.4 집단 내 변동 (Within-group Variance)
집단 내 변동은 같은 그룹 안에서 개별 데이터가 그룹 평균으로부터 얼마나 흩어져 있는지를 측정합니다.
물리적 의미:
- 이 값이 크다 = 같은 그룹 내에서도 데이터가 많이 흩어져 있다
- = 독립변수로 "설명할 수 없는" 무작위 변동이 크다
- = 측정 오차, 개인차, 기타 통제되지 않은 요인들의 영향
계산 공식:
SS_Within = Σ Σ (y_ij - ȳ_j)²
각 그룹별로 개별 관찰값이 자신이 속한 그룹 평균에서 벗어난 정도의 제곱합
직관적 해석:
검색광고를 이용한 고객들 중에서도 어떤 사람은 전환했고, 어떤 사람은 전환하지 않았습니다. 이런 "그룹 내 변동"은 광고 채널로는 설명할 수 없는 다른 요인들(개인 관심도, 구매력, 타이밍 등)에 의한 것입니다.
2.5 F-ratio
ANOVA의 검정 통계량인 F-ratio는 다음과 같이 정의됩니다:
F = 집단 간 평균제곱(MS_Between) / 집단 내 평균제곱(MS_Within)
= 설명되는 변동 / 설명 안 되는 변동
= Signal / Noise
= 처리 효과 / 무작위 오차
F-ratio의 의미:
- F ≈ 1: 집단 간 변동이 집단 내 변동과 비슷한 수준
→ Signal이 Noise에 묻혀버림
→ 그룹 간 차이가 무작위 변동 수준에 불과
→ 귀무가설 채택 (그룹 간 차이 없음) - F >> 1: 집단 간 변동이 집단 내 변동보다 훨씬 큼
→ Signal이 Noise를 압도
→ 그룹 간 차이가 진짜 있음
→ 귀무가설 기각 (적어도 한 그룹은 다름)
ex)
F = 10.24라는 값이 나왔다면, 이는 "그룹 간 변동이 그룹 내 변동의 10.24배"라는 의미입니다. 즉, 처리 효과(독립변수의 영향)가 무작위 노이즈보다 10배 이상 크다는 것이므로, 그룹 간 차이가 통계적으로 유의할 가능성이 높습니다.
3. F-분포의 이해 - 왜 t-분포가 아닌 F-분포인가?
3.1 F-분포의 정의
F-분포는 두 카이제곱 분포의 비율로 정의되는 연속 확률 분포로, 주로 두 집단 이상의 분산을 비교하거나 분산분석(ANOVA)에서 집단 간 변동과 집단 내 변동을 비교할 때 사용됩니다. 이 분포는 항상 0보다 큰 값을 가지며, 자유도에 따라 모양이 달라지는 특징이 있습니다.
t-test는 두 그룹의 평균 차이를 표준오차로 나눈 것입니다:
t = (ȳ₁ - ȳ₂) / SE_difference
반면 ANOVA는 여러 그룹의 분산들을 동시에 비교합니다:
F = Variance_between / Variance_within
t-분포는 "차이"를 다루는 반면, F-분포는 "비율"을 다룹니다. 3개 이상 그룹의 평균을 한 번에 비교하려면 분산의 비율로 접근해야 하므로 F-분포를 사용합니다.
두 집단 비교에는 평균 차이를 보는 t-검정을 쓰지만 세 집단 이상에서는 변동의 비율을 비교해야 하므로 F-분포를 사용합니다.
F = (χ²₁ / df₁) / (χ²₂ / df₂)
여기서:
- χ²₁: 집단 간 변동에서 유래한 카이제곱 분포
- χ²₂: 집단 내 변동에서 유래한 카이제곱 분포
- df₁: 분자 자유도 (k - 1, k는 그룹 수)
- df₂: 분모 자유도 (N - k, N은 전체 샘플 크기)
3.2 F-분포의 특징

- 항상 양수: 분산의 비율이므로 음수가 될 수 없음
- 비대칭 분포: 오른쪽으로 긴 꼬리를 가진 편향 분포
- 두 개의 자유도: df₁(분자)과 df₂(분모)가 모두 분포 형태를 결정
- 평균은 대략 1: 귀무가설이 참일 때 F-ratio는 1 근처 값
- 자유도가 커지면: 정규분포에 점근
4. ANOVA 계산 과정 - 감기약 효과 비교 실습
실무에서는 Python이나 R로 자동 계산하지만 수동 계산을 한 번 해보면 각 통계량의 의미를 정확히 이해할 수 있습니다.
4.1 연구 설계
연구 질문: 세 가지 감기약(A, B, 플라시보)의 효과에 차이가 있는가?
가설:
- H₀ (귀무가설): μ_A = μ_B = μ_Placebo (세 그룹의 모평균이 같다)
- H₁ (대립가설): 적어도 한 그룹의 모평균이 다르다
데이터:
| 감기약 A | 감기약 B | 플라시보 |
| 5일 | 5일 | 7일 |
| 6일 | 6일 | 8일 |
| 7일 | 6일 | 8일 |
| - | 6일 | - |
요약 통계:
감기약 A: n₁ = 3, ȳ₁ = 6.0, s₁ = 1.0
감기약 B: n₂ = 4, ȳ₂ = 5.9, s₂ = 0.5
플라시보: n₃ = 3, ȳ₃ = 7.53, s₃ = 0.58
전체: N = 10, ȳ_total = 6.44
Step 1: 제곱합(Sum of Squares) 계산
SS_Between (집단 간 제곱합):
SS_B = Σ n_j × (ȳ_j - ȳ_total)²
= 3 × (6.0 - 6.44)² + 4 × (5.9 - 6.44)² + 3 × (7.53 - 6.44)²
= 3 × (-0.44)² + 4 × (-0.54)² + 3 × (1.09)²
= 3 × 0.1936 + 4 × 0.2916 + 3 × 1.1881
= 0.581 + 1.166 + 3.564
= 5.311
의미 해석: 집단 간 제곱합 5.311은 "그룹 평균들이 전체 평균에서 벗어난 정도"를 표현합니다.
SS_Within (집단 내 제곱합):
SS_W = Σ Σ (y_ij - ȳ_j)²
감기약 A 그룹:
(5-6)² + (6-6)² + (7-6)² = 1 + 0 + 1 = 2
감기약 B 그룹:
(5-5.75)² + (6-5.75)² + (6-5.75)² + (6-5.75)²
= 0.5625 + 0.0625 + 0.0625 + 0.0625 = 0.75
플라시보 그룹:
(7-7.67)² + (8-7.67)² + (8-7.67)²
= 0.4489 + 0.1089 + 0.1089 = 0.667
SS_W = 2 + 0.75 + 0.667 = 3.417
의미 해석: 집단 내 제곱합 3.417은 "같은 그룹 내에서 개별 값들이 그룹 평균에서 벗어난 정도"입니다.
검증:
SS_Total = SS_Between + SS_Within
= 5.311 + 3.417
= 8.728 ✓
Step 2: 자유도(Degrees of Freedom)
df_Between = k - 1 = 3 - 1 = 2
df_Within = N - k = 10 - 3 = 7
df_Total = N - 1 = 10 - 1 = 9
자유도의 의미:
- df_Between = 2: 세 그룹 평균 중 두 개만 자유롭게 변할 수 있음 (세 번째는 전체 평균에 의해 결정)
- df_Within = 7: 각 그룹 내에서 자유롭게 변할 수 있는 관찰값의 수
Step 3: 평균제곱(Mean Square)
MS_Between = SS_Between / df_Between
= 5.311 / 2
= 2.656
MS_Within = SS_Within / df_Within
= 3.417 / 7
= 0.488
평균제곱의 의미:
- MS는 "자유도당 평균 변동"입니다
- 단순히 SS를 df로 나눔으로써 비교 가능한 척도로 표준화합니다
Step 4: F-통계량 계산
F = MS_Between / MS_Within
= 2.656 / 0.488
= 5.44
해석: F = 5.44는 "집단 간 변동이 집단 내 변동의 5.44배"라는 의미입니다.
Step 5: p-value 결정
F-분포표에서 df₁=2, df₂=7, F=5.44에 해당하는 p-value를 찾으면:
p ≈ 0.04 < 0.05
결론: p < 0.05이므로 귀무가설을 기각합니다. 즉, 세 감기약의 효과는 통계적으로 유의하게 다릅니다.
ANOVA Table 정리
| Source of Variation | SS | df | MS | F | p-value |
| Between Groups | 5.311 | 2 | 2.656 | 5.44 | 0.040 |
| Within Groups | 3.417 | 7 | 0.488 | - | - |
| Total | 8.728 | 9 | - | - | - |
- SS : 전체 변동을 집단 간/집단 내로 분해
- df : 각 변동의 자유도
- MS : SS를 df로 나눈 값 (비교 가능한 척도)
- F : MS_Between을 MS_Within으로 나눈 비율
- p-value: F-통계량이 나올 확률 (귀무가설 하에서)
일원분산분석 결과, 약 종류에 따라 평균 회복 기간에 유의한 차이가 있었으며(F(2,7)=5.44, p=0.040), 이는 약 효과가 단순한 개인차를 넘어 실제로 존재함을 의미합니다.
'Data Analysis > Statistics' 카테고리의 다른 글
| [기초통계] p-value의 의미와 오해 ("p < 0.05"가 전부가 아니다) (0) | 2026.02.24 |
|---|---|
| [기초통계] 검정력(Statistical Power) (표본은 몇 명이나 필요할까) (0) | 2026.02.20 |
| [기초통계] 제1종 오류 vs 제2종 오류 (어떤 실수가 더 위험한가) (0) | 2026.02.20 |
| [기초통계] 가설검정의 구조 (귀무가설, p-value, 유의수준) (2) | 2026.02.19 |
| [기초통계] t-test 검정이란? (0) | 2026.01.31 |
HELLO WORLD
안녕하세요. 데이터로 말하는 분석가 모모입니다.
데이터를 구조화하고 분석하는 과정과 실무에 활용되는 도구 중심의 내용을 기록합니다.