11.2 Approcci per livello singolo

Tradizionalmente, le previsioni di serie storiche gerarchiche o raggruppate comportavano la selezione di un livello di aggregazione e la produzione di previsioni per quel livello. Tali previsioni venivano poi o aggregate per i livelli più elevati, oppure disaggregate per i livelli più bassi, in modo da ottenere un insieme di previsioni coerenti per il resto della struttura.

L’approccio bottom-up

Un metodo semplice per produrre previsioni coerenti è l’approccio “bottom-up”. Questo approccio consiste prima nel generare previsioni per ciascuna serie al livello più basso, e poi di sommarle per produrre previsioni per tutte le serie della struttura.

Per esempio, per la gerarchia di Figura 11.1, prima generiamo previsioni \(h\)-passi-avanti for ciascuna delle serie al livello più basso: \[ \yhat{AA}{h},~~\yhat{AB}{h},~~\yhat{AC}{h},~~ \yhat{BA}{h}~~\text{and}~~\yhat{BB}{h}. \] (Per brevità, abbiamo semplificato la notazione usata in precedenza \(\hat{y}_{T+h|T}\).)

Sommando queste previsioni, si ottengono previsioni coerenti \(h\)-passi-avanti per le restanti serie: \[\begin{align*} \tilde{y}_{h} & =\yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h}+\yhat{BA}{h}+\yhat{BB}{h}, \\ \ytilde{A}{h} & = \yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h}, \\ \text{e}\quad \ytilde{B}{h} &= \yhat{BA}{h}+\yhat{BB}{h}. \end{align*}\] (In questo capitolo viene usato il simbolo “tilde” per indicare le previsioni coerenti.)

Un vantaggio di questo approccio è che in questo modo si prevede al livello più basso della struttura, e pertanto non si perdono informazioni a causa dell’aggregazione. D’altro canto, i dati al livello più basso possono risultare parecchio “rumorosi” e più complicati da modellare e prevedere.

Esempio: Generare previsioni bottom-up

Si supponga di voler prevedere i dati del Turismo australiano a livello nazionale e statale, senza però essere interessati alle disaggregazioni in base alle regioni o allo scopo del viaggio. Pertanto, prima di tutto viene creato un semplice oggetto tsibble contenente solo i viaggi totali a livello nazionale e per i singoli stati per ciascun trimestre.

tourism_states <- tourism %>%
  aggregate_key(State, Trips = sum(Trips))

Possiamo quindi generare le previsioni per il livello più basso degli stati, e successivamente sommarle fino ad ottenere le previsioni del totale nazionale.

fcasts_state <- tourism_states %>%
  filter(!is_aggregated(State)) %>%
  model(ets = ETS(Trips)) %>%
  forecast()

# Somma delle previsioni del livello più basso
# per ottenere le previsioni del livello più alto
fcasts_national <- fcasts_state %>%
  summarise(value = sum(Trips), .mean = mean(value))

Si desidera tuttavia un approccio più generale, in grado di lavorare con tutti i metodi di previsione discussi in questo capitolo. Usiamo pertanto la funzione reconcile() per specificare come si desidera calcolare le previsioni coerenti.

tourism_states %>%
  model(ets = ETS(Trips)) %>%
  reconcile(bu = bottom_up(ets)) %>%
  forecast()
#> # A fable: 144 x 5 [1Q]
#> # Key:     State, .model [18]
#>    State  .model Quarter         Trips .mean
#>    <chr*> <chr>    <qtr>        <dist> <dbl>
#>  1 ACT    ets    2018 Q1  N(701, 7651)  701.
#>  2 ACT    ets    2018 Q2  N(717, 8032)  717.
#>  3 ACT    ets    2018 Q3  N(734, 8440)  734.
#>  4 ACT    ets    2018 Q4  N(750, 8882)  750.
#>  5 ACT    ets    2019 Q1  N(767, 9368)  767.
#>  6 ACT    ets    2019 Q2  N(784, 9905)  784.
#>  7 ACT    ets    2019 Q3 N(800, 10503)  800.
#>  8 ACT    ets    2019 Q4 N(817, 11171)  817.
#>  9 ACT    bu     2018 Q1  N(701, 7651)  701.
#> 10 ACT    bu     2018 Q2  N(717, 8032)  717.
#> # ℹ 134 more rows

L’uso di reconcile() ha creato un nuovo “modello” per produrre previsioni bottom-up. L’oggetto fable contiene le previsioni etse le previsioni coerenti bu per gli 8 stati e per l’aggregato nazionale. Queste previsioni sono identiche al livello degli stati, mentre le previsioni ets nazionali saranno diverse dalle previsioni bu nazionali.

Nel caso della previsione bottom-up, dunque, ciò risulta piuttosto inefficiente, in quanto non siamo interessati al modello ETS per il totale nazionale, e l’oggetto fable risultante contiene molte duplicazioni. Più avanti saranno considerati metodi più avanzati in cui si avrà bisogno di modelli per tutti i livelli di aggregazione, ed in cui le previsioni coerenti sono diverse da tutte le previsioni originali.

Processo operativo della previsione di strutture di aggregazione

Il codice seguente illustra il processo operativo generale per le previsioni gerarchiche e raggruppate. In particolare, viene usata la seguente sequenza di funzioni.

data %>% aggregate_key() %>% model() %>%
  reconcile() %>% forecast()
  1. Si inizia con un oggetto tsibble (qui chiamato data) che contiene le serie individuali al livello più basso.
  2. Si definisce la struttura di aggregazione in aggregate_key() e si costruisce un oggetto tsibble che contiene anche la serie aggregata.
  3. Si identifica un model() per ciascuna serie, a tutti i livelli di aggregazione.
  4. In reconcile()si specifica in che modo le previsioni coerenti vanno generate dai modelli selezionati.
  5. Si usa la funzione forecast() per generare previsioni per l’intera struttura di aggregazione.

Approcci top-down

Gli approcci top-down prevedono che prima si generino le previsioni per la serie Totale \(y_t\), e che poi tali previsioni vengono disaggregate lungo la gerarchia.

Si indichi con \(p_1,\dots,p_{m}\), un insieme di proporzioni di disaggregazione che determinano come le previsioni della serie Totale devono essere distribuite per ottenere le previsioni per ciascuna serie al livello più basso della struttura. Per esempio, per la gerarchia della Figura 11.1, usando le proporzioni \(p_1,\dots,p_{5}\), si ha \[ \ytilde{AA}{t}=p_1\hat{y}_t,~~~\ytilde{AB}{t}=p_2\hat{y}_t,~~~\ytilde{AC}{t}=p_3\hat{y}_t,~~~\ytilde{BA}{t}=p_4\hat{y}_t~~~\text{e}~~~~~\ytilde{BB}{t}=p_5\hat{y}_t. \] Dopo aver calcolato le previsioni \(h\)-passi-avanti per il livello più basso, esse vengono aggregate per generare previsioni coerenti per le restanti serie.

Le previsioni top-down possono essere calcolate usando l’opzione top_down() all’interno della funzione reconcile().

È possibile specificare diversi metodi top-down. I due approcci top-down più comuni specificano le proporzioni di disaggregazione in base alle proporzioni storiche dei dati. Queste hanno fornito buoni risultati nello studio di Gross & Sohl (1990).

Medie delle proporzioni storiche

\[ p_j=\frac{1}{T}\sum_{t=1}^{T}\frac{y_{j,t}}{{y_t}} \] per \(j=1,\dots,m\). Ciascuna proporzione \(p_j\) riflette la media delle proporzioni storiche delle serie del livello più basso \(y_{j,t}\) nel periodo \(t=1,\dots,T\) rispetto all’aggregato totale \(y_t\).

Questo approccio è disponibile nella funzione top_down() fissando `method = “average_proportions”.

Proporzioni delle medie storiche

\[ p_j={\sum_{t=1}^{T}\frac{y_{j,t}}{T}}\Big/{\sum_{t=1}^{T}\frac{y_t}{T}} \] per \(j=1,\dots,m\). Ciascuna proporzione \(p_j\) cattura il valore storico medio delle serie del livello più basso \(y_{j,t}\) rispetto al valore medio dell’aggregato totale \(y_t\).

Questo approccio è disponibile nella funzione top_down() fissando method = "proportion_averages".

Una rimarchevole caratteristica di questi approcci top-down è la loro semplicità. Si ha solo bisogno di modellare e produrre previsioni per la serie aggregata del livello più elevato. In generale, questi approcci sembrano produrre previsioni abbastanza affidabili per i livelli aggregati e sono utili quando si devono trattare dati di conteggio bassi. D’altro lato, uno svantaggio è la perdita di informazione dovuta all’aggregazione. Usando questi approcci top-down, non siamo in grado di catturare e di sfruttare le caratteristiche delle serie individuali, come la dinamica temporale, la presenza di eventi speciali, andamenti stagionali differenti, etc.

Proporzioni previste

Poiché le proporzioni storiche usate per la disaggregazione non tengono conto di come tali proporzioni possono variare nel tempo, gli approcci top-down basati sulle proporzioni storiche tendono a produrre previsioni meno accurate ai livelli più bassi della gerarchia rispetto agli approcci bottom-up. Per risolvere questo problema, è possibile usare proporzioni basate sulle previsioni piuttosto che sui dati storici (G. Athanasopoulos et al., 2009).

Si consideri una gerarchia con un solo livello. Prima si generano previsioni \(h\)-passi-avanti per tutte le serie. Tali previsioni non vengono usate direttamente, ed esse non sono coerenti (non sommano tra loro in maniera corretta). Chiamiamole previsioni “iniziali”. Si calcoli quindi la proporzione di ciascuna previsione iniziale \(h\)-passi-avanti al livello più basso, rispetto all’aggregato di tutte le previsioni iniziali \(h\)-passi-avanti a questo livello. Chiameremo queste grandezze proporzioni previste, e le useremo per disaggregare la previsione iniziale \(h\)-passi-avanti del livello più alto al fine di generare previsioni coerenti per l’intera gerarchia.

Per una gerarchia con \(K\) livelli, questo processo viene ripetuto per ogni nodo, procedendo dal livello più alto fino ad arrivare al livello più basso. L’applicazione di un simile processo porta alla seguente regola generale per ottenere le proporzioni previste: \[ p_j=\prod^{K-1}_{\ell=0}\frac{\hat{y}_{j,h}^{(\ell)}}{\hat{S}_{j,h}^{(\ell+1)}} \] dove \(j=1,2,\dots,m\), \(\hat{y}_{j,h}^{(\ell)}\) è la previsione iniziale \(h\)-passi-avanti della serie che corrisponde al nodo che si trova \(\ell\) livelli sopra \(j\), e \(\hat{S}_{j,h}^{(\ell)}\) è la somma delle previsioni iniziali \(h\)-passi-avanti sotto il nodo che è \(\ell\) livelli sopra il nodo \(j\) e che sono direttamente connesse a tale nodo. Queste proporzioni previste disaggregano la previsione iniziale \(h\)-passi-avanti della serie Totale e forniscono previsioni coerenti \(h\)-passi-avanti delle serie del livello più basso.

Useremo la gerarchia di Figura 11.1 per spiegare questa notazione e per dimostrare come viene ottenuta questa regola generale. Si assuma di aver generato previsioni iniziali per ciascuna serie nella gerarchia. Si ricorda che per la serie “Total” del livello più alto, \(\tilde{y}_{h}=\hat{y}_{h}\), for qualsiasi approccio top-down. Ecco alcuni esempi che usano la notazione vista in precedenza:

  • \(\hat{y}_{\text{A},h}^{(1)}=\hat{y}_{\text{B},h}^{(1)}=\hat{y}_{h}= \tilde{y}_{h}\);
  • \(\hat{y}_{\text{AA},h}^{(1)}=\hat{y}_{\text{AB},h}^{(1)}=\hat{y}_{\text{AC},h}^{(1)}= \hat{y}_{\text{A},h}\);
  • \(\hat{y}_{\text{AA},h}^{(2)}=\hat{y}_{\text{AB},h}^{(2)}= \hat{y}_{\text{AC},h}^{(2)}=\hat{y}_{\text{BA},h}^{(2)}= \hat{y}_{\text{BB},h}^{(2)}=\hat{y}_{h}= \tilde{y}_{h}\);
  • \(\Shat{AA}{h}{1} = \Shat{AB}{h}{1}= \Shat{AC}{h}{1}= \yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h}\);
  • \(\Shat{AA}{h}{2} = \Shat{AB}{h}{2}= \Shat{AC}{h}{2}= \Shat{A}{h}{1} = \Shat{B}{h}{1}= \hat{S}_{h}= \yhat{A}{h}+\yhat{B}{h}\).

Spostandoci lungo il lato più a sinistra della gerarchia, previsioni coerenti sono date da \[ \ytilde{A}{h} = \Bigg(\frac{\yhat{A}{h}}{\Shat{A}{h}{1}}\Bigg) \tilde{y}_{h} = \Bigg(\frac{\yhat{AA}{h}^{(1)}}{\Shat{AA}{h}{2}}\Bigg) \tilde{y}_{h} \] e \[ \ytilde{AA}{h} = \Bigg(\frac{\yhat{AA}{h}}{\Shat{AA}{h}{1}}\Bigg) \ytilde{A}{h} =\Bigg(\frac{\yhat{AA}{h}}{\Shat{AA}{h}{1}}\Bigg) \Bigg(\frac{\yhat{AA}{h}^{(1)}}{\Shat{AA}{h}{2}}\Bigg)\tilde{y}_{h}. \] Di conseguenza, \[ p_1=\Bigg(\frac{\yhat{AA}{h}}{\Shat{AA}{h}{1}}\Bigg) \Bigg(\frac{\yhat{AA}{h}^{(1)}}{\Shat{AA}{h}{2}}\Bigg). \] Le altre proporzioni possono essere ottenute in modo simile.

Questo approccio è offerto dalla funzione top_down() fissando method = "forecast_proportions". Poiché questo approccio tende a lavorare meglio degli altri metodi top-down, esso viene assunto come scelta di default nella funzione top_down() quando non viene specificato alcun argomento per l’opzione method.

Uno svantaggio di tutti gli approcci top-down è che essi non producono previsioni coerenti non distorte (Hyndman et al., 2011) anche se le previsioni di base sono corrette.

L’approccio middle-out

L’approccio middle-out combina gli approcci bottom-up e top-down. Anche in questo caso, questo approccio può essere usato solo per strutture di aggregazione gerarchiche.

Anzitutto va scelto un livello intermedio (“middle”) e vanno generate delle previsioni per tutte le serie appartenenti a tale livello. Previsioni coerenti vengono generate per le serie sotto il livello intermedio usando l’approccio bottom-up mediante aggregazione delle previsioni “middle-level” verso l’alto. Per le serie sotto il “middle level”, previsioni coerenti vengono generate usando un approccio top-down mediante disaggregazione delle previsioni “middle level” verso il basso.

Questo approccio è offerto dalla funzione middle_out() tramite specificazione dell’appropriato livello intermedio attraverso l’argomento level e selezionando l’approccio top-down con l’argomento method.

Bibliografia

Athanasopoulos, G., Ahmed, R. A., & Hyndman, R. J. (2009). Hierarchical forecasts for Australian domestic tourism. International Journal of Forecasting, 25, 146–166. [DOI]
Gross, C. W., & Sohl, J. E. (1990). Disaggregation methods to expedite product line forecasting. Journal of Forecasting, 9, 233–254. [DOI]
Hyndman, R. J., Ahmed, R. A., Athanasopoulos, G., & Shang, H. L. (2011). Optimal combination forecasts for hierarchical time series. Computational Statistics and Data Analysis, 55(9), 2579–2589. [DOI]