Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog

Évaluation de l'évolution du nombre de décès COVID-19 en python par une régression polynomiale

1 Avril 2020 , Rédigé par Hugues MEUNIER

Ce travail a été réalisé en python 3 avec Anaconda et Jupyter. Si ces termes ne vous disent rien alors c'est peut-être mieux d'aller voir quelques tutos sur python et Anaconda:

https://docs.anaconda.com/anaconda/user-guide/getting-started/

Les estimations ont été faites à partir des chiffres du gouvernement publiés ici :

https://geodes.santepubliquefrance.fr/#c=indicator&f=0&i=covid_hospit.dc&s=2020-03-31&t=a01

Voilà le graphique final:

 

Nous obtenons donc un modèle polynomiale de degré 3 représentant l'évolution du nombre de décès en France depuis le 18/03/2020 (modèle créé à partir de 14 points et extrapolé pour 30).

Cette courbe montre également qu'il y aura environ 10 000 morts dans une dizaine de jours (autour du 10/04) donc ce qui est conforme avec les données de l'Italie qui suivent la même tendance que celles de la France (nous sommes déphasés parfaitement de 9-10 jours avec l'Italie sur le nombre de décès dus au COVID-19).

Le programme Python pour calculer le modèle et créer le graphique est le suivant :

# Imports des bib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# données du gouvernement source https://geodes.santepubliquefrance.fr/#c=indicator&f=0&i=covid_hospit.dc&s=2020-03-31&t=a01
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]).reshape((-1, 1))
y = np.array([218, 327, 450, 525, 632, 860, 1100, 1388, 1696, 1995, 2314, 2606, 3024, 3523])
# x_pred les valeurs à prédire une fois le modèle créé
x_pred = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]).reshape((-1, 1))

#Définition de la fonction polynomiale de degré 3 et transformation des données
transformer = PolynomialFeatures(degree=3, include_bias=False)
transformer.fit(x)
x_ = transformer.transform(x)

#Calcul du modèle
model = LinearRegression().fit(x_, y)

#Calcul du coefficient de détermination (le R2) ou le score
r_sq = model.score(x_, y)
print('coefficient of determination:', r_sq)
#Affiche la valeur calculée pour x=0
print('intercept:', model.intercept_)
# Afiiche les coefficients du modèle
print('coefficients:', model.coef_)

#calcule la prédiction pour les valeurs
y_pred = model.predict(x_)
print('predicted response:', y_pred, sep='\n')

#Transforme les données x pour la prévision: 30 j à partir du 18/03
transformer.fit(x_pred)
xx_ = transformer.transform(x_pred)

#recalcule le modèle
model2 = LinearRegression().fit(x_, y)

#Calcule les prédictions et les affiche
y_pred2 = model.predict(xx_)
print('predicted response:', y_pred2, sep='\n')
 print('real response:', y, sep='\n')

#graphique
f = plt.figure()
plt.scatter(x, y, color='red')

plt.plot(x_pred, y_pred2, color='blue')

fig_size = plt.rcParams["figure.figsize"]

fig_size[0] = 24
fig_size[1] = 18
plt.rcParams["figure.figsize"] = fig_size

plt.title('Evolution des décès COVID-19 (Régression polynomiale de degré 3) du 01/04/2020')

plt.xlabel('Jour à partir,du 18/03')

plt.ylabel('Nb de décès')

plt.grid()

plt.show()

#exporte le graphique dans un fichier pdf
f.savefig("morb-covid.pdf", bbox_inches='tight')

Bonne lecture

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article