LoginSignup
2
9

More than 5 years have passed since last update.

FXで一分足の情報から五分後の騰落を特定条件下で60%の正解率をだす深層学習

Posted at

結論

平均して五時間に一回ほど60%の正解率を出すことができた。

理論

学習部分は前回の記事でまとめている方法を使っています。

"""
FXの一分足データから五分後の上昇下落を予想する
https://qiita.com/nanamesincos/items/34b3d7d624a31b06509d
"""

上の記事で正解率はほぼ50%で騰落を予測できているとはあまり言えませんでした。

しかし、出力層で活性化関数をsoftmax関数にしているのでscoreという形で予測の確信度を見ることができると考えました。

行ったことはscoreの値が大きいときほど正解する確率が上がっているのではないかと言うことを可視化することです。

実装

(ソースコードが拙いのは目をつむっていてください。もっとスマートなコード書きたい)

モデルは前回のままなので確認したい方は上のURLから飛んでみてください。

kerasで実装したmodelにはpredictとpredict_classesというメソッドがあります

predictでは活性化関数の値を、predict_classesでは分類されたクラスを表示します。

これをそれぞれlistに格納します。


aa = [] #scoreの値
bb = [] #予測したラベル

for i in range(85910):
  y_pred1 = model.predict(X_test[i].reshape(1,len(X_train[i])),verbose = 0)
  y_pred2 = model.predict_classes(X_test[i].reshape(1,len(X_train[i])),verbose = 0)
  bb.append(y_pred2)
  aa.append(float(np.max(y_pred1)))

次にscoreがある一定の値以上のときの正解率を算出します。

ニクラス分類問題であるのと、分類が難しい問題なのでscoreは0.5から大きく離れた値にはなりませんでした。

なので今回は0.02刻みの幅で正解率の変化を見ていきます。

c = np.array([0,0,0,0,0,0,0,0])  #データの個数を格納
d = np.array([0,0,0,0,0,0,0,0])  #正解したデータの個数を格納
for i in range(85910):
  for v in range(0, 8):
    l_score = v / 50 + 0.5
    if l_score < aa[i]:
      c[v] += 1
      if bb[i] == y_test[i]:
        d[v] += 1

最後に出力


for v in range(8):
  l_score = v / 50 + 0.5
  print(str(l_score) + "の時の正解率")
  print(d[v]/c[v]*100)

結果

score =< 0.5の時の正解率
52.098707950180426

score =< 0.52の時の正解率
53.33433399090831

score =< 0.54の時の正解率
55.09140353527723

score =< 0.56の時の正解率
59.51940850277264

score =< 0.58の時の正解率
100.0

score =< 0.6の時の正解率
nan

score =< 0.62の時の正解率
nan

0.64の時の正解率
nan

全データ数85910

各scoreでのデータの個数
[44758, 24873, 7293, 322, 4, 0, 0, 0]

感想

scoreが0.56を超えてくると正解率が約60%になった。その時のデータ数が322なので全体の個数を割ると1/256になる。

256分に一回なので五時間のうち一回は六割の正解率で騰落を予測できている。

また、結果から見てもscoreが上がるに連れて正解率も上がっている。流石に100%はサンプル数が4つしかないので信用出来ないという面もあるが。

流石にまだギャンブルできるほどの確率ではないにしても改善方法に心当たりがあるのでこれから試行錯誤していきます。

参考にさせていただいた記事
https://qiita.com/ishizakiiii/items/3b894b6e987fdf87093e

2
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
9