🔶 분산분석 (Analysis of Variance, ANOVA)
- 세 개 이상의 집단(그룹) 간의 평균에 통계적으로 유의미한 차이가 있는지를 검증하는 데 사용되는 통계 기법
- 단 한 번의 분석으로 여러 그룹의 평균 차이를 검증하여 1종 오류를 방지
F-값 (F-statistic)
- 집단 간 분산: 각 그룹의 평균이 전체 데이터의 평균과 얼마나 다른지(그룹 간 차이가 클수록 이 분산이 커짐), 그룹 평균들 사이의 "차이"
- 집단 내 분산: 각 그룹 내부의 데이터가 얼마나 흩어져 있는지(그룹 내 데이터가 비슷할수록 이 분산이 작아짐), 같은 그룹 안에서의 "오차"나 "잡음"
➡️ ANOVA는 이 2가지 분산의 비율인 F-값을 계산
- F-값이 클수록 → 집단 간 차이가 집단 내 변동보다 크다 → 그룹 간 평균 차이가 통계적으로 유의하다고 판단
- 반대로 F-값이 작다면 → 그룹 간 평균 차이가 크지 않으며, 집단 내의 오차에 비해 뚜렷한 차이가 없다 → 유의한 차이 없음.
ANOVA의 기본 가정
- 정규성: 각 그룹의 데이터는 정규분포를 따라야 한다. (Shapiro-Wilk 검정으로 확인)
- 등분산성: 각 그룹의 오차(잔차) 분산은 서로 동일해야 한다. (Levene 검정으로 확인)
- 독립성: 각 그룹의 데이터는 서로 독립적이어야 한다.
🔶 일원 분산분석 (One-Way ANOVA)
- 하나의 범주형 독립변수가 하나의 연속형 종속변수에 미치는 영향을 분석할 때 사용
- 독립변수의 종류(그룹)에 따라 종속변수의 평균이 달라지는지를 확인
- p-value < 0.05 → 적어도 하나의 그룹에서 평균의 차이가 있다.
- p-value < 0.05 → 모든 그룹 간에 유의한 평균 차이가 없다.
🔶 사후 분석 (Post-Hoc Analysis)
- ANOVA나 크루스칼-왈리스 검정 이후에 구체적으로 어떤 그룹 쌍이 다른지를 알아보기 위해 수행하는 추가적인 검정
- p-value가 유의수준보다 작아서 "그룹 간에 차이가 있다"는 결론을 얻었을 때, 정확히 어느 그룹과 어느 그룹 사이에 차이가 있는지 알 수 없음
- 다중 비교에 따른 1종 오류의 증가를 통제해주는 신뢰성 높은 분석 방법
- 대표적인 방법
- 모수적 분석 경로: ANOVA → (결과가 유의하면) → Tukey's HSD
- 비모수적 분석 경로: Kruskal-Wallis Test → (결과가 유의하면) → Dunn's Test
💻 일원 분산분석 & 사후분석 실습
[ 제조업 관련 예시 ]
- 연구 질문: "A, B, C 세 생산 라인에서 생산된 제품의 평균 품질 점수에 차이가 있는가?"
- 독립변수: 생산 라인 (A, B, C - 3개 그룹)
- 종속변수: 품질 점수 (100점 만점, 연속형 데이터)
- 귀무가설(H₀): 세 생산 라인의 평균 품질 점수는 모두 동일하다. (μ_A=μ_B=μ_C)
- 대립가설(H₁): 적어도 한 생산 라인의 평균 품질 점수는 다르다.
1️⃣ 데이터 정의 및 시각화
# 1-1. 데이터 정의 (생산 라인별 품질 점수)
df = pd.DataFrame({
'score': [80, 82, 79, 81, 83, # 라인 A 품질 점수
76, 77, 75, 74, 78, # 라인 B 품질 점수
88, 85, 87, 86, 89], # 라인 C 품질 점수
'line': ['A']*5 + ['B']*5 + ['C']*5
})
# 1-2. 데이터 시각화 (Boxplot)+ 에러바(error bar)
sns.barplot(x='line', y='score', data=df, capsize=.1, palette='viridis')
# capsize는 오차 막대 끝부분 가로선
- 데이터 정의: 각 생산 라인에 5개의 샘플 품질 점수 포함 → 총 15개 데이터
- 시각화: 막대의 높이는 각 라인의 평균 점수를, 막대 위의 검은 선(오차 막대)은 95% 신뢰구간을 의미
→ 오차 막대(error bar)가 작을수록 해당 그룹 평균의 신뢰도가 높음
🔍 시각적 해석:
B 라인의 신뢰구간이 A와 C의 신뢰구간과 전혀 겹치지 않음
→ B 라인의 평균이 다른 라인들과 유의미하게 다를 가능성 있음
2️⃣ ANOVA의 기본 가정 검정
일원분산분석(ANOVA)을 수행하기 전에 반드시 정규성, 등분산성, 독립성 이 3가지 기본 가정을 만족하는지 확인해야 한다. A, B, C 생산라인에서 서로 다른 제품 샘플을 무작위로 추출했다는 가정하에 독립성은 성립한다고 판단하였다. 정규성 & 등분산성은 아래와 같이 통계 검정으로 확인하였다.
✔️ 정규성 검정 – Shapiro-Wilk Test
shapiro(line_a).pvalue
- 각 그룹의 점수 분포가 정규분포를 따르는지 확인
- p-value > 0.05 → 정규성을 만족
- p-value ≤ 0.05 → 정규성 불만족 → 비모수 검정 사용
🔍 해석: 세 그룹 모두 p-value = 0.9672 > 0.05 이므로 정규성 가정 만족
✔️ 등분산성 검정 – Levene’s Test
levene(line_a, line_b, line_c)
- 세 그룹들의 분산이 동일한지 확인
- p-value > 0.05 → 등분산성 만족
- p-value ≤ 0.05 → 등분산성 불만족
🔍 해석: p-value = 1.00 > 0.05 이므로 등분산성 가정 만족
3️⃣ 일원분산분석 (One-Way ANOVA)
하나의 범주형 독립변수의 종류(세 개의 그룹)에 따라 연속형 종속변수의 평균이 달라지는지를 확인하는 것이므로 일원분산분석 기법을 사용한다.
f_stat, p_value = f_oneway(line_a, line_b, line_c)
- F 통계량: 그룹 간 평균 차이가 크면 F 값이 커짐
- p-value: 귀무가설(H₀: 세 그룹 평균이 같다)을 검정
🔍 해석: p-value = 0.0000 < 0.05 → 귀무가설 기각
생산 라인 중 적어도 한 곳의 평균 품질 점수는 다른 라인과 통계적으로 유의미한 차이가 있음
(어떤 라인 간에 차이가 있는지는 사후 분석이 필요)
4️⃣ 사후 분석 (Tukey's HSD)
정확히 어떤 라인끼리 차이가 나는지 확인하기 위해 Tukey's HSD를 사후 분석으로 수행하였다.
# pairwise_tukeyhsd(종속변수, 그룹변수, 유의수준)
tukey_result = pairwise_tukeyhsd(endog=df['score'], groups=df['line'], alpha=0.05)
- p-adj : 유의확률 (보정된 p-value)
- reject: 귀무가설 기각 여부 (True: 차이가 유의함)
🔍 해석: 세 쌍이 모두 p < 0.05 & 'reject' 컬럼이 모두 True → 귀무가설 기각
→ 세 라인 모두 서로 유의미하게 다름
시각화
tukey_result.plot_simultaneous(figsize=(8, 6))
- x축: 각 라인의 평균 품질 점수
- y축: 각 생산 라인 (A, B, C)
🔍 해석: 세 라인의 평균 품질 점수에 대한 신뢰구간이 서로 겹치지 않음
→ A, B, C 세 생산 라인 모두 평균 품질 점수에 유의미한 차이가 있다.
💡예시 결론 도출
- 품질 극대화 목적 → 가장 높은 평균 품질 점수를 보인 C 라인을 주요 생산 라인으로 선택하거나, 생산 비중을 높임
- 품질 편차 최소화 목표 → 세 라인 간 편차가 크므로, 전체 라인의 품질 균일화를 위한 표준화 작업이 요구됨
👩🏻💻 관련 코딩 문제
[ 코드카타 ] 데이터 분석 | One-way ANOVA
철강 제조업체는 자사의 3가지 서로 다른 압연 라인(Line A, Line B, Line C)에서 생산된 철판의 두께(단위: g)가 서로 동일한지를 평가하고자 합니다. 각 생산 라인에서 무작위로 10개씩의 부품을 샘플
da-hong.tistory.com
'강의 > 데이터 분석 심화' 카테고리의 다른 글
[ 데이터 분석 심화 ] 통계학 | 상관관계 (0) | 2025.06.25 |
---|---|
[ 데이터 분석 심화 ] 통계학 | 회귀(Regression) (0) | 2025.06.24 |
[ 데이터 분석 심화 ] 통계학 | 가설검정 기법 (0) | 2025.06.20 |
[ 데이터 분석 심화 ] 통계학 | 확률분포의 종류 (0) | 2025.06.19 |
[ 데이터 분석 심화 ] 통계학 | 데이터 분석과 통계 (0) | 2025.06.18 |