Jak podzielić zestaw danych do prognozowania szeregów czasowych?


22

Mam historyczne dane o sprzedaży z piekarni (codziennie, ponad 3 lata). Teraz chcę zbudować model do przewidywania przyszłej sprzedaży (przy użyciu funkcji takich jak dzień tygodnia, zmienne pogodowe itp.).

Jak podzielić zestaw danych w celu dopasowania i oceny modeli?

  1. Czy musi to być chronologiczny podział pociągu / zatwierdzenia / testu?
  2. Czy zrobiłbym wtedy dostrajanie hiperparametrów z zestawem pociągu i sprawdzania poprawności?
  3. Czy (zagnieżdżona) walidacja krzyżowa jest złą strategią dla problemu szeregów czasowych?


EDYTUJ

Oto kilka linków, które napotkałem po przejściu na adres URL sugerowany przez @ ene100:

  • Rob Hyndman opisujący „pochodzenie prognozowania kroczącego” w teorii i praktyce (z kodem R)
  • innymi terminami na początek prognozowania kroczącego są „optymalizacja” ( tutaj lub tutaj ), „kroczący horyzont” lub „ruchomy początek”
  • Wydaje się, że techniki te nie zostaną zintegrowane ze scikit-learning w najbliższej przyszłości, ponieważ „zapotrzebowanie na te techniki i ich priorytetowość jest niejasna” (podana tutaj ).

I to jest kolejna propozycja dla szeregów czasowych krzyżowej walidacji.

Odpowiedzi:


8

Ten link z bloga Roba Hyndmana zawiera przydatne informacje: http://robjhyndman.com/hyndsight/crossvalidation/

Z mojego doświadczenia wynika, że ​​dzielenie danych na zbiory chronologiczne (rok 1, rok 2 itd.) I sprawdzanie stabilności parametrów w czasie jest bardzo przydatne w budowaniu czegoś, co jest solidne. Ponadto, jeśli dane są sezonowe lub można w inny oczywisty sposób podzielić je na grupy (np. Regiony geograficzne), wówczas sprawdzenie stabilności parametrów w tych podgrupach może również pomóc określić, jak solidny będzie model i czy ma sens, aby dopasować osobne modele dla oddzielnych kategorii danych.

Myślę, że testy statystyczne mogą być przydatne, ale wynik końcowy powinien również przejść „test węchu”.


3

1) Technicznie rzecz biorąc, nie musisz przeprowadzać testu poza próbą, jeśli używasz AIC i podobnych kryteriów, ponieważ pomagają one uniknąć nadmiernego dopasowania.

3) Nie rozumiem, jak można wykonać standardowe CV, ponieważ oznacza to szkolenie modelu szeregów czasowych z pewnymi brakującymi wartościami. Zamiast tego spróbuj użyć ruchomego okna do treningu i przewidzieć reakcję w jednym lub kilku punktach następujących po oknie.


3
AIC w szeregach czasowych często opiera się na błędzie prognozy jednego okresu do przodu. Nie mówi wiele o dynamicznej prognozie wyników z okresu n-tego. Dlatego absolutnie nie wystarczy.
Aksakal

Czy możesz podać referencje?
James

1

Często podchodzę do problemów z perspektywy bayesowskiej. W takim przypadku rozważyłbym użycie przesadzenia jako strategii. Oznacza to ustawienie prawdopodobieństwa dla danych, ale pomiń niektóre z wyników. Traktuj te wartości jako brakujące i modeluj te brakujące wyniki za pomocą odpowiednich zmiennych towarzyszących. Następnie obróć, przez co dane są pomijane. Możesz to zrobić w ramach np. 10-krotnej procedury CV.

Wdrożony w programie próbkującym oznacza to, że na każdym etapie rysujesz wartość kandydacką pominiętej wartości danych (wraz z parametrami) i oceniasz jej prawdopodobieństwo na podstawie proponowanego modelu. Po osiągnięciu stacjonarności otrzymujesz kontrfaktyczne wartości dla danego modelu, których możesz użyć do oceny błędu prognozowania: próbki te odpowiadają na pytanie „jak wyglądałby mój model przy braku tych wartości?” Pamiętaj, że prognozy te odziedziczą również niepewność wynikającą z niepewności występującej w szacunkach współczynników, więc kiedy zbierzecie wszystkie swoje przewidywane wartości na, np. 1 marca 2010 r. Razem, otrzymacie rozkład prognoz na tę datę.

Fakt, że te wartości są próbkowane, oznacza, że ​​nadal możesz używać terminów błędów, które zależą od dostępności pełnej serii danych (np. Średniej ruchomej), ponieważ na każdym etapie dostępna jest próbkowana wartość wyniku.


1

W twoim przypadku nie masz wielu opcji. Wygląda na to, że masz tylko jedną piekarnię. Tak więc, aby przeprowadzić test poza próbą, jedyną opcją jest oddzielenie czasu, tj. Próbka treningowa byłaby od początku do pewnego ostatniego momentu w czasie, a wstrzymanie trwałoby od tego momentu do dzisiaj.

yt=fa(t)+εtfa(t)ys<t


Brzmi obiecująco. Co to jest indeks dolny „s” w y_s <= t?
tobip

tyss<t

Wydaje mi się, że moja sprzedaż piekarni zależy raczej od czynników zewnętrznych. Nie sądzę, że jest to ściśle dynamiczny model szeregów czasowych, np. Ceny akcji. Według moich danych średni błąd średni ze zwykłym 5-krotnym CV jest tylko nieznacznie większy niż 5-krotny CV z szeregiem czasowym, który zachowuje chronologiczny porządek fałdów, jak opisano tutaj (np. 30,7 vs 33,8 dla ExtraTreesRegressor) . Nie jesteś pewien, czy jest to prawidłowy sposób empirycznego przetestowania modelu dynamicznego?
tobip

Coś takiego jak ARIMA byłoby modelem dynamicznym. Sprzedaż jest zwykle trwała, tzn. Dzisiejsza sprzedaż jest jak wczoraj.
Aksakal

0

Zastrzeżenie: Opisana tutaj metoda nie jest oparta na dokładnym odczytaniu literatury. Jest to moja najlepsza próba zaimprowizowania metody K-fold CV dla analizy zmiennych szeregów czasowych na wielu odmianach przy stosunkowo krótkich długościach okna wejściowego (zakładając brak / niską zależność w dłuższych okresach czasu), gdzie występował problem z niejednorodną obecnością źródeł danych okres zbierania danych.

Najpierw seria obserwacji jest przekształcana w szereg okien historii obserwacji o długości okno_długość, a krok 1 między oknami (bez kroku). Następnie zasadą jest podzielenie zestawu danych okna na „odłamki” wiele razy dłuższe niż okno_długość (ale znacznie więcej niż liczba instancji modelu) i rozdawanie odłamków (jak karty do gry) jako danych sprawdzania poprawności osobnym instancjom modelu. Aby modele były lepiej oddzielone, okno kwarantanny o długości okna na początku każdego odłamka jest wyłączone z wszelkiego szkolenia.

Modele są trenowane na wszystkich odłamkach oprócz ich własnych, a weryfikacja odbywa się na ich odłamkach. Sprawdzanie poprawności kolekcji / zestawu modeli odbywa się poprzez zsumowanie błędu sprawdzania poprawności dla wszystkich odłamków, przy czym każdy odłamek jest obsługiwany przez odpowiadający mu podmodel. Testowanie niewidocznych danych można wykonać przy użyciu średniej (lub innej odpowiedniej kombinacji) wyników wszystkich wyuczonych modeli.

Ta metoda ma na celu zmniejszenie zależności od systemu (i źródeł danych), które są takie same przez cały okres zbierania danych. Ma również na celu nadanie każdej szorstkiej części danych tego samego wpływu na model. Należy pamiętać, że aby nie dopuścić do szkód w oknach kwarantanny, długość fragmentu nie jest zbyt dobrze dopasowana do okresów, które (jak się oczekuje) pojawiają się w danych, takich jak (zazwyczaj) cykle dzienne, tygodniowe i roczne.

Model zespołu może być może źle obsługiwać zupełnie nowe dane. (Jeszcze nie wiem.)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.