#개념

교차 검증(Cross Validation)은 한정된 데이터를 여러 부분집합(fold)으로 나누고, 그중 일부를 검증용으로 남긴 채 나머지로 모델을 학습하는 과정을 부분집합을 바꿔 가며 반복하여 모델의 일반화 성능(generalization performance)을 추정하는 기법이다. 학습 데이터로 측정한 성능은 모델이 정답을 외웠는지 규칙을 배웠는지 구분하지 못하므로 지나치게 낙관적이며, 데이터를 학습용과 테스트용으로 한 번만 나누는 홀드아웃(hold-out) 방식은 어떤 표본이 테스트에 들어가느냐에 따라 결과가 크게 흔들린다. 교차 검증은 모든 표본이 정확히 한 번씩 검증에 쓰이도록 하여 이 분산을 줄이고, 데이터가 적을 때도 버리는 표본 없이 성능을 평가할 수 있게 한다. 이렇게 얻은 추정치는 과대적합(Overfitting) 여부를 판단하고, 여러 모델이나 하이퍼파라미터(Hyperparameter) 후보 중 하나를 고르는 모델 선택(model selection)의 근거가 된다.
가장 널리 쓰이는 형태는 k-겹 교차 검증(k-fold Cross Validation)이다. 데이터를 크기가 같은 $k$개의 겹으로 나눈 뒤, $i$번째 겹을 검증용으로 두고 나머지 $k-1$개로 학습하는 과정을 $i = 1, \dots, k$에 대해 반복하며, 최종 성능은 $k$개 점수의 평균 $\frac{1}{k}\sum_{i=1}^{k} \text{score}_i$로 보고한다. 점수의 표준편차까지 함께 제시하면 추정치의 신뢰도를 가늠할 수 있다. $k$의 선택은 편향-분산 트레이드오프와 계산 비용 사이의 절충이다. $k$가 작으면 각 학습 집합이 전체보다 훨씬 작아져 성능을 비관적으로(편향되게) 추정하고, $k$가 크면 학습 집합들이 서로 거의 겹쳐 추정치의 분산이 커지며 학습 횟수도 늘어난다. Kohavi의 고전적 실험 연구 이후 $k = 5$ 또는 $10$이 일반적인 기본값으로 자리 잡았다. 겹을 나누는 방식에 따라 다음과 같은 변형이 있다.
  • 계층화 k-겹(Stratified k-fold) : 각 겹의 클래스 비율이 전체 데이터의 비율과 같도록 분할한다. 불균형한 분류(Classification) 문제에서 특정 겹에 소수 클래스가 거의 없는 상황을 방지하며, 분류 문제에서는 기본 선택지로 권장된다.
  • 단일 잔류 교차 검증(Leave-One-Out Cross Validation, LOOCV) : $k$를 표본 수 $n$과 같게 두어 매번 하나의 표본만 검증에 쓰는 극단적 경우다. 학습 집합이 전체 데이터와 거의 같아 편향이 매우 작지만, $n$번 학습해야 하므로 비용이 크고 학습 집합들이 거의 동일하여 추정치의 분산이 클 수 있다. 표본이 매우 적은 경우나, 선형 모델처럼 닫힌 형태로 LOOCV 오차를 계산할 수 있는 경우에 유용하다.
  • 반복 k-겹(Repeated k-fold) : 무작위 분할을 여러 번 반복하여 분할 방식에 따른 우연한 변동을 더욱 줄인다.
  • 그룹 k-겹(Group k-fold) : 같은 환자, 같은 사용자, 같은 기기에서 나온 표본처럼 서로 독립이 아닌 표본을 하나의 그룹으로 묶어, 한 그룹이 학습과 검증에 동시에 나타나지 않도록 분할한다.
  • 중첩 교차 검증(Nested Cross Validation) : 하이퍼파라미터 탐색용 내부 루프와 성능 추정용 외부 루프를 분리하여, 튜닝에 사용된 데이터로 성능을 평가하는 낙관 편향을 제거한다.
시간 순서가 있는 데이터에는 표준 k-겹 교차 검증을 그대로 적용해서는 안 된다. 무작위로 겹을 나누면 미래 시점의 표본으로 학습하고 과거 시점을 예측하게 되어, 실제 운영 환경에서는 절대 얻을 수 없는 정보를 모델이 사용하게 되기 때문이다. 시계열 교차 검증(Time Series Cross Validation)은 이를 막기 위해 검증 집합이 항상 학습 집합보다 시간적으로 뒤에 오도록 분할한다. 시작 시점을 고정하고 학습 구간을 점점 늘려 가는 확장 창(expanding window) 방식과, 학습 구간의 길이를 고정한 채 앞으로 밀어 가는 이동 창(rolling window) 방식이 대표적이며, 이를 원점 전진 검증(forward chaining, rolling-origin evaluation)이라고도 한다. 학습 구간과 검증 구간 사이에 일정 간격(gap)을 두어 예측 시차나 자기상관에 의한 정보 유입을 차단하기도 한다. scikit-learn의 TimeSeriesSplit이 이러한 분할을 제공한다. 한편 Bergmeir 등(2018)은 잔차가 상관되지 않는 순수 자기회귀 모델에서는 표준 k-겹도 타당할 수 있음을 보였으나, 실무에서는 운영 시나리오를 가장 충실히 재현하는 시간 순서 기반 분할을 사용하는 것이 안전하다.
교차 검증의 신뢰성을 가장 크게 위협하는 것은 데이터 누수(Data Leakage)다. 데이터 누수는 예측 시점에 사용할 수 없는 정보가 학습 과정에 스며들어 검증 점수가 실제보다 부풀려지는 현상이다. 가장 흔한 형태는 전처리 단계에서 발생한다. 정규화의 평균과 표준편차, 결측치 대체값, 특징 선택, 목표 인코딩 등을 전체 데이터에 대해 먼저 계산한 뒤 겹을 나누면, 검증 겹의 통계가 이미 학습에 반영된 상태가 된다. 따라서 모든 데이터 의존적 변환은 각 겹의 학습 부분에서만 적합(fit)하고 검증 부분에는 변환(transform)만 적용해야 하며, scikit-learn의 Pipeline처럼 전처리와 모델을 하나로 묶어 교차 검증 루프 안에서 함께 학습시키는 것이 이를 보장하는 가장 확실한 방법이다. 그 밖에도 예측 대상이 결정된 이후에야 생성되는 특징을 사용하는 목표 누수(target leakage), 동일 개체의 중복 표본이 학습과 검증에 나뉘어 들어가는 그룹 누수, 시계열에서 미래 정보를 쓰는 시간 누수가 있으며, 이러한 누수가 있으면 교차 검증 점수는 높지만 배포 후 성능은 급격히 떨어진다. 교차 검증 점수가 비현실적으로 좋다면 먼저 누수를 의심해야 한다.
교차 검증은 하이퍼파라미터 튜닝과 결합될 때 가장 큰 가치를 발휘한다. 격자 탐색(grid search), 무작위 탐색(random search), 베이지안 최적화 등은 후보 설정마다 교차 검증 점수를 계산하여 가장 좋은 설정을 고르는데, 홀드아웃 하나에만 의존하면 우연히 그 분할에 잘 맞는 설정이 선택되는 검증 집합에 대한 과대적합이 일어나기 쉽다. 다만 교차 검증 점수로 설정을 고른 뒤 같은 점수를 최종 성능으로 보고하는 것 역시 낙관적 편향을 낳으므로, 별도의 테스트 집합을 끝까지 손대지 않고 남겨 두거나 중첩 교차 검증을 사용해야 한다. 최종 모델은 보통 선택된 하이퍼파라미터로 전체 학습 데이터에 대해 다시 학습시키며, 교차 검증에서 나온 $k$개 모델의 예측을 평균하는 방식은 앙상블 학습(Ensemble Learning)의 한 형태로 활용되기도 한다. 계산 비용이 큰 딥러닝에서는 $k$번의 전체 학습이 부담스러워 단일 검증 집합을 쓰는 경우가 많지만, 데이터가 적거나 성능 차이가 미세한 실험을 비교할 때는 여전히 교차 검증이 가장 신뢰할 수 있는 평가 방법이다. 요컨대 교차 검증은 단순한 점수 계산 절차가 아니라, 데이터의 구조(독립성, 그룹, 시간 순서)를 반영하여 실제 배포 환경을 가장 충실하게 모사하는 분할을 설계하는 일이며, 그 설계가 잘못되면 어떤 정교한 모델도 올바르게 평가할 수 없다.

#관련 용어

과대적합
모델이 학습 데이터의 잡음까지 외워 새로운 데이터에서 성능이 떨어지는 현상
하이퍼파라미터
모델이 학습하지 않고 사람이 학습 전에 설정하는 값
모델 평가 지표
정확도, F1 점수, RMSE 등 교차 검증의 각 겹에서 계산하여 평균하는 성능 척도
k-겹 교차 검증
데이터를 k개의 겹으로 나누어 각 겹을 한 번씩 검증용으로 사용하며 k번 학습하는 방식
계층화 k-겹
각 겹의 클래스 비율이 전체와 같도록 분할하는 분류 문제용 교차 검증 방식
데이터 누수
예측 시점에 알 수 없는 정보가 학습에 사용되어 검증 성능이 실제보다 부풀려지는 현상

#직무 연관도

DA
Data Analyst
높음
예측 모델의 성능 보고가 신뢰할 만한지 판단하고 데이터 누수를 의심할 수 있는 감각이 필요하다
DS
Data Scientist
밀접
모델 선택과 하이퍼파라미터 튜닝의 근거가 되는 핵심 평가 방법으로, 데이터 구조에 맞는 분할 설계 능력이 요구된다
DE
Data Engineer
보통
학습 파이프라인에 전처리 누수가 없도록 구성하고 교차 검증을 자동화·병렬화하는 데 필요한 지식이다

#사용 사례

금융의료전자상거래제조통신인터넷 서비스
개요
교차 검증은 신용 평가 모델의 하이퍼파라미터 선택, 수요 예측 모델의 시계열 검증, 추천 모델의 오프라인 평가, 임상 예측 모델의 성능 검증 등 예측 모델을 만드는 거의 모든 과정에서 사용된다. 데이터가 적을수록, 그리고 모델 간 성능 차이가 미세할수록 홀드아웃 대신 교차 검증이 필요하다.
사례
의료 영상 분류 모델에서 한 환자의 여러 촬영 이미지를 무작위 k-겹으로 나누면 같은 환자의 이미지가 학습과 검증에 함께 들어가 정확도가 과대평가된다. 환자 단위로 겹을 나누는 그룹 k-겹 교차 검증을 적용하면 새로운 환자에 대한 실제 성능에 가까운 추정치를 얻을 수 있으며, 실제로 이 차이가 수 퍼센트포인트 이상 벌어지는 경우가 흔하다.

#참고 자료

#추천 포스트

© 2024 diki All rights reserved.