I modelli di reti neurali specializzati per la previsione di serie temporali si stanno diffondendo rapidamente in numerosi settori, dalla finanza alla geofisica, dalla medicina all’industria.
Questo post vuole suggerisce un esperimento controllato di forecasting alla portata anche dei newbie della programmazione Python per il Machine Learning, volto a predire l’andamento futuro di una serie rumorosa a comportamento periodico (sinusoide) mediante una rete neurale ricorrente di tipo GRU (Gated Recurrent Unit).
I dati per l'addestramento sono costituiti da una serie temporale di 500 punti ricavati dalla relazione:
y=sin(x)+ϵ
dove x l'istante di campionamento in un intervallo pari a quattro periodi della funzione sinusoidale, mentre ϵ rappresenta il rumore gaussiano additivo a media zero e deviazione standard 0.1.
Questo approccio consente di simulare una situazione realistica in cui i dati sono affetti da errori accidentali di misura.
Preprocessing e Dataset
Il prepocessing consiste nel suddividere la serie temporale in sotto-sequenze (finestre mobili) di lunghezza 20, utilizzate come input per la rete. Per ciascuna finestra, l’obiettivo di previsione è rappresentato dal punto immediatamente successivo nella sequenza. In altre parole, la rete apprende la mappatura:
[yt,yt+1,…,yt+19]→yt+20
Il dataset è stato suddiviso in mini-batch per l’addestramento tramite un DataLoader.
Architettura e addestramento della rete neurale
La rete implementa una GRU a singolo layer con 32 unità nascoste, seguita da un layer fully connected per la stima dell’output scalare. L’ottimizzazione è affidata all’algoritmo Adam con una learning rate di 0.01.
La rete implementa una GRU a singolo layer con 32 unità nascoste, seguita da un layer fully connected per la stima dell’output scalare. L’ottimizzazione è affidata all’algoritmo Adam con una learning rate di 0.01.
La funzione di perdita utilizzata è la Mean Squared Error (MSE).
L’addestramento si è protratto per 100 epoche.
Forecasting autoregressivo
Terminato l’addestramento, è stato eseguito un test di forecasting autoregressivo.
Partendo da una finestra reale di 20 punti estratti dalla parte finale della serie (mai vista dalla rete), la GRU ha predetto in sequenza 60 valori futuri, ciascuno utilizzando come input la finestra ottenuta dai valori precedenti, in parte reali e in parte generati dalla stessa rete.
Terminato l’addestramento, è stato eseguito un test di forecasting autoregressivo.
Partendo da una finestra reale di 20 punti estratti dalla parte finale della serie (mai vista dalla rete), la GRU ha predetto in sequenza 60 valori futuri, ciascuno utilizzando come input la finestra ottenuta dai valori precedenti, in parte reali e in parte generati dalla stessa rete.
Risultati
Nel grafico risultante (vedi figura):
-
La serie originale (rumorosa) è riportata in blu chiaro.
-
I valori futuri reali (“ground truth”) sono evidenziati in verde.
-
I punti previsti dalla GRU sono tracciati in rosso tratteggiato.
-
La linea verticale grigia indica il punto di inizio della previsione.
La curva predetta dalla rete segue con buona approssimazione la forma della funzione seno, mantenendo la periodicità e mostrando capacità di adattamento al rumore dei dati. La precisione resta elevata per vari step predetti, mentre si osserva una fisiologica perdita di aderenza con l’aumentare dell’orizzonte di previsione, effetto noto del forecasting autoregressivo (“error propagation”).
Conclusioni
L’esperimento dimostra che anche una rete GRU di modeste dimensioni è in grado di apprendere la dinamica periodica di un'onda sinusoidale affetta da rumore e di estendere tale conoscenza oltre il dominio di training.
La previsione autoregressiva evidenzia sia la robustezza del modello, sia i limiti intrinseci dovuti all’accumulo di errore, tipico nelle sequenze generate artificialmente a partire dalle stime precedenti.
In scenari reali, la qualità della previsione dipende dalla quantità e dalla qualità dei dati di input, dalla lunghezza della finestra osservata, dalla struttura della rete e dalla quantità di rumore presente.
Ulteriori miglioramenti si potrebbero ottenere ricorrendo a modelli più profondi, strategie di ensemble, o utilizzando architetture transformer specifiche per il time series forecasting.
Ulteriori miglioramenti si potrebbero ottenere ricorrendo a modelli più profondi, strategie di ensemble, o utilizzando architetture transformer specifiche per il time series forecasting.
In figura, il forecasting di una sinusoide rumorosa.
(Blu: serie storica, Verde: valori reali futuri, Rosso tratteggiato: previsione GRU, linea grigia: start della previsione)