Prognozy szeregów czasowych z danymi dziennymi: ARIMA z regresorem

15

Korzystam z dziennych szeregów czasowych danych o sprzedaży, które zawierają około 2 lata codziennych punktów danych. Na podstawie niektórych samouczków / przykładów online próbowałem zidentyfikować sezonowość danych. Wydaje się, że istnieje cotygodniowa, miesięczna i prawdopodobnie roczna okresowość / sezonowość.

Na przykład są dni wypłaty, szczególnie w przypadku efektu pierwszego dnia miesiąca, który utrzymuje się przez kilka dni w tygodniu. Istnieją również pewne szczególne efekty wakacyjne, które można łatwo rozpoznać po odnotowaniu spostrzeżeń.

Wyposażony w niektóre z tych obserwacji, spróbowałem:

  1. ARIMA (z pakietem R-prognozy Arimaiz niego auto.arima), przy użyciu regresora (i innych wartości domyślnych wymaganych w funkcji). Regresor, który utworzyłem, jest w zasadzie macierzą wartości 0/1:

    • Zmienne 11-miesięczne (n-1)
    • 12 zmiennych świątecznych
    • Nie udało mi się ustalić części dotyczącej wypłaty ... ponieważ jest to trochę bardziej skomplikowany efekt, niż myślałem. Efekt wypłaty działa inaczej, w zależności od dnia tygodnia pierwszego miesiąca.

    Użyłem 7 (tj. Tygodniowej częstotliwości) do modelowania szeregów czasowych. Próbowałem testu - prognozowanie 7 dni na raz. Wyniki są rozsądne: średnia dokładność dla prognozy 11 tygodni wynosi tygodniową średnią RMSE do 5%.

  2. Model TBATS (z pakietu R-prognozy) - z wykorzystaniem wielu sezonowości (7, 30,4375, 365.25) i oczywiście bez regresora. Dokładność jest zaskakująco lepsza niż model ARIMA przy tygodniowym średnim RMSE 3,5%.

    W tym przypadku model bez błędów ARMA działa nieco lepiej. Teraz, jeśli zastosuję współczynniki tylko do efektów świątecznych z modelu ARIMA opisanego w punkcie 1, do wyników modelu TBATS tygodniowa średnia RMSE poprawi się do 2,95%

Teraz, nie mając zbyt dużego zaplecza ani wiedzy na temat podstawowych teorii tych modeli, mam dylemat, czy to podejście TBATS jest w ogóle słuszne. Mimo że znacznie poprawia RMSE w teście 11 tygodni, zastanawiam się, czy może utrzymać tę dokładność w przyszłości. Lub nawet jeśli zastosowanie efektów świątecznych z ARIMA do wyniku TBATS jest uzasadnione. Wszelkie uwagi od któregokolwiek / wszystkich autorów będą mile widziane.

Link do danych testowych

Uwaga: Wykonaj „Zapisz link jako”, aby pobrać plik.

CKI
źródło
1
Witamy na stronie @CKI. Jeśli możesz przesłać swoje dane do dowolnego miejsca w sieci, możesz opublikować link tutaj.
gung - Przywróć Monikę
Chciałbym dowiedzieć się więcej o tym, jak skonfigurowano regresory.
orbital
Manekiny 6 dni tygodnia, 11 manekinów miesięcznych i dni wolne to proste regresory 0/1. Ustalony dzień miesiąca, wyprzedzenie i opóźnienie w czasie wakacji, trend czasowy, puls sezonowy i puls oparte są na wyszukiwaniu heurystycznym.
Tom Reilly
Więc CKI, jak to rozwiązałeś?
Tom Reilly,
Witaj CKI, czy możesz udostępnić część skryptu R użytego do utworzenia matrycy sezonowości
Ahmed

Odpowiedzi:

9

Powinieneś oceniać modele i prognozy z różnych źródeł w różnych horyzontach, a nie jedną liczbę, aby zmierzyć podejście.

Zakładam, że twoje dane pochodzą z USA. Wolę ponad 3 lata codziennych danych, ponieważ możesz mieć dwa święta lądujące w weekend i nie czytać w dni powszednie. Wygląda na to, że twój wpływ na Święto Dziękczynienia jest dniem wolnym w 2012 roku lub wystąpił jakiś błąd zapisu i spowodował, że model nie wykorzystał efektu Święta Dziękczynienia.

Stycznia są zwykle niskie w zestawie danych, jeśli wyglądasz na% roku. Weekendy są wysokie. Manekiny odzwierciedlają to zachowanie .... MONTH_EFF01, FIXED_EFF_N10507, FIXED_EFF_N10607

Odkryłem, że użycie komponentu AR z danymi dziennymi zakłada, że ​​wzorzec z ostatnich dwóch tygodni w dniu tygodnia jest taki, jak ogólnie jest wzorzec, co jest dużym założeniem. Zaczęliśmy od 11 manekinów miesięcznych i 6 manekinów codziennych. Niektóre wypadły z modelu. B ** 1 oznacza, że ​​dzień po wakacjach występuje opóźnienie. Było 6 specjalnych dni w miesiącu (dni 2, 3, 2, 2, 29, 30 - 21 mogą być fałszywe?) I 3 trendy czasowe, 2 pulsacje sezonowe (w których dzień tygodnia zaczął odbiegać od typowo, 0 przed tymi danymi i 1 co 7 dni później) i 2 wartości odstające (zwróć uwagę na Święto Dziękczynienia!) Uruchomienie zajęło niecałe 7 minut. Pobierz wszystkie wyniki tutaj www.autobox.com/se/dd/daily.zip

Zawiera szybki i brudny arkusz XLS, aby sprawdzić, czy model ma sens. Oczywiście, XLS% są w rzeczywistości złe, ponieważ są prymitywnymi punktami odniesienia.

Spróbuj oszacować ten model:

Y(T) =  .53169E+06                                                                                        
       +[X1(T)][(+  .13482E+06B** 1)]                                       M_HALLOWEEN
       +[X2(T)][(+  .17378E+06B**-3)]                                       M_JULY4TH
       +[X3(T)][(-  .11556E+06)]                                            M_MEMORIALDAY
       +[X4(T)][(-  .16706E+06B**-4+  .13960E+06B**-3-  .15636E+06B**-2                                                 
       -  .19886E+06B**-1)]                                                 M_NEWYEARS
       +[X5(T)][(+  .17023E+06B**-2-  .26854E+06B**-1-  .14257E+06B** 1)]   M_THANKSGIVI
       +[X6(T)][(-  71726.    )]                                            MONTH_EFF01
       +[X7(T)][(+  55617.    )]                                            MONTH_EFF02
       +[X8(T)][(+  27827.    )]                                            MONTH_EFF03
       +[X9(T)][(-  37945.    )]                                            MONTH_EFF09
       +[X10(T)[(-  23652.    )]                                            MONTH_EFF10
       +[X11(T)[(-  33488.    )]                                            MONTH_EFF11
       +[X12(T)[(+  39389.    )]                                            FIXED_EFF_N10107
       +[X13(T)[(+  63399.    )]                                            FIXED_EFF_N10207
       +[X14(T)[(+  .13727E+06)]                                            FIXED_EFF_N10307
       +[X15(T)[(+  .25144E+06)]                                            FIXED_EFF_N10407
       +[X16(T)[(+  .32004E+06)]                                            FIXED_EFF_N10507
       +[X17(T)[(+  .29156E+06)]                                            FIXED_EFF_N10607
       +[X18(T)[(+  74960.    )]                                            FIXED_DAY02
       +[X19(T)[(+  39299.    )]                                            FIXED_DAY03
       +[X20(T)[(+  27660.    )]                                            FIXED_DAY05
       +[X21(T)[(-  33451.    )]                                            FIXED_DAY21
       +[X22(T)[(+  43602.    )]                                            FIXED_DAY29
       +[X23(T)[(+  68016.    )]                                            FIXED_DAY30
       +[X24(T)[(+  226.98    )]                                            :TIME TREND        1                   1/  1   1/ 3/2011   I~T00001__010311stack
       +[X25(T)[(-  133.25    )]                                            :TIME TREND      423                  61/  3   2/29/2012   I~T00423__010311stack
       +[X26(T)[(+  164.56    )]                                            :TIME TREND      631                  91/  1   9/24/2012   I~T00631__010311stack
       +[X27(T)[(-  .42528E+06)]                                            :SEASONAL PULSE  733                 105/  5   1/ 4/2013   I~S00733__010311stack
       +[X28(T)[(-  .33108E+06)]                                            :SEASONAL PULSE  370                  53/  6   1/ 7/2012   I~S00370__010311stack
       +[X29(T)[(-  .82083E+06)]                                            :PULSE           326                  47/  4  11/24/2011   I~P00326__010311stack
       +[X30(T)[(+  .17502E+06)]                                            :PULSE           394                  57/  2   1/31/2012   I~P00394__010311stack
      +                    +   [A(T)]
Tom Reilly
źródło