Time-Series

[Time-Series] 시계열 데이터에서의 교차검증(Cross-Validation)

언킴 2022. 5. 25. 10:35
반응형

머신러닝이나 딥러닝, 통계 모델을 다루다 보면 모델의 예측 성능 및 적합도를 판단하기 위해 혹은 과적합(Over-fitting)을 방지하기 위해 교차검증을 사용한다. 교차검증은 LOOCV(Leave-One-Out Cross Validation) 혹은 k-fold Cross Validation을 주로 사용하지만 시계열 데이터의 경우 이와 같은 방식을 사용하게 되면 문제가 발생한다. 시계열 데이터는 시간의 순서를 고려해야하기에 이같은 방식을 사용하면 시간의 흐름이 뒤바뀌어 제대로된 성능을 발휘할 수 없기 때문이다. 그렇다면 시계열 데이터에서 교차검증은 어떤 식으로 수행 해야할까?

 

좌: Nested Cross-Validation (Rolling), 우: Walk-Forward (Blocking)

Nested Cross-ValidationRolling이라고도 부르며 Rolling basis로 교차 검증을 수행하는 것이다. 이와 같은 방식을 사용하게 되면, 각 Loop 마다 모델의 input Shape가 달라진다. 만약 input Shape가 달라도 큰 문제가 되지 않는 데이터인 경우에는 이와 같은 방식을 사용하면 된다. 그러나, input Shape가 다른 값을 입력으로 받는 경우는 실제 필드에서는 자주 접할 수 없다. 따라서 Blocking 방식을 통해 데이터를 블록화해서 실험을 진행한다. 

 

Blocking을 할 때 slide를 얼마나 지정해야 하는지에 대한 issue는 연구자가 정하기 나름이다. 일반적으로는 sliding을 1로 설정해 1 step씩 이동하면서 예측하는 경우가 많다. slide를 얼마로 지정해야하고 하는 것에 대한 정해진 정답은 없으니 학습 결과를 확인하면서 정하면 된다. 다만, sliding을 1로 지정하는 경우 데이터가 overlap되어 과적합이 발생할 수 있으니 주의하여야 한다.