前提
使用するデータ:日経平均株価(短期:2022/6/2~2022/11/11)の25日間移動平均
時系列分析するにはデータが少なすぎるため、うまく予測ができるとは思っていませんが、とにかくAR、ARMAモデルを用いて分析してみたいというモチベーションです。
実現したいこと
時系列データをARモデル、ARMAモデルを用いて予測したいです。
自分なりに調べたことを以下に記述します。
- AR、ARMAモデルで時系列分析を行うためには定常性のデータを用いる必要がある。そのため、データが非定常の場合、定常性をもつように変換する必要がある。
- データの自己相関、偏自己相関を計算し、コレログラムを図示。AR(p)、ARMA(p, q)のパラメータの候補を出す。その後、AIC(?)などを用いて、パラメータを決定。
- 選ばれたモデルを使用し、時系列分析
時系列分析自体、勉強を始めたばかりなのでもしこの時点で手順が間違っていたら教えてください。
とあるサイトを参考にしながら、実装を進めていますが、warnigがでました。
そこで、warningの解決、その次の手順のモデルのパラメータ選択の実装を教えていただきたいです。
発生している問題・エラーメッセージ
C:\Users\***\anaconda3\envs\py38\lib\site-packages\statsmodels\tsa\stattools.py:667: FutureWarning: fft=True will become the default after the release of the 0.12 release of statsmodels. To suppress this warning, explicitly set fft=False. warnings.warn( ↑close_acf = sm.tsa.statstools.acf(close_train, nlags=20)を実行すると出る C:\Users\***\anaconda3\envs\py38\lib\site-packages\statsmodels\regression\linear_model.py:1434: RuntimeWarning: invalid value encountered in sqrt return rho, np.sqrt(sigmasq) ↑fig = sm.graphics.tsa.plot_pacf(close_train, lags=10)を実行すると出る
調べたところ、使用しているデータが定常性を持っていないことが原因っぽいのですが、定常性を持つように変換する方法がわかりません。対数変換、差分変換等いろいろありましたが、どれを使うべきなのかわかりませんでした。
発生している問題についての追記事項
上記のソースコードを実行すると、自己相関、偏自己相関のコレログラム自体の描画はできました。
しかし、偏自己相関のグラフを見ていただくとわかる通り、[-1, 1]の範囲外の値をとってしまっています。
これは、実際に用いているデータが非定常で定常なデータに変換していないことが原因なのでしょうか。
該当のソースコード
Python
1import pandas as pd 2import numpy as np 3import matplotlib.pyplot as plt 4from scipy import stats 5import statsmodels.api as sm 6from statsmodels.tsa.ar_model import AutoReg, ar_select_order 7from statsmodels.tsa import stattools 8from statsmodels.tsa.arima_model import ARIMA 9 10 11if __name__ == '__main__': 12 # 使用する25日間移動平均のデータ 13 m_averages = [26809.891600000003, 26772.9576, 26723.182399999998, 26679.0388, 26614.7472, 26544.526400000002, 26480.4008, 26438.967999999997, 26437.9376, 26479.953600000004, 26539.027199999997, 26598.3656, 26667.81560000001, 26743.175200000005, 26801.952800000003, 26868.590000000004, 26933.805599999996, 26993.860799999995, 27022.799199999994, 27050.4964, 27095.6004, 27166.913599999993, 27259.4584, 27333.304399999994, 27389.13879999999, 27486.711999999992, 27581.961999999996, 27676.0308, 27772.4496, 27876.6688, 27974.731200000002, 28060.775600000004, 28127.346800000003, 28181.418400000002, 28213.3684, 28246.903599999994, 28245.4756, 28265.3288, 28282.7816, 28280.610399999994, 28274.024799999996, 28266.743599999998, 28252.069999999996, 28245.492800000004, 28258.428000000004, 28269.730000000003, 28284.379600000004, 28298.99520000001, 28291.7416, 28294.004800000006, 28254.8316, 28207.497200000005, 28145.266000000007, 28062.508400000002, 27962.084800000004, 27867.7464, 27762.925600000002, 27681.697600000003, 27586.647199999996, 27496.1184, 27430.151599999997, 27399.8144, 27364.443199999998, 27325.4264, 27275.0176, 27224.8572, 27169.5696, 27148.1396, 27121.959200000005, 27085.5936, 27047.298800000004, 26985.8928, 26916.930799999995, 26883.181999999997, 26858.156799999997, 26852.7244, 26838.997199999998, 26830.68, 26848.025199999996, 26897.92, 26941.5808, 26982.6112, 27026.834800000004, 27104.230800000005, 27164.256400000006, 27182.412000000008, 27228.133600000005] 14 close = pd.Series(m_averages) 15 16 # 前半70個のデータを訓練データとする 17 close_train = close[:70] 18 19 # 自己相関計算 20 close_acf = sm.tsa.stattools.acf(close_train, nlags=20) 21 22 # 自己相関のグラフ 23 fig = plt.figure(figsize=(12,8)) 24 ax1 =fig.add_subplot(211) 25 fig = sm.graphics.tsa.plot_acf(close_train, lags=10) 26 27 # 偏自己相関計算 28 close_pacf = sm.tsa.stattools.pacf(close_train, nlags=10, method='ols') 29 30 # 偏自己相関の可視化 31 ax2 = fig.add_subplot(212) 32 fig = sm.graphics.tsa.plot_pacf(close_train, lags=10) 33 fig.tight_layout() 34 fig.show()
試したこと
自己相関、偏自己相関を計算する際のlag数を減らす。
補足情報(FW/ツールのバージョンなど)
VSCodeで実装を進めています。
