USDJPYの動きを予測する1

やること

特徴量をみながら、自身で調整してみる。

特に今回はRSIをみる

きになっていたこと

RSIが40~60と比較的狭い範囲で推移しているけど、この指標って本当に翌日のドル円動き予測するのに役にたつのか

コード

おおまかな流れ 1. RSIのヒストグラム確認

  1. 適当な範囲で分けて、確認

  2. 新しい特徴量でランダムフォレスト

RSIでヒストグラム確認

rsi = data['RSI']

ax = sns.distplot(rsi, kde = False, rug = False, bins = 20)
fig = ax.get_figure()
fig.savefig('output/fig1.png')

f:id:iiiiikamirin:20200903074401p:plain

30~70の間には全部収まっていて、40~60の範囲が漏れているやつがちょくちょくいる。

このもれているやつが、特徴的な動きをしていれば予測しやすい?(60超えているときはいつも下がっている、など)

適当な範囲で分けて確認

adj_rsi = rsi.apply(lambda x:1 if x > 60 else (-1 if x < 40 else 0))
adj_rsi.name = 'adjRSI'

view = pd.concat([data['UpDown'], adj_rsi], axis = 1)
ax = sns.countplot(x = 'adjRSI', hue = 'UpDown', data = view)
fig = ax.get_figure()
fig.savefig('output/fig1.png')

f:id:iiiiikamirin:20200903074714p:plain

UpDownは1:上昇、0が下落。

サンプル数が少なくてわからん。。範囲変えてみる。

adj_rsi = rsi.apply(lambda x:1 if x > 55 else (-1 if x < 45 else 0))
adj_rsi.name = 'adjRSI'

view = pd.concat([data['UpDown'], adj_rsi], axis = 1)
ax = sns.countplot(x = 'adjRSI', hue = 'UpDown', data = view)
fig = ax.get_figure()
fig.savefig('output/fig1.png')

f:id:iiiiikamirin:20200903074857p:plain

これはちょっと特徴的かもしれん。

ある一定値(55)を超えると、ドル円はむしろ上がっていきそう。ただいつまでも上がるわけはないからいつか下がるんだが、あがるのはしばらく続くんだろうか。。

新しい特徴量でランダムフォレスト

data['RSI'] = adj_rsi

#  random forest
features = data.drop('UpDown', axis = 1).values
label = data['UpDown']

X_train, X_test, y_train, y_test = train_test_split(features, label, test_size = 0.3, random_state = 1234)

clf = RandomForestClassifier(random_state = 1234)
clf.fit(X_train, y_train)

#  評価
print('Test score: {}'.format(clf.score(X_test, y_test)))
print('Train score: {}'.format(clf.score(X_train, y_train)))
print('f1 score: {:.3f}'.format(f1_score(y_test, clf.predict(X_test))))
Test score: 0.646600566572238
Train score: 0.9751062537947783
f1 score: 0.639

scoreはむしろ下がった。。