現在ディープラーニングによるFX予想の研究をしていますが、進捗が少ないので閑話休題で別の話です。

”ディープラーニングを用いてFX・株価を予想してみた”というブログは結構あります。

多くの場合、下のようなチャートが出力され

結構よく予測できている

と結論付けられています。

ですが、この認識は大きな間違いです。

確かにチャートを見ると、予測値と現実値がかなり近い値で推移しているように見えます。
しかし、そこに罠があるのです。

過去の値動きデータから予測した場合、その結果チャートは以下のような内容になります。

  • t=nまでの実データを使い、t=n+1の値を予測する
  • t=n+1までの実データを使い、t=n+2の値を予測する
  • それをm回繰り返し、その結果を並べる

※)n+1ではなく、n+2とかそれ以降を予測する場合もあります

t=nで発生した誤差は、次のt=n+1の実データによってリセットされるので、チャートの最大誤差は1回の予測の誤差の範囲内に収まります。

例えば、常にt=nの値+10pipの固定予測をしたとしても、(少しずれただけの)見た目はとてもキレイなチャートになります。
また、±20pipのランダム予測をした場合にも、ほぼ同様のキレイなチャートが出来上がります。

見た目にキレイなチャートは、決して次の値を予測できているわけではなく、t=nの元値に近い値を出力しているだけなのです。

それっぽい見た目のチャートに騙されてはいけません!!

実際損失関数の誤差が小さくなるほど、元のチャートに近くなります。
しかしそれはt=nの値に近いだけなのです。

実は元のチャートに近くなるというより、(期間の短い)移動平均線にそっくりになります・・・
損失関数に二乗平均誤差を使用しているので当然といえば当然ですw

相場予測で欲しい情報は、”t=nに近い値”ではなく、”t=n+1に近い値”、もっと単純に言えば、次に上がるか下がるか?だけですからねw

例えば上のチャートの予測データで、本当に予測できているのか?を見てみましょう。

現在地点(t=n)から1時間後(1時間足データなので)に20pip以上上がる(下がる)と予測して実際に上がった(下がった)回数をカウントしました。
真ん中の図は上がる予測、右の図は下がる予測で、x軸:予測、y軸:現実です。

とても「予測が当たっている」といえる結果ではありません。

±10pipの予測にすると、すこし精度があがりました。
(実はこれは精度が上がったのではなく、元データの分布に偏りがあるためと推測しています)

では0pipの場合はどうでしょうか?
単純に、次の時間足で上がるか下がるかの予測です。

「おお、予測結果が50%を超えている!!」と考えられる人はとてもハッピーですw

しかし実際には”この予測は単純ランダム予測である!”といってもいいかもしれません。

もしこれが最善の結果であるならば、そもそも出発点である「過去チャートのみで予測可能か?」に対する答えは”No”になってしまいます。

しかし、shimizuはまだあきらめていません。

  1. そもそも回帰(値を予測する)は無理がある(と最初から思っている)
  2. 本命は分類問題で、上がる予想はxx%という予測を出したい
  3. 現在は入力データは1時間足のOHLC4本値のみを使用している
  4. 現在は入力データは生データで修正を行っていない

例えば4ですが、実際に研究を始めてみると、(例えば1時間足ベースでは)USD/JPYは通常殆ど動いていないんだな・・・とわかります。

これは上で使った予測データの、実際の値動き(t=n+1 – t=n)のヒストグラムです。(ドル円なのでx軸は円です)

機械学習もそうですが、入力データは非常に大切な要素です。
分類問題の場合には各データのバランスも重要と言われています。

上記データの場合には、96%のデータが±20pip以内であり、その圧倒的な分布に学習結果が大きな影響を受けているとも考えられます。

この面で入力データの改善余地は大きいと考えています。

そのほかにも、1時間足だけでなく、日足、5分足等ありますし、timestepも今の48本からスキャ寄りに短くしたり、ドル円、ユロドルだけでなく、資源通貨やマイナー通貨で試したりとか、まだまだ試行錯誤できることは一杯です\(^_^)/


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です