【Python】statsmodelsで自己相関を計算・可視化

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()