ドラッグ&ドロップでReact製のWEBアプリがつくれるReactStudioがやばい - Qiita
この類いのツールは、非常に有用かほとんど使えないかの両極端なイメージがある。見極めたい。 qiita.com
SEが知っておくべきサーバーレス - 有料動画配信システムをサーバーレス化、毎日放送がITコストを9割削減:ITpro
よさそう itpro.nikkeibp.co.jp
この類いのツールは、非常に有用かほとんど使えないかの両極端なイメージがある。見極めたい。 qiita.com
よさそう itpro.nikkeibp.co.jp
CLIからのデプロイ https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploycloud.google.com
Cloud Functionsのデプロイ https://cloud.google.com/functions/docs/deploying/cloud.google.com
普段は プログラミング教育サービス N予備校 のバックエンドを担当しています。 ブログの賑やかしのためだけにQiitaの記事を転載します。
+714.0万円
+3577.7万円
-44.0万円
下図は、その時点での損益(緑色、左軸)とその時点でのBTCJPYの値(青色、右軸)をプロットした図です。本記事で紹介した手法で学習したエージェントがシステムトレード(自動売買)した際のシミュレーション値です。
• 本記事の内容は、著者個人が趣味の時間に自発的に行ったものです。著者が所属する会社または団体の監督指導の下に行ったものではありません。アドベントカレンダーとして表示されるため、所属する会社または団体の発表のように見えることがありますが、その会社または団体は本記事の内容について、一切関知しておらず、なんら責任や関連はありません。 • 本記事の内容は、著者個人による見解であり、所属する団体、組織、会社、その他一切の枠組みによる公式見解ではありません。また、それらは本記事に対する責任や関連も一切ありません。 • 本記事の内容は、機械学習に関する情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。 • 本記事の内容を参考にして、投資の判断を行わないでください。また、本記事の内容が正確であることを、著者は一切保証しません。未来の出来事に対する予想も、あくまで予想であり、その時々の状況によって変わりうることにご注意ください。 • 投資を行う際には、投資を行う本人のみの判断と責任において行ってください。 • 仮に投資に失敗し、投資を行った者の資産が減ったり債務を負ったりしても、著者はなんら責任を負いません。 • その他、本記事を参考にしたかどうかに関わらず、投資の失敗や機会の損失等を含むいかなる不利益が何人に生じたとしても、著者はなんら責任を負いません。
大学で少しかじっていたので、0からというと若干大げさですが、あんまり覚えていないのでほぼ0からでした。いろんな本を読みまわったり、オンラインの学習コースを受講したりしました。個人的にわかりやすかったのは以下の2つです。
まだまだ勉強途中のため、本記事には誤りが含まれるかもしれません。その際はコメントでご指摘いただけると幸いです。
このシステムトレードを行うエージェントには、DQN (deep Q-network) と呼ばれるものを使いました。詳細はここでは述べませんが、ざっくりいうと、以下のような特徴があります。
状態
のときにある 行動
を取った時にどのような 報酬
があるかをエージェントに教える状態
行動
報酬
はQ学習における用語教師データの付与が不要な点、実際にFXで行われた(Deep Q-LearningでFXしてみた)方がいらっしゃった点、名前がおもしろいなと思った点です。
また、本内容はドワンゴ社内エンジニアLT大会(社外向け)で発表しました。その際に仮題の提出を求められ、ちょうどDQNの勉強をしていたため、「仮だし、DQNで~ってつけておくか」としてしまいました。それがそのままconnpassでの発表タイトルとして出てしまったので、勝手に変えてしまってはDQNでの自動取引を目当てに来ていただいた方に失礼と思い、そのままDQNで進めました。
ヒストリカルデータにはcoincheckのBTCJPYの値を使用しました。 2017年9月1日~9月30日の1分足がkaggleで配付されています。 これを1時間足へ変換し、各足の終値の値をその時のBitcoinの売値/買値としました。
下記の図は、使用したヒストリカルデータをグラフに起こしたものです。x軸は日時、y軸はその時のBTCJPYの値です。y軸の単位は万円です。
自動取引のシミュレーションを行うエージェントについては、実はFX用に作っているものがありました。今回はそれをBitcoin用に一部改造して使いました。 https://github.com/dogwood008/DeepFX
Paperspace (非アフィリンク)でインスタンスを借りて使いました。その時の詳しいやりかたは クラウドでGPUを使った機械学習を安価で行う(Paperspace)をどうぞ。
1日くらい。学習で与えるデータを1ヶ月に絞ったのは、これを短くしたかったため。インスタンス借りている間はずっと課金され続けるので、学習時間が短くすむようにしました。
以下の条件のもと、前述のヒストリカルデータを使用して学習を行いました。
左y軸(緑色グラフ)の損益の単位は 万円
、右y軸(青色グラフ)のBTCJPYの単位は 円
です。最大で-900万円程損失を抱えますが、その後700万円超の利益へ転じています。ただ、BTCJPYと報酬のグラフの傾きが同じで、少し不穏な空気を感じます。後述しますが、このときの悪い予感は的中します。
あれ?報酬(損益)のグラフは?と一瞬見失いそうになりますが、よく見ると開始直後に緑色のグラフがいて、あとは青色と同化していますね。上昇相場では報酬のグラフはぴったりとBTCJPYにひっついています。
こちらも序盤は分かれていますが、ある時点から報酬とBTCJPYのグラフがひっついてしまっています。
下図をご覧ください。赤いグラフが上にはねている部分が、「買い」の注文をしたところです。序盤に購入し、一回BTCJPYが下がったところで再度購入しています。(8月のグラフは一瞬下にはねており、そこが「売り」の注文をしたところですが、手持ちのBitcoinの数が0のため、注文が通りませんでした。)
この結果を見るにあくまで推測ですが、機械が学習したのは 「序盤に適当に購入して、ガチホールドしておき、もしBTCJPYが下がればナンピン(※)しておけば適当に儲かる」 ということなのではないかと思います。私が機械に期待していた取引は、「短期でBitcoinの売買を繰り返して利益を積み重ねる」ような動きでした。その観点からいうと、今回の試みは失敗だったということになります。
※ナンピン…この場合、BTCJPYの価値が下がった時に再度購入することで、BTCの平均取得価格を下げることをいいます
今回学習に使用した1ヶ月のBTCJPYのデータは、Bitcoinの値動きを如実に表したもの、とは言えません。皆様がご存じの通り、現在のBitcoinの価格は暴騰した後、乱高下しています。したがって、それを1月でぶつ切りしたものを学習してもBitcoin取引のためのデータとしては適切ではありませんでした。
一方、株やFXを考えてみましょう。株は平日の09:00-15:00(うち、1時間昼休み)、FXも土日を除く早朝〜深夜までです。つまり、どちらも5営業日の後、取引が停止されます。未検証なので、確実なことは何も言えませんが、周期性のあるデータ、例えば1週間、1ヶ月、1年等のヒストリカルデータを使って学習すると、異なった結果が得られるかもしれません。
Bitcoinだけでなく、株やFXでも試行してみたいと思います。また、前述したとおり、1ヶ月だけではなく、周期性のあるヒストリカルデータで試験してみたいです。
今回はDQNを使用しましたが、それ以外の選択肢も考えるべきです。また、モデルに関しても深く考察はできていません。どこかの記事で、DQNとLSTMを組み合わせる、といった手法を目にしたので、可能ならチャレンジしたいと思います。
LSTM、案外簡単に使えそう? qiita.com