5.8 Valutare l’accuratezza della previsione puntuale

Training e test set (insieme di apprendimento ed insieme di test)

È importante valutare l’accuratezza delle previsioni confrontandole con i valori che si realizzano effettivamente. La dimensione dei residui non è di conseguenza un’indicazione affidabile di quanto è probabile che siano grandi i veri errori di previsione. L’accuratezza delle previsioni può essere determinata solo considerando quanto bene si comporta un modello su nuovi dati che non sono stati utilizzati durante l’adattamento del modello.

Quando si scelgono i modelli, è pratica comune separare i dati disponibili in due parti, i dati di addestramento (training set) e i dati di test (test set), dove i dati di addestramento sono usati per stimare i parametri di un metodo di previsione e i dati di prova sono usati per valutarne la precisione. Poiché i dati di prova non sono utilizzati per determinare le previsioni, dovrebbero fornire un’indicazione affidabile di quanto bene il modello possa prevedere sui nuovi dati.

L’ampiezza del campione di prova è generalemente il 20% circa del campione totale, anche se questo valore dipende da quanto è lungo il campione originale e da quanto avanti si vuole prevedere. Il campione di prova dovrebbe idealmente essere grande almeno quanto l’orizzonte di previsione massimo richiesto. Si sottolinea che:

  • Un modello che si adatta bene nel traning set non necessariamente fornirà una buona previsione.
  • Un adattamento perfetto può sempre essere ottenuto usando un modello con abbastanza parametri.
  • Adattare eccessivamente un modello ai dati è altrettanto negativo che non riuscire a identificare un buon modello.

In alcuni testi ci si riferisce al test set come “hold-out set” perché questi dati sono “tenuti fuori” dal campione utilizzato per la stima del modello. Altri testi chiamano il traning set con “dati in-sample” e il test set come “dati out-of-sample”. In questo libro si preferisce usare “traning set” e “test set” per far riferimento ai due insieme di dati.

Funzioni per sottocampionare una serie storica

La funzione filter() è utile quando si vuole estrarre una porzione di una serie temporale, come necessario per creare traning set e test set. Quando si dividono i dati in test set, si può applicare il filtro all’indice temporale dei dati. Per esempio, il comando

aus_production %>% filter(year(Quarter) >= 1995)

estrae tutti i dati dal 1995 in poi. Si puo’ utilizzare anche la seguente sintassi:

aus_production %>% filter_index("1995 Q1" ~ .)

Un’altra funzione utile è slice(), che permette di usare gli indici per scegliere un sottoinsieme da ogni gruppo. Per esempio, il comando

aus_production %>%
  slice(n()-19:0)

estrae le ultime 20 osservazioni (5 anni).

Slice lavora anche con i gruppi, rendendo possibile estrarre il sottoinsieme delle osservazioni da più variabili contemporaneamente. Per esempio, il comando

aus_retail %>%
  group_by(State, Industry) %>%
  slice(1:12)

estrarrà il primo anno di dati da ogni serie.

Errori di previsioni

Un “errore” di previsione è la differenza tra un valore osservato e la sua previsione. Qui il termine “errore” non va inteso nell’accezione di sbaglio, quanto piuttosto come la parte imprevedibile di un’osservazione. Può essere scritto come

\[ e_{T+h} = y_{T+h} - \hat{y}_{T+h|T}, \] dove il campione di stima è dato da \(\{y_1,\dots,y_T\}\) e il test set è dato da:

\(\{y_{T+1},y_{T+2},\dots\}\).

Si noti che gli errori di previsione sono diversi dai residui in due modi. In primo luogo, i residui sono calcolati sull’insieme di addestramento (o di stima) mentre gli errori di previsione sono calcolati sul test set (o campione di verifica). In secondo luogo, i residui si basano su previsioni ad un solo passo in avanti mentre gli errori di previsione possono coinvolgere previsioni di passi multipli in avanti.

È possibile misurare l’accuratezza della previsione riassumendo gli errori di previsione in diversi modi.

Errori dipendenti dalla scala

Gli errori di previsione sono sulla stessa scala (ordine di grandezza) dei dati. Le misure di accuratezza che si basano solo su \(e_{t}\) sono quindi dipendenti dalla scala e non possono essere usate per fare confronti tra serie che coinvolgono unità di misura diverse.

Le due misure di accuratezza dipendenti dalla scala di misura più comunemente usate sono basate sugli errori assoluti o sugli errori al quadrato:

\[\begin{align*} \text{Mean absolute error: MAE} & = \text{mean}(|e_{t}|),\\ \text{Root mean squared error: RMSE} & = \sqrt{\text{mean}(e_{t}^2)}. \end{align*}\]

Quando si confrontano i metodi di previsione applicati su una singola serie storica o su diverse serie storiche espresse nelle stesse unità di misura, il MAE è la scelta più frequente perché è facile sia da capire che da calcolare. Un metodo di previsione che minimizza il MAE porterà a previsioni della mediana, mentre la minimizzazione dell’RMSE porterà a previsioni della media. Di conseguenza, anche l’RMSE è ampiamente utilizzato, nonostante sia più difficile da interpretare.

Errori percentuali

L’errore percentuale è dato da \(p_{t} = 100 \, e_{t}/y_{t}\). Gli errori percentuali hanno il vantaggio di essere numeri puri e quindi sono frequentemente utilizzati per confrontare le prestazioni di previsione tra serie storiche. La misura più comunemente usata è: \[ \text{Mean absolute percentage error: MAPE} = \text{mean}(|p_{t}|). \]

Le misure basate sugli errori percentuali hanno lo svantaggio di essere infinite o indefinite se \(y_{t}=0\) per qualsiasi \(t\) nel periodo di interesse, e di avere valori estremi per gli \(y_{t}\) vicini allo zero. Un altro problema con gli errori percentuali, spesso trascurato, è che essi presuppongono che l’unità di misura abbia uno zero significativo2. Per esempio, un errore percentuale non ha senso quando si misura l’accuratezza delle previsioni di temperatura sulle scale Fahrenheit o Celsius, perché la temperatura ha un punto zero arbitrario.

Hanno inoltre lo svantaggio di penalizzare maggiormente gli errori negativi rispetto a quelli positivi. Questa considerazione ha portato all’uso del cosiddetto MAPE “simmetrico” (sMAPE) proposto da Armstrong (1978, p. 348), che è stato utilizzato nel confronto di previsione M3. È definito da

\[ \text{sMAPE} = \text{mean}\left(200|y_{t} - \hat{y}_{t}|/(y_{t}+\hat{y}_{t})\right). \]

Tuttavia, se \(y_{t}\) è vicino allo zero, è probabile che anche \(\hat{y}_{t}\) sia vicino allo zero. La misura comporta quindi ancora la divisione per un numero vicino a zero, rendendo il calcolo instabile. Inoltre, il valore di sMAPE può essere negativo, per cui non si tratta di una vera e propria misura di “errori percentuali assoluti”.

Hyndman & Koehler (2006) raccomandano di non utilizzare l’sMAPE. È stato presentato in questo paragrafo solo perché è ampiamente usato, anche se non verrà utilizzato in questo libro.

Errori scalati

Gli errori scalati sono stati proposti da Hyndman & Koehler (2006) come alternativa all’uso di errori percentuali quando si confronta l’accuratezza della previsione tra serie con unità di misura diverse. In particolare, i due autori hanno proposto di scalare gli errori in base al training MAE derivato da un metodo di previsione semplice.

Per una serie storica non stagionale, un errore scalato può essere definito in base alle previsioni naive:

\[ q_{j} = \frac{\displaystyle e_{j}} {\displaystyle\frac{1}{T-1}\sum_{t=2}^T |y_{t}-y_{t-1}|}. \]

Poiché sia il numeratore che il denominatore fanno riferimento a valori sulla scala dei dati originari, \(q_{j}\) è indipendente dalla scala dei dati. Un errore scalato è minore di 1 se corrisponde ad una previsione migliore della previsione media naive ad un passo calcolata sul campione training. Al contrario, l’errore scalato è maggiore di 1 se la previsione è peggiore della previsione media naive ad un passo calcolata sul campione di addestramento.

Per serie storiche stagionali, un errore scalato può essere definito usando le previsioni stagionali naive: \[ q_{j} = \frac{\displaystyle e_{j}} {\displaystyle\frac{1}{T-m}\sum_{t=m+1}^T |y_{t}-y_{t-m}|}. \]

Il mean absolute scaled error è dato da \[ \text{MASE} = \text{mean}(|q_{j}|). \]

In modo analogo, il root mean squared scaled error è dato da \[ \text{RMSSE} = \sqrt{\text{mean}(q_{j}^2)}, \] dove \[ q^2_{j} = \frac{\displaystyle e^2_{j}} {\displaystyle\frac{1}{T-m}\sum_{t=m+1}^T (y_{t}-y_{t-m})^2}, \] e dove \(m=1\) per dati non stagionali.

Esempi

recent_production <- aus_production %>%
  filter(year(Quarter) >= 1992)
beer_train <- recent_production %>%
  filter(year(Quarter) <= 2007)

beer_fit <- beer_train %>%
  model(
    Mean = MEAN(Beer),
    `Naive` = NAIVE(Beer),
    `Seasonal naive` = SNAIVE(Beer),
    Drift = RW(Beer ~ drift())
  )

beer_fc <- beer_fit %>%
  forecast(h = 10)

beer_fc %>%
  autoplot(
    aus_production %>% filter(year(Quarter) >= 1992),
    level = NULL
  ) +
  labs(
    y = "Migliaia di Litri",
    title = "Previsione della produzione trimestrale di birra"
  ) +
  guides(colour = guide_legend(title = "Previsione"))
Previsione della produzione trimestrale di birra australiana usando i dati fino alla fine del 2007.

Figura 5.21: Previsione della produzione trimestrale di birra australiana usando i dati fino alla fine del 2007.

La figura 5.21 mostra quattro metodi di previsione applicati alla produzione trimestrale di birra in Australia utilizzando i dati solo fino alla fine del 2007. Sono mostrati anche i valori effettivi per il periodo 2008–2010. Calcoliamo le misure di accuratezza delle previsioni per questo periodo.

accuracy(beer_fc, recent_production)
Metodo RMSE MAE MAPE MASE
Drift method 64.90 58.88 14.58 4.12
Mean method 38.45 34.83 8.28 2.44
Naive method 62.69 57.40 14.18 4.01
Seasonal naive method 14.31 13.40 3.17 0.94

La funzione accuracy() estrarrà automaticamente i periodi rilevanti dai dati (recent_production in questo esempio) per abbinare le previsioni quando si calcolano le varie misure di accuratezza.

È ovvio dal grafico che il metodo naive stagionale è il migliore per questi dati, anche se può essere ancora migliorato, come si vedrà più avanti. A volte, diverse misure di accuratezza portano a risultati diversi su quale sia il metodo di previsione migliore. Tuttavia, in questo caso, tutti i risultati indicano il metodo naive stagionale come il migliore tra i quattro metodi considerati per questa serie storica.

Per fare un esempio non stagionale, si considera il prezzo delle azioni Google. Il seguente grafico mostra i prezzi di chiusura delle azioni del 2015, insieme alle previsioni per gennaio 2016 ottenute in base a tre metodi diversi.

google_fit <- google_2015 %>%
  model(
    Mean = MEAN(Close),
    `Naive` = NAIVE(Close),
    Drift = RW(Close ~ drift())
  )

google_fc <- google_fit %>%
  forecast(google_jan_2016)
google_fc %>%
  autoplot(bind_rows(google_2015, google_jan_2016),
    level = NULL) +
  labs(y = "$US",
       title = "Prezzi di chiusura delle azioni Google da gennaio 2015") +
  guides(colour = guide_legend(title = "Previsione"))
Previsioni per il prezzo delle azioni Google, Gennaio  2016

Figura 5.22: Previsioni per il prezzo delle azioni Google, Gennaio 2016

accuracy(google_fc, google_stock)
Metodo RMSE MAE MAPE MASE
Drift method 53.07 49.82 6.99 6.99
Mean method 118.03 116.95 16.24 16.41
Naive method 43.43 40.38 5.67 5.67

Qui, il metodo migliore è il metodo naive (indipendentemente dalla misura di accuratezza utilizzata).

Bibliografia

Armstrong, J. S. (1978). Long-range forecasting: From crystal ball to computer. John Wiley & Sons. [Amazon]
Hyndman, R. J., & Koehler, A. B. (2006). Another look at measures of forecast accuracy. International Journal of Forecasting, 22(4), 679–688. [DOI]

  1. Una percentuale è valida su una scala di rapporto ma non su una scala di intervallo. Solo le variabili delle scale di rapporto hanno zeri significativi.↩︎