10.5 Regressione dinamica armonica

Quando ci sono lunghi periodi stagionali, una regressione dinamica con termini di Fourier è spesso migliore di altri modelli considerati in questo libro.19

Per esempio, i dati giornalieri possono avere una stagionalità annuale di lunghezza 365, i dati settimanali hanno un periodo stagionale di circa 52, mentre i dati osservati ogni mezz’ora possono avere diversi periodi stagionali, il più breve dei quali è il modello giornaliero di periodo 48.

Le versioni stagionali dei modelli ARIMA ed ETS sono progettate per periodi più brevi, come 12 per i dati mensili o 4 per i dati trimestrali. Il modello ETS() limita la stagionalità ad un periodo massimo di 24 per permettere dati orari ma non dati con un periodo stagionale più ampio. Il problema è che ci sono \(m-1\) parametri da stimare per gli stati stagionali iniziali dove \(m\) è il periodo stagionale. Quindi per valori grandi di \(m\), la stima diventa quasi impossibile.

La funzione ARIMA() permette un periodo stagionale fino a \(m=350\), ma in pratica di solito esaurisce la memoria quando il periodo stagionale è più di 200 circa. In ogni caso, la differenziazione stagionale di ordine elevato non ha molto senso — per i dati giornalieri si tratta di confrontare ciò che è successo oggi con ciò che è successo esattamente un anno fa e non c’è alcun vincolo che il modello stagionale sia regolare.

Quindi, per tali serie temporali, è preferibile un approccio di regressione armonica in cui il termine stagionale è modellato utilizzando termini di Fourier con le dinamiche temporali di breve termine gestite da un errore ARMA.

I vantaggi di questo approccio sono:

  • la possibilità di una stagionalità di qualsiasi lunghezza;
  • per i dati con più di un periodo stagionale, possono essere inclusi termini di Fourier di diverse frequenze;
  • il grado di lisciamento del modello stagionale può essere controllato da \(K\), vale a dire dal numero di coppie di Fourier sin e cos – il modello stagionale è più liscio per valori più piccoli di \(K\);
  • le dinamiche di breve termine sono facilmente gestibili con un semplice errore ARMA.

L’unico vero svantaggio (rispetto ad un modello ARIMA stagionale) è che la stagionalità è assunta come fissa — ovvero non è permesso che la componente stagionale cambi nel tempo. Tuttavia, in pratica, la stagionalità è di solito molto costante, quindi questo non è un grande svantaggio, tranne che per serie temporali molto lunghe.

Esempio: spesa per mangiare fuori in Australia

In questo esempio si mostra la combinazione di termini di Fourier per catturare la stagionalità con errori ARIMA introdotti al fine di catturare le altre dinamiche presenti nei dati. Per semplicità, si userà un esempio con dati mensili. Lo stesso approccio di modellazione con dati settimanali è discusso nel paragrafo 13.1.

Si utilizza la spesa mensile totale per caffè, ristoranti e servizi alimentari da asporto in Australia (bilioni di dollari) dal 2004 al 2018 effettuando una previsione per i 24 mesi successivi. Si fa variare \(K\), il numero di coppie sin e cos di Fourier, da \(K=1\) a \(K=6\) (che equivale ad includere le dummy stagionali). La figura 10.11 mostra il modello stagionale proiettato in avanti all’aumentare di \(K\). Si noti che all’aumentare di \(K\) i termini di Fourier catturano e proiettano un modello stagionale più “irregolare” e sono necessari modelli ARIMA più semplici per catturare le altre dinamiche. Il valore AICc è minimizzato per \(K=6\), con un salto significativo da \(K=4\) a \(K=5\). Le previsioni generate da questo modello sarebbero pertanto quelle da utilizzare.

aus_cafe <- aus_retail %>%
  filter(
    Industry == "Cafes, restaurants and takeaway food services",
    year(Month) %in% 2004:2018
  ) %>%
  summarise(Turnover = sum(Turnover))

fit <- model(aus_cafe,
  `K = 1` = ARIMA(log(Turnover) ~ fourier(K=1) + PDQ(0,0,0)),
  `K = 2` = ARIMA(log(Turnover) ~ fourier(K=2) + PDQ(0,0,0)),
  `K = 3` = ARIMA(log(Turnover) ~ fourier(K=3) + PDQ(0,0,0)),
  `K = 4` = ARIMA(log(Turnover) ~ fourier(K=4) + PDQ(0,0,0)),
  `K = 5` = ARIMA(log(Turnover) ~ fourier(K=5) + PDQ(0,0,0)),
  `K = 6` = ARIMA(log(Turnover) ~ fourier(K=6) + PDQ(0,0,0))
)

fit %>%
  forecast(h = "2 years") %>%
  autoplot(aus_cafe, level = 95) +
  facet_wrap(vars(.model), ncol = 2) +
  guides(colour = "none", fill = "none", level = "none") +
  geom_label(
    aes(x = yearmonth("2007 Jan"), y = 4250,
        label = paste0("AICc = ", format(AICc))),
    data = glance(fit)
  ) +
  labs(title= "Spesa mensile totale per cibo d'asporto",
       x = "Mese", y="bilioni di $")
Utilizzo di termini di Fourier e di errori ARIMA per la previsione della spesa mensile per mangiare fuori in Australia.

Figura 10.11: Utilizzo di termini di Fourier e di errori ARIMA per la previsione della spesa mensile per mangiare fuori in Australia.

Bibliografia

Young, P. C., Pedregal, D. J., & Tych, W. (1999). Dynamic harmonic regression. Journal of Forecasting, 18, 369–394. [DOI]

  1. Il termine “regressione armonica dinamica” è usato anche per una regressione armonica con parametri variabili nel tempo (Young et al., 1999).↩︎