Soyons d’accord sur une chose : nous avons tous rêvé de prédire le coût des actions pour investir notre argent, mais malheureusement ce n’est pas une tâche simple car il faut tenir compte de plusieurs facteurs. Dans cet article, nous parlons de l’utilisation de Prophet, un outil d’apprentissage machine, pour prévoir l’évolution des cours boursiers et ainsi servir nos objectifs.
L’analyse prédictive des ventes est un élément important de l’intelligence d’affaires moderne et peut être un problème très complexe, surtout lorsque certaines données sont manquantes ou avec la présence de valeurs aberrantes.
Prévoir les ventes d’un produit ou l’évolution du prix d’un titre peut être considéré comme un problème de séries chronologiques. Différents modèles ont été développés afin d’obtenir des prédictions robustes : ARIMA, SARIMA, SARIMAX, GARCH, etc. Chacune de ces méthodes fait des hypothèses sur les données (périodicité, stationnarité, ..) et utilise les propriétés statistiques des données historiques. Nous n’allons pas passer en revue ces méthodes car elles sont bien établies et d’excellents tutoriels sont déjà disponibles. Le modèle prédictif de pointe (SOTA) est développé par l’équipe de recherche de Facebook : PROPHET.
A la fin de l’article, vous pourrez:
- Expliquez l’algorithme PROPHET à vos amis.
- Comprendre comment il peut être appliqué à un cas d’utilisation concret.
- Commencez à l’appliquer aux différents problèmes de séries chronologiques que vous rencontrez dans vos études ou votre travail.
PROPHET
Prophet est l’algorithme de prévision des séries chronologiques de Facebook qui a été publié en 2016 sous forme de logiciel open source avec une implémentation en Python et R.
Prophet est une procédure de prévision de données de séries chronologiques. Il est basé sur un modèle additif où les tendances non linéaires correspondent à la saisonnalité annuelle et hebdomadaire, plus les jours fériés. Il fonctionne mieux avec des données de périodicité quotidienne avec au moins un an de données historiques. Prophet est robuste aux données manquantes, aux changements de tendance et aux valeurs aberrantes importantes.Comme Prophet a été développé par Facebook, il est évident qu’il est optimisé pour les tâches de prévision d’affaires qu’ils avaient rencontrées en interne, qui sont caractérisées par :
- Au moins un an d’histoire d’observations horaires, journalières ou hebdomadaires.
- Un certain nombre d’observations manquantes ou de valeurs aberrantes importantes qui sont raisonnables.
- Changement de tendance historique, suite à un événement majeur (lancement d’un produit par exemple). Ces tendances ont une croissance non linéaire puisqu’elles atteignent des niveaux de saturation.
Maintenant que nous avons présenté Prophet, voyons comment ça marche. En fait, il s’agit d’un modèle de régression additive exploitant trois types d’informations : la tendance, la saisonnalité et une liste fournie de congés.
Tendance
Prophet détecte automatiquement les changements de tendances en sélectionnant les points des données où le changement est flagrant. Elle lui permet de produire une courbe de croissance tendancielle.
Saisonnalité
Prophet modélise la composante saisonnière annuelle à l’aide de séries de Fourier et les composantes saisonnières hebdomadaires à l’aide de variables factices.
Jours fériés
L’utilisateur doit fournir la liste des jours fériés afin d’aider Prophet à adapter son cadre aux données qui l’intéressent. Vous pouvez imaginer que les fêtes peuvent avoir un impact sur la tendance puisque de nombreux produits sont lancés à ce moment-là et que les acheteurs sont plus inspirés.
Prédire le cours des actions – Cas d’utilisation réelle
L’objectif est ici de prédire l’évolution du cours de bourse d’une société cotée au NYSE ou au NASDAQ. Comme dans l’article sur le remboursement du prêt, les données sont téléchargées depuis Kaggle : Historique quotidien des cours boursiers.
Il contient deux ensembles de données qui sont explorés ci-dessous. Pour mener nos expériences, nous utiliserons les bibliothèques Python, Pandas et Prophet.
Exploration des ensembles de données
Les données sont dans ce format :
import pandas as pd
stock_information = pd.read_csv("historical_stocks.csv")
stock_information.head()
ticker | exchange | name | sector | industry |
PIH | NASDAQ | 1347 PROPERTY INSURANCE HOLDING, INC. | FINANCE | PROPERTY-CASUALTY INSURERS |
TURN | NASDAQ | 180 DEGREE CAPITAL CORP. | FINANCE | FINANCE/INVESTORS SERVICES |
Dans le premier ensemble de données, nous avons les descriptions des multiples téléscripteurs : sur quelle bourse ils sont cotés, leur nom, leur secteur et l’industrie à laquelle ils sont liés.
Il y a 6460 tickers uniques dans l’ensemble de données. Voyons la répartition des téléscripteurs par secteur.
Les tickers proviennent de 13 secteurs différents : Finances, services à la consommation, biens d’équipement, biens de consommation durables, industries de base, biens de consommation durables, énergie, divers, technologie, transport et biens de consommation non durables, services publics, soins de santé. La majorité des téléscripteurs proviennent du secteur financier.
Jeu de données sur le cours de l’action
stock_prices = pd.read_csv("historical_stock_prices.csv")
stock_prices.head()
ticker | open | close | adj_close | low | high | volume | date |
AHH | 11.50 | 11.58 | 8.493155 | 11.25 | 11.68 | 4633900 | 2013-05-08 |
AHH | 11.66 | 11.55 | 8.471151 | 11.50 | 11.66 | 275800 | 2013-05-09 |
Dans le deuxième ensemble de données, nous avons l’évolution du cours de l’action des tickers : les cours d’ouverture, les cours bas, les cours élevés, les cours de clôture et les cours de clôture ajustés chaque jour ouvrable.
Prédictions
Pour faire nos prévisions, nous nous concentrerons sur le cours de clôture d’un ticker du secteur financier et étudierons ses séries chronologiques. Notre choix s’est porté sur PIH.
data_PIH = stock_prices[stock_prices["ticker"] == "PIH"]
data_PIH["date"] = pd.to_datetime(data_PIH["date"])
data_PIH.head()
ticker | open | close | adj_close | low | high | volume | date |
PIH | 8.00 | 7.95 | 7.95 | 7.90 | 8.50 | 642900 | 2014-04-01 |
PIH | 7.94 | 8.16 | 8.16 | 7.90 | 8.29 | 228400 | 2014-04-02 |
Nous avons 1095 entrées pour ce ticker correspondant à l’évolution du 2013/04/01 au 2018/08/24.
Utilisons maintenant Prophet pour prédire les prix pour juin, juillet et août 2018 sur la base des prix précédents.
Tout d’abord, nous créons les ensembles de données de formation et de test.
limit = np.datetime64(datetime.date(2018, 6, 1))
data_train = data_PIH[data_PIH.date < limit][["date","close"]].dropna()
data_test = data_PIH[data_PIH.date > limit][["date","close"]].dropna()
Deuxièmement, nous adaptons les noms des colonnes de données de formation aux besoins de Prophet. La colonne de la date doit être nommée “ds” tandis que la colonne des valeurs doit être nommée y.
data_train.columns = ["ds", "y"]
Troisièmement, nous ajustons Prophet sur les données d’entraînement et nous utilisons le modèle ajusté pour faire des prédictions sur les trois mois correspondant aux données de test. Pour ce faire, nous utilisons la fonction “make_future_dataframe”. Vous devez savoir que Prophet prédit aussi les valeurs pour le passé sur lequel il a été formé et donc nous filtrons la sortie pour la comparer plus tard avec les données de test.
from fbprophet import Prophet
m = Prophet()
m.fit(data_train)
future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
#Here we filter on the wanted dates as Prophet predicts the values of the past too
forecast_test = forecast[forecast.ds > np.datetime64(datetime.date(2018,6,1))]
forecast_test[["ds","yhat","yhat_lower","yhat_upper"]].head()
Ce que j’aime chez Prophète, c’est qu’il donne des informations sur la confiance des prédictions. Comme vous pouvez le voir, il fournit la valeur prédite correspondant à la date dans “ds” comme “yhat”, la limite inférieure de l’intervalle de confiance “yhat_lower”, et la limite supérieure de l’intervalle de confiance “yhat_upper”.
Utilisons maintenant la méthode “plot” pour visualiser les valeurs prévues. Les points sont des valeurs de vérité de terrain tirées des données d’entraînement.


Nous remarquons que les prévisions ne sont pas très précises quand il s’agit de la performance au jour le jour, mais Prophet réussit à saisir la tendance et la saisonnalité. C’est une bonne prévision “en moyenne”. Pour mieux comprendre son fonctionnement, nous en traçons les principales composantes (tendance, saisonnalité hebdomadaire et saisonnalité annuelle).


L’information sur la saisonnalité est très utile pour les investisseurs car la saisonnalité annuelle indique qu’il est lucratif d’investir avant juillet et de vendre en septembre.
Filtrons maintenant notre sortie seulement sur les dates apparaissant dans les données de test et calculons la métrique RMSE entre les prédictions et la vérité de terrain.
Nous obtenons une RMSE de 0,24, ce qui signifie qu’en moyenne nous faisons une erreur de 0,24 sur nos prédictions (par exemple, si la valeur est 7, nous prédisons 7,24 ou 6,76 en moyenne).
Traçons les prédictions par rapport aux valeurs réelles pour mieux comprendre la qualité de nos prévisions.


L’intrigue confirme ce que nous avons dit plus tôt, à savoir que le Prophète était bon en moyenne. Il ne peut pas être exact aux valeurs extrêmes correspondant à des événements inattendus ayant un impact sur le cours de l’action.
Conclusion
Nous avons vu dans cet article un cas réel d’utilisation de l’algorithme Prophet qui est un algorithme de prévision de séries chronologiques développé par Facebook et open-source en 2016. Cette courte analyse nous a permis de constater que Prophet est bien adapté aux investissements à long terme car il ne peut être précis à très court terme lorsque des événements imprévus surviennent et ont un impact sur le prix.