Nn

提供: PXDOG
2019年2月6日 (水) 18:25時点におけるMediawikiadmin2018 (トーク | 投稿記録)による版
Jump to navigation Jump to search

# 久しぶりにニューラルネットワーク

ニューラルネットワークで遊んだ。

久しぶりのPython、久しぶりのKeras(TensorFlow)。

昨日はパソコン開いても電源が押せずにぼーっとしてた。

身体的にじゃなくて精神的に押せなかった。

昨日だけじゃなくて、ここ1週間くらいそうだった。

で、久しぶりなことやってみようと思い立った。

# データ

データはずっと前から断片的に集めている。

自分のサーバに放置してあったJPY-BTCFXの、2週間半15万件のWebSocket加工データを使った。

データを取得するコードはNode.jsで適当に書いてあった。

また動かすことにした。

ニューラルネットワークのコードはPythonで書いた。

サンプルコードをまずコピペして動かし、

ずーっと前に書いた(書いた記憶がほぼ無い)Pythonのコードを断片的にコピペしながら、

それっぽいニューラルネットワークをKeras(TensorFlow)で作成。

ここまで2時間(半年ぶり3回目のPythonにしては思ったより早く読めたと思う)。

それからデータのラベル化方法やら学習率やら中間層やらドロップアウトやらのハイパーパラメータ?等をいじること4時間。

テストデータで5.5割超えてなんとか儲かりそうなんじゃない?っていうレベルになった。

次はこれまたずっと前に書いたbbot.pwのコードをまず解読して、改変して、

この学習済みモデルを使って売買するものにする。

機械学習・深層学習は完全に独学だからいじめないで欲しい。

# 結果

画像だけ適当に。

いろいろとだんだん良くなっていった。

勝率3割のbotて。

Bad Result

チャート君、落ち着いて。

OK Result

ほう、なんだかそれっぽくなってきた?

Good Result

まぁなんだかよさそうじゃん。

勝率低いけどね。

Better Result

夜中から朝までずっとやってた。

この辺でよしとして、次はこれをトレードに使う。

その前にやることやる。

2019/02/02 追記

混同行列も悪くないんじゃないの。

混同行列

でもモデルはもう過学習してる。

絶対この0.55〜0.60に何かある。

過学習してる

データの間違いかな、わからない。

2019/02/03 追記

外れ値があった。

MinMaxScalerで標準化してた。

プロットするまで気づかなかった。

半年前ここらへんでやめたような気がする。

プロットして直し方わからなかった、もしくは標準化してなかったかな。

外れ値

Scalerを変えて、外れ値が見えないようになった。

Quantileで一様にした。

Scaler変更

全部じゃなくて、外れ値があるようなデータのみQuantileで一様になるように変換して、それ以外はMinMaxでいいかもしれない。

bullシグナルは70%当たりっぽい。

だけどbullシグナル多すぎない?

70%超えた

逆にbearの54%が信頼できそう。

今ここで、0.XXX%という表記のおかしさに気づいた。

2019/02/06 追記

この学習に使っているのは2018年8月からの16万件のデータ。

それをsplitしてtrainとvalidationに使っている。

SGDで学習率を下げ、500epoch学習した結果こうなった。

Epoch 499/500
58938/58938 [==============================] - 76s 1ms/step - loss: 1.4799 - acc: 0.3480 - val_loss: 1.4832 - val_acc: 0.3471
Epoch 500/500
58938/58938 [==============================] - 76s 1ms/step - loss: 1.4819 - acc: 0.3483 - val_loss: 1.4831 - val_acc: 0.3473
Test loss: 1.4830847713925088
Test accuracy: 0.34733038121200055
Computation time:39006.827 sec
19647/19647 [==============================] - 5s 248us/step
cmx: 
[[1793  761  389  242  666]
 [1067  980  820  415  592]
 [ 677  740 1193  651  663]
 [ 594  481  828 1015 1060]
 [ 646  273  431  827 1843]]
Normalized confusion matrix: 
[[0.46559335 0.19761101 0.10101272 0.06284082 0.17294209]
 [0.27542592 0.25296851 0.21166753 0.10712442 0.15281363]
 [0.17252803 0.18858308 0.3040265  0.16590214 0.16896024]
 [0.14932127 0.12091503 0.2081448  0.25515334 0.26646556]
 [0.16069652 0.06791045 0.10721393 0.20572139 0.45845771]]

実行に10時間かかった。

Best8の混同行列

accuracyがクロスしたところでちょうど終わった。

いい結果

なぜいつもvalidationデータ(オレンジ線)のほうが上なのかわかっていない。。。

このモデルを使って、学習に全く使用していない2月の4万件のデータを検証してみた。

Unknownデータ

左上と右下は極端な価格の変化だから特徴が出やすいのか、正確性が高い。

ラベルを3から5に増やすことで、曖昧なStayはトレードしないように、

弱気(bear)/強気(bull)な部分は逆の建玉なら半分決済してしまうなどができる。

さて、売買するコードに埋め込むか。