LoginSignup
4
5

More than 5 years have passed since last update.

時系列データ分析における予測手法の力業準最適化(SARIMA)【メモ】

Last updated at Posted at 2017-07-26

概要

 とある電力データを分析を行う際、「AR,MA,ARIMA,SARIMAモデルを用いて電力需要を予測してほしい。」と依頼がありました。
初Pythonで初予測手法だったので、パラメータを総当たりで探すことにしました。

パラメータは、order=(p,d,q)とseasonal_order=(p,d,q)で、aicが最小のパラメータを採用することにしました。

ソース

 stackoverflowで見つけたものをいじって組み込みました。ソースを拾ったときにはsが12となっていました。月次データだったのかな?
今回は、1ヵ月の学習データで1週間の電力データを予測するため、sが24で最小のaicになりました。
なぜだろう・・・


import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels
import time

p = d = q = range(0,3)

import itertools

pdq = list(itertools.product(p, d, q))

seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]

y=TargetData

minaic = 999999
minparam = 0

starttime = time.time()
for param in pdq:
    for param_seasonal in seasonal_pdq:
        try:
            print('fitting開始')
            mod = sm.tsa.statespace.SARIMAX(y,
                                            order=param,
                                            seasonal_order=param_seasonal,
                                            enforce_stationarity=False,
                                            enforce_invertibility=False)

            results = mod.fit()

            print('ARIMA{}x{}12 - AIC:{}'.format(param, param_seasonal, results.aic))

            if minaic > results.aic: 
                minaic = results.aic
                minparam = param
                minparams = param_seasonal
            print('aic最小値{} - aic最小値のp,d,q{} - aic最小値のp,d,q,s{}'.format(minaic, minparam,minparams))

        except:
            continue

duration = time.time() -starttime
print('p,d,qの推定終了\n計測時間:{}'.format(duration))

f = open('results_param(SARIMA).txt','w')
f.write('aic最小値{} - aic最小値のp,d,q{} - aic最小値のp,d,q,s{}'.format(minaic, minparam,minparams))
f.close()

課題

  • 力業で最適化できたかどうかわからない
  • 最適かどうかの評価要
  • 力業のため速度が劇的に遅いため、速度改善
4
5
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
4
5