[PYTHON] Sagen Sie die Anzahl der mit COVID-19 infizierten Personen mit Prophet voraus

Überblick

Google hat damit begonnen, COVID-19-Prognosedaten in seinem Dashboard zu veröffentlichen Zweite Abkochung, aber ich habe versucht, wie der Prophet es vorhersagen würde

Sagen Sie die Anzahl der infizierten Personen mit Prophet voraus

Datensatz Zeitraum: 2020/2/6 ~ 2020/11/20 (Es scheint alle 3 Tage aktualisiert zu werden) Inland: Inland Flughafen: Flughafeninspektion Rückkehrer: Rückkehrer Positiv: Anzahl der Negative Getestet: Anzahl der Inspektoren Es gibt andere Spalten, aber der Datenverlust war verstreut, daher werde ich dieses Mal Inland und Flughafen Positiv verwenden

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

Die Rohdaten waren kumulativ, nehmen Sie also die Differenz täglich pos_def: Positive Zahl / Tag test_def: Getestete Nummer / Tag (Ich beabsichtige, es zu verwenden, um die negative Rate vorherzusagen, aber ich werde es dieses Mal nicht verwenden)

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

Bereiten Sie einen Datenrahmen gemäß den Prophet-Spezifikationen vor

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

Passen Sie das Prophetenmodell an die vorbereiteten Daten an und führen Sie die Vorhersage einschließlich der nächsten 30 Tage aus

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()

Ergebnis zeichnen

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

Schwarze Punkte sind tatsächliche Daten (Ground Truth) Der hellblaue Bereich zeigt die oberen und unteren Grenzen des 95% -Konfidenzintervalls. Wie in der Grafik gezeigt, kann das Modell die Daten genau verfolgen. Als die Zahl der Infizierten Anfang Dezember 3.000 überstieg, wurde vorausgesagt, dass die dritte Welle konvergieren würde.

Es ist für alle zu optimistisch, aber die Daten würden eine solche Vorhersage auf der Grundlage früherer Änderungen der Anzahl infizierter Personen treffen. Der Prophet erfasst saisonale Schwankungen, aber da die verwendeten Daten weniger als ein Jahr betragen, besteht keine Tendenz, dass die Anzahl der Infizierten zunimmt, da es Winter ist. Wenn Corona seit drei oder vier Jahren weit verbreitet ist, denke ich, dass eine solche Tendenz in den Daten sichtbar sein wird, aber ich hoffe Die Genauigkeit kann nur erwartet werden, wenn andere erklärende Variablen * 1 hinzugefügt und mehrwertig sind.

Darüber hinaus entspricht die aktuelle Prognose von Google (24.11.) Der folgenden Abbildung. Ähnlich wie beim Propheten-Ergebnis lag die Zahl Anfang Dezember über 3.000, ist aber seitdem stetig gestiegen.

image.png

Im Übrigen ist die positive Vorhersage bei der Flughafeninspektion des Propheten in der folgenden Abbildung dargestellt. image.png

Nach ein paar Wochen werde ich mit demselben Code erneut vorhersagen und ihn mit diesem Ergebnis vergleichen, vielleicht mit etwa 4000 Personen.

Recommended Posts

Sagen Sie die Anzahl der mit COVID-19 infizierten Personen mit Prophet voraus
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Menschen in Japan nach der Methode des neuesten Papiers in China vorherzusagen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Personen unter Berücksichtigung der Auswirkung des Verzichts auf das Ausgehen vorherzusagen
Zählen Sie die Anzahl der Zeichen mit Echo
Prognostizieren Sie die zweite Runde des Sommers 2016 mit scikit-learn
In Anbetracht der Situation in Japan durch den Statistiker Nate Silver: "Die Anzahl der mit Coronavirus infizierten Personen ist bedeutungslos."
Erstellen Sie einen BOT, der die Anzahl der infizierten Personen in der neuen Corona anzeigt
Prognostizieren Sie das Geschlecht von Twitter-Nutzern durch maschinelles Lernen
Verwalten Sie die Paketversionsnummer von require.txt mit pip-tools
10. Zählen der Anzahl der Zeilen
Holen Sie sich die Anzahl der Ziffern
Berechnen Sie die Anzahl der Änderungen
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Ein Server, der mit Flasche.py und OpenCV die Anzahl der Personen vor der Kamera zurückgibt
[Einführung in das SIR-Modell] Prognostizieren Sie die Endzeit jedes Landes mit der COVID-19-Datenanpassung ♬
Prognostizieren Sie den Preisübergang von Bitcoin mit Prophet
Ermitteln Sie die Anzahl der PVs von Qiita-Artikeln, die Sie mit API veröffentlicht haben
Holen Sie sich die Anzahl der Ansichten von Qiita
Berechnung der Anzahl der Assoziationen von Klamer
Holen Sie sich die Anzahl der Youtube-Abonnenten
Sagen Sie mit Word2Vec + Random Forest die Anzahl der Kissen voraus, die als Lachbefragte empfangen werden können
Generieren Sie eine Liste mit der Anzahl der Tage im aktuellen Monat.
Mit ReportingAPI + Cloud-Funktionen können Sie die Anzahl der Besuche auf jeder Seite ermitteln
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Zeigen Sie den Status der COVID 19-Infektion in Japan mit Splunk an (GitHub-Version).
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Richten Sie die Größe der Farbleiste an der Matplotlib aus
Zählen / überprüfen Sie die Anzahl der Methodenaufrufe.
Überprüfen Sie die Existenz der Datei mit Python
Die dritte Nacht der Runde mit für
Die zweite Nacht der Runde mit für
Erweitern Sie eine beliebige Anzahl von Argumenten mit yasnippet
Vor- und Nachteile von Django, die Menschen mit einjähriger Erfahrung denken
Sagen Sie die Anzahl der Titel voraus, die Sota Fujii 7. Dan durch Gradientenverstärkung gewonnen hat
Lassen Sie Code Day10 ab Null "1431. Kinder mit der größten Anzahl von Süßigkeiten"
Richten Sie die Anzahl der Stichproben zwischen Datenklassen für maschinelles Lernen mit Python aus
Geben Sie die Anzahl der CPU-Kerne in Python aus
Die Geschichte des tiefen Lernens mit TPU
Hinweis: Bereiten Sie die Umgebung von CmdStanPy mit Docker vor
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
Konvertieren Sie Daten mit Form (Anzahl der Daten, 1) in (Anzahl der Daten,) mit numpy.
2016 Todai Mathematik mit Python gelöst
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Erhöhen Sie die Schriftgröße des Diagramms mit matplotlib
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Fordern Sie den Turm von Hanoi mit Wiederholungen + Stapel heraus
Schreiben Sie den Namen des Tags mit dem Namespace in lxml neu
Füllen Sie die Breite des Jupyter-Notizbuchs, um den Browser zu füllen
Minimieren Sie die Anzahl der Polierungen, indem Sie die Kombination optimieren
Entleere den Inhalt der Redis-Datenbank mit Lua
Finden Sie den Tag nach Datum / Uhrzeit heraus
Die Basis der Graphentheorie mit Matplotlib-Animation
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib