Modélisation d’une croissance exponentielle ou polynomiale avec python : Cas du Covid-19 au Bénin

Bola BALOGOUN
TakwimuLab
Published in
8 min readMay 9, 2020

En dehors de la visualisation qui fournit son lot d’information dans la compréhension d’un phénomène étudié, la modélisation est l’autre étape de l’analyse des données dont les résultats et interprétations sous-tendent recommandations et politiques dans les sphères de prise de décision. Modéliser un phénomène consiste essentiellement à traduire approximativement ce dernier en langage mathématique afin de pouvoir expliquer puis prédire son comportement. Dans ce billet, nous utiliserons le langage python pour modéliser la croissance du nombre cumulé d’infection au Covid-19 en République du Bénin.

Fig 1 : Evolution du Covid-19 au Bénin du 16 Mars au 07 Avril 2020

Les sources de données sont les mêmes que celles du précédent article.

Notre objectif est de montrer comment on modélise le comportement d’un phénomène qui a une croissance linéaire, exponentielle, ou polynomiale. Les données du Covid-19 utilisées à titre illustratif, nous permettrons de visualiser quelques simulations possibles de l’évolution de l’épidémie au Bénin. Nous ferons rappel à quelques petites propriétés mathématiques. Vous n’avez rien à craindre, elles sont vraiment basiques (niveau 3ème — 1ère toutes séries).

Quand parle-t-on de croissance exponentielle ?

De manière générale, on parle de croissance quand la quantité d’une variable observée augmente d’un instant -t- à un autre.

Fig 2 : Comparaison de trois différents types de croissance

Contrairement à la croissance A qui nous servira ici de référence, on constate qu’au niveau de la croissance B sur la figure ci-dessus, la valeur augmente du même nombre toutes les heures : 200. La variation des valeurs suit dans ce cas l’allure d’une ligne droite. On dit que la croissance est linéaire. Au niveau de la croissance C, on constate que chaque heure, la valeur augmente, mais pas du même nombre, tout comme pour la croissance A. Puis en observant de plus près, on se rend compte que l’évolution se fait telle que la valeur au temps t+1 est égale à la valeur au temps t multipliée par 1,25. C’est comme quand vous placez votre argent dans une banque à un taux d’intérêt annuel fixe. Après la première année, votre nouveau capital devient le capital de départ plus l’intérêt, et c’est à ce nouveau montant que le taux d’intérêt sera appliqué pour la nouvelle année et ainsi de suite. Dans ce cas, on dit que la croissance est exponentielle.

ATTENTION ! Croissance exponentielle ne rime pas toujours avec croissance forte ni rapide comme son usage ces derniers temps aurait pu le faire croire à certains. Il est possible qu’une croissance même linéaire (B) soit plus forte et rapide qu’une croissance exponentielle, comme on peut d’ailleurs l’observer entre 6 h et 17 h sur la figure 2.

Nous supposons dans un premier temps que le nombre cumulé d’infection au Covid-19 au Bénin suit une fonction exponentielle simple ayant pour formule la fonction de départ dans la figure 3 ci-dessous. Notre objectif à ce niveau est de calculer une estimation des paramètres A et B de la dite fonction, x étant le nombre de jours de présence du Covid-19 au Bénin.

Rappel Mathématique
Fig 3 : Transformation logarithmique d’une fonction exponentielle

Déterminer A et B de la fonction f(x) revient à déterminer les valeurs a et b de l’équation de droite y = a*x + b, puis à calculer leurs exponentielles. Pour ce faire, on fera recours à l’algorithme de machine learning de la régression linéaire simple, qu’on appliquera aux logarithmes du nombre cumulé de cas de Covid-19 depuis son premier jour au Bénin.

Tableau 1 : Table des données des 10 premiers jours du Covid-19 au Bénin
Fig 4 : Comparaison du nombre cumulés d’infections et de son logarithme

Dans notre cas ci-dessus, l’allure des logarithmes cumulés (Log_cas)n’est pas exactement une ligne droite, mais elle ne semble pas trop s’y éloigner non plus.

Machine Learning : Régression Linéaire simple

Statsmodels est l’une des librairies python qui offrent l’algorithme de régression linéaire avec les estimations ajustées par la méthode des moindres carrées ordinaires (MCO en français — OLS en anglais). Pour les habitués du langage R, sachez qu’il s’agit aussi du package python dont l’output se rapproche le plus de ce que vous pouvez obtenir dans le ‘summary’ d’un lm. Il est pratique pour la recherche.

Fig 5 : Résultat de régression linéaire simple pour déterminer l’équation de droite des valeurs logarithmes
a = 0.7796 => numpy.exp(a) = A = 1.085737
b = 0.0823 => numpy.exp(b) = B = 2.180517

y(t) = 0.0823 t + 0.7796. Modèle exponentiel f(t) = 2.1805 * (1.0857)^t

Pour vérifier comment notre modèle s’ajuste aux données d’entraînement, nous allons calculer quelques indicateurs d’évaluation de modèle de régression linéaire en machine learning. Il s’agit principalement de :

  • Le coefficient de détermination (R — Carré) : il représente la proportion de la variance dans l’évolution du nombre cumulé de cas de covid-19 que notre modèle a pu expliquer. En d’autres termes, il s’agit du coefficient d’adéquation des valeurs prédites par rapport aux valeurs réelles. Il varie entre 0 (0 %) et 1 (100 %), et plus il est proche de 1, meilleur est le modèle.
  • RMSE : l’erreur quadratique moyenne (MSE) est la moyenne du carré des différences entre les valeurs réelles et prédites sur l’ensemble des données. La RMSE est égale à la racine carrée du MSE. Plus elle est petite, mieux est le modèle.
  • L’erreur absolue moyenne (MAE) : elle représente la moyenne de la différence absolue entre les valeurs réelles et prédites sur l’ensemble des données. Plus elle est petite, mieux est le modèle.
Fig 7 : Des formules de métriques d’évaluation d’un modèle de machine learning
MAE : 12.25   |   RMSE : 20.63   |   R-Carré : 0.5891

Notre modèle parvient à expliquer 58.91 % de la variance du nombre cumulé de covid-19 au Bénin. Généralement, les modèles avec un R-Carré supérieur à 50 % sont acceptables, mais le minimum que je me fixe, moi, dans mes travaux est de 75 % surtout pour les variables numériques. On va donc essayer d’autres modèles dans l’espoir d’en trouver un qui sera plus utile. C’est le moment de vous dire/rappeler une chose importante en modélisation : tous les modèles sont mauvais, il y en a juste quelques-uns d’utiles.

All models are wrong, but some are useful. — George Edward Pelham Box (Statisticien Anglais)

Vous verrez dans le code de cette application que j’ai repris la phase de la régression linéaire simple avec la librairie numpy tout en prenant le soin d’appliquer cette fois-ci un poids aux valeurs quotidiennes observées. Cette pondération a corrigé le premier modèle en réduisant les erreurs de prédictions surtout au niveau des grandes valeurs.

y(t) = 0.0587 t + 1.6523. Modèle exponentiel f(t) = 5.2189 * (1.0605)^t

Fig 6 : Comparaison des valeurs réelles aux prédictions des deux modèles exponentiels

Les indicateurs de performance du second modèle (ajustement = Pred 2).

MAE : 5.41  |   RMSE : 6.73   |  R-Carré : 0.9562

Le modèle n°2 explique 95,62 % de la variance du nombre cumulé de cas de Covid-19 au Bénin. Par rapport donc au R-carré, il est nettement meilleur que le modèle n°1, avec aussi des MAE et RMSE plus petites. C’est encourageant comme résultat. On verra s’il y a moyen de faire mieux sans pour autant compliquer la procédure, pour le moment.

La régression linéaire multiple : cas d’une croissance polynomiale

Et si au Bénin la croissance du nombre cumulé de cas de Covid-19 n’est pas vraiment exponentielle mais plutôt polynomiale ? Afin de vérifier cette éventualité, nous allons comparer la courbe du logarithme des valeurs cumulées à une courbe de croissance logarithmique au lieu d’une ligne droite. La régression polynomiale est une régression linéaire multiple particulière où les observations sont construites à partir des puissances d’une seule variable (ici t).

Fig 7 : Comparaison des transformations logarithmiques de fonctions exponentielle et polynomiale

Quand on effectue une transformation logarithmique sur une fonction exponentielle simple, cela nous donne une fonction affine. Mais quand la fonction à laquelle cette transformation est appliquée est en réalité polynomiale, sa transformation donne une fonction logarithmique comme démontrée sur la Figure 7.

Figure 8 : Courbe d’une croissance logarithmique

L’allure des logarithmes du nombre cumulé de cas d’infection au Covid-19 au Bénin n’est pas exactement semblable à une croissance logarithmique simple. Cependant, elle en est assez proche pour que l’on puisse se pencher aussi sur cette hypothèse et comparer ses résultats à ceux de la croissance exponentielle. La modélisation par un polynôme de degré 2 : a*t²+b*t+c avec “t” le nombre de jours connus de présence du covid-19 au Bénin donne:

f(t) = 0.0406 t² + -0.2149 t + 3.3692
MAE : 4.42
| RMSE : 6.9 | R-Carré : 0.954

Ce modèle polynomial semble aussi bien expliquer l’évolution du nombre cumulé de cas de covid-19 au Bénin, mais pas autant que le dernier exponentiel selon le R-carré. Vous pouvez vous exercer à augmenter le degré du polynôme, estimer les coefficients de la fonction associée et vérifier comment votre modèle s’ajuste à vos données.

Voici un récapitulatif de tous les modèles essayés dans cet exercice.

Tableau 2 : Bilan — Formule et résultats des performances des modèles.
Fig 9 : Visualisation des simulations moyennes possibles prédites par les modèles 1 à 4
Tableau 3 : Valeurs moyennes prédites par les modèles 1 à 4 du 8 au 18 mai 2020

Les différents modèles testés dans cet exercice font partie des formes basiques en machine learning. Il existe d’autres algorithmes un peu plus complexes qui donnent de bien meilleurs résultats. C’est le cas des modèles d’ensemble. En effet, il existe des algorithmes dits d’ensemble en Machine learning qui permettent de mixer plusieurs modèles pour en faire un seul. Dans le prochain article, nous découvrirons l’un d’entre eux, puis nous expliquerons toujours la propagation du Covid-19 au Bénin en faisant usage d’un modèle de séries temporelles.

En attendant, retrouvez le code complet de cette application sur notre compte github, ici.

NB : Takwimu Lab est un groupe de travail en science des données (Data Science) et apprentissage automatique (Machine Learning). Nous ne sommes ni professionnels de la santé, ni épidémiologistes. Par conséquent, nous vous prions de ne pas prendre les opinions ou conclusions dans cet article comme étant celles de professionnels de la santé. Merci.

--

--

Bola BALOGOUN
TakwimuLab

Observer - Apprendre - Comprendre - Partager ou non.