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
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)
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()
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)
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.
Im Übrigen ist die positive Vorhersage bei der Flughafeninspektion des Propheten in der folgenden Abbildung dargestellt.
Nach ein paar Wochen werde ich mit demselben Code erneut vorhersagen und ihn mit diesem Ergebnis vergleichen, vielleicht mit etwa 4000 Personen.
Recommended Posts