[시간 서열 분석] 우리는 일관의 양성 인원을 예측했다.[Python]

개요

  • 일관의 양성자 수가 어떻게 변할지 궁금하기 때문에 시간 서열 분석을 통해 예측한다.
  • 실행 결과를 정답이 없는 데이터로 보고 싶습니다.
  • 실행 결과(정확한 데이터 없음)

  • actual은 실제값(붉은 선),prediction은 예측값(푸른 선)
  • 12월 31일까지 예측
  • 양성 인원이 점차 증가하고 있다.
  • 정해 데이터가 없기 때문에 이 예측이 있는지 모르겠다.

  • 코드

    import pandas as pd
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore') # 計算警告を非表示
    
    plt.style.use('ggplot') # グラフのデザイン変更(お好みで利用)
    plt.xkcd() # グラフのデザイン変更(お好みで利用、日本語は未対応)
    import statsmodels.api as sm # version 0.8.0以上
    
    # CSVファイル読み込み(事前にダウンロードしたCSVファイルを利用)
    df = pd.read_csv("data/pcr_positive_daily.csv")
    
    corona = pd.Series(df["PCR 検査陽性者数(単日)"].values,
                            index=pd.to_datetime(df["日付"]))
    
    corona_train2 = corona["2020-01-16":"2020-11-28"]
    
    
    # SRIMAモデル(テストデータ1年を除いてモデル作成)
    sarimax_train = sm.tsa.SARIMAX(corona_train2, 
                            order=(3, 1, 3),
                            seasonal_order=(0, 1, 1, 30),
                            enforce_stationarity = False,
                            enforce_invertibility = False
                            ).fit()
    
    sarimax_train2_pred = sarimax_train.predict("2020-11-28", "2020-12-31") # テストデータ1年分予測
    
    plt.figure(figsize=(8, 4))
    
    plt.plot(corona, label="actual")
    plt.plot(sarimax_train2_pred, c="b", label="prediction", alpha=0.7)
    plt.ylabel('PCR')
    plt.xlabel('MONTH')
    plt.legend(loc='best')
    
    

    실행 결과(정확한 데이터 있음)

  • actual은 실제값(붉은 선),prediction은 예측값(푸른 선)
  • 10월 30일부터 11월 28일까지 테스트한 결과 양성 인원이 감소했다.
  • 예측의 정밀도가 낮은 것을 발견했다.

  • 코드

    import pandas as pd
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore') # 計算警告を非表示
    
    plt.style.use('ggplot') # グラフのデザイン変更(お好みで利用)
    plt.xkcd() # グラフのデザイン変更(お好みで利用、日本語は未対応)
    import statsmodels.api as sm # version 0.8.0以上
    
    # CSVファイル読み込み(事前にダウンロードしたCSVファイルを利用)
    df = pd.read_csv("data/pcr_positive_daily.csv")
    
    corona = pd.Series(df["PCR 検査陽性者数(単日)"].values,
                           index=pd.to_datetime(df["日付"]))
    
    corona_train2 = corona["2020-01-16":"2020-10-30"]
    corona_test2 = corona['2020-11-01':'2020-11-28']
    
    # SRIMAモデル(テストデータ1年を除いてモデル作成)
    sarimax_train = sm.tsa.SARIMAX(corona_train2, 
                            order=(3, 1, 3),
                            seasonal_order=(0, 1, 1, 30),
                            enforce_stationarity = False,
                            enforce_invertibility = False
                            ).fit()
    sarimax_train2_pred = sarimax_train.predict("2020-10-30", "2020-11-28") # テストデータ1年分予測
    
    plt.figure(figsize=(8, 4))
    
    plt.plot(corona, label="actual")
    plt.plot(sarimax_train2_pred, c="b", label="prediction", alpha=0.7)
    plt.ylabel('PCR')
    plt.xlabel('MONTH')
    plt.legend(loc='best')
    

    총결산

  • 데이터 수가 적기 때문에 정밀도가 낮은 예측도가 되었다.
  • 비양성 인원수 데이터를 첨가하면 정밀도를 높일 수 있는데...?
  • 참고 자료

  • 개방형 데이터 | 후생노동성
  • 파이톤으로 시간 계열 분석 연습(9)SARIMA 모델로 미래 예측
  • 좋은 웹페이지 즐겨찾기