時系列データの自己相関関係

やりたいこと

時系列データについて、自己相関関係について。

  • 自己相関関係
  • ラグ
  • コレログラム

参考

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)

f:id:iiiiikamirin:20201014102930p:plain

メイン

散布図

ラグをとりあえず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)

f:id:iiiiikamirin:20201014225200p:plain f:id:iiiiikamirin:20201014225214p:plain f:id:iiiiikamirin:20201014225225p:plain

自己相関はなさそう。

相関係数

ラグ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))

f:id:iiiiikamirin:20201014225549p:plain

コレログラム

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

f:id:iiiiikamirin:20201014225705p:plain f:id:iiiiikamirin:20201014225723p:plain f:id:iiiiikamirin:20201014225736p:plain