[번역] 교차 검증 테크닉에 대한 가이드(5가지 방법 소개)
(참고) 이 글을 읽기 전에 혹시 교차 검증이 무엇인지, 그리고 왜 필요한지? Train / Test / Validation set이 무엇인지부터 궁금하시다면 다음 링크를 참고해주세요!
[번역] 당신은 Train, Validation & Test Set을 올바르게 사용하고 있습니까? (tistory.com)
[번역] 당신은 Train, Validation & Test Set을 올바르게 사용하고 있습니까?
안녕하세요. 오늘은 데이터 분석 및 모델링 시 매우 익숙한 개념이지만, 그 차이를 명확히 하고 저도 복습하는 의미에서 Training Set, Test Set 그리고 Validation Set의 개념과 사용 방법에 대해서 알아
woomii.tistory.com
![](https://blog.kakaocdn.net/dn/epjsoa/btsAZ82VntH/fQiqxAUaKHykqrqwcdDf3K/img.jpg)
단일 검증 세트에서 기계 학습 모델을 조정하고 검증하는 것은 때때로 오해의 소지가 있을 수 있습니다.
단일 학습-테스트 분할과 같은 기존 검증 방법은 구현하기 쉽지만 때로는 지나치게 낙관적인 결과를 얻을 수 있습니다.
이는 데이터의 운이 좋은 무작위 분할로 인해 발생할 수 있으며, 이로 인해 검증 세트에서는 매우 잘 수행되지만 새로운, 보이지 않는 데이터에서는 제대로 수행되지 않는 모델이 생성됩니다.
![](https://blog.kakaocdn.net/dn/KgN7x/btsA30C0XWH/ZKrq6kjctYXBeczymhHfkK/img.jpg)
이것이 바로 우리가 단순한 단일 세트 검증 대신 교차 검증을 자주 사용하는 이유입니다.
교차 검증에는 사용 가능한 데이터를 하위 집합(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개월 데이터로 모델을 학습하고, 다음 달 데이터로 테스트를 하고, 이를 반복합니다.
![](https://blog.kakaocdn.net/dn/REYSk/btsA22OMwdg/kzXCDqlSTc8h13tGyEtLrK/img.jpg)
- 주로 시간적 구조를 가진 데이터에 사용
- 데이터 분할은 고정된 크기의 training window를 사용하며 시간적 순서를 따름
- 모델은 후속 창에서 평가됨
4. Blocked Cross-Validation
Blocked Cross-Validation은 데이터를 연속적인 블록으로 나누고, 각 블록을 별도의 테스트 셋으로 사용합니다. 이는 시계열 데이터나 공간적으로 연관된 데이터에서 유용합니다.
ex> 시계열 데이터를 연속적인 기간으로 나누어 각 기간을 별도의 블록으로 취급합니다.
![](https://blog.kakaocdn.net/dn/cN0Rn2/btsAWgfYp9c/8umwUaw5C5RsuD92UzHTlk/img.jpg)
- 시계열 데이터에 적용 가능한 또 다른 일반적인 교차검증 기법
- 롤링 교차 검증과 달리, 한 창에서 다음 창으로 분산이 눈에 띄게 변하지 않는 경우 데이터 조각은 의도적으로 짧게 유지
- 롤링 교차 검증 대비 적은 계산만으로도 수행 가능
(참고) 롤링 교차 검증(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%를 차지하도록 합니다.
![](https://blog.kakaocdn.net/dn/bJTJNY/btsA4bYLpnc/boeMhUBLwkjToEaieFIXyK/img.jpg)
- 위에서 살펴본 4가지 기법들은 불균형 데이터 세트에는 작동하지 않을 수 있습니다. 따라서 이 기법은 주로 불균형 분포를 따르는 데이터에서 클래스 분포를 유지하는 데 사용됨
- 파티셔닝은 클래스 분포가 유지되도록 보장함