どうもお久しぶりです。
下宿先が火事になったり、バイト先を首になったり、コロナの影響で麻雀にびっくりするぐらいハマってしまったりでやる気が出ずまったく触っていなかったですが備忘録として、久々に更新することにしました。
まず色々触っていた上で前回の記事Pytorchで日経平均の予測で書いたコードではあまりよろしくないのではないかという結論に至ったので記事にしてみました。
#参考、引用した記事
大体前回記事とおなじです。
追加で以下のものを参考にしました。
Using Deep Learning Neural Networks and Candlestick Chart Representation to Predict Stock Market
Affinity LossをCIFAR-10で精度を求めてひたすら頑張った話
#問題点、考察
上記の記事からLSTMでの予想というのはかなり精度が悪そうということです。
予想と実際の株価の予想から外れている図がプロットされています。
ネットを調べているとこういった記事が散見されますが、いまいちパッとしないことが多いです。根拠は全くないです。感覚的にです。本当に理系なのでしょうか。
そして、前回の記事Pytorchで日経平均の予測で目標にしていた3%上がる時を予想する。といったものですが、これにはデータの不均衡により、厳しいと感じました。
#+3%の壁
データ数が約4300(20年分)の日経平均のデータを扱っていたのですが上下だけでいうなら1:1の比率でデータに偏りがありませんでした。しかし、騰落率+3%という条件をつけると、上昇:下落の比率が1:10ほどの偏りになります。この場合では全て下落と予想するモデルが出来てしまい、予想もへったくれもありません。
これは、精度67%のディープラーニング株価予測モデル_1の記事でも言及されていることです。この問題をDataAugmentation(こちらの記事、データが足りないなら増やせば良いじゃない。
を参考にしました)によってクリアしている旨が書かれていました。
#DataAugmentation
なので。データ数が4300しかないので、アップサンプリングを行いました。
つまりデータを増やしたということです。
時系列データなので画像のようにcsvファイルで管理をしていました。ここからLSTMで20日分(20行)を読み込ませて学習させるという流れです。
アップサンプリングをすると、データが追加される時、少ない方(この場合上昇するというデータとラベル)がまとめて追加されます。なので、データ数を1:1にするため上昇するという予想されたものが連続で4000行近く追加されるわけです。
こうなってしまうと20行ごとに学習していたので後半4000行でまったく信頼性のないデータになってしまうと考えました(実際予想がまともにできていなかった)。ここで時系列データへのDataAugmentationは問題がありそうと考え使うことは諦めました。
#画像を用いた予想
そういった時に、ディープラーニングが注目され始めたのはAlexNet使用された画像分類コンペであることを思い出しました。なので画像を使った予想について考えてみました。
実際、上昇下落の2値分類を当てるだけであるならば画像での予想は高い精度を誇っているっぽいです。Using Deep Learning Neural Networks and Candlestick Chart Representation to Predict Stock Marketこちらの論文では株価をチャート上から読み取ることで、accuracy97%でSOTA。とのことです。
こちらの記事のコードがgit hubに落ちていたので、使って予想することにしました。
#データ不均衡の問題解決
画像データであるならばデータ不均衡はDataAugmentationによって解決できるかもしれないと考えました。さらに最近では、深層距離学習というのも取り入れることでよりデータの不均衡につよい学習を行えるみたいです。
Affinity LossをCIFAR-10で精度を求めてひたすら頑張った話
上記記事が時系列データを使ったLSTMに適応できるかがわからなかったため、画像での学習を行おうと考えました。
#次回の記事
こういったことを踏まえて、現在コーディング中です。乞うご期待。
次回の記事
Pytorchで日経平均の予測2