본문 바로가기
수학&통계학

교차 검증 (홀드아웃, K-폴드, 층화 K-폴드, LpOCV / LOOCV)

by 코스믹구구 2026. 5. 13.
728x90
모델을 학습시키고 나면 "이 모델이 새로운 데이터에서도 잘 작동할까?"를 검증해야 한다.
학습에 사용한 데이터로 평가하면 당연히 좋게 나오므로, 학습에 쓰지 않은 독립 데이터로 평가해야 한다.
이 과정을 체계적으로 수행하는 방법이 교차 검증(Cross-Validation)이다.

1. 교차 검증이 왜 필요한가?

모델을 학습 데이터 전체에 최대한 맞추면 학습 데이터에서는 성능이 매우 좋지만, 실제 새로운 데이터에서는 성능이 떨어지는 과적합(Overfitting)이 발생할 수 있다.

교차 검증은 데이터를 분할하거나 재표본 추출(resampling)해서 학습에 사용하지 않은 데이터로 모델을 평가하는 방법이다. 이를 통해 세 가지를 달성할 수 있다.

  • 과적합 탐지 — 학습 데이터 성능과 검증 데이터 성능의 차이를 확인
  • 모델 선택 — 여러 알고리즘이나 하이퍼파라미터 조합 중 더 나은 것을 선택
  • 일반화 성능 추정 — 실제 환경에서 모델이 얼마나 잘 작동할지 미리 예측
💡 학습 데이터 vs 평가 데이터 — 반드시 분리해야 하는 이유
시험 공부를 할 때 이미 본 문제로만 연습하면 실력이 아닌 암기 능력을 측정하게 된다.
모델도 마찬가지다. 학습에 쓴 데이터로 평가하면 실제 성능이 아닌 "암기 능력"을 측정하는 것이다.
→ 두 데이터는 반드시 겹치지 않아야 하며(배반적, exclusive), 이 원칙이 교차 검증의 핵심이다.

 

데이터 분할 구조

📌 기본 분할: 학습 데이터 vs 평가 데이터
Training Dataset (학습)Test모델 적합 및 학습에 활용최종 성능 평가

분할 비율은 보통 학습:평가 = 7:3 또는 8:2로 설정한다. 경우에 따라 학습-검증-평가의 3분할(4:3:3, 6:2:2 등)도 사용한다.

학습 데이터 (Training Data)
모델의 적합 및 학습에 활용.
파라미터를 이 데이터로 학습한다.
검증 데이터 (Validation Data)
3분할 시 추가. 하이퍼파라미터 튜닝,
여러 모델 비교에 활용한다.
평가 데이터 (Test Data)
최종 모델의 성능 평가에만 활용.
학습과 검증 중에는 절대 보지 않는다.

 

2. 홀드아웃 검증 (Holdout Validation)

전체 데이터를 한 번만 분할해서 학습과 평가에 사용하는 가장 단순한 방법이다. "홀드아웃"이란 평가용 데이터를 따로 떼어놓고 학습 중에는 사용하지 않는다는 뜻이다.

 

장점
빠르고 단순하다.
계산 비용이 낮다.
대용량 데이터에 적합하다.
단점
데이터를 한 번만 분할하므로 분할 방식에 따라 결과가 크게 달라질 수 있다.
데이터가 적을 때 학습 데이터가 충분하지 않을 수 있다.
⚠️ 홀드아웃의 핵심 주의사항
검증 데이터(validation set)와 평가 데이터(test set)를 혼동하지 말아야 한다.
하이퍼파라미터를 튜닝할 때 평가 데이터를 보면 그 데이터에 과적합된 모델이 만들어진다.
→ 최종 모델 선택 후 딱 한 번만 평가 데이터로 성능을 확인해야 한다.

 

3. K-폴드 교차 검증 (K-Fold Cross-Validation)

데이터를 K개의 폴드(fold, 그룹)로 나누고, 1개 폴드를 검증 데이터로, 나머지 (K−1)개를 학습 데이터로 사용한다. 이 과정을 K번 반복해서 각각의 평가 지표를 계산하고, 최종적으로 K개 지표의 평균을 모델 성능으로 삼는다.

장점
모든 관측치가 학습과 검증에 각각 한 번씩 사용된다.
홀드아웃보다 신뢰도 높고 안정적인 성능 추정이 가능하다.
데이터가 적을 때 특히 유용하다.
단점
K번 반복하므로 계산 비용이 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-폴드는 각 폴드에서 원본 데이터의 클래스 비율이 유지되도록 분할한다. 분류 모델, 특히 클래스 불균형 데이터에서 필수적으로 사용한다.

💡 클래스 불균형(Class Imbalance)이란?
하나의 클래스가 다른 클래스보다 훨씬 많은 경우다.
예) 사기 거래 탐지: 정상 거래 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개의 모델을 적합한다.

LOOCV 장점
데이터를 최대한 학습에 활용한다 (n−1개).
편의(bias)가 낮고 데이터 손실이 거의 없다.
소규모 데이터셋에 적합하다.
LOOCV 단점
n번 모델을 적합해야 해서 계산 비용이 매우 크다.
분산(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회 평가
728x90
반응형