COVID-19의 감염자 수를 Prophet으로 예측
12459 단어 COVID-19파이썬TimeSeriesAnalysisprophet
개요
Google이 대시보드에서 COVID-19 예측 데이터를 게시하기 시작했습니다.
두 번째 달인이지만, Prophet은 어떻게 예측할지 시도했습니다.
국내 감염자 수 데이터는 Kaggle에 있었기 때문에 이
Prophet의 감염자 수 예측
데이터 세트
기간: 2020/2/6 ~ 2020/11/20
(3일마다 최신으로 업데이트된 것 같습니다)
Domestic: 국내
Airport: 공항 검사
Returnee: 귀국자
Positive: 음성 수
Tested: 검사자 수
그 밖에도 column은 있지만 데이터 결손이 산견되었으므로, 이번에는 Domestic과 Airport의 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)
원시 데이터는 누적되었으므로 매일 차등을 취합니다.
pos_def: Positive 수/일
test_def: Tested 수/일
(음성률의 예측에 사용할 생각이지만, 이번에는 사용하지 않는다)
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
Prophet 사양에 맞는 Dataframe 준비
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()
Prophet의 모델을 준비한 데이터에 fit시켜 30일분까지 포함하여 예측 실행
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()
결과 그리기
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)
흑점은 실제 데이터(GroundTruth)
청청역은 95% 신뢰 구간의 상한 하한을 나타낸다
그래프와 같이 모델은 데이터를 정확하게 추적 할 수 있습니다.
12월 초순에 감염자수 3000명을 조금 넘은 곳에서, 이번 제3파는 수렴할 예측이 되었다
누가 봐도 낙관적 지나지만, 데이터가 과거의 감염자수 추이만으로는 이러한 예측이 되어 버린다
일본인의 행동변용 등 허벅지 요인을 포함한 파형을 입력하고 있는 것도 마찬가지로 앞으로도 일본인이 감염 예방행동을 취하면 의외 12월 초순에 피크아웃할지도 모른다.
Prophet은 사계변동도 파악해 주지만, 사용한 데이터가 1년에 못 미치기 때문에 겨울이기 때문에 감염자수가 늘어난다는 경향은 발견되지 않는다
3,4년 코로나가 만연하고 있으면 그러한 경향이 데이터상으로 보인다고 생각하지만, 소원이네
다른 설명 변수 *1도 더해 multivalidate가 아니면 정밀도는 기대할 수 없다
*1) 음성률, 중증자수, 퇴원자수, 입국자수 등, 1,2개월로 변화해 주는 복수의 변수일까
정치인이나 관리의 질이 낮고 무능함은 constant이므로 데이터 과학에서도 유용하지 않습니다.
또한 Google의 지금 (11/24)의 예측은 아래 그림과 같습니다.
Prophet의 결과와 마찬가지로 12월 초순에 3000명을 넘지만 그 이후에도 단조롭게 증가하고 있다
이어서 Prophet의 공항 검사에서의 Positive 판정 예측은 아래와 같았다.
2,3주 후, 4000명을 넘었을까, 같은 코드로 재예측해 이번 결과와 비교하기로 한다
Reference
이 문제에 관하여(COVID-19의 감염자 수를 Prophet으로 예측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ihmon/items/7a52bd076a3e77b0d443텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)