Pytanie: Chcę się czegoś upewnić, czy stosowanie k-krotnej walidacji krzyżowej z szeregami czasowymi jest proste, czy też należy na to zwrócić szczególną uwagę?
Tło: modeluję 6-letni szereg czasowy (z łańcuchem pół-markowa), z próbką danych co 5 minut. Aby porównać kilka modeli, używam 6-krotnej walidacji krzyżowej, dzieląc dane na 6 lat, więc moje zestawy szkoleniowe (do obliczenia parametrów) mają długość 5 lat, a zestawy testowe mają długość 1 rok. Nie biorę pod uwagę kolejności czasowej, więc moje różne zestawy to:
- fold 1: trening [1 2 3 4 5], test [6]
- fold 2: trening [1 2 3 4 6], test [5]
- fold 3: trening [1 2 3 5 6], test [4]
- fold 4: trening [1 2 4 5 6], test [3]
- fold 5: trening [1 3 4 5 6], test [2]
- fold 6: trening [2 3 4 5 6], test [1].
Robię hipotezę, że każdego roku są od siebie niezależni. Jak mogę to zweryfikować? Czy istnieje odniesienie wskazujące na zastosowanie k-krotnej walidacji krzyżowej z szeregami czasowymi.
time-series
modeling
cross-validation
Mickaël S.
źródło
źródło
Odpowiedzi:
Szeregi czasowe (lub inne wewnętrznie uporządkowane dane) mogą stanowić problem przy krzyżowej weryfikacji. Jeśli jakiś wzór pojawi się w roku 3 i pozostanie przez lata 4-6, twój model może go wykryć, nawet jeśli nie był to rok 1 i 2.
Podejście, które czasem jest bardziej zasadnicze dla szeregów czasowych, to łączenie w przód, w którym procedura wyglądałaby mniej więcej tak:
To dokładniej modeluje sytuację, którą zobaczysz w czasie przewidywania, gdzie będziesz modelować na podstawie przeszłych danych i przewidywać na podstawie danych prognozujących. Daje to również poczucie zależności twojego modelowania od wielkości danych.
źródło
Metodą używaną do walidacji krzyżowej mojego modelu szeregów czasowych jest walidacja krzyżowa na bieżąco. Zacznij od małego podzbioru danych do celów szkoleniowych, prognozuj późniejsze punkty danych, a następnie sprawdź dokładność prognozowanych punktów danych. Te same prognozowane punkty danych są następnie uwzględniane jako część następnego zestawu danych szkoleniowych, a kolejne punkty danych są prognozowane.
Aby wszystko było intuicyjne, oto obraz tego samego:
Odpowiednikiem kodu R byłoby:
źródło
„Kanonicznym” sposobem przeprowadzania walidacji krzyżowej szeregów czasowych (przynajmniej zgodnie z opisem @Rob Hyndman) jest „przetoczenie” zestawu danych.
to znaczy:
Zasadniczo zestaw treningowy nie powinien zawierać informacji pojawiających się po zestawie testowym.
źródło
W większości sytuacji nie ma nic złego w stosowaniu bloków „przyszłych” danych do weryfikacji krzyżowej szeregów czasowych. W większości sytuacji odnoszę się do modeli danych stacjonarnych, którymi zwykle są modele. Np. Kiedy dopasujesz , z do szeregu, bierzesz różnice w szeregu i dopasowujesz model danych stacjonarnych do reszt.d > 0 dARIMA(p,d,q) d>0 d
Aby krzyżowa walidacja działała jako narzędzie wyboru modelu, potrzebujesz przybliżonej niezależności między szkoleniem a danymi testowymi. Problem z danymi szeregów czasowych polega na tym, że sąsiednie punkty danych są często wysoce zależne, więc standardowe sprawdzanie krzyżowe zakończy się niepowodzeniem. Rozwiązaniem tego problemu jest pozostawienie luki między próbką testową a próbką treningową po obu stronach próbki testowej . Powodem, dla którego musisz również pominąć lukę przed próbą testową, jest to, że zależność jest symetryczna, gdy poruszasz się do przodu lub do tyłu w czasie (pomyśl o korelacji).
Podejście to nosi nazwę walidacji krzyżowej (pomiń , usuń obserwacje po obu stronach próbki testowej) i jest opisane w tym artykule. W twoim przykładzie wyglądałoby to tak:v hhv v h
Gdzie h wskazuje, że obserwacje h próbki treningowej są usuwane po tej stronie.
źródło
Jak skomentował @thebigdog, „O zastosowaniu walidacji krzyżowej do oceny predyktorów szeregów czasowych” Bergmeir i in. omawia walidację krzyżową w kontekście stacjonarnych szeregów czasowych i określa, że Forward Chaining (proponowany przez innych odpowiedzi) jest nieprzydatny. Uwaga: w tym dokumencie łańcuchowanie do przodu nazywa się oceną ostatniego bloku:
„ Ocena modeli prognozowania szeregów czasowych: badanie empiryczne metod szacowania wydajności ” Cerqueira i in. zgadza się z tą oceną. Jednak w przypadku niestacjonarnych szeregów czasowych zamiast tego zalecają stosowanie odmiany Hold-Out, zwanej Rep-Holdout. W Rep-Holdout
a
w szeregu czasowym wybierany jest punktY
oznaczający początek danych testowych. Punkta
zostanie określony w oknie. Ilustruje to poniższy rysunek:Ten artykuł jest długi i wyczerpująco testuje prawie wszystkie inne metody wymienione w odpowiedziach na to pytanie za pomocą publicznie dostępnego kodu . Obejmuje to twierdzenie @Matthias Schmidtblaicher o uwzględnianiu luk przed i po danych testowych. Poza tym streściłem tylko gazetę. Faktyczne zakończenie pracy dotyczy drzewa decyzyjnego do oceny modeli szeregów czasowych!
źródło