Dans ce billet nous allons voir comment élaborer un modèle simple pour étudier la propagation d’un virus dans une population, puis nous utiliserons les données sur la propagation du SARS-CoV-2 pour effectuer une regression et prédire le nombre de cas futurs.
Le but de ce billet n’est pas de donner une évaluation précise mais plutot de présenter des méthodes et outils qui pourront être utilisés ailleurs et que j’utilise moi-même, je ne suis pas du tout un expert des épidémies et je suis donc incapable d’émettre un quelconque avis sur le sujet
Pré-requis: maths niveau L1 pour comprendre toutes les équations.
Modèle mathématique
Croissance exponentielle
Un virus se propage d’individus en individus: plus il y aura de gens infectés, plus il y aura de gens pour transmettre le virus.
Si l’on note le nombre d’infectés à un instant donné, alors à un instant , le nombre de nouveaux infectés sera proportionel à . Le coefficient de proportionalité dépendra bien sûr de plusieurs facteurs:
- La durée d’exposition
- La probabilité de transmettre le virus à quelqu’un lors d’un contact
- Le nombre de personnes que l’on peut croiser pendant
- Le temps pendant lequel un individu est contagieux
Pour le moment nous allons confondre les trois derniers paramètres en un seul produit que nous noterons (les épidémiologistes parlent de ).
Le nombre d’infectés à est donné par la relation suivante:
D’ou l’on tire l’équation différentielle linéaire de premier ordre:
Qui a pour solutions:
On a donc affaire à une croissance exponentielle sans fin, dans quelques mois l’humanité sera donc complètement infectée ! Ou pas …
Plafonnement logistique
Notre modèle ne colle pas à la réalité, en effet le nombre d’infectés ne peut pas grandir indéfiniment, déjà parce que nous ne sommes qu’un nombre fini de terriens. On pourrait donc supposer que la population mondiale est une borne supérieure de . Dans l’équation différentielle cela se traduit par le fait que l’on ne peut infecter que des gens qui n’ont pas déjà été infectés. Plus il y a de contaminés, moins il y a de gens à contaminer Le coefficient dépend donc de et a fortiori du temps:
On a donc:
En réalité sera inférieur à , ici on supposait un cas idéal (pour le virus, pas pour nous ) où l’ensemble de la population est mélangé aléatoirement à chaque étape du procesus, en pratique ce n’est pas le cas certains pays ne jouent pas le jeu et ferment leurs frontières, se confinent bref… des barrières sont mises
Posons donc que le nombre final d’infectés est une inconnue que l’on nomme . Il nous faut donc résoudre l’équation différentielle de premier ordre:
Si vous êtes allergique aux maths, sautez les trois lignes suivantes
En séparant les variables on obtient:
On décompose en éléments simples à gauche, on intègre les fractions et finalement:
On a donc trois grandes inconnues qui sont , et . Nous allons tenter de déterminer leurs valeurs pour effectuer une prédiction du nombre de cas total en France.
Mais avant intéressons nous sur le sens physique de ces paramètres. C’est bien beau de faire des modèles mais encore faut-il qu’ils aient un sens !
a été posé comme étant le nombre de cas limite, et en effet on obtient bien:
est notre coefficient de transmission et on peut voir qu’il ait bien homogène à l’inverse du temps comme nous l’avions défini au début.
Et alors késako ? à vous de trouver !
est homogène à une population comme et représente en fait la proportion de gens infectés par rapport aux gens non infectés au début de l’épidémie. En effet on peut vérifier que . Ce qui est un peu flou c’est la définition que l’on prend de début de l’épidémie ici c’est quand , en pratique cela ne correspond à rien de physique, il n’y a pas un moment précis ou l’épidémie commence…
Modèle informatique
Ici le but est donc d’effectuer une regression sur un jeu de données pour tenter de deviner ces paramètres, notre modèle étant non linéaire et non linéarisable on choisit d’utiliser l’algorithme de Levenberg–Marquardt pour minimiser le . (code disponible ici )
Je rappelle que le désigne ici une mesure de l’erreur quadratique:
Où représente la fonction que l’on suppose être solution du fit et ses paramètres, dans notre pas est la fonction logistique et est le vecteur
Si vous ne comprenez pas bien ce qui vient d’être dit, cela n’a aucune importance pour comprendre la suite.
Nous allons commencer par faire un premier fit en nous basant sur les données du site worldometers et nous utiliserons le logiciel gnuplot. L’implémentation de LM y est très puissante et permet de trouver facilement les paramètres de beaucoup de courbes ! Souvenez vous cependant que l’on cherche à minimiser le et que pour cela l’algorithme va chercher à tâtons une solution, il faut donc avoir une bonne idée de la solution pour que cela fonctionne. En effet si vous démarrez avec un initial trop éloigné de la réalité, vous risquez de ne jamais converger et de vous perdre dans les limbes des algorithmes de regression …
On obtient alors la courbe suivante:
Et les résultats du fit sont:
Final set of parameters Asymptotic Standard Error
======================= ==========================
K = 474.653 +/- 49.27 (10.38%)
N = 105988 +/- 6271 (5.916%)
a = 0.177523 +/- 0.00514 (2.895%)
correlation matrix of the fit parameters:
K N a
K 1.000
N 0.852 1.000
a -0.986 -0.921 1.000
À première vue le fit semble correct et on obtient moins de 10%
d’erreurs pour chaque paramètre.
Mais pourquoi tu ignores les jours avant le 8 mars ?
Parceque qu’il faut bien commencer quelque part ! En traçant les données du tout début de l’épidémie on peut voir qu’elles sont très fluctuantes et semblent donc peu pertinentes. Cela ne se voit pas forcément en échelle linéaire mais en traçant en échelle logarithmique comme on doit toujours le faire d’ailleurs
Ok mais tu te moques de nous ! Tu prédis 106 000 cas et là on est le 13 avril on a dépassé les 130 000 ! Ça marche pas ton truc !
Remarque judicieuse ! Et d’ailleurs si vous y avez prêté attention vaut environ 0.18 s alors que dans la réalité les épidémiologistes s’accordent pour dire que sa valeur est supérieur à deux pour une population non confinée. Où est l’arnaque ?
Alors bien sûr je n’ai aucun moyen d’en être sûr mais pour moi le problème vient de la sous-estimation des cas: en effet du à un manque de test en France il est impossible de savoir au jour le jour combien de personnes sont touchées. Nos données sont biaisés, notre résultats l’est donc aussi !
Et d’ailleurs si on s’intéresse aux données après le 2 avril on voit que tout change:
Final set of parameters Asymptotic Standard Error
======================= ==========================
K = 429.453 +/- 83.48 (19.44%)
N = 170329 +/- 6874 (4.036%)
a = 0.174692 +/- 0.007079 (4.052%)
La faute à quoi ? Et bien là encore difficile d’être sûr mais apparemment cette augmentation brusque correspond à la prise en compte de nombreux cas comme ceux détectés dans les EHPAD ou dépistés par les médecins généralistes.
Critique du modèle / de la regression
Tentons de prendre un peu de recul pour analyser ce qui représente la réalité et ce qui est à côté de la plaque:
- Notre fit converge, il y a donc cohérence entre les données de terrain et un modèle purement mathématiques
- Le est très sous-évalué, probablement du à une mauvaise estimation des cas contaminés. On pourrait essayer de régler le problème en gonflant artificiellement les données (on peut par exemple inférer le nombre de cas à partir du nombde de morts et du taux de mortalité) mais on risque d’introduire de nouveaux paramètres peu ou mal connus donc pas sûr que ça soit beaucoup mieux … Voir par exemple cet article pour en savoir plus sur la difficulté de déterminer le taux de mortalité d’une épidémie en cours.
- Il en résulte que le est probablement lui aussi sous-évalué
- Notre modèle reste très simpliste par rapport au modèle SIR par exemple qui lui prend en compte l’évolution du nombre de décés, de cas rétablis etc … mais cela est voulu: dans le cas du modèle SIR faire des regression sur un jeu de données en cours devient beaucoup plus compliqué étant donné que l’on a plus de solution explicite. Voir ce lien pour plus de détail.
- J’ai aussi tenté de créer un modèle qui prenait en compte le confinement pour obtenir deux différents, un avant et un après le confinement mais la différence n’était pas parlante alors je n’en ai pas parlé.
En conclusion: on a vu comment à parti d’outils simples et facilement accessible on peut modéliser une situation physique et effectuer des prédictions plus ou moins réalistes Ici le problème est que nous n’avons pas de données très fiables pour le moment sur lesquelles baser notre esimation, comme c’est souvent le cas en science: il faut faire avec ce que l’on a ! On a rarement un chemin tout tracé vers une solution merveilleuse … J’espère que ma démarche pourra vous être utile !