Plan de vol : prévision de séries chronologiques par apprentissage automatique

Les Propulseurs de l’ATIR sont des jeux structurés de ressources en nuage, documentation incluse, illustrant une technologie émergente. Offerts gratuitement, ils ont été conçus par des entreprises canadiennes d’expérience qui ont élaboré des produits ou des services au moyen de la technologie en question et ont accepté de partager leur savoir.

Ce Propulseur a été créé et la documentation rédigée par BluWave-ai


Aperçu

La Solution type est destinée aux entreprises qui exploitent des données et souhaitent mieux prévoir leurs séries chronologiques. Elle illustre comment recourir à l’apprentissage automatique pour obtenir des variables explicatives d’une grande exactitude. Contrairement aux techniques classiques, qui reposent sur l’inférence statistique, la Solution type débouche sur des modèles qui s’affinent constamment grâce à un volume important de données séquentielles et à une solide robustesse à la saisie.

Lire Solution type : Prévision de séries chronologiques par apprentissage automatique pour en savoir plus sur le fonctionnement de la solution.

La Solution type met en relief deux technologies : l’apprentissage automatique et les prévisions par série de données chronologiques. Ce Propulseur illustre comment se servir de l’apprentissage automatique pour résoudre les problèmes reposant sur la prévision de séries chronologiques.

Plan de vol : apprentissage automatique

Par « apprentissage automatique » ou apprentissage machine, on entend la partie de l’informatique qui met au point des algorithmes employés avec un ordinateur (la machine) qui n’a pas été spécifiquement programmé, mais plutôt observe (apprend) les liens existant entre les données de manière à bâtir un modèle qui prendra des décisions ou formulera des prévisions en conséquence. Nous nous concentrerons sur l’apprentissage surveillé, en vertu duquel l’algorithme traite un jeu de données entrantes et sortantes. Durant l’apprentissage, on fournit les données au modèle et l’algorithme qui y est intégré le renforce. L’objectif est d’obtenir un modèle qui restituera des valeurs raisonnables à partir des données qu’on lui procure, donc formulera des prévisions utiles.

Nous avons retenu les réseaux de neurones artificiels (RNA) pour la solution type en raison des résultats remarquables qu’on en retire avec l’apprentissage automatique et de la popularité que cela leur a valu. La solution utilise un réseau neuronal à rétropropagation non récurrent pour l’apprentissage automatique. Lire le premier chapitre de Neural Networks and Deep Learning pour une explication complète du fonctionnement des RNA et le deuxième pour comprendre les mathématiques de la rétropropagation. Pour se faire une idée du comportement des réseaux neuronaux, les auteurs suggèrent d’explorer le terrain de jeu TensorFlow.

Ressources

Les parties qui suivent proposent un éventail de ressources sur l’apprentissage automatique.

Le code source de la Solution type fourmille d’enseignements. Pour les exemples energy-prediction ou weather-prediction, veuillez prendre connaissance du contenu des répertoires /notebooks, /src/data, /src/features, and /src/models folders.

Tutoriels

Le tableau qui suit dresse une liste partielle des didacticiels que l’auteur juge parmi les plus utiles.

Tutoriel Résumé
Machine Learning Mastery Site Web proposant une foule de tutoriels très spécifiques mais simples sur la manière de développer un modèle par apprentissage automatique
5 Step Life Cycle of Neural Network Models in Keras Guide pratique sur la construction d’un réseau neuronal dans Keras, une étape à la fois, avec description succincte de l’utilité de chaque étape
TensorFlow Tutorial for Beginners Introduction simplifiée à TensorFlow à partir d’un exemple reposant sur le traitement d’images (série non chronologique)
Billets choisis : Part I, Part II, Part III, Part IV Exemples illustrant les méthodes d’analyse unidimensionnelle, la régularisation, les forêts d’arbres décisionnels et les méthodes d’enveloppement pour la sélection des propriétés
An Overview of Regularization Techniques in Deep Learning Tutoriel de base expliquant pourquoi, quand et comment recourir à la régularisation avec un code Python de la bibliothèque Keras comme illustration
Debug a Deep Learning Network Excellents conseils sur la façon de déboguer méthodiquement un réseau neuronal
My Neural Network Isn’t Working! What Should I Do? Autres bons conseils sur le débogage mettant en relief des aspects que vous pourriez avoir négligés ou oubliés

Documentation

Le tableau ci-dessous propose de la documentation sur les prévisions chronologiques par apprentissage automatique.

Document Résumé
Artificial Neural Networks: A Tutorial
Introduction aux RNA
Neural Networks and Deep Learning Ouvrage en ligne gratuit sur la théorie de l’apprentissage automatique
A Brief Introduction to Neural Networks Ouvrage en ligne gratuit sur les fondements des réseaux neuronaux. L’annexe B parle de l’usage des réseaux neuronaux pour prévoir des séries chronologiques.
An Analysis of Feature Selection Techniques Panorama des différents algorithmes de sélection des fonctionnalités, de leurs avantages et de leurs inconvénients
Understanding LSTM Networks Billet permettant de mieux saisir les réseaux de neurones récurrents (RNR), les réseaux Long Short Term Memory (LSTM) et leurs variantes
The Unreasonable Effectiveness of Recurrent Neural Networks Explication des RNR, de leur fonctionnement, de leur utilité et de leur évolution future avec illustrations
Machine Learning Yearning Conseils pratiques sur la mise en œuvre et le débogage de projets d’apprentissage automatique.

Soutien

Aucun soutien supplémentaire pour la solution type.

Pratiques exemplaires

  • Structure uniforme. Quand vous organiserez le projet, nous vous recommandons de respecter la structure proposée dans Cookiecutter Data Science. En effet, une structure uniforme permettra à d’autres de mieux saisir le code et son analyse, tout en vous permettant d’y revenir aisément des mois et des années plus tard. Puisque vous n’êtes tenu à rien, vous gardez toute la latitude voulue. La Solution type illustre une telle structure, à l’instar ce tutoriel/exemple. Nous préconisons la structure Cookiecutter pour tous vos projets recourant à des données scientifiques.
  • Environnement virtuel. Un aspect crucial d’un projet scientifique consiste à faire en sorte que l’on puisse reproduire le travail. Un environnement virtuel vous facilitera la tâche en vous offrant un environnement vierge chaque fois que démarre un nouveau projet et en saisissant toutes les bibliothèques et toutes les versions installées en cours de route. L’environnement est conservé à l’écart du reste du système et peut donc être exporté sur d’autres machines pour y être recréé. Anaconda/Miniconda et virtualenv autorisent la création d’environnements virtuels. Nous préconisons la création d’un environnement virtuel au début de chaque projet.

Trucs et hics

  • Truc. L’apprentissage automatique avec des séries de données chronologiques diffère de l’apprentissage automatique avec des données non séquentielles. Assurez-vous que les techniques d’apprentissage auxquelles vous vous intéressez conviennent à la modélisation des séries chronologiques. Voici quelques pièges à éviter.
    • Suppression d’entrées lors du traitement préalable. Quand les données ne sont pas séquentielles, il est possible de supprimer les valeurs aberrantes ou celles pour lesquelles la valeur manque. On ne peut en faire autant avec les données chronologiques, qui sont saisies à intervalles réguliers. Aucune donnée ne peut être écartée.
    • Méfiez-vous du réarrangement des données pendant la formation du modèle. Certaines bibliothèques pourraient restructurer les données au hasard, ce qui détruira la succession des données chronologiques. Par exemple, la fonction d’ajustement par défaut fit() dans Keras réarrange les données entre chaque époque. Assurez-vous de la désactiver.
    • Quand vous séparez les données pour obtenir les jeux qui serviront à la formation du modèle, à la validation et aux essais, assurez-vous d’en préserver la nature séquentielle, sans quoi l’avenir teintera le passé. Les données servant à la validation doivent chronologiquement suivre celles employées pour entraîner le modèle et celles servant aux essais doivent chronologiquement suivre celles utilisées pour la validation (elles seront donc toujours les plus récentes). Ceci signifie également qu’on ne peut recourir aux méthodes habituelles de validation croisée, car elles ne respectent pas l’aspect séquentiel des données. Envisagez plutôt les méthodes de validation croisée emboîtées.
  • Truc. Méthode empirique pour les hyper-paramètres du modèle. Certains hyper-paramètres se rapportent à l’architecture du modèle. C’est notamment le cas des couches cachées, du nombre de nœuds qu’elles renferment et des fonctions d’activation de chaque couche. D’autres hyper-paramètres affectent l’apprentissage, notamment l’optimiseur, le rythme d’apprentissage, les facteurs de pondération de la régularisation, la fréquence des informations perdues, la fonction de décision, les mesures de rendement et le nombre d’époques à former. Voici quelques règles empiriques à prendre en compte.
    • Nombre de couches cachées : habituellement, une suffit.
    • Nombre de nœuds cachés : il sera proportionnel à la complexité apparente du système qu’on modélise. Pour commencer, calculer environ 1/10e des données saisies.
    • Fonction d’activation : nous préconisons ReLu, qui est la norme, car elle permet d’éviter le problème de disparition du gradient observé avec les fonctions sigmoïde et tanh.
    • Optimiseur : nous recommandons Adam, qui a donné de bons résultats.
    • Rythme d’apprentissage : cet hyper-paramètre est celui qui modifiera le plus la performance du modèle. Le rythme d’apprentissage usuel pour l’optimiseur Adam est 0,001, mais testez le modèle aux puissances voisines de 10.
    • Facteur de pondération de la régularisation : commencez avec 0,01 et testez les puissances voisines de 10, selon l’importance du surajustement.
    • Fréquence des informations perdues : faites des essais entre 0 et 30 %, selon l’importance du surapprentissage.
    • Fonction de décision : l’écart quadratique moyen et l’erreur moyenne sont la norme dans les problèmes de régression.
    • Mesure du rendement : l’écart quadratique moyen et l’erreur moyenne sont de bons instruments pour les analyses de régression reposant sur des séries chronologiques. On peut donc les retenir, comme pour la fonction de décision.
    • Nombre d’époques : observez les courbes d’apprentissage pour voir combien d’époques sont nécessaires avant d’atteindre un plateau. Pour l’apprentissage autrement que par lots, comme c’est le cas dans la solution de référence, le nombre d’époques varie entre 1 000 et 10 000.
  • Truc.L’apprentissage profond bénéficiera presque toujours de l’utilisation d’une unité de traitement graphique (GPU). L’avantage d’une GPU réside dans son efficacité en multiplication matricielle, méthode de propagation des facteurs de pondération dans un réseau neuronal. L’effet sera d’autant plus bénéfique que les lots de données sont volumineux ou, comme c’est le cas ici, quand on ne recourt pas au traitement par lots, mais saisit la totalité des données servant à l’apprentissage d’un coup. Il conviendra d’envisager l’usage de plusieurs GPU.
  • Truc. Attendez-vous à ce que le modèle donne des résultats légèrement aléatoires. Les RNR intègrent un élément de hasard à l’initialisation des facteurs de pondération du modèle. Par conséquent, les chiffres varieront légèrement chaque fois que vous entraînerez le modèle, y compris avec le même jeu de données.

Plan de vol : Prévision de séries chronologiques

La Solution type recourt aux techniques d’apprentissage automatique pour créer une variable explicative applicable aux séries chronologiques. Ce à quoi on s’intéresse le plus, avec les séries chronologiques, est leur évolution dans le temps, par exemple les tendances et la saisonnalité. Pour vous faire rapidement une idée de ces notions, lisez la partie 2.3 de l’ouvrage Forecasting: Principles and Practice. Voici l’illustration d’une série chronologique.

Line plot of generic time series data

La principale stratégie consiste à ajouter des propriétés qui rendront explicites les informations implicitement contenues dans la série. L’une des plus importantes est la fonctionnalité « lag » (décalage), qui saisit le pouvoir prévisionnel découlant de la nature séquentielle des données observées. Pour chaque intervalle de temps (t), l’expérience nous apprend que l’intervalle antérieur (t-1) a une forte valeur prédictive. Pour quantifier celle-ci, on examine le tracé d’autocorrélation afin d’identifier les intervalles de temps les plus étroitement corrélés avec la valeur actuelle. L’axe des abscisses (x) correspond aux intervalles de temps et l’axe des ordonnées (y) aux valeurs corrélées. Le tracé d’autocorrélation affiche la tendance pour chaque intervalle t.

Stem plot of probability of correlation.

Comme il fallait s’y attendre, les décalages qui se rapprochent le plus de la valeur sont aussi ceux qui y sont les plus étroitement corrélés. Ainsi, il y a corrélation absolue (valeur 1,0) entre la valeur au décalage 0, car cette valeur est corrélée avec elle-même. Cependant, on doit prendre en compte la dépendance séquentielle. Bien que (t-2) semble très corrélé à (t), le résultat pourrait découler de la corrélation avec (t-1). C’est pourquoi il vaut la peine d’examiner le tracé de l’autocorrélation partielle, dans lequel les dépendances de ce genre sont supprimées. Ce tracé illustre mieux les particularités du décalage.

Stem plot of probability of partial correlation.

On constate que la corrélation entre (t) et (t-2) n’est plus 0,8, mais 0,2 et qu’aucun décalage au-delà de (t-2) ne présente de corrélation indépendante assez robuste avec le temps présent. Les tracés d’autocorrélation et d’autocorrélation partielle font aussi ressortir le côté cyclique des données. Découvrir une forte corrélation entre (t) et (t-24), par exemple, signalerait l’existence d’un cycle quotidien.

Une autre façon de signaler les dépendances temporelles consiste à effectuer un « codage à chaud », c’est-à-dire convertir une variable nominale de x catégories en x propriétés binaires. Avec les séries chronologiques, les informations comme l’heure, le jour ou le mois font partie des propriétés pertinentes qu’on pourrait coder.

Enfin, la solution reprend le concept du décalage horaire des techniques classiques de prévision des séries chronologiques. L’approche consiste à supprimer la tendance et la saisonnalité au lieu de les afficher, dans l’espoir qu’ainsi, les données seront plus faciles à modéliser. La section 8.1 de Forecasting: Principles and Practice décrit bien cette technique et on pourra s’en servir pour transformer les données ou leur donner de nouvelles propriétés. Nous ne l’avons pas fait avec nos modèles parce que les méthodes employées ne le justifiaient pas.

Ressources

Les parties qui suivent proposent des ressources sur les méthodes de prévision des séries chronologiques.

Le code source de la Solution type vous en apprendra beaucoup. Pour les exemples energy-prediction ou weather-prediction on examinera le contenu des répertoires /data, /notebooks, /src/data, and /src/features.

Tutoriels

Le tableau ci-dessous dresse une liste partielle des didacticiels que l’auteur juge les plus utiles.

Tutoriel Résumé
Time Series Forecasting as Supervised Learning Comment transformer (fondamentalement) un problème de prévision de série chronologique en problème d’apprentissage automatique

Documentation

Le tableau qui suit propose quelques ressources sur la façon d’établir des séries chronologiques par apprentissage automatique.

Document Summary
Forecasting: Principles and Practice Ouvrage gratuit en ligne sur les principes de la prévision des séries chronologiques. Il vous aidera à maîtriser les séries de données chronologiques et leurs caractéristiques. Comprend une section sur les réseaux neuronaux et leur utilisation pour effectuer des prévision avancées.

Soutien

Aucune ressource supplémentaire applicable

Pratiques exemplaires

  • rnets de notes. Après avoir téléchargé les données, la première chose à faire consiste à en explorer les caractéristiques. À cause de leur interactivité, les carnets de notes Jupyter, dans Python, s’y prêtent bien. En apprentissage automatique, les décisions sur le traitement préalable des données ainsi que le choix et la création de fonctionnalités devraient s’appuyer sur le travail effectué avec les carnets de notes. Nous préconisons l’usage de tels carnets pour sauvegarder et signaler les résultats du travail d’exploration.

Trucs et hics

  • Hic. Prenez garde à ne pas faire fuiter accidentellement les données, ce qui pourrait arriver dans les situations que voici.
    • Fuite de l’avenir dans le passé. Assurez-vous que l’algorithme d’apprentissage automatique ne peut « voir dans l’avenir » ni dans le présent. Vous ne devez inclure aucune donnée de l’époque à laquelle s’applique les prévisions. Concrètement, quand le modèle formule une prévision pour le temps t, il ne peut avoir absorbé de données sur le temps t ni les périodes subséquentes.
    • Fuites des données d’essai (ou de validation) dans les données d’entraînement. L’avantage de séparer les données en données de formation, données de validation et données d’essai disparaît quand le modèle a accès aux données de validation durant l’optimisation ou aux données d’essai lors de la période d’entraînement.
    • Fuite des variables étudiées dans les propriétés. Il pourrait s’agir d’un problème implicite si on bâtit par erreur les propriétés à partir des variables étudiées. C’est ce qui se produit, par exemple, quand on bâtit une fonctionnalité pour les valeurs binaires aberrantes en comptant les valeurs aberrantes de la cible ou variable étudiée.
  • Truc. Efforcez-vous de vaincre la persistance. La « persistance », variable explicative la plus simple des séries chronologiques, prévoit simplement que la valeur suivante sera égale à la valeur présente. Le taux d’erreur d’un tel modèle est si faible qu’il impressionne, mais il le fait de façon stupide. Quand on établit une variable explicative pour une série chronologique, on comparera la performance du modèle à la persistance. Cela vous évitera d’essayer de prédire une quantité résultant de l’effet du hasard, comme l’explique cet auteur. Si votre modèle ne donne pas de meilleurs résultats que la persistance, il se pourrait que la quantité étudiée soit tout simplement impossible à prévoir.

 

Solution type