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
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)
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()
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)
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.
Incidemment, la prédiction du jugement positif dans l'inspection de l'aéroport de Prophet est illustrée dans la figure ci-dessous.
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