10.3 Previsione

Per fare previsioni utilizzando un modello di regressione con errori ARIMA, si deve prevedere la parte di regressione del modello e la parte ARIMA del modello, e combinare i risultati. Come per i modelli di regressione ordinari, per ottenere le previsioni è necessario prima prevedere i predittori. Quando i predittori sono noti nel futuro (ad esempio, variabili legate al calendario, come l’ora, il giorno della settimana, ecc.) la soluzione è semplice. Ma quando i predittori sono a loro volta non noti, bisogna modellarli separatamente, oppure usare valori futuri presunti per ogni predittatore.

Esempio: consumi individuali e reddito negli Stati Uniti

Si calcoleranno le previsioni per i prossimi otto trimestri assumendo che i futuri cambiamenti percentuali del reddito personale disponibile siano uguali al cambiamento percentuale medio degli ultimi quarant’anni.

us_change_future <- new_data(us_change, 8) %>%
  mutate(Income = mean(us_change$Income))
forecast(fit, new_data = us_change_future) %>%
  autoplot(us_change) +
  labs(x ="Trimestre", y = "Variazione percentuale")
Previsioni ottenute regredendo la variazione percentuale della spesa per consumi sulla variazione percentuale del consumo disponibile, utilizzando un modello ARIMA(1,0,2) per l'errore.

Figura 10.4: Previsioni ottenute regredendo la variazione percentuale della spesa per consumi sulla variazione percentuale del consumo disponibile, utilizzando un modello ARIMA(1,0,2) per l’errore.

Gli intervalli di previsione per questo modello sono più stretti di quelli che si sarebbero ottenuti stimando un modello ARIMA senza covariate, perché si è adesso in grado di spiegare parte della variazione nei dati usando il predittore del reddito.

È importante rendersi conto che gli intervalli di previsione dei modelli di regressione (con o senza errori ARIMA) non tengono conto dell’incertezza nelle previsioni dei predittori e dovrebbero quindi essere interpretati come condizionati ai valori futuri presunti (o stimati) delle variabili predittrici.

Esempio: previsione della domanda di energia elettrica

La domanda giornaliera di energia elettrica può essere modellata in funzione della temperatura. Come si può osservare da una bolletta elettrica, si usa più elettricità nei giorni freddi per il riscaldamento e nei giorni caldi per l’aria condizionata. La maggiore domanda nei giorni freddi e caldi si riflette nella forma ad U della figura 10.5, dove la domanda giornaliera è rappresentata in funzione della temperatura massima giornaliera.

vic_elec_daily <- vic_elec %>%
  filter(year(Time) == 2014) %>%
  index_by(Date = date(Time)) %>%
  summarise(
    Demand = sum(Demand) / 1e3,
    Temperature = max(Temperature),
    Holiday = any(Holiday)
  ) %>%
  mutate(Day_Type = case_when(
    Holiday ~ "Holiday",
    wday(Date) %in% 2:6 ~ "Weekday",
    TRUE ~ "Weekend"
  ))

vic_elec_daily %>%
  ggplot(aes(x = Temperature, y = Demand, colour = Day_Type)) +
  geom_point() +
  labs(y = "Domanda di energia elettrica (GW)",
       x = "Temperatura massima giornaliera")
Domanda di energia elettrica giornaliera versus temperatura massima giornaliera per lo stato di Victoria in Australia nel 2014.

Figura 10.5: Domanda di energia elettrica giornaliera versus temperatura massima giornaliera per lo stato di Victoria in Australia nel 2014.

I dati salvati come vic_elec_daily includono la domanda totale giornaliera, le temperature massime giornaliere, e una variabile indicatrice che stabilisce se quel giorno è un giorno festivo. La figura 10.6 mostra la serie temporale sia della domanda giornaliera che delle temperature massime giornaliere. I grafici evidenziano la necessità di un modello dinamico non lineare.

vic_elec_daily %>%
  pivot_longer(c(Demand, Temperature)) %>%
  ggplot(aes(x = Date, y = value)) +
  geom_line() +
  facet_grid(name ~ ., scales = "free_y") + ylab("")
Domanda giornaliera di energia elettrica e temperatura massima giornaliera per lo stato di Vittoria in Australia nel 2014.

Figura 10.6: Domanda giornaliera di energia elettrica e temperatura massima giornaliera per lo stato di Vittoria in Australia nel 2014.

In questo esempio, si stima un modello di regressione quadratica con errori ARMA usando la funzione ARIMA(). Il modello include anche una variabile indicatrice per sapere se il giorno era un giorno lavorativo o meno.

fit <- vic_elec_daily %>%
  model(ARIMA(Demand ~ Temperature + I(Temperature^2) +
                (Day_Type == "Weekday")))
fit %>% gg_tsresiduals()
Diagnostiche dei residui di un modello di regressione dinamica per la domanda giornaliera di energia elettrica con effetti quadratici del giorno feriale e della temperatura.

Figura 10.7: Diagnostiche dei residui di un modello di regressione dinamica per la domanda giornaliera di energia elettrica con effetti quadratici del giorno feriale e della temperatura.

augment(fit) %>%
  features(.innov, ljung_box, dof = 9, lag = 14)
#> # A tibble: 1 × 3
#>   .model                                                     lb_stat lb_pvalue
#>   <chr>                                                        <dbl>     <dbl>
#> 1 "ARIMA(Demand ~ Temperature + I(Temperature^2) + (Day_Typ…    28.4 0.0000304

È visibile una chiara eteroschedasticità nei residui, con una varianza più alta in gennaio e febbraio, e una varianza più bassa in maggio. Il modello ha anche una certa autocorrelazione significativa nei residui, e l’istogramma dei residui mostra lunghe code. Tutti questi problemi con i residui possono influenzare la copertura degli intervalli di previsione, ma le previsioni puntuali dovrebbero andare ancora bene.

Utilizzando il modello stimato si effettua una previsione per 14 giorni a partire da giovedì 1 gennaio 2015 (un giorno non lavorativo essendo un giorno festivo per la festività del Capodanno). In questo caso, si potrebbero ottenere dall’ufficio meteorologico le previsioni per i prossimi 14 giorni. Ma ai fini dell’esempio si utilizzerà la previsione basata sugli scenari (come introdotto nel paragrafo 7.6) impostando la temperatura per i prossimi 14 giorni come costante al valore di 26 gradi.

vic_elec_future <- new_data(vic_elec_daily, 14) %>%
  mutate(
    Temperature = 26,
    Holiday = c(TRUE, rep(FALSE, 13)),
    Day_Type = case_when(
      Holiday ~ "Holiday",
      wday(Date) %in% 2:6 ~ "Weekday",
      TRUE ~ "Weekend"
    )
  )
forecast(fit, vic_elec_future) %>%
  autoplot(vic_elec_daily) +
  labs(title="Domanda giornaliera di energia elettrica: Victoria",
       x = "Data", y="GW")
Previsioni dal modello di regressione dinamica per la domanda giornaliera di energia elettrica. Tutte le temperature future sono state fissate a 26 gradi, e la variabile indicatrice per il giorno feriale è stata impostata usando i valori futuri noti.

Figura 10.8: Previsioni dal modello di regressione dinamica per la domanda giornaliera di energia elettrica. Tutte le temperature future sono state fissate a 26 gradi, e la variabile indicatrice per il giorno feriale è stata impostata usando i valori futuri noti.

Le previsioni puntuali sembrano ragionevoli per le prime due settimane del 2015. Il rallentamento della domanda di energia elettrica alla fine del 2014 (dovuto al fatto che molte persone sono in ferie per le vacanze estive) ha causato il fatto che le previsioni per le prossime due settimane mostrassero valori di domanda altrettanto bassi.