교차 검증 (Cross-Validation)¶
개요¶
모델의 성능을 추정할 때, 단일 훈련/테스트 분할은 분할 방법에 따라 결과가 크게 달라지는 노이즈가 많은 추정이다. 교차 검증(Cross-Validation, CV)은 데이터를 여러 번 다르게 분할하여 모든 데이터를 훈련과 검증에 모두 사용하면서도 일반화 성능의 안정적인 추정치를 얻는 방법이다.
교차 검증은 단순한 평가 기법이 아니라, 하이퍼파라미터 튜닝과 모델 선택의 기반이 된다.
핵심 개념¶
k-Fold 교차 검증¶
데이터를 \(k\)개의 동일한 크기의 부분집합(fold)으로 나누고, 각 반복에서 1개 fold를 검증에, 나머지 \(k-1\)개를 훈련에 사용한다. \(k\)번 반복하면 모든 데이터가 정확히 한 번씩 검증에 사용된다.
gantt
title 5-Fold 교차 검증
dateFormat X
axisFormat %s
section Fold 1
검증 : 0, 1
훈련 : 1, 5
section Fold 2
훈련 : 0, 1
검증 : 1, 2
훈련 : 2, 5
section Fold 3
훈련 : 0, 2
검증 : 2, 3
훈련 : 3, 5
section Fold 4
훈련 : 0, 3
검증 : 3, 4
훈련 : 4, 5
section Fold 5
훈련 : 0, 4
검증 : 4, 5 보고: 평균과 표준편차를 함께 보고한다.
k 선택의 편향-분산 트레이드오프:
| k 값 | 편향 | 분산 | 계산 비용 |
|---|---|---|---|
| 작은 k (예: 2) | 높음 (적은 훈련 데이터) | 낮음 | 낮음 |
| 큰 k (예: 20) | 낮음 | 높음 (fold 간 유사) | 높음 |
| k = 5 또는 10 | 적절한 균형 | 적절한 균형 | 보통 |
Kohavi (1995)의 연구에 따르면, k = 10이 일반적으로 좋은 절충점이다. 층화(stratified) 10-fold가 실무 기본값으로 많이 사용된다.
상세 내용¶
층화 k-Fold (Stratified k-Fold)¶
각 fold에서 클래스 분포를 원본과 동일하게 유지한다. 불균형 분류에서 필수적이다.
- 분류: 각 fold의 양성/음성 비율이 전체 데이터와 동일
- 회귀: 목표 변수를 구간(bin)으로 나누어 층화 가능
층화하지 않으면, 특정 fold에 소수 클래스가 매우 적거나 아예 없을 수 있어 성능 추정이 불안정해진다.
Leave-One-Out 교차 검증 (LOOCV)¶
\(k = n\) (각 fold에 샘플 하나). 즉, 매번 1개 샘플만 빼고 나머지 전부로 훈련한다.
- 장점: 거의 비편향적 일반화 오차 추정 (훈련 데이터 \(n-1\)개 사용)
- 단점: 분산이 매우 높고, 계산 비용이 큼 (\(n\)번 훈련)
- 특수한 경우: 선형 모델에서는 Hat matrix \(h_{ii}\)를 이용해 한 번의 학습으로 LOOCV를 정확히 계산할 수 있다
- 사용 시기: 데이터가 매우 적을 때 (수십 개 수준)
반복 k-Fold (Repeated k-Fold)¶
k-fold를 서로 다른 무작위 분할로 여러 번 반복한다.
- 효과: 성능 추정의 분산을 줄인다
- 일반적 설정: 5x2 CV (2-fold를 5회 반복), 10x10 CV (10-fold를 10회 반복)
- 비용: 반복 횟수 \(\times\) \(k\)만큼 훈련이 필요
시계열 교차 검증 (Time-Series Split)¶
시계열 데이터에서 표준 k-fold는 미래 데이터로 과거를 예측하는 데이터 누수(data leakage)를 발생시킨다.
gantt
title 시계열 교차 검증 (Expanding Window)
dateFormat X
axisFormat %s
section Split 1
훈련 : 0, 2
테스트 : 2, 3
section Split 2
훈련 : 0, 3
테스트 : 3, 4
section Split 3
훈련 : 0, 4
테스트 : 4, 5
section Split 4
훈련 : 0, 5
테스트 : 5, 6 | 방법 | 설명 |
|---|---|
| 확장 윈도우 (Expanding Window) | 훈련 기간이 점차 늘어남: \([1..t]\)로 훈련, \([t+1..t+h]\)로 테스트 |
| 슬라이딩 윈도우 (Sliding Window) | 고정 길이 훈련: \([t-w..t]\)로 훈련, \([t+1..t+h]\)로 테스트 |
| Gap 추가 | 자기상관(autocorrelation) 누수 방지를 위해 훈련과 테스트 사이에 간격 |
| Walk-Forward | 실제 운영 환경 모사: 시간이 지남에 따라 모델을 재학습 |
그룹 k-Fold (Group k-Fold)¶
그룹 내 샘플들이 상관될 때 (예: 한 환자의 여러 검사 결과, 한 사용자의 여러 클릭), 같은 그룹의 모든 샘플이 같은 fold에 있어야 한다.
- 그룹 간에 데이터가 나뉘어야만 진정한 일반화 성능을 측정할 수 있다
- 그룹을 무시하면 같은 환자의 데이터가 훈련과 테스트에 동시에 들어가 누수가 발생한다
중첩 교차 검증 (Nested Cross-Validation)¶
flowchart TD
A["전체 데이터"] --> B["외부 CV (k_outer fold)"]
B --> C["Fold 1: 훈련 세트"]
B --> D["Fold 1: 테스트 세트"]
C --> E["내부 CV (k_inner fold)"]
E --> F["최적 하이퍼파라미터 선택"]
F --> G["선택된 하이퍼파라미터로<br/>훈련 세트 전체 학습"]
G --> H["테스트 세트에서 평가"]
H --> I["이 과정을 k_outer번 반복"] - 외부 루프: 일반화 성능 추정
- 내부 루프: 하이퍼파라미터 튜닝 / 모델 선택
- 필요한 이유: 같은 CV를 튜닝과 평가에 모두 사용하면 낙관적 편향 발생
- 계산 비용: \(k_{\text{outer}} \times k_{\text{inner}}\)번 학습
- 일반적 설정: 5x5 또는 10x5
교차 검증 전략 비교¶
| 전략 | 장점 | 단점 | 추천 상황 |
|---|---|---|---|
| k-Fold (k=10) | 좋은 편향-분산 균형 | i.i.d. 가정 | 범용 기본값 |
| Stratified k-Fold | 불균형에 강건 | i.i.d. 가정 | 불균형 분류 |
| LOOCV | 거의 비편향 | 높은 분산, 높은 비용 | 매우 작은 데이터 |
| Repeated k-Fold | 낮은 분산 | 높은 비용 | 안정적 추정 필요 시 |
| Time-Series Split | 시간 순서 보존 | 초기 fold 훈련 데이터 적음 | 시계열 데이터 |
| Group k-Fold | 그룹 상관 처리 | 그룹 정보 필요 | 그룹 구조 데이터 |
| Nested CV | 비편향 성능 + 튜닝 | 매우 높은 비용 | 공정한 모델 비교 |
언제 사용하는가¶
- 모델의 일반화 성능을 추정할 때 → k-Fold CV (기본값: 층화 10-fold)
- 하이퍼파라미터 튜닝 + 성능 추정을 동시에 할 때 → 중첩 CV
- 시계열 데이터를 다룰 때 → 시계열 분할 (절대 표준 k-fold 사용 금지)
- 환자/사용자 등 그룹 구조가 있을 때 → 그룹 k-Fold
- 논문에서 모델 비교를 보고할 때 → 반복 k-Fold + 통계적 검정
흔한 오해와 함정¶
-
"전처리를 CV 밖에서 해도 된다" — 스케일링, 특성 선택 등 전처리는 반드시 CV 루프 안에서 수행해야 한다. 전체 데이터로 전처리하면 검증 세트 정보가 훈련에 누수된다. 이것이 가장 흔한 실수 중 하나다.
-
"표준 k-fold는 모든 데이터에 적용된다" — k-fold는 i.i.d. (독립 동일 분포) 가정을 한다. 시계열, 공간 데이터, 그룹 구조 데이터에서는 이 가정이 깨진다.
-
"LOOCV가 항상 최선이다" — LOOCV는 편향은 낮지만 분산이 매우 높다. fold 간 훈련 세트가 거의 동일하기 때문이다. 대부분의 경우 10-fold가 더 좋은 성능 추정을 준다.
-
"CV 점수의 평균만 보면 된다" — 표준편차도 반드시 보고해야 한다. 평균은 같지만 분산이 다른 모델은 안정성이 다르다.
-
"CV로 성능을 추정하면서 동시에 하이퍼파라미터를 튜닝할 수 있다" — 같은 CV를 두 목적에 사용하면 추정이 낙관적으로 편향된다. 중첩 CV를 사용해야 한다.
-
"데이터가 많으면 CV가 필요 없다" — 데이터가 충분하면 단일 hold-out도 괜찮을 수 있지만, CV는 성능 추정의 분산을 줄여주므로 여전히 가치가 있다.
다른 주제와의 연결¶
- 편향-분산 트레이드오프: k 선택 자체가 편향-분산 트레이드오프; CV로 과적합/과소적합 진단
- 모델 선택 기준: AIC/BIC는 CV의 빠른 근사; 정보 기준 vs CV 비교
- 통계적 검정: CV 결과에 기반한 모델 비교 검정 (corrected t-test, 5x2 CV test)
- 혼동 행렬과 분류 지표: CV 각 fold에서 계산하는 지표
- 회귀 지표: CV로 회귀 지표를 안정적으로 추정