USDJPYの動きを予測する1
やること
特徴量をみながら、自身で調整してみる。
特に今回はRSIをみる
きになっていたこと
RSIが40~60と比較的狭い範囲で推移しているけど、この指標って本当に翌日のドル円動き予測するのに役にたつのか
コード
おおまかな流れ 1. RSIのヒストグラム確認
適当な範囲で分けて、確認
新しい特徴量でランダムフォレスト
RSIでヒストグラム確認
rsi = data['RSI'] ax = sns.distplot(rsi, kde = False, rug = False, bins = 20) fig = ax.get_figure() fig.savefig('output/fig1.png')
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')
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')
これはちょっと特徴的かもしれん。
ある一定値(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はむしろ下がった。。