Previsione di serie storiche con dati giornalieri: ARIMA con regressore


15

Sto utilizzando una serie temporale giornaliera di dati sulle vendite che contiene circa 2 anni di punti dati giornalieri. Sulla base di alcuni tutorial / esempi online ho cercato di identificare la stagionalità nei dati. Sembra che vi sia una periodicità / stagionalità settimanale, mensile e probabilmente annuale.

Ad esempio, ci sono giorni di paga, in particolare il primo giorno di paga del mese con effetto che dura alcuni giorni durante la settimana. Ci sono anche alcuni effetti festivi specifici, chiaramente identificabili osservando le osservazioni.

Dotato di alcune di queste osservazioni, ho provato quanto segue:

  1. ARIMA (con Arimae auto.arimadal pacchetto R-forecast), utilizzando regressor (e altri valori predefiniti necessari nella funzione). Il regressore che ho creato è sostanzialmente una matrice di valori 0/1:

    • 11 mesi (n-1) variabili
    • 12 variabili vacanza
    • Impossibile capire la parte del giorno di paga ... dal momento che è un effetto leggermente più complicato di quanto pensassi. L'effetto payday funziona in modo diverso, a seconda del giorno della settimana del 1 ° mese.

    Ho usato 7 (cioè la frequenza settimanale) per modellare le serie temporali. Ho provato il test, prevedendo 7 giorni alla volta. I risultati sono ragionevoli: l'accuratezza media per una previsione di 11 settimane arriva alla media RMSE settimanale al 5%.

  2. Modello TBATS (dal pacchetto R-forecast) - utilizza la stagionalità multipla (7, 30.4375, 365.25) e ovviamente nessun regressore. La precisione è sorprendentemente migliore rispetto al modello ARIMA con una media settimanale del RMSE del 3,5%.

    In questo caso, il modello senza errori ARMA ha prestazioni leggermente migliori. Ora, se applico i coefficienti solo per gli effetti natalizi del modello ARIMA descritti nel n. 1, ai risultati del modello TBATS il RMSE settimanale avg migliora del 2,95%

Ora, senza avere molti retroscena o conoscenza delle teorie alla base di questi modelli, sono in un dilemma se questo approccio TBATS sia anche valido. Anche se sta migliorando significativamente l'RMSE nel test di 11 settimane, mi chiedo se possa sostenere questa precisione in futuro. O anche se l'applicazione degli effetti vacanza di ARIMA al risultato TBATS è giustificabile. Qualsiasi pensiero da parte di tutti / tutti i collaboratori sarà molto apprezzato.

Link per i dati di test

Nota: eseguire "Salva collegamento come" per scaricare il file.


1
Benvenuto nel sito, @CKI. Se riesci a caricare i tuoi dati in qualche luogo sul Web, puoi pubblicare un link qui.
gung - Ripristina Monica

Sono interessato a saperne di più su come sono stati impostati i regressori.
orbitale

I manichini del giorno 6 della settimana, 11 manichini mensili e le vacanze sono semplici regressori 0/1. Il giorno fisso del mese, in anticipo e in ritardo durante le festività, l'andamento temporale, il polso stagionale e il polso si basano su una ricerca euristica.
Tom Reilly,

Quindi CKI, come l'hai risolto?
Tom Reilly,

Ciao CKI, puoi condividere alcuni dei tuoi script R usati per creare la matrice della stagionalità
Ahmed

Risposte:


9

Dovresti valutare modelli e previsioni di origini diverse attraverso orizzonti diversi e non un solo numero per valutare un approccio.

Presumo che i tuoi dati provengano dagli Stati Uniti. Preferisco più di 3 anni di dati giornalieri in quanto puoi avere due vacanze in atterraggio in un fine settimana e non leggere nessun giorno feriale. Sembra che il tuo impatto sul Ringraziamento sia un giorno libero nel 2012 o che ci sia stato un errore di registrazione di qualche tipo e che al modello sia mancato l'effetto del Giorno del Ringraziamento.

I Januarys sono in genere bassi nel set di dati se si considera una percentuale dell'anno. I fine settimana sono alti. I manichini riflettono questo comportamento .... MONTH_EFF01, FIXED_EFF_N10507, FIXED_EFF_N10607

Ho scoperto che l'uso di un componente AR con dati giornalieri presuppone che il modello delle ultime due settimane del giorno della settimana sia come il modello in generale sia un grande presupposto. Abbiamo iniziato con 11 manichini mensili e 6 manichini giornalieri. Alcuni hanno abbandonato il modello. B ** 1 significa che c'è un impatto ritardato il giorno dopo una vacanza. Ci sono stati 6 giorni speciali del mese (i giorni 2,3,5,21,29,30 ---- 21 potrebbero essere spuri?) E 3 andamenti temporali, 2 impulsi stagionali (dove un giorno della settimana ha iniziato a deviare dal tipico, uno 0 prima di questi dati e un 1 ogni 7 giorni dopo) e 2 valori anomali (notare il ringraziamento!) Per l'esecuzione sono stati necessari meno di 7 minuti. Scarica tutti i risultati qui www.autobox.com/se/dd/daily.zip

Include un foglio XLS rapido e sporco per verificare se il modello ha senso. Ovviamente, l'XLS% è in effetti negativo in quanto sono benchmark grezzi.

Prova a stimare questo modello:

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)]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.