Previsione multivariata di serie temporali con LSTM a Keras

Previsione multivariata di serie temporali con LSTM a Keras

Le reti neurali come le reti neurali ricorrenti Long Short-Term Memory (LSTM) sono in grado di modellare quasi perfettamente i problemi con più variabili di input.

Questo è un grande vantaggio nella previsione di serie temporali, in cui i metodi lineari classici possono essere difficili da adattare a problemi di previsione di input multipli o multivariati.

In questo tutorial scoprirai come sviluppare un file Modello LSTM per previsioni di serie temporali multivariate con la libreria di deep learning di Keras.

Dopo aver completato questo tutorial, saprai:

  • Come trasformare un set di dati non elaborato in qualcosa che possiamo utilizzare per la previsione di serie temporali.
  • Come preparare i dati e adattare un LSTM per un problema di previsione di serie temporali multivariate.
  • Come fare una previsione e ridimensionare il risultato nelle unità originali.

Dai il via al tuo progetto con il mio nuovo libro Deep Learning for Time Series Forecasting, tra cui tutorial passo passo e il Codice sorgente Python file per tutti gli esempi.

Iniziamo.

  • Aggiornamento agosto / 2017: Risolto un bug in cui yhat veniva confrontato con l'oss nel passaggio temporale precedente durante il calcolo dell'RMSE finale. Grazie, Songbin Xu e David Righart.
  • Aggiornamento ottobre 2017: Aggiunto un nuovo esempio che mostra come allenarsi su più fasi temporali precedenti a causa della grande richiesta.
  • Aggiornamento settembre / 2018: Collegamento aggiornato al set di dati.
  • Aggiornamento giugno / 2020: Corrette le importazioni mancanti per l'esempio di preparazione dei dati LSTM.

Panoramica del tutorial

Questo tutorial è diviso in 4 parti; sono:

  1. Previsione dell'inquinamento atmosferico
  2. Preparazione dei dati di base
  3. Modello di previsione LSTM multivariato
    1. Preparazione dei dati LSTM
    2. Definisci e adatta il modello
    3. Valuta il modello
    4. Esempio completo
  4. Esempio di formazione su intervalli temporali multipli

Ambiente Python

Questo tutorial presuppone che tu abbia installato un ambiente Python SciPy. Ti consiglio di utilizzare Python 3 con questo tutorial.

È necessario che Keras (2.0 o versioni successive) sia installato con il backend TensorFlow o Theano, idealmente Keras 2.3 e TensorFlow 2.2 o versioni successive.

Il tutorial presuppone anche che tu abbia installato scikit-learn, Pandas, NumPy e Matplotlib.

Se hai bisogno di aiuto con il tuo ambiente, guarda questo post:

Hai bisogno di aiuto con Deep Learning for Time Series?

Segui subito il mio corso intensivo di posta elettronica gratuito di 7 giorni (con codice di esempio).

Fai clic per iscriverti e ottenere anche una versione gratuita in PDF ebook del corso.

Scarica il tuo mini-corso GRATUITO

1. Previsione dell'inquinamento atmosferico

In questo tutorial, utilizzeremo il set di dati sulla qualità dell'aria.

Questo è un set di dati che riporta il tempo e il livello di inquinamento ogni ora per cinque anni presso l'ambasciata degli Stati Uniti a Pechino, in Cina.

I dati includono la data e l'ora, l'inquinamento chiamato concentrazione di PM2,5 e le informazioni meteorologiche tra cui punto di rugiada, temperatura, pressione, direzione del vento, velocità del vento e numero cumulativo di ore di neve e pioggia. L'elenco completo delle caratteristiche nei dati grezzi è il seguente:

  1. No: numero di riga
  2. anno: anno di dati in questa riga
  3. mese: mese di dati in questa riga
  4. giorno: giorno dei dati in questa riga
  5. ora: ora dei dati in questa riga
  6. pm2.5: Concentrazione di PM2,5
  7. DEWP: Punto di rugiada
  8. TEMP: Temperatura
  9. PRES: Pressione
  10. cbwd: Direzione del vento combinata
  11. Iws: Velocità del vento cumulata
  12. È: Ore di neve accumulate
  13. Ir: Ore di pioggia accumulate

Possiamo utilizzare questi dati e inquadrare un problema di previsione in cui, date le condizioni meteorologiche e l'inquinamento delle ore precedenti, prevediamo l'inquinamento all'ora successiva.

Questo set di dati può essere utilizzato per inquadrare altri problemi di previsione.
Hai buone idee? Fammi sapere nei commenti qui sotto.

È possibile scaricare il set di dati dal repository UCI Machine Learning.

Aggiornare, Ho replicato il set di dati qui perché UCI è diventato inaffidabile:

Scarica il set di dati e posizionalo nella directory di lavoro corrente con il nome del file "raw.csv“.

2. Preparazione dei dati di base

I dati non sono pronti per l'uso. Dobbiamo prepararlo prima.

Di seguito sono riportate le prime righe del set di dati non elaborato.

Il primo passaggio consiste nel consolidare le informazioni di data e ora in un'unica data e ora in modo da poterle utilizzare come indice in Pandas.

Un rapido controllo rivela i valori NA per pm2.5 per le prime 24 ore. Pertanto, dovremo rimuovere la prima riga di dati. Ci sono anche alcuni valori "NA" sparsi più avanti nel set di dati; possiamo contrassegnarli con 0 valori per ora.

Lo script seguente carica il set di dati non elaborato e analizza le informazioni di data e ora come indice Pandas DataFrame. La colonna "No" viene eliminata e quindi vengono specificati nomi più chiari per ciascuna colonna. Infine, i valori NA vengono sostituiti con valori "0" e le prime 24 ore vengono rimosse.

La colonna "No" viene eliminata e quindi vengono specificati nomi più chiari per ciascuna colonna. Infine, i valori NA vengono sostituiti con valori "0" e le prime 24 ore vengono rimosse.

L'esecuzione dell'esempio stampa le prime 5 righe del set di dati trasformato e salva il set di dati in "inquinamento.csv“.

Ora che abbiamo i dati in una forma facile da usare, possiamo creare un grafico veloce di ogni serie e vedere cosa abbiamo.

Il codice seguente carica il nuovo "inquinamento.csv"E traccia ogni serie come sottotrama separata, ad eccezione della direzione della velocità del vento, che è categorica.

L'esecuzione dell'esempio crea un grafico con 7 sottotrame che mostrano i 5 anni di dati per ciascuna variabile.

Grafici a linee di serie temporali di inquinamento atmosferico

Grafici a linee di serie temporali di inquinamento atmosferico

3. Modello di previsione LSTM multivariato

In questa sezione, adatteremo un LSTM al problema.

Preparazione dei dati LSTM

Il primo passo è preparare il set di dati sull'inquinamento per LSTM.

Ciò implica inquadrare il set di dati come un problema di apprendimento supervisionato e normalizzare le variabili di input.

Inquadreremo il problema dell'apprendimento supervisionato come una previsione dell'inquinamento all'ora corrente

Questa formulazione è semplice e solo per questa dimostrazione. Alcune formulazioni alternative che potresti esplorare includono:

  • Prevedi l'inquinamento per l'ora successiva in base alle condizioni meteorologiche e all'inquinamento delle ultime 24 ore.
  • Prevedere l'inquinamento per l'ora successiva come sopra e date le condizioni meteorologiche "previste" per l'ora successiva.

Possiamo trasformare il set di dati usando il series_to_supervised () funzione sviluppata nel post del blog:

Prima il "inquinamento.csv"Il set di dati viene caricato. La funzione di direzione del vento è codificata in etichetta (codifica intera). Questo potrebbe ulteriormente essere codificato a caldo in futuro se sei interessato a esplorarlo.

Successivamente, tutte le funzionalità vengono normalizzate, quindi il set di dati viene trasformato in un problema di apprendimento supervisionato. Le variabili meteorologiche per l'ora da prevedere

Di seguito viene fornito l'elenco completo dei codici.

Potresti anche essere interessato