Prévisions de séries chronologiques multivariées avec LSTM dans Keras

Prévisions de séries chronologiques multivariées avec LSTM dans Keras

Les réseaux de neurones tels que les réseaux de neurones récurrents LSTM (Long Short-Term Memory) sont capables de modéliser de manière presque transparente des problèmes avec plusieurs variables d'entrée.

C'est un grand avantage dans la prévision de séries chronologiques, où les méthodes linéaires classiques peuvent être difficiles à adapter à des problèmes de prévision à plusieurs variables ou à entrées multiples.

Dans ce tutoriel, vous découvrirez comment vous pouvez développer un Modèle LSTM pour la prévision de séries chronologiques multivariées avec la bibliothèque d'apprentissage en profondeur Keras.

Après avoir terminé ce tutoriel, vous saurez:

  • Comment transformer un ensemble de données brutes en quelque chose que nous pouvons utiliser pour la prévision de séries chronologiques.
  • Comment préparer des données et ajuster un LSTM pour un problème de prévision de séries chronologiques multivariées.
  • Comment faire une prévision et redimensionner le résultat dans les unités d'origine.

Lancez votre projet avec mon nouveau livre Deep Learning for Time Series Forecasting, y compris tutoriels étape par étape et le Code source Python fichiers pour tous les exemples.

Commençons.

  • Mise à jour août / 2017: Correction d'un bug où yhat était comparé à obs au pas de temps précédent lors du calcul du RMSE final. Merci, Songbin Xu et David Righart.
  • Mise à jour oct / 2017: Ajout d'un nouvel exemple montrant comment s'entraîner sur plusieurs étapes de temps précédentes en raison de la demande populaire.
  • Mise à jour sept / 2018: Lien mis à jour vers l'ensemble de données.
  • Mise à jour juin / 2020: Correction des importations manquantes pour l'exemple de préparation de données LSTM.

Présentation du didacticiel

Ce tutoriel est divisé en 4 parties; elles sont:

  1. Prévision de la pollution atmosphérique
  2. Préparation des données de base
  3. Modèle de prévision LSTM multivarié
    1. Préparation des données LSTM
    2. Définir et ajuster le modèle
    3. Évaluer le modèle
    4. Exemple complet
  4. Exemple de train sur plusieurs temps de retard

Environnement Python

Ce didacticiel suppose que vous disposez d'un environnement Python SciPy installé. Je vous recommande d'utiliser Python 3 avec ce tutoriel.

Vous devez avoir Keras (2.0 ou supérieur) installé avec le backend TensorFlow ou Theano, idéalement Keras 2.3 et TensorFlow 2.2, ou supérieur.

Le didacticiel suppose également que scikit-learn, Pandas, NumPy et Matplotlib sont installés.

Si vous avez besoin d'aide avec votre environnement, consultez cet article:

Besoin d'aide avec Deep Learning pour les séries chronologiques?

Suivez maintenant mon cours intensif gratuit de 7 jours sur les e-mails (avec un exemple de code).

Cliquez pour vous inscrire et obtenez également une version PDF Ebook gratuite du cours.

Téléchargez votre mini-cours GRATUIT

1. Prévisions de la pollution atmosphérique

Dans ce didacticiel, nous allons utiliser le jeu de données Air Quality.

Il s'agit d'un ensemble de données qui rend compte de la météo et du niveau de pollution chaque heure pendant cinq ans à l'ambassade des États-Unis à Pékin, en Chine.

Les données comprennent la date-heure, la pollution appelée concentration de PM2,5 et les informations météorologiques, notamment le point de rosée, la température, la pression, la direction du vent, la vitesse du vent et le nombre cumulé d'heures de neige et de pluie. La liste complète des fonctionnalités dans les données brutes est la suivante:

  1. Non: numéro de ligne
  2. an: année des données de cette ligne
  3. mois: mois de données dans cette ligne
  4. journée: jour de données dans cette ligne
  5. heure: heure de données dans cette ligne
  6. pm2,5: Concentration de PM2,5
  7. DEWP: Point de rosée
  8. TEMP: Température
  9. PRES: Pression
  10. cbwd: Direction du vent combinée
  11. Iws: Vitesse du vent cumulée
  12. Est: Heures de neige cumulées
  13. Ir: Heures de pluie cumulées

Nous pouvons utiliser ces données et formuler un problème de prévision où, compte tenu des conditions météorologiques et de la pollution des heures précédentes, nous prévoyons la pollution à l'heure suivante.

Cet ensemble de données peut être utilisé pour encadrer d'autres problèmes de prévision.
Avez-vous de bonnes idées? Faites-moi savoir dans les commentaires ci-dessous.

Vous pouvez télécharger l'ensemble de données à partir du référentiel UCI Machine Learning.

Mettre à jour, J'ai reproduit l'ensemble de données ici parce que l'UCI est devenu peu fiable:

Téléchargez le jeu de données et placez-le dans votre répertoire de travail actuel avec le nom de fichier "raw.csv«.

2. Préparation des données de base

Les données ne sont pas prêtes à être utilisées. Nous devons d'abord le préparer.

Vous trouverez ci-dessous les premières lignes de l'ensemble de données brutes.

La première étape consiste à consolider les informations date-heure en une seule date-heure afin que nous puissions les utiliser comme index dans Pandas.

Une vérification rapide révèle les valeurs NA pour pm2,5 pendant les 24 premières heures. Nous devrons donc supprimer la première ligne de données. Il y a aussi quelques valeurs «NA» dispersées plus tard dans l'ensemble de données; nous pouvons les marquer avec 0 valeurs pour le moment.

Le script ci-dessous charge l'ensemble de données brutes et analyse les informations de date et d'heure en tant qu'index Pandas DataFrame. La colonne «Non» est supprimée, puis des noms plus clairs sont spécifiés pour chaque colonne. Enfin, les valeurs NA sont remplacées par des valeurs «0» et les 24 premières heures sont supprimées.

La colonne «Non» est supprimée, puis des noms plus clairs sont spécifiés pour chaque colonne. Enfin, les valeurs NA sont remplacées par des valeurs «0» et les 24 premières heures sont supprimées.

L'exécution de l'exemple imprime les 5 premières lignes de l'ensemble de données transformé et enregistre l'ensemble de données dans "pollution.csv«.

Maintenant que nous avons les données sous une forme facile à utiliser, nous pouvons créer un graphique rapide de chaque série et voir ce que nous avons.

Le code ci-dessous charge le nouveau "pollution.csv”Et trace chaque série comme une sous-courbe distincte, à l'exception de la vitesse du vent dir, qui est catégorique.

L'exécution de l'exemple crée un graphique avec 7 sous-graphiques montrant les 5 années de données pour chaque variable.

Diagrammes linéaires des séries chronologiques de la pollution atmosphérique

Diagrammes linéaires des séries chronologiques de la pollution atmosphérique

3. Modèle de prévision LSTM multivarié

Dans cette section, nous allons adapter un LSTM au problème.

Préparation des données LSTM

La première étape consiste à préparer le jeu de données sur la pollution pour le LSTM.

Cela implique de définir l'ensemble de données comme un problème d'apprentissage supervisé et de normaliser les variables d'entrée.

Nous encadrerons le problème d'apprentissage supervisé comme prédisant la pollution à l'heure actuelle

Cette formulation est simple et juste pour cette démonstration. Certaines formulations alternatives que vous pourriez explorer comprennent:

  • Prédisez la pollution pour l'heure suivante en fonction des conditions météorologiques et de la pollution des dernières 24 heures.
  • Prédisez la pollution pour l'heure suivante comme ci-dessus et compte tenu des conditions météorologiques «attendues» pour l'heure suivante.

Nous pouvons transformer l'ensemble de données en utilisant le series_to_supervised () fonction développée dans le billet de blog:

Premièrement les "pollution.csv”L'ensemble de données est chargé. La fonction de direction du vent est codée par étiquette (codée par un entier). Cela pourrait en outre être encodé à chaud à l'avenir si vous souhaitez l'explorer.

Ensuite, toutes les fonctionnalités sont normalisées, puis l'ensemble de données est transformé en un problème d'apprentissage supervisé. Les variables météorologiques pour l'heure à prédire

La liste complète des codes est fournie ci-dessous.

Vous pourriez également être intéressé par