[PYTHON] Prédire le nombre de personnes infectées par COVID-19 avec Prophet

Aperçu

Google a commencé à publier des données de prévision COVID-19 sur son tableau de bord Deuxième décoction, mais j'ai essayé comment le Prophète prévoyait J'ai utilisé this parce que les données sur le nombre de personnes infectées au pays se trouvaient à Kaggle.

--Mise en œuvre: 24 novembre 2020 --Package: Prophète

Prédire le nombre de personnes infectées avec Prophet

base de données Période: 2020/2/6 ~ 2020/11/20 (Il semble être mis à jour tous les 3 jours) Domestique: Domestique Aéroport: inspection de l'aéroport Retourné: Retourné Positif: nombre de négatifs Testé: nombre d'inspecteurs Il y a d'autres colonnes, mais la perte de données était dispersée, donc cette fois j'utiliserai Domestique et Aéroport Positive

import numpy as np 
import pandas as pd 
from fbprophet import Prophet
from fbprophet.plot import add_changepoints_to_plot

df = pd.read_csv('covid_jpn_total_1124.csv')
df_dom = df[df['Location'] == 'Domestic']
#print(df_dom.isnull().sum())
df_air = df[df['Location'] == 'Airport']
#print(df_air.isnull().sum())

df_air = df_air.dropna(how='any')
print(df_air.describe)

image.png

Les données brutes étaient cumulatives, alors prenez la différence quotidiennement pos_def: nombre positif / jour test_def: nombre testé / jour (J'ai l'intention de l'utiliser pour prédire le taux négatif, mais je ne l'utiliserai pas cette fois)

arr3 = [0]
arr1 = np.array(df_dom.iloc[1:,2])
arr2 = np.array(df_dom.iloc[:-1,2]) 
arr3 = np.append(arr3, arr1 - arr2)
df_dom['pos_def'] = arr3

arr3 = [0]
arr1 = np.array(df_dom.iloc[1:,3])
arr2 = np.array(df_dom.iloc[:-1,3]) 
arr3 = np.append(arr3, arr1 - arr2)
df_dom['test_def'] = arr3

Préparez un Dataframe selon les spécifications du Prophet

df_test = pd.DataFrame()
df_test['ds'] = pd.to_datetime(df_air['DS'])
df_test['y'] = df_air['pos_def']
print(df_test)
df_test.iloc[:,1].plot()

image.png

Ajustez le modèle Prophet aux données préparées et exécutez la prédiction, y compris les 30 prochains jours

m = Prophet(yearly_seasonality=False, weekly_seasonality=True, daily_seasonality=True)
m.fit(df_test)
future = m.make_future_dataframe(periods=30, freq='D', include_history=True)
#future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

Résultat du tirage au sort

fig = m.plot(forecast, figsize=(20, 10))
ax = add_changepoints_to_plot(fig.gca(), m, forecast)
ax = fig.gca()
ax.set_title("Positive", size=16)
ax.set_xlabel("date", size=16)
ax.set_ylabel("# Positives", size=16)
ax.tick_params(axis="x", labelsize=14)
ax.tick_params(axis="y", labelsize=14)

image.png

Les points noirs sont des données réelles (Ground Truth) La région bleu clair montre les limites supérieure et inférieure de l'intervalle de confiance à 95%. Comme le montre le graphique, le modèle peut tracer avec précision les données. Lorsque le nombre de personnes infectées a dépassé les 3 000 au début de décembre, il était prévu que la troisième vague convergerait.

C'est trop optimiste pour tout le monde, mais les données feraient une telle prédiction basée sur les changements passés du nombre de personnes infectées. Prophet capte les fluctuations saisonnières, mais comme les données utilisées sont inférieures à un an, le nombre de personnes infectées n'a pas tendance à augmenter car c'est l'hiver. Si Corona est répandu depuis trois ou quatre ans, je pense que ce genre de tendance sera visible dans les données, mais j'espère. La précision ne peut être attendue que si d'autres variables explicatives * 1 sont ajoutées et multivalidates.

En outre, les prévisions actuelles de Google (11/24) sont telles que présentées dans la figure ci-dessous. Semblable au résultat du Prophète, le nombre a dépassé les 3000 début décembre, mais a augmenté régulièrement depuis lors.

image.png

Incidemment, la prédiction du jugement positif dans l'inspection de l'aéroport de Prophet est illustrée dans la figure ci-dessous. image.png

Après quelques semaines, je vais re-prédire avec le même code et le comparer avec ce résultat, peut-être autour de 4000 personnes.

Recommended Posts

Prédire le nombre de personnes infectées par COVID-19 avec Prophet
Visualisons le nombre de personnes infectées par le virus corona avec matplotlib
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique
J'ai essayé de prédire le nombre de personnes infectées par le virus corona au Japon par la méthode du dernier article en Chine
J'ai essayé de prédire le nombre de personnes infectées par le virus corona en tenant compte de l'effet de s'abstenir de sortir
Compter le nombre de caractères avec écho
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
Compte tenu de la situation au Japon par le statisticien Nate Silver, "Le nombre de personnes infectées par le coronavirus n'a pas de sens"
Créez un BOT qui affiche le nombre de personnes infectées dans le nouveau Corona
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Gérez le numéro de version du package de requirements.txt avec pip-tools
10. Compter le nombre de lignes
Obtenez le nombre de chiffres
Calculez le nombre de changements
Essayez de gratter les données COVID-19 Tokyo avec Python
Un diagramme de réseau a été créé avec les données du COVID-19.
[Homologie] Comptez le nombre de trous dans les données avec Python
Un serveur qui renvoie le nombre de personnes devant la caméra avec bottle.py et OpenCV
[Introduction au modèle SIR] Prédire l'heure de fin de chaque pays avec l'ajustement des données COVID-19 ♬
Prédire la transition de prix de Bitcoin avec Prophet
Obtenez le nombre de PV d'articles Qiita que vous avez publiés avec l'API
Obtenez le nombre de vues de Qiita
Calcul du nombre d'associations de Klamer
Obtenez le nombre d'abonnés Youtube
Prédisez le nombre de coussins qui peuvent être reçus en tant que répondants rires avec Word2Vec + Random Forest
Générez une liste contenant le nombre de jours du mois en cours.
Obtenez le nombre de visites sur chaque page avec ReportingAPI + Cloud Functions
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
Afficher le statut de l'infection COVID 19 au Japon avec Splunk (version GitHub)
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
Alignez la taille de la barre de couleurs avec matplotlib
Compter / vérifier le nombre d'appels de méthode.
Vérifier l'existence du fichier avec python
La troisième nuit de la boucle avec pour
La deuxième nuit de la boucle avec pour
Développez n'importe quel nombre d'arguments avec yasnippet
Avantages et inconvénients de Django que pensent les personnes ayant un an d'expérience
Prédire le nombre de titres remportés par Sota Fujii 7th Dan par gradient boosting
Let Code Day10 À partir de zéro "1431. Enfants avec le plus grand nombre de bonbons"
Alignez le nombre d'échantillons entre les classes de données pour l'apprentissage automatique avec Python
Sortie du nombre de cœurs de processeur en Python
L'histoire de l'apprentissage profond avec TPU
Remarque: préparez l'environnement de CmdStanPy avec docker
Préparer l'environnement d'exécution de Python3 avec Docker
Convertissez les données avec la forme (nombre de données, 1) en (nombre de données,) avec numpy.
Mathématiques Todai 2016 résolues avec Python
[Note] Exportez le html du site avec python.
Augmentez la taille de la police du graphique avec matplotlib
Vérifiez la date du devoir de drapeau avec Python
Défiez la tour de Hanoi avec recurs + stack
Renommer la balise avec un espace de noms en lxml
Remplissez la largeur du bloc-notes Jupyter pour remplir le navigateur
Minimisez le nombre de polissages en optimisant la combinaison
Vider le contenu de la base de données redis avec lua
Découvrez le jour par date / heure
La base de la théorie des graphes avec l'animation matplotlib
Visualisez le comportement de l'algorithme de tri avec matplotlib