time series data의 cross validation에 대한 여러가지 고찰
time series data는 일반적인 cross validation으로 검증을 수행해도 무리가 없을까?
일반적인 cross validation을 수행하면 과거 미래 데이터가 무작위로 섞일 것이다.
미래를 예측하기 위해서는 그 이전의 정보를 사용하여 예측하는 것이 기본인데 무작위로 뒤섞인다면 당연히 예측 성능이 떨어질 것이다.
1. ordering by time
기본적인 방법 중 하나는 데이터를 시간 순서대로 정렬하고 validation set을 train set보다 미래에 있는 것으로 선택하고
test set도 validation set, train set보다 미래에 있는 데이터를 선택하는 것이다.
이게 가장 흔하고 자주 사용하는 방법같다
그러나 이 방법이 안좋은 점은 test set은 무작위로 선택되어야 정확한 평가가 가능한데 그렇지 않았다는 점이다.
2. nested cross validation
이것을 피하기 위해 nested cross validation을 사용하여 inner loop에서는 무작위로 데이터 set을 나눠서 평가하는 방법이 있지만
outer loop에서는 여전히 order를 지켜가며 나눠야하는데 무작위로 나누는 k-fold cross validation의 특성상 그럴 수가 없기때문에 좋은 방법까지는 아니다.
3. day forward chaining
어떻게든 무작위로 outer loop에서도 test set을 선택하는 방법을 생각하고자 또 다른 day forward chaining nested cross validation이 제안되었다.
예를 들어 5일차 dataset이 있다고 하면 1일 train set, 2일 validation set, 3일 test set을 1-fold,
1,2일 train set, 3일 validation set, 4일 test set을 2-fold,
1,2,3일 train set, 4일 validation set, 5일을 test set으로 나눈 3-fold를 사용하여 nested cross valdation을 사용한다
이것도 무작위로 선택한건 아닌것 같은데 내가 이해를 못한건지..
4. multiple time series data
data set이 여러개가 있는 multiple time series data는 어떻게 split을 하면 좋을까?
regular nested cross validation
regular nested cross validation은 예를 들어 2개의 time series A,B가 있다고 하자.
A,B 각각의 first half of day에 해당하는 데이터를 train set, 나머지 second half of day에 해당하는 데이터를 test set으로 나눈다.
그러나 무작위로 test set이 선택되지 않는 점이 여전히 아쉽다.
population informed nested cross validation
population informed nested cross validation은 오직 하나의 time series, 예를 들어 A에서만 train set, validation set, test set으로 ordering 하게 나누고
나머지 time series는 전부 train set으로 만드는 방법이다.
당연하지만 ordering하게 split하는 time series는 반복적으로 선택하여 반복적으로 검증을 진행한다(k-fold cross validation처럼?)
근데 뭐 완벽한 방법이 없듯이 다 장단점이 있는듯? 중요한 점은 time series는 고려해야할 사항이 조금 있다는 것
참고
https://towardsdatascience.com/time-series-nested-cross-validation-76adba623eb9
'정형데이터' 카테고리의 다른 글
정형데이터 분석에서 feature importance와 permutation importance (0) | 2023.12.08 |
---|---|
cross validation out of fold prediction (0) | 2023.12.07 |
데이터 전처리 - 이상치를 처리하는 방법의 기초 (0) | 2022.06.26 |
정형데이터에서 결측치를 처리하는 방법 (0) | 2022.06.24 |
연속형 변수를 전처리하는 방법은 무엇이 있고 왜 전처리를 해야하는가? (0) | 2022.06.19 |