【Python】statsmodelsで自己相関を計算・可視化
- 2021.06.02
- Python
Pythonで時系列データの自己相関や偏自己相関を計算・可視化してみたいと思う。
まず、自己相関とは、あるデータのT時点の値と、ある時間前(過去)のT-t時点の値との相関関係である。
あるデータの異なる時点の値の相関をはかるものである。
株式データなどでこれを計算する場合には、昨日株があがっていると今日は上がる(下がる)傾向があるといったことが見えてくるかもしれない。
自己相関の計算と可視化
計算方法としては、statsmodelsを使った方法に加えてpandasを使った方法についても紹介する。
statsmodelsを使った方法
pandas-datareaderでS&P 500のデータを取得し、前日比データを作成、そのデータで自己相関を計算、可視化する。
import pandas_datareader.data as web
from statsmodels.tsa import stattools as tsat
import statsmodels.graphics.tsaplots as tsap
df = web.DataReader('^GSPC', 'yahoo')['Close']
dfr = df.pct_change(1).dropna()
ac = tsat.acf(dfr,nlags=10) # 指定したラグ数までの自己相関を計算
fig = tsap.plot_acf(dfr) # 自己相関データのプロット
fig.show()
可視化した結果はこのようになります。
青色のエリアは信頼区間となっており、デフォルトは信頼区間95%。
引数にalpha=hogeを渡すことで変更できる。(デフォルトは0.05)
これを見ると、前日上昇(下落)していれば、当日は下落する傾向があると考えられそうである。
pandasでの自己相関計算
pandasを使った方法は少し書き方が面倒なように思います。
ac = [dfr.autocorr(i) for i in range(10)] # 自己相関の計算。
pandasの.autocorr(hoge)を使う場合、特定時点との自己相関のみを返すため、指定時点までのそれぞれの自己相関を計算するためには、ループ処理が必要になる。
pandasでの可視化はこちら↓
import matplotlib.pyolot as plt
pd.plotting.autocorrelation_plot(dfr).set_xlim([0,30])
# 自己相関の可視化。.set_xlimで表示するラグ数を指定
plt.show()
点線と実線は、それぞれ信頼区間99%と95%を示す。
偏自己相関の計算と可視化
これもstatsmodelsを使えば、自己相関と同じように簡単に実行できる。
pca = tsat.pacf(dfr,nlags=10) # 偏自己相関の計算。ラグ数は10にしてある。
fig = tsap.plot_pacf(dfr) # 偏自己相関の可視化
fig.show()
使い方はほとんど変わらないので、例だけ示しておく。
プロット結果などは実際に実行して確認してみてほしい。
pandas lag_plot (おまけ)
pandas.plotting.lag_plotでそれぞれのデータと指定したラグ分をずらしたデータとを散布図を作成することができる。
これを使えば、一目で過去データとの関係を確認することができる。
pd.plotting.log_plot(dfr) # lag=hogeを指定しなければ、ラグは1となる。
plt.show()
-
前の記事
【Python】 経済指標・財務諸表データ取得完全攻略 2021.05.26
-
次の記事
ネット銀行の海外送金受取サービス比較 2021.06.04