ストックドッグ

KatoTakahiro。金融系の会社で働くSEが株やPython、その他諸々について書いています。サービスも運営してます→http://fmbrain.work

強化学習で銘柄を選んでみた(検証)

目次

今日やること

銘柄選択を強化学習に任せてみよう、ということをお題にシンプルな検証をやってみたいと思います。

強化学習

強化学習の中でも、基礎とされるn本腕バンディット問題について扱います。

相場をn本腕バンディット問題に見立てて、検証したいと思います。

そもそもn本腕バンディット問題って何?

見識高き読者は華麗に読み飛ばして下さい。

今回使用するバンディットアルゴリズムのε-グリーディ手法を私なりに説明してるだけです(数式は一切使いません)。


n本腕バンディット問題は例えで説明すると、とてもわかりやすいです。

例えスタート!!

f:id:doz13189:20170224221859j:plain

  1. ここに5つのコインがあります(画像は6枚ですが、気にしないで)
  2. 5つのコインは表がでる確率がそれぞれ異なります
  3. コインAは30%、コインBは40%、コインCは50%、コインDは60%、コインEは70%、の確率で表がでます
  4. どのコインがどの確率なのかはわかりません
  5. 5つのコインから1つだけを選んで投げる、という行動を10000回繰り返します
  6. 目的は、この10000回の中でできるだけ表を多く出したい
  7. さて、どういった戦略をとれば表を多く出せるでしょう?

10000回の試行回数の中でどれが一番表が出やすいコインを手探りで確かめなければならない、かつ、できるだけ早く見つける。

こういった状況をバンディット問題と呼びます。

(n本腕というのは選択肢の数で、今回は5つのコイン、つまり、5つの選択肢があるので5本腕バンディット問題ということになります)

そして、この手探りの効率の良さをより求めたものがバンディットアルゴリズムとして提唱されています。


さて、そろそろ戦略について考えてみましょう。


では、まずギャンブラー的戦略をとってみましょう。

ギャンブラー的戦略:5つのうちどれかを選び、それを10000回投げ続ける。コインEを偶然選ぶことができればラッキー、コインAに当たれば悲劇。


次にみんな平等、ゆとり教育的戦略をとりましょう。

ゆとり教育的戦略:みんな平等、5つとも2000回づつ投げましょう。表が出る期待値は、当然5枚のコインの期待値の平均。


次は、ちょっと頭をひねった戦略をとります。

最初の5000回は5枚とも均等にコインを投げます。

5000回投げ終わった時点で、それぞれのコインの表が出た回数を計算し、その中で一番表が出た回数が多かったものを残りの5000回投げましょう、という戦略。

実はこれはグリーディ手法と呼ばれる戦略です。

最初の5000回の中から期待値の高いものを貪欲に(Greedy)選ぶことからグリーディ手法と呼ばれています。


さて、先ほどのグリーディ手法ですが、最初に5000回は投げ過ぎじゃないですか?

もうちょっと減らしても、コインEは見つけれるんじゃないか?

1000回、いいや、100回、いやいや、20回!


20回まで減らして、もし20回の中でコインEを見つけることができれば、残りの9880回はコインEを投げれるわけです。

しかし、心配な点もあります。

それは20回の中で、たまたまコインDの表が出る回数が多くて、残りの9880回にコインDを選んでしまうケース。

悲劇ですね。

しかし、あくまでもコインの表が出るのは確率なので、十二分に考えられます。

コインEを見つけるための試行回数を減らしすぎると、こういった悲劇(不確実性)が起こりやすくなります。


ちなみにバンディット問題では。

このコインEを見つけるための行動を探索と言います。

そして、コインEの表が出る確率が高いということを見出し、コインEを投げることを知識の利用と言います。(試行回数をこなすことで得た知識を利用)


探索と知識の利用はトレードオフの関係にあり、探索をしすぎても最終的な報酬(表が出る回数)は減り、知識の利用を早い段階からしすぎても不確実性が増すことになります。

バンディットアルゴリズムでは、探索と知識の利用のバランシングの効率の良さを追求しています。

このバランスは、どこが最適かとかは扱う問題によって異なるので、最適を求めるのは難易度高めです。

今回のようなコイン投げだと、確率論的に求めることはできますが、こんな単純な問題は現実には存在しません。

この記事で扱う内容も、バランシングの最適化はまったく行っていません。(無理なので)


と、n本腕バンディット問題についてざっと説明が終わったところで、最後にもうひとつだけ戦略を上げておきます。(本命)

今回、検証で使用するものです。

ε-グリーディ手法と言って、グリーディ手法のデメリットをちょっと改善したものです。

コインEを見つけるために、最初の20回はどのコインも均等に投げるとします。

ここまではグリーディ手法と同じです。

グリーディ手法だと、残りの9880回は20回の中での表が出た回数が多かったコインをひたすら投げ続けますが、ε-グリーディ手法は、残りの9880回の中でもたまに他のコインを投げます。

もし、誤った選択をしていても、たまに他のコインを投げ、その都度表が出る期待値を計算し直すので、どこかでコインEにたどり着くことができるでしょう。

探索をある一定の確率で行い続けるのが、ε-グリーディ手法です。

ε-グリーディ手法では、このように不確実性を減らしていき、かつ最終的な報酬も求めていきます。

検証方法

相場をn本腕バンディット問題に見立てながら、検証を行っていきます。

先ほどは5つのコインでしたが、相場なので5つの銘柄です。


対象銘柄

証券コード ETF リターン
1545 (NEXT FUNDS)NASDAQ-100(R)連動型上場投信 -0.0061
1525 国際のETF VIX短期先物指数 0.035
1671 WTI原油価格連動型上場投信 0.010
1681 上場インデックスファンド海外新興国株式 0.0004
1698 上場インデックスファンド日本高配当 -0.0035

リターンは、2013年から2016年まで、10営業日保有して売却するという行動を行い、それらの平均リターンを示しています。

どの銘柄がどの平均リターンかはわからないものとします。

だいたい、リターンがバラけるように選びました。


2013年から2016年までの合計取引回数は全部で89回です。

目的は、この89回の試行回数でより平均リターン高めることです。

つまり、ε-グリーディ手法によってできるだけ少ない試行回数で、一番リターンの高い国際のETF VIX短期先物指数(1525)を見つけることができれば良いということになります。

結果

f:id:doz13189:20170224204715p:plain

平均リターンは、0.0129となりました。

国際のETF VIX短期先物指数(1525)の0.035には及ばないものの、ちゃんと1525を選べているようです。

探索と知識利用のバランスは、はじめの20回をランダムに取引し(探索)、その後は知識の利用にしています。

f:id:doz13189:20170224204933p:plain

これは試行回数ごとに選択した銘柄をプロットしています。

1525が一番多く選択されていることがわかります。

たまに他の銘柄も選択しているのがε-グリーディ手法の特徴とも言えます。


ちなみにグリーディ手法で行った際のシミュレーションも見てみましょう。

f:id:doz13189:20170225054809p:plain

平均リターンは0.020でした。

今回に限っては、ε-グリーディ手法より上を行きました。

それだけε-グリーディ手法に無駄な探索が多かったと言えます。

f:id:doz13189:20170225054835p:plain

試行回数ごとに選択した銘柄をプロットしたものを見ると、1525を選んでいることがわかります。


ここまでは、ε-グリーディ手法orグリーディ手法が上手くいったパターンでした。

次に上手く探索できず国際のETF VIX短期先物指数(1525)を見つけれなかったパターンを見てみます。

f:id:doz13189:20170224205357p:plain

平均リターンは、0.0049となりました。

国際のETF VIX短期先物指数(1525)の0.035には遠く及びません。

それもそのはず選択した銘柄を見てみると...

f:id:doz13189:20170224205512p:plain

最初はWTI原油価格連動型上場投信(1671)のリターンが高いと評価しており、途中から上場インデックスファンド海外新興国株式(1681)に乗り換えています。

残念、どっちもはずれです。


こういったこともあるので、探索と知識の利用のバランシングは慎重に行わなければいけません。

強化学習のアルゴリズムは全般的に学習までの期間にかなりの時間を要します。

試行回数89回程度ではなかなか最適な解は見つかりにくく、ある程度の不確実性は許容するしかありません。

しかし、相場の歴史は長いです。

いくらでもさかのぼって探索の期間をたっぷり取ればいいか、というとまたそうでもありません。

今回のシミュレーションの問題点

一言で言うと、相場は非定常環境であるにも関わらず、定常環境を想定したシミュレーションを行っている、ということです。

コインの表は出る確率は一定ですが(定常環境)、リターンは時間と共に平均が変化していきます(非定常環境)。

これの何がまずいかというと...

2013年から2016年の平均リターンをとったら-0.01でも、2013年から2014年というある期間をとったら+0.05かもしれない。

ということは、ε-グリーディ手法は2013年から2014年の間を探索期間として設けていると高確率で誤った知識を得ることになります。

いや、そもそも誤った知識でもありませんね。

ただ、その知識を2014年、2015年と利用していても良い結果は得ることはできません。

今回のシミュレーションで言うと、2013年〜2016年は高いリターンを示していた国際のETF VIX短期先物指数(1525)を2017年以降も買い続けていれば高いリターンを期待できるかというとそうではない、ということです、当たり前ですね笑


これを解決するには、古い知識の価値をあまり評価せず、新しい知識を評価するということが上がられます。

これを今回のシミュレーションに置き換えると、時間軸をもとにリターンを加重平均すると非定常環境に対応することができるということになります。


このように相場に合わせていくと、強化学習を使ったトレンドフォロー型のアルゴリズムができます。

(今回のシミュレーションもリターンの高いものを積極的に選ぶトレンドフォロー型)

ちなみに強化学習を使った株取引で15%の超過リターンを達成したで〜っていう論文もあります。

http://sigfin.org/?plugin=attach&refer=SIG-FIN-011-04&openfile=SIG-FIN-011-04.pdf


工夫次第で取引戦略に組み込めそうですね!!!


〜更新〜

非定常環境に対応させたバージョン

直近のリターンが高いものを高く評価した場合のシミュレーション

f:id:doz13189:20170225080339p:plain

平均リターンは0.0260となかなかの数値。

何回かシミュレーションを繰り返しましたが、比較的高い数値を出しました。


f:id:doz13189:20170225080500p:plain

試行回数ごとに選択した銘柄をプロットしたものを見ても、適度に他の銘柄を選んでいることがわかります。

以上でした。