[Home] AI로 돌아가기
🔗 관련 문서: scikit-learn - Cross-validation
k-겹 교차검증k-fold Cross-validation
[목차로 돌아가기]
1. 정의
k-겹 교차검증(k-fold cross-validation)은 전체 데이터셋을 크기가 가능한 한 비슷한 k개의 상호 배타적인 부분집합(fold)으로 나누어 모델의 일반화 성능을 평가하는 재표본화 방법이다.
각 반복에서는 한 개의 fold를 검증 데이터로 사용하고, 나머지 k-1개 fold를 훈련 데이터로 사용한다. 이 과정을 검증 fold가 겹치지 않게 k번 반복하므로, 각 표본은 검증 데이터로 정확히 한 번 사용된다.
최종 성능은 k번 얻은 평가 점수의 평균으로 요약하며, fold별 점수의 표준편차를 함께 제시하면 분할에 따른 변동성도 확인할 수 있다.
핵심
교차검증은 모델을 최종 학습시키는 방법이라기보다, 모델·초매개변수·전처리 방법의 성능을 비교하고 검증하기 위한 평가 절차이다. 최종 선택이 끝난 뒤에는 보통 전체 훈련 데이터로 모델을 다시 학습한다.
[목차로 돌아가기]
2. 수행 절차
- 전체 데이터를 섞고(필요한 경우), 크기가 비슷한 k개의 fold로 분할한다.
- 첫 번째 fold를 검증용으로 두고 나머지 fold로 모델을 학습한다.
- 검증 fold에서 정한 평가 지표를 계산한다.
- 검증 fold를 차례로 바꾸어 총 k번 반복한다.
- k개 점수의 평균과 표준편차를 계산한다.
훈련 데이터 검증 데이터
5-fold 교차검증의 반복별 데이터 구성
fold별 점수를 $s_1,s_2,\ldots,s_k$라 하면 평균 교차검증 점수는
$$\bar{s}=\frac{1}{k}\sum_{i=1}^{k}s_i$$
이다. 표준편차가 작을수록 데이터 분할에 따른 성능 변동이 작다는 뜻이다.
[목차로 돌아가기]
3. 5-fold 계산 예시
데이터가 1,000개이고 각 fold의 크기가 같다면, 5-fold에서는 한 fold에 $1{,}000/5=200$개의 데이터가 들어간다. 따라서 각 반복마다 검증 데이터 200개, 훈련 데이터 800개를 사용한다.
데이터 1,000개에 5-fold 교차검증을 수행할 때, 한 번의 반복에서 사용하는 훈련 데이터와 검증 데이터의 개수는?
① 훈련 200개, 검증 800개
② 훈련 500개, 검증 500개
③ 훈련 800개, 검증 200개
④ 훈련 1,000개, 검증 1,000개
정답 ③
5개의 동일한 fold 중 1개(200개)를 검증에 사용하고, 나머지 4개(800개)를 훈련에 사용한다. 이 과정을 5번 반복하므로 각 데이터는 검증에 한 번, 훈련에 네 번 참여한다.
| 항목 | 계산 | 결과 |
| fold 수 | $k$ | 5개 |
| 한 fold의 크기 | $1{,}000/5$ | 200개 |
| 반복당 검증 데이터 | $1{,}000/5$ | 200개 |
| 반복당 훈련 데이터 | $1{,}000\times(5-1)/5$ | 800개 |
| 모델 학습 횟수 | $k$ | 5회 |
[목차로 돌아가기]
4. k값의 선택
일반적으로 k=5 또는 k=10을 자주 사용하지만, 항상 최적인 고정값은 아니다. 데이터 크기, 계산 비용, 클래스 비율 및 모델 학습 시간에 따라 결정해야 한다.
- k가 작을 때:
학습 횟수가 적어 빠르지만, 한 번에 검증에 쓰는 비율이 커지고 평가 결과가 분할 방식에 더 민감할 수 있다.
- k가 클 때:
각 반복에서 더 많은 데이터를 학습에 사용하지만 모델을 더 많이 학습해야 하므로 계산 비용이 증가한다.
- LOOCV:
$k=n$인 극단적 경우로, 표본 하나씩 검증한다. 학습을 n번 수행하므로 큰 데이터에서는 비용이 매우 높다.
[목차로 돌아가기]
5. 주요 변형 방법
| 방법 | 적합한 상황 | 핵심 원칙 |
Stratified k-fold 층화 k-겹 | 분류, 특히 클래스 불균형 | 각 fold의 클래스 비율을 전체 데이터와 비슷하게 유지 |
Group k-fold 그룹 k-겹 | 동일 피험자·구조물·현장의 반복 관측 | 같은 그룹의 표본이 훈련과 검증에 동시에 들어가지 않게 분리 |
Time-series split 시계열 분할 | 시간 순서가 있는 데이터 | 미래 데이터로 과거를 학습하는 누수를 방지 |
Repeated k-fold 반복 k-겹 | 분할 변동성을 더 안정적으로 추정 | 서로 다른 무작위 분할로 k-fold를 여러 번 반복 |
[목차로 돌아가기]
6. 장점과 주의사항
1) 장점
- 모든 관측값을 훈련과 검증에 활용하므로 단일 hold-out 분할보다 데이터 활용도가 높다.
- 여러 분할에서 평가하여 특정 한 번의 분할에 의존하는 위험을 줄인다.
- 모델과 초매개변수의 비교 기준을 일관되게 제공한다.
2) 주의사항
- 데이터 누수 방지:
표준화, 결측값 대체, 특징 선택, 데이터 증강은 각 반복의 훈련 fold에만 맞추고 검증 fold에는 그 결과만 적용해야 한다. 파이프라인 사용이 안전하다.
- 독립 테스트 세트 유지:
교차검증으로 모델과 초매개변수를 선택했다면, 최종 성능은 모델 선택에 사용하지 않은 테스트 세트에서 한 번 평가하는 것이 원칙이다.
- 데이터 구조 반영:
같은 피험자나 현장의 관측값, 공간·시간 상관성이 있는 표본을 임의로 나누면 성능이 과대평가될 수 있다.
- 계산 비용:
후보 모델이 m개라면 기본적으로 약 $m\times k$회의 학습이 필요하고, 반복 교차검증이나 중첩 교차검증에서는 더 늘어난다.
실무 점검
데이터가 독립·동일분포라는 단순 가정이 맞지 않는다면 일반 KFold를 바로 사용하지 말고, 층화·그룹·시계열 분할 중 데이터 생성 과정에 맞는 방법을 선택해야 한다.
용어: 국내에서는 ‘k-폴드 교차검증’, ‘k-겹 교차검증’, ‘k-분할 교차검증’이 함께 쓰인다. 이 문서에서는 ‘k-겹 교차검증’을 대표 용어로 사용하였다.