MENU

AI x Blockchainでヨットを買いたいという目論見(失敗談)

目次

仮想通貨botter Advent Calendar 2022への記事(12/22: 2回目)

前回の記事「 BackTestのチュートリアル」が、私史上では最高に評判よかったので調子こいて今度は読み物を投稿。

参考:前回の記事(12/19: BackTestのチュートリアル)

自分のヨットが欲しい

毎週末ヨットに乗っている。来年6月にはバンクーバーのクルージングツアーにも申し込んだ。

しかし、他人の船に乗っているのでは「自由」が足りないのだ。自由を得るにはAI x Blockchainしかないのだっ。

AIでいい感じにビットコインを取引して、
ボートショーで「このヨット一つ包んでもらおうかしら?」と言えるようになるのだっ!!

というようなことを考え早数年。。。

今回は失敗談を共有したいと思う。

ポエムで読み物だけれども、だれもがハマる、ありがちなパターンでもあるのでなんらかの有用性もあるかもしれない。

どんな失敗なのか?

一言でいうと「Deepでポン!!」というアプローチはなかなかうまくいかない。

ライブラリが充実してきているので、すでにあるアルゴリズムを利用するだけならばAIプログラム自体は驚くほど簡単になってきているのだけれども、AIに解かせる問題設定が難しい。

それは「ターミネーター」に「自己防衛」を学習させたら「人類滅亡」の答えを導き出したのに似ていた(のプチ版)。

だれでも思いつくプリミティブな思いつき

ビットコインをAIで取引すればすごくもうかるにちがいないのだ

① チャートにはパターンというのがあるらしいのだ。

パターンが69個もあるらしく私には見分けがつかないけれど、見る人がみるとわかるらしい。

② CNNつーやつを使うとパターン認識が得意らしい。

そしてKerasというやつが簡単に使えるライブラリーらしい。69どころか数千のパターンもみわけることができるらしい。

①+②=ヨットの道筋が見えてきた。

どういう学習をすればいいのか整理しよう

入力

チャートパターン(画像)をみて人間がわかるというのだから市場データを画像化してみればよさそうだ。本来は時系列のデータではあるが、人間が判断しているときにチャートとしてまとめているように価格x時間の2次元の画像とすればよさそうにみえた。

さらに人間には早すぎて認識できないかもしれないけれど、コンピュータにはわかりそうなので板情報も与えてやろう。ローソク足のような複雑な表現は人間用だから、シンプルに数字だけがふくまれていればコンピュータ用には十分だろう。

そのように考えて「約定情報・板情報」x「売・買」で4つのグラフをつくってみた。

  • 横が価格。30のところが中央値で左にいけば安く、右が高い(1ピクセル0.5ドル)
  • 縦が時間。1ピクセル1秒として90秒
  • 色が明るいところが数字が大きい(板でいえば厚いところ)

1秒毎に1毎の画像をつくって、3ヶ月分作成(86,400枚/日 x 3ヶ月)

データの量としては申し分ないだろう。

出力

予測するものは、T時刻の画像に対し将来時刻T+αにおける「価格」または「変動」が考えられた。BitCoinの場合、朝起きると価格レンジが全く違っていることも多いので価格ではなくて、「変動」つまり「上がるか・下がる」かを予測した方がよさそうに思えた。

などと考えている間に、WebSocketで集めた3ヶ月分の全約定履歴と板情報がたまっていた。これを使えば任意のポイントで、直後にどういう価格変化があったのかを示す教師データは簡単に作れるはずだ。

教師データのパターンは「上がる」「下がる」と欲張って、5ドル変化があった場合は「すごく上がる」「すごく下がる」も加え、「変化しない」の5値分類課題として定義すれば、もうやるべきこと(執行戦略)は明確であると思われた。

学習方式の選択

一般論でいえば教師あり学習は、教師信号をつくるのがとても大変。しかし今回は手元にデータがあって、すでに起きたことを学習させるのだから学習方式は「教師あり学習」が一番むいていると考えられた。

教師あり学習のときのパターン(チートシート)

教師あり学習にも入出力のパターンがある。特製チートシートを引っ張り出してきてどれに当たるか分析した。

今回は時系列ではあるのだけれども、それを画像にしてしまったので、画像を入力とし、上がるか下がるかの分類問題として定義できそうだ。

AI 学習パターンチートシート

さあ実験・実験!!

体でっかちなタイプなのでいきなりコードをかいてみた。あとからモデルは差し替えられるだろうということで入力と出力の間を適当につないでみた。

出力が5つの出力を持つsoftmax関数になっている。変化の5パターンのうちどれにあたるのかの確率を表示する関数だ。だいたいどれか1つがとても大きな値をとることになる特徴をもつ関数。

データを取得したり画像にしたりするのにPythonで500行ぐらい書かなくてはいけなかったのに、世間を騒がしているDeepLearningって書くべきコードってこんなものでできちゃったりするのが驚きだった。Kerasすげー。

さあ学習&テスト

新しいGPUを買って10000サンプルのミニバッチをブンブン回して、別にとっておいた5000サンプルでモデルの予測精度を検証した。

10000/10000 [==============================] - 2s 210us/sample - loss: 3.4878 - acc: 0.7834
 22:08:05.506970: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:101] Filling up shuffle buffer (this may take a while): 83298 of 100000
 22:08:05.906171: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:140] Shuffle buffer filled.
5000/5000 [==============================] - 0s 96us/sample - loss: 3.0947 - acc: 0.8080

いきなりの正答率80%越え!!

acc(正答率)=0.8080ということは80%正答!?

サムイ島で乗ったヨット

ああ、目の前に青い海とヨットがみえてきたぞっ。

じつは起きていたこと

正答率は確かに高い。

が、学習の本質は、loss(正解と回答のクロスエントロピー)の数字を小さくすることなのだった。上記例では3.0947であって全く学習できていなかった。

「正解しているのに学習していない」この背反するような2つの事象は以下のようにアウフヘーベンされていたのだった。

私

ディープラーニングちゃん。この絵から直後の価格変化を予測して!!

ディープラーニングちゃん
ディープラーニングちゃん

わかりました。だいたい変化ないみたいですよー。

ディープラーニングちゃんはデータから、直後の価格の変化は8割方変化していないことを見つけ出して、全部「変化なし」と回答することを学習したのだった。

全部Aで回答しちゃえば、TOEIC250点目指すAIができるぞっ。

これはつまり、TOEICで全部Aで回答することで250点を目指すAIの爆誕の瞬間だった。

お気持ちは伝わらない

そうじゃないのだ。ちがうのだ。それではヨットは買えないのだ。

しかしディープラーニングちゃんは私のオーダー通りに最適な解をだしているのだった。

これを理解したとき、とてもディープラーニングちゃんが可愛く思えたと同時に、ターミネータが生まれるかもしれないシンギュラリティは近いと確信したのだった。

問題の設定が大切

かように実装よりもなによりも、解きたい問題がいかなる問題なのかをきちんと設定することが一番大切ということを、人間側が学習する結果となった。

直後の価格が変化がないことを予測しても「儲かる=ヨットを買う」にはつながらないのだ。

儲かるとはどういうことかという問い

儲かるとはどういうことで成立するのか?を儲けたことがない頭で考え尽くす必要があるのだっ。

しかもデータの取得から自力でやって、本当にリアルマネーを賭ける鉄火場に乗り込むのだっ。

Kaggleみたいにうまくいけば賞金というルールではなくて、うまくいかないと人生溶かすのだっ!!(ざわざわ)

でもそんな当たり前なこと初心者にはわからなかったのだ。

そして、きっと課題定義ではなくて、解決方法に問題があるのに違いないと考えた私は、

  • 画像にしたのがよくなかった。動画にしたらどうだろうか?
  • もしかしてBTC取引って縦スクロールゲームじゃね?
  • ゲームといえばDQNという奴がいいらしいぞ

という本質ではない思い込みをして、DQNの論文をよみながらPython で2000行(ほとんどがログ収集〜加工部分)の失敗作を作ってしまったのだった(続く?来年のネタに取っておく?)。

おかげでJDLAのE資格がとれるぐらいにはディープラーニングのことを理解することができました(怪我の功名。はっはっはー)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次