Modélisation du Coronavirus (Python)
Introduction :
Depuis maintenant plusieurs mois, le monde entier fait face à la propagation d’un virus très agressif. Une succession de pays ferment leurs frontières et confinent leurs populations. Tout comme ces pays le Maroc a décrété le 20 mars 2020 l’état d’urgence sanitaire.
Face à cet état d'urgence, écoles, lycées, universités et centres de recherches ferment leurs portes empêchant l'accès aux cours pour tous les étudiants. Pour faire face à cette crise et protéger ses employés, des entreprises ont opté pour le télétravail, d’autres ont réduit au maximum leurs effectifs. Toutes ces mesures peuvent être groupées en deux mots “Distanciation sociale”.
L’idée étant de réduire les contacts sociaux afin de faire barrage à l'épidémie et de ralentir la propagation du virus et ainsi de conserver les ressources médicales nécessaires aux soins des personnes infectées.
La modélisation :
Préambule :
Il existe de nombreux modèles compartimentaux en épidémiologie et on a commencé à les utiliser depuis la pandémie de la grippe espagnole et ce pour faciliter les calculs de probabilité de contagion. Ces modèles divisent la population en classes épidémiologiques.
Cette modélisation permet de mettre en lumière les différents scénarios possible de cette pandémie, qui nous permettront de mieux appréhender la situation future des cas de contagion et de mort.
Le modèle :
Pour modéliser ce virus nous allons utiliser le modèle SEIR. Dans ce modèle notre population sera divisée en 4 catégories :
- S : Les individus susceptibles (Les personnes qui peuvent attraper le virus).
- E : Les individus exposés.
- I : Les individus infectés et qui peuvent infecter les autres.
- R : Les individus qui ont déjà attrapé le virus et qui sont soit guéris soit décédés.
Écrivons à présent nos équations :
On a 4 équations différentielles pour nos 4 catégories avec 4 paramètres : α, β, γ et ρ :
- α est l’inverse de la période d’incubation(α=0.2)
- β est le taux de contact moyen(β=1.75)
- γ est l’inverse de la moyenne de la période infectieuse (γ=0.5)
- ρ pour modéliser l’effet de distanciation sociale (égal à 0 si personne ne sort)
Si vous êtes familier avec les équations différentielles vous saurez qu’il nous faudra des valeurs initiales pour pouvoir résoudre notre système d'équations, on y reviendra plus tard dans l’article.
Pour résoudre notre système nous allons utiliser le schéma d'Euler explicite :
À la fin, nous obtenons le système suivant :
Implémentation sous Python :
Le code de la fonction est assez simple, il suffit de faire une petite boucle et puis le tour est joué :
Pour nos tests, on prendra une population initiale de 10 000 personnes et on commencera avec une seule personne infectée, et les 9 999 restant tous exposés.
On prendra plusieurs valeurs de ρ :
- ρ=1 (pas de distanciation sociale)
- ρ=0.8
- ρ=0.5
Après exécution on obtient le graphique suivant :
Le graphique montre les valeurs de E et I pour notre modèle pour chaque facteur de distanciation sociale ρ.
Nous pouvons voir l’effet d’aplatissement de la courbe car on diminue le facteur de distanciation sociale, ce qui est intuitif car on réduit le taux de contact. On passe d’un pic de 10% de la population infectée simultanément à environ 7,5% et à un minimum de 3%. On peut également noter que cela donne plus de temps aux autorités de se préparer car le pic est décalé plus loin dans le futur.
Conclusion :
Le projet est disponible ici.