5.1 La procedura di previsione per passi

La procedura per il calcolo delle previsioni per serie storiche può essere descritta dai seguenti passi.

Per illustrare la procedura di previsione si utilizzerà nel seguito come esempio guida un modello di regressione lineare stimato sui dati relativi al Prodotto Interno Lordo contenuti nel dataset global_economy.

Preparazione del dataset (Ordina)

Il primo passo prevede la preparazione dei dati nel giusto formato. Per fare questo potrebbe essere necessario caricare i dati, identificare i valori mancati, filtrare la serie storica ecc. La preparazione dei dati può essere facilitata dalle funzionalità del package tsibble oppure di altri package presenti in tidyverse.

Molti modelli hanno dei vincoli specifici riguardo la struttura dei dati, ad esempio come non avere dati mancanti. La verifica dei dati è un passaggio essenziale per capirne le caratteristiche e deve essere fatta sempre prima di stimare qualunque modello.

Nell’esempio guida, la variabile oggetto di studio sarà il PIL pro-capite che deve essere calcolata a partire dai dati presenti nel dataset.

# calcolo del PIL (GDP) pro-capite
gdppc <- global_economy %>%
  mutate(GDP_per_capita = GDP / Population)

Rappresentazione grafica dei dati (Visualizza)

Come visto nel Capitolo 2, la rappresentazione grafica dei dati è un passo essenziale per capire i dati a disposizione. Rispetto all’esempio, questo permette di identificare dei comportamenti comuni e quindi di specificare un modello appropriato.

In figura 5.1. viene riportato il PIL pro-capite per la Svezia dal 1960 al 2017.

gdppc %>%
  filter(Country == "Sweden") %>%
  autoplot(GDP_per_capita) +
  labs(y = "$US", title = "PIL pro-capite per la Svezia, dati annuali 1960-2017")
PIL pro-capite per la Svezia, dati dal 1960 al 2017.

Figura 5.1: PIL pro-capite per la Svezia, dati dal 1960 al 2017.

Specificare un modello (Specifica)

Ci sono diversi modelli alternativi per le serie storiche che possono essere utilizzati per ottenere delle previsioni, e gran parte di questo libro è dedicato alla descrizione di questi modelli. La specificazione di un modello che sia adeguato per i dati a disposizione è essenziale per ottenere delle previsioni coerenti ed accurate.

I modelli in fable sono specificati usando funzioni di tipo modello, ognuna delle quali usa un’interfaccia di tipo formula (y ~ x). La(le) variabile(i) di risposta è a sinistra della formula (y) e la struttura del modello è scritta sulla destra dopo il simbolo ~.

Ad esempio, un modello lineare con trend (che sarà discusso in dettaglio nel Capitolo 7) per il PIL pro-capite può essere specificato come

TSLM(GDP_per_capita ~ trend()).

In questo caso il modello viene creato dal comando TSLM() (time series linear model), la variabile risposta è GDP_per_capita mentre trend() è una funzione del package TSLM che genera un trend lineare. La scrittura ‘GDP_per_capita ~ trend()’ crea quindi un modello di regressione lineare della variabile GDP_per_capita contro un trend lineare. Verrà posta particolare attenzione a come ogni modello può essere specificato nei corrispondenti paragrafi.

Le funzioni speciali usate per definire la struttura del modello variano a seconda del modello considerato (poiché ogni modello può supportare strutture diverse). La sezione “Specials” della documentazione per ogni funzione di tipo modello elenca queste funzioni speciali e come possono essere usate.

Il lato sinistro della formula supporta anche le trasformazioni discusse nel paragrafo 3.1; tali trasformazioni possono essere utili per semplificare i modelli delle serie storiche o per vincolare le previsioni ad appartenere ad uno specifico intervallo (vedi paragafo 13.3).

Stima del modello (Stima)

Sulla base dei dati a disposizione si individua quello che appare essere il modello più adeguato, si procede quindi alla sua stima sui dati. Specificazioni alternative del modello individuato possono essere stimate sui dati usando la funzione model().

Per stimare il modello dell’esempio, si utilizza

fit <- gdppc %>%
  model(trend_model = TSLM(GDP_per_capita ~ trend()))

Questa funzione stima un modello lineare con trend sui dati del PIL pro-capite per ogni combinazione delle variabili chiave nel tsibble. In questo esempio, verrà adattato un modello a ciascuno dei 263 paesi del dataset. L’oggetto risultante è una tabella o “mable”.

fit
#> # A mable: 263 x 2
#> # Key:     Country [263]
#>    Country             trend_model
#>    <fct>                   <model>
#>  1 Afghanistan              <TSLM>
#>  2 Albania                  <TSLM>
#>  3 Algeria                  <TSLM>
#>  4 American Samoa           <TSLM>
#>  5 Andorra                  <TSLM>
#>  6 Angola                   <TSLM>
#>  7 Antigua and Barbuda      <TSLM>
#>  8 Arab World               <TSLM>
#>  9 Argentina                <TSLM>
#> 10 Armenia                  <TSLM>
#> # ℹ 253 more rows

Ogni riga della tabella corrisponde a una combinazione delle variabili chiave. La colonna trend_model contiene informazioni sul modello stimato per ogni paese. Nei capitoli successivi si mostrerà come visualizzare più informazioni su ogni modello.

Valutare un modello (Valuta)

Una volta stimato un modello, è importante verificare come questo si adatta ai dati. Esistono diversi strumenti diagnostici per la verifica del comportamento del modello, come pure misure di accuratezza che permettono di confrontare il comportamento di più modelli. I paragrafi 5.8 e 5.9 mostrano ulteriori dettagli in merito.

Previsioni (Prevedi)

Dopo aver specificato, stimato e verificato un appropriato modello, si possono produrre le previsioni usando la funzione forecast(). Il modo più semplice per usare questa funzione è specificare il numero di osservazioni future da prevedere. Ad esempio, le previsioni per le prossime 10 osservazioni possono essere generate usando h = 10. È possibile anche usare il linguaggio naturale; ad esempio, h = "2 years" può essere usato per prevedere due anni futuri.

Quando il modello utilizza dei regressori esogeni (ad esempio delle variabili dummy per un certo periodo di tempo compreso nell’intervallo di stima), per tali regressori è necessario specificare i dati relativi ai periodi futuri da prevedere. I dati aggiuntivi richiesti dal modello possono essere inclusi nell’insieme dei dati delle osservazioni da prevedere.

fit %>% forecast(h = "3 years")
#> # A fable: 789 x 5 [1Y]
#> # Key:     Country, .model [263]
#>    Country        .model       Year   GDP_per_capita  .mean
#>    <fct>          <chr>       <dbl>           <dist>  <dbl>
#>  1 Afghanistan    trend_model  2018     N(526, 9653)   526.
#>  2 Afghanistan    trend_model  2019     N(534, 9689)   534.
#>  3 Afghanistan    trend_model  2020     N(542, 9727)   542.
#>  4 Albania        trend_model  2018  N(4716, 476419)  4716.
#>  5 Albania        trend_model  2019  N(4867, 481086)  4867.
#>  6 Albania        trend_model  2020  N(5018, 486012)  5018.
#>  7 Algeria        trend_model  2018  N(4410, 643094)  4410.
#>  8 Algeria        trend_model  2019  N(4489, 645311)  4489.
#>  9 Algeria        trend_model  2020  N(4568, 647602)  4568.
#> 10 American Samoa trend_model  2018 N(12491, 652926) 12491.
#> # ℹ 779 more rows

Questa tabella raccoglie i risultati della previsione, “fable”. Ogni riga corrisponde ad un periodo di previsione per ogni paese. La colonna GDP_per_capita (“PIL pro-capite”) contiene le previsioni e la varianza di previsione, mentre la colonna .mean (“media”) contiene la previsione puntuale.

Si può ottenere il grafico congiunto dei valori storici e delle previsioni usando il comando autoplot().

fit %>%
  forecast(h = "3 years") %>%
  filter(Country == "Sweden") %>%
  autoplot(gdppc) +
  labs(y = "$US", title = "Svezia: PIL pro-capite ")
Previsioni del PIL pro-capite per la Svezia usando un semplice trend lineare

Figura 5.2: Previsioni del PIL pro-capite per la Svezia usando un semplice trend lineare