LoginSignup
1
8

More than 5 years have passed since last update.

時系列データ分析(s)ARIMAモデル【Statsmodels】

Last updated at Posted at 2017-10-06

概要

  • 基本的には既存の(s)ARIMAモデルでデータを予測
  • オプションとして30分に1度学習範囲をシフトさせてモデルを再構築し、再予測
  • とある実績データを用いて予測精度を確認

条件

項目 内容
時系列データ 30分周期の計測データ
予測期間 2day(30min更新) / 2day
学習期間 3day / 1week / 1month / 1Q
モデル評価指標 aic
予測値評価指標 RMSE
  • データ
    • 平日では下記のような傾向が見られる。
      • 1日のデータ推移
      • 季節によって上下にシフト
      • 夜間少なく昼間に多いデータ
      • 6時に急激に増え、18時に急激に減る
      • 11時、14時頃に急激に少なくなる

q.jpg

検証

このあたりで作成した、力業でp,d,qの準最適なパラメータを求める。

予測期間2day(1hour更新)の場合

  • 特殊条件
    • 30分ごとに学習期間を30分シフトさせモデル構築
    • ハイパーパラメータの更新の有無で分岐

30分毎に学習時間をシフトさせて、モデルを更新する関数
下記の関数で、ぐるぐる回して最新の値だけDataframeにする。
本当に意味があるのだろうか?

TrainSARIMA
def TrainSarima(df,Start,End,Order,SOrder,ShiftM = 0):
    TrainResultsSARIMA = sm.tsa.statespace.SARIMAX(df.loc[pd.to_datetime(Start) + ShiftM:pd.to_datetime(End) + ShiftM- pd.offsets.Hour(1)],
                                                   enforce_stationarity=False,
                                                   enforce_invertibility=False,
                                                   order=Order,
                                                   seasonal_order=SOrder
                                                  ).fit()
    TrainResultsSARIMA.aic
    return TrainResultsSARIMA

ForecastSARIMA=[]
PredictTerm = 48

#Fitting
for Minute in np.arange(0,PredictTerm * 2,30):
#for Minute in np.arange(0,PredictTerm * 30,30):
    FitSARIMA = TrainSarima(S_MinamiDF,TrainStartDate,TrainEndDate,SARIMAorder,SARIMAORDER,Shift_minute(Minute))
    ForecastSARIMA = ForecastSARIMA.append(pd.DataFrame(FitSARIMA.predict(SARIMAEndDate - pd.offsets.Minute(60),SARIMAEndDate + pd.offsets.Day(1) + Shift_minute(Minute)).iloc[-1:]))

以上のプログラムから算出される予測値と実績データを使用して精度の評価をした結果を下記に示す。
なお、今回は1日分のデータを使用する。

項目 内容
RMSE(学習:1month) 8.762%
  • 学習期間(1month)
    q2.jpg

  • 夜間の乖離が大きい

  • スパイク部分も乖離が大きい

予測期間2day先の場合(検証中)

  • 特殊条件
    • なし

先程のTrainSARIMAのコードを改良して、ループさせずに1回で2day先までのデータを予測させる。
結果は下記のようになる。なお、この結果も1日分のデータを使用した。

項目 内容
RMSE

まとめ

  • 30min毎に更新をかけて意味があるか検証要
  • そもそも周期性が見られるデータを簡易に予測するのにSARIMAモデルが妥当かどうかの検証が必要
1
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
8