[번역] 교차 검증 테크닉에 대한 가이드(5가지 방법 소개)
(참고) 이 글을 읽기 전에 혹시 교차 검증이 무엇인지, 그리고 왜 필요한지? Train / Test / Validation set이 무엇인지부터 궁금하시다면 다음 링크를 참고해주세요!
[번역] 당신은 Train, Validation & Test Set을 올바르게 사용하고 있습니까? (tistory.com)
단일 검증 세트에서 기계 학습 모델을 조정하고 검증하는 것은 때때로 오해의 소지가 있을 수 있습니다.
단일 학습-테스트 분할과 같은 기존 검증 방법은 구현하기 쉽지만 때로는 지나치게 낙관적인 결과를 얻을 수 있습니다.
이는 데이터의 운이 좋은 무작위 분할로 인해 발생할 수 있으며, 이로 인해 검증 세트에서는 매우 잘 수행되지만 새로운, 보이지 않는 데이터에서는 제대로 수행되지 않는 모델이 생성됩니다.
이것이 바로 우리가 단순한 단일 세트 검증 대신 교차 검증을 자주 사용하는 이유입니다.
교차 검증에는 사용 가능한 데이터를 하위 집합(subset)으로 반복적으로 분할하고, 몇 가지 하위 집합에 대해 모델을 훈련하고, 나머지 하위 집합에 대한 유효성을 검사하는 작업이 포함됩니다.
교차 검증의 가장 큰 장점은 기존 검증 방법에 비해 모델 성능에 대한 더 강력하고 편향되지 않은 추정치를 제공한다는 것입니다.
맨위에 있는 이미지는 가장 일반적으로 사용되는 5가지 교차 검증 기술을 시각적으로 요약한 것입니다.
1. Leave-One-Out Cross-Validation (LOOCV)
우리가 흔히 LOOCV라고 부르는 Leave-One-Out Cross-Validation은 다음과 같은 특징을 갖습니다.
- 검증을 위해 하나의 데이터 포인트를 남겨둡니다.
- 나머지 데이터 포인트에 대해 모델을 훈련합니다. (N - 1개 대상, N : 전체 데이터 셋에 포함된 데이터 수)
- 모든 지점에 대해 반복합니다.
- 수많은 데이터 포인트가 있는 경우 이는 사실상 불가능합니다. 이는 모델 수가 데이터 포인트 수와 동일하기 때문입니다.
- 이는 Leave-p-Out 교차 검증으로 확장할 수 있습니다. 여기서 각 반복에서 p개의 관측값은 검증용으로 예약되고 나머지는 훈련에 사용됩니다.
2. K-Fold Cross-Validation (K-Fold CV)
K-Fold CV에서는 전체 데이터 세트를 균등한 크기의 K개 부분으로 나누고, 각 부분을 돌아가면서 한 번씩 테스트 셋으로 사용됩니다. 나머지 K-1개 부분은 트레이닝 셋으로 사용됩니다. 이 방법은 데이터의 다양한 부분을 효과적으로 활용할 수 있어 데이터 세트의 전체적인 성능 평가에 좋으며, LOOCV보다 계산 비용이 낮습니다.
- 데이터를 동일한 크기의 k개 하위 집합으로 분할
- 검증을 위해 하나의 하위 집합을 선택
- 나머지 하위 집합에 대해 모델 훈련
- 모든 하위 집합에 대해 이 과정을 반복
3. Rolling Cross-Validation
Rolling Cross-Validation은 주로 시계열 데이터에 적용되며, 시간의 흐름에 따라 훈련 및 테스트 세트가 순차적으로 이동합니다. 이 방법은 시간에 따른 데이터의 변화를 잘 반영할 수 있습니다.
ex> 첫 3개월 데이터로 모델을 학습하고, 다음 달 데이터로 테스트를 하고, 이를 반복합니다.
- 주로 시간적 구조를 가진 데이터에 사용
- 데이터 분할은 고정된 크기의 training window를 사용하며 시간적 순서를 따름
- 모델은 후속 창에서 평가됨
4. Blocked Cross-Validation
Blocked Cross-Validation은 데이터를 연속적인 블록으로 나누고, 각 블록을 별도의 테스트 셋으로 사용합니다. 이는 시계열 데이터나 공간적으로 연관된 데이터에서 유용합니다.
ex> 시계열 데이터를 연속적인 기간으로 나누어 각 기간을 별도의 블록으로 취급합니다.
- 시계열 데이터에 적용 가능한 또 다른 일반적인 교차검증 기법
- 롤링 교차 검증과 달리, 한 창에서 다음 창으로 분산이 눈에 띄게 변하지 않는 경우 데이터 조각은 의도적으로 짧게 유지
- 롤링 교차 검증 대비 적은 계산만으로도 수행 가능
(참고) 롤링 교차 검증(Rolling Cross-Validation)과 블록 교차 검증(Blocked Cross-Validation) 비교
[공통점]
1. 시계열 데이터 적용: 두 방법 모두 주로 시계열 데이터에 사용. 시간적 순서가 중요한 데이터에서 효과적인 검증 방법.
2. 순차적 데이터 분할: 데이터를 순차적으로 분할. 시간의 흐름을 반영하여 테스트 세트가 훈련 세트보다 뒤에 오도록 함.
3. 시간적 의존성 고려: 시간적 의존성을 유지하는 방식으로 데이터 분할. 시간적으로 연속성을 가진 데이터 특성 고려.
[차이점]
1. 분할 방식:
a) 롤링 교차 검증: 훈련 및 테스트 윈도우가 시간에 따라 '롤링' 또는 '슬라이딩'되는 방식.
ex> 첫 번째 반복에서는 처음 6개월을 훈련 데이터, 그 다음 1개월을 테스트 데이터로 사용. 다음 반복 시 훈련 윈도우를 1개월 앞으로 옮기고, 테스트 윈도우도 마찬가지로 이동
b) 블록 교차 검증: 데이터를 시간적 또는 공간적으로 연속적인 '블록'으로 나눔. 각 블록은 별도의 테스트 세트로 사용
ex> 한 해를 네 분기로 나누어 각 분기를 별도의 테스트 세트로 사용할 수 있음
2. 유연성:
a) 롤링 교차 검증: 더 유연하며, 특히 짧은 시간 간격에서 빈번한 업데이트가 필요한 경우에 적합
b) 블록 교차 검증: 보다 고정된 구조, 더 긴 시간 간격의 데이터에 적합
3. 적용 분야:
a) 롤링 교차 검증: 짧은 기간의 패턴 파악 시 유용, 더 미세한 시간 단위의 변화 포착 가능
b) 블록 교차 검증: 장기적인 트렌드나 계절성을 반영하는 데 더 적합
두 방법 모두 시계열 데이터의 특성과 분석 목적에 따라 선택되어야 합니다. 롤링 교차 검증은 더 동적이고 짧은 시간 간격의 변화를 반영하는 반면, 블록 교차 검증은 더 긴 시간 간격과 장기적인 트렌드를 반영하는 데 적합합니다.
5. Stratified Cross-Validation (층화 교차 검증)
계층화 교차 검증은 각 클래스의 비율을 유지하면서 데이터 세트를 나눕니다. 이는 특히 불균형한 클래스 분포를 가진 데이터에 적합하며, 각 클래스가 훈련 및 테스트 세트에 고르게 분포되도록 합니다. (불균형한 데이터 세트에서 특정 클래스가 과소/과대평가되는 방지)
ex> 어떤 클래스가 전체의 20%를 차지한다면, 각 훈련 및 테스트 세트에서도 그 클래스가 20%를 차지하도록 합니다.
- 위에서 살펴본 4가지 기법들은 불균형 데이터 세트에는 작동하지 않을 수 있습니다. 따라서 이 기법은 주로 불균형 분포를 따르는 데이터에서 클래스 분포를 유지하는 데 사용됨
- 파티셔닝은 클래스 분포가 유지되도록 보장함