時系列データの自己相関関係
やりたいこと
時系列データについて、自己相関関係について。
- 自己相関関係
- ラグ
- コレログラム
参考
Pythonで自己相関グラフ(コレログラム)を描く - Qiita
使用データ
USDJPY, AUDUSD, USDMXNの3種類の為替データ
期間:2010/1/4 ~ 2020/9/30
log_return = np.log(price).diff().dropna() log_return *= 100. # % log_return.head(5)
メイン
散布図
ラグをとりあえず1として、散布図を作成
def scatter_plot(target: 'str', lag: 'int'): fig = plt.figure() ax0 = fig.add_subplot(111) normal = log_return[target] with_lag = normal.shift(lag) with_lag.name = target + ' lag' to_scatter = pd.concat([normal, with_lag], axis = 1).dropna() sns.scatterplot(target, target + ' lag', data = to_scatter, ax = ax0) fig.savefig('output/' + target + '.png') return lag = 1 scatter_plot('USDJPY', lag) scatter_plot('AUDUSD', lag) scatter_plot('USDMXN', lag)
自己相関はなさそう。
相関係数
ラグ1のデータとラグなしのデータの相関係数
def correlation(target: 'str', lag: 'int') -> 'float': normal = log_return[target] with_lag = normal.shift(lag) with_lag.name = target + ' lag' to_scatter = pd.concat([normal, with_lag], axis = 1).dropna() # corr = to_scatter.corr() corr = normal.corr(with_lag) return corr lag = 1 corr_usdjpy = correlation('USDJPY', lag) corr_audusd = correlation('AUDUSD', lag) corr_usdmxn = correlation('USDMXN', lag) print('USDJPY corr: {}'.format(corr_usdjpy)) print('AUDUSD corr: {}'.format(corr_audusd)) print('USDMXN corr: {}'.format(corr_usdmxn))
コレログラム
def correlogram(target: 'str'): fig = plt.figure() ax0 = fig.add_subplot(111, title = target) # ax = autocorrelation_plot(log_return['USDJPY']) autocorrelation_plot(log_return[target], ax = ax0) ax0.set_xlim(0, 20) # ax0.set_ylim(-0.25,0.25) start, end = ax0.get_xlim() ax0.xaxis.set_ticks(np.arange(start, end + 1, 1)) fig.savefig('output/correlogram_' + target + '.png') return correlogram('USDJPY') correlogram('AUDUSD') correlogram('USDMXN')