🔍
Prévision de séries temporelles et analyse causale en R avec Facebook Prophet et Google CausalImpact

Prévision de séries temporelles et analyse causale en R avec Facebook Prophet et Google CausalImpact

Note: Cet article a été traduit avec Claude Code le 31 janvier 2026. La version originale est disponible ici.

Cet article fera partie de ma plongée annuelle en R ; l’idée sera d’utiliser deux bibliothèques R en prévision de séries temporelles et inférence causale.

Je voulais écrire un article depuis longtemps, mais je n’ai jamais trouvé le temps/les ressources pour le faire, principalement parce qu’il me manquait un vrai jeu de données pour le faire, mais devinez quoi, l’année 2020 est venue à ma rescousse. Pendant le COVID / confinement, la plupart de l’impact de cet événement est négatif dans notre société du point de vue de la mortalité économique. Néanmoins, je pensais pendant le confinement de Montréal ; il y a peut-être des impacts positifs dans la population qui ne sont pas liés à la propagation du virus (plus que les gens qui cuisinent par exemple). Ma recherche m’a mené sur plusieurs jeux de données, mais celui qui a attiré mon attention était la criminalité de Montréal.

L’idée de cet article sera de :

  • Plonger dans le jeu de données
  • Utiliser Facebook Prophet pour construire un prédicteur de crimes pour 2019
  • Évaluer l’impact du confinement sur la criminalité avec CausalImpact

Tout le code pour cet article peut être trouvé dans ce dépôt Github.

Exploration des données

Le jeu de données utilisé pour cette expérience est ici (désolé aux anglophones) ; c’est une liste de tous les crimes entre 2015 et août 2020. Chaque crime est associé à de grandes catégories, et il y a des informations sur le lieu, le moment de la journée, etc.

Rapidement, il y a une représentation du nombre de crimes par jour à Montréal.

Plot crimes illustration

La série temporelle est un peu bruyante, mais nous pouvons remarquer une sorte de tendances sur le signal, un signal décroissant au fil du temps, et c’est plus évident avec la vision hebdomadaire.

Plot crimes weekly illustration

De cette vue, il ne semble pas qu’il y ait une saisonnalité sur les crimes de Montréal (comme plus de crimes en été qu’en hiver).

Les catégories de crimes sur le jeu de données sont :

  • Vol de véhicule
  • Méfait
  • Vol qualifié
  • Vol dans/sur véhicule
  • Introduction par effraction
  • Meurtre

Il y a un sous-graphique sur l’évolution des différents types de crimes au fil du temps.

Plot crimes weekly subplots illustration

Pas d’impact saisonnier réel sur les différentes catégories, mais il est remarquable que la diminution annuelle semble produite par le vol dans/sur véhicule, le méfait et l’introduction par effraction.

Pour les prochaines étapes de l’article, un focus sera sur les crimes hebdomadaires pour faciliter l’analyse.

Prévision de séries temporelles avec la bibliothèque Facebook Prophet

Le projet Facebook Prophet a été développé par Facebook et publié en 2017 ; l’article contient tous les détails sur la conception du modèle, mais principalement ce qu’il faut savoir :

  • Construit au-dessus de la régression linéaire ; c’est une variation du modèle GAM.
  • La sortie prédite par ce type de modèle est composée d’une tendance, de composants saisonniers et de jours fériés pour gérer l’évolution du signal au fil du temps.

Vous pouvez utiliser la bibliothèque avec Python ou R, et la documentation de démarrage rapide est facile à utiliser. En termes de configuration, vous devez formater un peu les données d’entrée (nom de la colonne, format), mais c’est simple. Pour rappel, l’objectif est de construire un système de prévision pour l’année 2019 des crimes hebdomadaires de Montréal basé sur les données entre 2015 et 2018.

Voici la prévision proposée par le modèle construit sur Prophet.

Plot forecast illustration

La prévision n’a pas l’air si mal, et elle a capté la diminution à long terme. Le modèle offre une projection basse et haute du signal. À partir du modèle, chaque composant mentionné précédemment peut être accessible ; par exemple, il y a le composant de tendance ou la saisonnalité.

Plot forecast trend illustration Plot forecast trend 1 illustration

Avec Prophet, il y a la capacité d’ajouter des facteurs externes comme des vacances ou des événements spécifiques qui pourraient affecter le signal, et c’est relativement facile à faire.

Dans le papier de Prophet, le modèle est décrit comme un système de prévision pour les analystes, qui n’ont peut-être pas le temps de passer par la conception du modèle et peuvent rapidement construire un système de prévision et ajouter des fonctionnalités externes sans penser aux paramètres du modèle.

Il est temps d’aller un peu plus loin avec le package CausalImpact de Google.

Analyse causale avec CausalImpact de Google

C’est un projet de 2015 développé par Google ; il y a l’article qui donne plus de détails sur la bibliothèque, mais je recommanderai fortement de jeter un œil à cette présentation de Kay Brodersen (l’un des auteurs du package) qui est si claire que construire une explication par-dessus serait une perte de temps.

Ce qu’il est important de retenir, c’est que ce package offre les capacités de

  • prévoir une série temporelle en ajoutant rapidement des fonctionnalités pour construire le modèle
  • Évaluer la différence entre la prévision et la réalité ; c’est une inférence causale pour estimer l’impact d’un événement

Comme mentionné dans l’introduction, évaluons l’impact du confinement de Montréal sur la criminalité avec ce package. Le protocole de cette analyse est assez simple ; d’abord, j’ai entraîné un modèle avec les données. Pour faire l’entraînement, nous devons avoir des fonctionnalités qui ne sont pas corrélées avec la criminalité (par exemple, avoir le nombre d’arrestations semble une mauvaise idée).

J’ai décidé d’utiliser la météo de Montréal (conçue par la température hebdomadaire moyenne/les précipitations avec leur variance hebdomadaire) parce qu’elle ne semble pas liée à la criminalité. Pour info, il y a une ressource intéressante de la NASA appelée NASA power stockant les informations météorologiques quotidiennes (merci @juliettetroadec pour l’aide). Il y a un graphique de la valeur moyenne pour la température et les précipitations au fil du temps.

Plot weather illustration

Il y a une visualisation du système de prévision pour la période de confinement (commençant par la ligne verticale noire).

Plot forecast trend 2 illustration

Le package offre la capacité d’analyser le résultat de la prévision par rapport à la réalité, dans ce cas, entre le 15/3/2020 et le 15/6/2020 et de résumer la comparaison dans un rapport.

Report causal analysis illustration

De ce rapport, il est intéressant d’extraire :

  • L’effet relatif qui est, dans ce cas, une diminution de 29% (entre 22-36%)
  • La significativité de la mesure, dans ce cas, nous pouvons dire qu’il y a un impact avec une confiance de 99,89%

J’ai décidé d’étendre l’analyse à tous les crimes, et voici le résultat.

Report causal analysis crimes illustration

Le confinement semble avoir un impact positif sur la diminution du méfait, du vol qualifié, de l’introduction par effraction et du vol sur le véhicule, mais le confinement n’a eu aucun impact sur le vol de véhicule et le crime de mort, donc il y a au moins du bon dans ce confinement. Pour conclure, j’ai juste décidé de comparer la prédiction du modèle Prophet et du modèle CausalImpact.

Plot comparison forecast illustration

Le CausalImpact offre une prévision de gamme plus large de la prédiction par rapport à celui de Prophet.

Conclusion

Quelques enseignements sur cet article :

  • C’était une excellente occasion de plonger dans R ; j’ai une sorte de syndrome de Stockholm avec ce langage que je déteste au début, mais que je commence à aimer plus tard
  • Il y a du bon dans le confinement

Plus sérieusement, je pense que ce qu’il faut retenir, c’est que

  • Prophet est très simple à utiliser pour construire un modèle de référence simple pour prévoir une série temporelle
  • le package CausalImpact offre la capacité de faire rapidement une analyse d’impact (et pour les Pythonistes, il y a une implémentation python, mais elle n’utilise pas le même modèle sous le capot).
  • Il y a une alternative à CausalImpact comme le package Dowhy de Microsoft

J’ai été diverti de faire ce projet, et je pense que je ferai à l’avenir un autre article sur le sujet de la prévision de séries temporelles, mais plus du point de vue de l’évaluation avec différents modèles (comme ARIMA ou LSTM, par exemple).

Tout le code pour cet article peut être trouvé dans ce dépôt Github.