학습에 사용한 데이터로 평가하면 당연히 좋게 나오므로, 학습에 쓰지 않은 독립 데이터로 평가해야 한다.
이 과정을 체계적으로 수행하는 방법이 교차 검증(Cross-Validation)이다.
1. 교차 검증이 왜 필요한가?
모델을 학습 데이터 전체에 최대한 맞추면 학습 데이터에서는 성능이 매우 좋지만, 실제 새로운 데이터에서는 성능이 떨어지는 과적합(Overfitting)이 발생할 수 있다.
교차 검증은 데이터를 분할하거나 재표본 추출(resampling)해서 학습에 사용하지 않은 데이터로 모델을 평가하는 방법이다. 이를 통해 세 가지를 달성할 수 있다.
- 과적합 탐지 — 학습 데이터 성능과 검증 데이터 성능의 차이를 확인
- 모델 선택 — 여러 알고리즘이나 하이퍼파라미터 조합 중 더 나은 것을 선택
- 일반화 성능 추정 — 실제 환경에서 모델이 얼마나 잘 작동할지 미리 예측
시험 공부를 할 때 이미 본 문제로만 연습하면 실력이 아닌 암기 능력을 측정하게 된다.
모델도 마찬가지다. 학습에 쓴 데이터로 평가하면 실제 성능이 아닌 "암기 능력"을 측정하는 것이다.
→ 두 데이터는 반드시 겹치지 않아야 하며(배반적, exclusive), 이 원칙이 교차 검증의 핵심이다.
데이터 분할 구조
분할 비율은 보통 학습:평가 = 7:3 또는 8:2로 설정한다. 경우에 따라 학습-검증-평가의 3분할(4:3:3, 6:2:2 등)도 사용한다.
파라미터를 이 데이터로 학습한다.
여러 모델 비교에 활용한다.
학습과 검증 중에는 절대 보지 않는다.
2. 홀드아웃 검증 (Holdout Validation)
전체 데이터를 한 번만 분할해서 학습과 평가에 사용하는 가장 단순한 방법이다. "홀드아웃"이란 평가용 데이터를 따로 떼어놓고 학습 중에는 사용하지 않는다는 뜻이다.

계산 비용이 낮다.
대용량 데이터에 적합하다.
데이터가 적을 때 학습 데이터가 충분하지 않을 수 있다.
검증 데이터(validation set)와 평가 데이터(test set)를 혼동하지 말아야 한다.
하이퍼파라미터를 튜닝할 때 평가 데이터를 보면 그 데이터에 과적합된 모델이 만들어진다.
→ 최종 모델 선택 후 딱 한 번만 평가 데이터로 성능을 확인해야 한다.
3. K-폴드 교차 검증 (K-Fold Cross-Validation)
데이터를 K개의 폴드(fold, 그룹)로 나누고, 1개 폴드를 검증 데이터로, 나머지 (K−1)개를 학습 데이터로 사용한다. 이 과정을 K번 반복해서 각각의 평가 지표를 계산하고, 최종적으로 K개 지표의 평균을 모델 성능으로 삼는다.

홀드아웃보다 신뢰도 높고 안정적인 성능 추정이 가능하다.
데이터가 적을 때 특히 유용하다.
K가 클수록 모델 적합 횟수가 늘어난다.
일반적으로 K=5 또는 K=10이 많이 사용된다.
K=5: 각 반복에서 80%를 학습, 20%를 검증 — 빠르고 실용적
K=10: 각 반복에서 90%를 학습, 10%를 검증 — 더 안정적이지만 시간 소요
K=n(데이터 수): LOOCV (Leave-One-Out Cross-Validation) — 가장 철저하지만 매우 느림
4. 층화 K-폴드 교차 검증 (Stratified K-Fold Cross-Validation)
일반 K-폴드는 데이터를 무작위로 나누기 때문에, 특정 클래스가 하나의 폴드에 몰릴 수 있다. 예를 들어 전체 데이터에서 양성이 10%밖에 없는데, 어떤 폴드에는 양성이 하나도 없을 수 있다.
층화 K-폴드는 각 폴드에서 원본 데이터의 클래스 비율이 유지되도록 분할한다. 분류 모델, 특히 클래스 불균형 데이터에서 필수적으로 사용한다.
하나의 클래스가 다른 클래스보다 훨씬 많은 경우다.
예) 사기 거래 탐지: 정상 거래 99%, 사기 거래 1%
이 경우 일반 K-폴드로 분할하면 일부 폴드에 사기 거래가 전혀 포함되지 않을 수 있다.
→ 층화 K-폴드로 각 폴드에 사기 거래를 고르게 배분해야 한다.
• 언더샘플링(Under-sampling): 다수 클래스에서 일부만 사용
• 오버샘플링(Over-sampling): 소수 클래스를 복제해서 더 많이 사용 (예: SMOTE)
→ 이 방법들은 교차 검증과 독립적으로 데이터 전처리 단계에서 적용한다.
5. LpOCV와 LOOCV
LpOCV (Leave-p-out Cross-Validation)
전체 관측치 중 p개를 평가 데이터로 선택하고, 나머지로 학습한다. 전체 관측치 n개에서 p개를 선택하는 모든 조합(nCp)만큼 반복하므로 관측치 수가 많으면 현실적으로 불가능하다.
LOOCV (Leave-One-Out Cross-Validation)
LpOCV에서 p=1인 특수한 경우다. 매 반복마다 관측치 하나만 평가 데이터로 사용하고 나머지 n−1개로 학습한다. n번 반복하며 n개의 모델을 적합한다.
편의(bias)가 낮고 데이터 손실이 거의 없다.
소규모 데이터셋에 적합하다.
분산(variance)이 높아 추정 결과가 불안정할 수 있다.
오늘날 대규모 데이터에는 실용적이지 않다.
6. 교차 검증 방법 비교
| 방법 | 분할 횟수 | 계산 비용 | 편의(Bias) | 분산(Variance) | 적합 상황 |
|---|---|---|---|---|---|
| 홀드아웃 | 1회 | 낮음 | 높을 수 있음 | 높음 | 대용량 데이터 |
| K-폴드 (K=5) | 5회 | 중간 | 낮음 | 중간 | 일반적 상황 |
| K-폴드 (K=10) | 10회 | 중간-높음 | 낮음 | 낮음 | 정확한 추정 필요 시 |
| 층화 K-폴드 | K회 | 중간 | 낮음 | 낮음 | 분류, 불균형 데이터 |
| LOOCV | n회 | 매우 높음 | 매우 낮음 | 높음 | 소규모 데이터 |
1. 모델 선택: 여러 알고리즘(랜덤포레스트, XGBoost, SVM 등)을 같은 K-폴드로 평가 후 비교
2. 하이퍼파라미터 튜닝: Grid Search + K-폴드로 최적 파라미터 탐색
3. 최종 평가: 선택된 모델을 전체 학습 데이터로 재학습 후, 한 번도 보지 않은 테스트 데이터로 최종 평가
→ 교차 검증은 "어느 모델/파라미터가 좋은가"를 결정하는 과정에서 사용하고, 최종 성능 보고는 별도의 테스트 데이터로 한 번만 수행해야 한다.
📌 핵심 정리
- 교차 검증 목적: 과적합 탐지, 모델 선택, 일반화 성능 추정
- 핵심 원칙: 학습 데이터와 평가 데이터는 겹치지 않아야 한다 (배반적)
- 홀드아웃: 1회 분할. 빠르지만 분할 방식에 결과가 민감. 대용량에 적합
- K-폴드: K번 반복, 모든 데이터를 학습·검증에 활용. 지표의 평균이 최종 성능
- K=5 또는 10: 실무에서 가장 많이 사용. K가 클수록 안정적이나 느림
- 층화 K-폴드: 각 폴드에 클래스 비율 유지. 분류 모델, 불균형 데이터에 필수
- LOOCV: p=1 LpOCV. 편의 낮지만 계산 비용 매우 크다. 소규모 데이터에 사용
- 최종 평가: 교차 검증으로 모델 선택 → 전체 학습 데이터로 재학습 → 테스트 데이터로 1회 평가
'수학&통계학' 카테고리의 다른 글
| 서포트 벡터 머신 (0) | 2026.05.14 |
|---|---|
| 나이브 베이즈 분류 (0) | 2026.05.14 |
| 모형 평가 지표 (회귀지표, 분류지표, 비지도학습 지표) (0) | 2026.05.13 |
| 카이제곱(χ²) 검정, F분포 ANOVA, 비모수 검정 (0) | 2026.05.13 |
| t분포를 활용한 가설 검정 (0) | 2026.05.13 |