どの株を買うかではなく、いつ買うかのモデルができてしまった。
日次短期トレードのためにAIを使ったモデルを開発してます。いつどの銘柄を購入すれば短期的に利益がえられるかというモデルです。XgboostとかKerasを使ったニューラルネットで一応ワークしそうなモデルができたので、過去データを使ってトレードシミュレーションしてみました。
もちろん、パラメータ推定に用いる学習データと、シミュレーションするテストデータの日付に重複がないようにします。50日ごとに最新のデータを使ってパラメータを更新し、全部で450日分の計算をしてみました。一回における一銘柄の購入額を100万円としてモデルどおりに売買したところ、平均投資残高440万円ほどで利益は約700万円でした。
450取引日をざっくり2年と考えると、700万/440万/2 ≒79.5%のリターンになります。これはいいぞと思いましたが、このトレードは実際に僕にはできないものでした。なぜなら平均投資残高は440万円でも、最高は5200万円ものポジションを抱えなければならないからです。
どういうことかというと、僕の作ったもモデルによれば、どの銘柄を買うべきかというのはそれほど重要ではなく、いつ集中的に投資するかということのほうがはるかに重要なのです。ですので、普段買うべきは数名柄だけなのに、あるときに何百銘柄も一気に買わなければなりません。
これをトレード可能にするには、最高残高の5200万円を用意する必要があり、これを分母とするリターンは700万/5200万円/2≒6.7%ほどになってしまいます。インデックスと比べていいかどうかはよくわかりませんが、絶対リターンとしては全然魅力的ではありません。。
一日のトレードリミットを設定してシミュレーションもしてみましたが、結果は芳しくありませんでした。つまり、モデルがそのパフォーマンスを発揮するのは、たくさん買うべきときにちゃんと買う、というのが重要になるようなのです。これは確かに直感とよくあうことでした。経験的にも短期的に高いリターンをあげるというのは、買うタイミングというのがとても重要な気がします。
ですが、このモデルだと僕がやりたいことが実現できません。ですので、モデルの構築方法を一から見直すことにしました。短期的な絶対リターンにもとづいた指標を目的変数を設定すると、タイミングの重要さに引きづられ、”いつ買うか”という意思決定モデルが出来上がってしまいます。ですので、ちょっと設定自体に工夫が必要かもしれません。ほとんどゴールまで来たと思ったのに、またスタートに戻ってしまいました。。
AIを使った株取引で収益を上げるのはとても難しいようだ
Bloombergで以下のような記事がありました。みずほFGが日本株取引にAIを導入するとのことです。
ほう。まさに、僕がやろうとしていることじゃないですか。
もちろん、ひとりFintechの僕は、資金・インフラ・情報・人材の全てにおいて圧倒的にかなわないですが、どんなことやっているかは記事から勉強させていただきました。
以下、抜粋
- 同社のAIシステムには、各銘柄ごとに約5000種類の情報やデータが入力されている。買い注文や約定の詳細などの板情報、株価のヒストリカルデータやニュースの出現頻度、またドル・円相場や金、石油の価格動向などデータを使い、気付くことのできない事象や違和感などといったアノマリーや法則、周期性を見つけ、将来の株価を予測する。
- みずほ証では今回のサービス開始に先立ち、5月から8月の4カ月間で、毎月約500件(300億円相当)の取引を実施、有効性を検証。その結果、運用成績はAIを使わない場合よりも0.01-0.017%改善したという。
- みずほ証は2015年からAIチームを組織し、コンピューターサイエンスなどの分野で博士号を持つスペシャリストなどを外部から起用して開発を行ってきた。現在はアルゴ設計の専門家を合わせ10人程度がディープラーニングを使った最先端のAIによる株価予測に取り組んでいる。
え、ちょっと待って。0.01%-0.017%の改善?は?それだと300億円相当の取引してもたったの300万円しか超過収益がでないって事ですか??そもそもボラティリティの高い株取引の超過収益だから、それって、ほとんど誤差の範囲なんじゃないでしょうか。。
10人の程度の"コンピューターサイエンスなどの分野で博士号を持つスペシャリスト"集団ってどのくらいのコストなの?給料・社会保障・備品・その他分析にまつわるハード・ソフトを考えると一人年間2000万円はくだらないでしょ。ということは10人のチームで年間2億円ですよ。その集団が力をあわせても超過収益ってそれだけなの。。
やはり、AIによる日本株取引で儲けるっていうのは、なかなか難しいみたいですね。超優秀な人材をそろえるみずほFGさえ、こんなに苦戦しているので、僕がうまくいったとしてもまぐれでしかないですね。笑
GMOクリック証券の口座に1000万円入金した
人工知能による株取引モデル構築、なかなか手こずっています。何度、シュミレーションしても目がさめるようなパフォーマンスにはなりません。。
investor-satoshi.hatenablog.com
ただ、そんなこと言っているといつまでたっても先に進まないので、とりあえず証券口座に現金を入金しました。その額どーーんと1000万円!僕にとってはかなり大きい金額です。。これがみるみるうちに増え、いつしか桁が変わっていくことを願っています。
遅くとも9月中には取引開始していきたいです。
AIによる株の売買モデルを開発しているが、なかなか苦戦している
株の売買モデルをAIで開発して、一儲けしようと考えてます。お金大好きです。
investor-satoshi.hatenablog.com
新しいことを勉強するのは楽しいし、分析している感じではかなりうまくいきそうだったので、億万長者になったら何をしようか考えながらワクワクしてましたが、正直いって今は行き詰まってます。。
最初はクロスバリデーションでうまく行っているので油断していましたが、学習データとテストデータを日付が重複しないように設定するとパフォーマンスが格段に悪くなったのです。
investor-satoshi.hatenablog.com
検証結果は、みきり発車で行くにはあまりに不安な感じなので、仕方なく別の角度で分析しています。特定の日の値動きによって過学習していしまうというのを避けるために、長い期間を取るか、対象とする銘柄の数を小さくしようと考えてます。それでもパフォーマンスが改善しなさそうなので、特徴変数を増やすことにしました。
それでなんとかいい結果がでればいいですが、最初の幻のパフォーマンスを忘れられずモチベーションをキープすることがなかなか難しくなってます。。なんとか9月に運用開始できればいいんですが。。
株の短期売買モデルでのクロスバリデーションは有効な検証にはならないかも
統計や機械学習を用いて予測モデルを構築する場合にはオーバーフィッティング(過学習)に気をつける必要があります。手持ちのデータをすべて使ってモデルを構築すると、そのデータにしか適応できないモデルができてしましい、新たな発生したデータには有効に機能しない可能性があるからです。
それを避けるために、クロスバリデーションという方法があります。手持ちのデータをランダムに学習データとテストデータに分けて(たとえば、学習データ:テストデータ=90:10)、学習データのみでモデルを構築し、テストデータでモデルが機能するか検証するというものです。これにより、オーバーフィッティングをある程度確認することができます。
僕の作った人工知能による株の短期売買モデルでもクロスバリデーションを行い、有効性をチェックしました。なかなかのパフォーマンスがでていたので、これは行けるとおもったのですが、念のためモデルに基づいてペーパートレーディングを行っていると予想よりも大分パフォーマンスが悪いことに気づきました。
ペーパートレーディングとは、株の値動きを、モデルどおりに売買すると仮定して、損益を計算するものです。実データをつかったシミュレーションですね。これがあまりワークしなかったのです。よく調べてみたら原因がわかりました。
株の値動きは、極端に動くときは、銘柄によらず一斉に同じような挙動をすることがあります。たとえば、天災や経済に関する悪いニュースなんかがあるときには一斉に投げ売りして、その後に一斉に戻しがあったりします。そうなると、そのパターンを人工知能が過度に学習してまいます。すると、クロスバリデーションにおいては、そのときの値動きに対しては非常に機能するのでパフォーマンスがよく見えますが、実際には似たような動きというのは、ほとんど起こることがなく、銘柄ベースでは十分なサンプルはあるものの、その日の値動きという意味では十分なサンプルがあるとはいえず、別の期間ではワークしないということがあるようです。
実際に、僕は学習データとテストデータをランダムではなく、期間が重複しないように分けると、モデルのパフォーマンスは大分悪くなりました。。とほほ。。ですので、今はモデルの構築のやり直しをしています。なかなか簡単にはいきませんね。。
SVMは計算時間がながく、ニューラルネットワークは答えが出ない。。
株の売買モデルを人工知能・機械学習で開発しようとしている。いろいろなデータをいろんな種類の分析ツールにぶっこんで答えを出し、そこから多数決をとるというのが、基本的なアイデアだ。
もし、モデルの出す答えが以下のようになったとしよう
- ランダムフォレスト:A株とB株がいいよ。
- Xgboost:A株とC株だね。
- SVM:いやいや、C株かD株でしょ。
- ニューラルネットワーク:A株かE株に行っとけって。
そうすると、多数決の結果は以下のようになる。
- A株:3(ランダムフォレスト、Xgboost、ニューラルネットワーク)
- B株:1(ランダムフォレスト)
- C株:2(Xgboost、SVM)
- D株:1(SVM)
- E株:1(ニューラルネットワーク)
で、僕はどうするかというと、まず、A株とC株を買う。多数決の勝者だからだ。残りは分類能力がたかかったモデルを採用する。たとえば、分析結果で分類能力がニューラルネット>SVM>XGboost>ランダムフォレストだったら、この場合E株>D株>B株という風に優先付ける作戦だ。
だが、モデルを作っていると、いろんなことがわかってきた。単純にデータをぶっこめば学習して、答えが出るという単純な問題ではない。
ランダムフォレストとXgboostはすんなり答えがでた
これがどのくらいうまくいっているかどうかは別として、2つのモデルはなんらかの答えを出してくれた。一応、クロスバリデーションをしてみて確認してみたけど、分類能力としては、予想通りで悪くなさそうだ。
SVMは計算時間が長く答えが出ない
SVMで学習させていると、全然答えがでなかったので、色々調べてみるとやはり計算時間が長いらしい。僕はAWSのt2.2xlargeのインスタンスをつかっているが数十万くらいでは何時間も答えが出なかった。それで100レコード、1000レコード、とすこしづつ増やして試してみたら、2000くらいで答えがでなくなった。おいおい、たったの2000でここまで時間かかるのかよ。そんなに長いとお金がかかって仕方がない。AWSでは計算時間が長いとお金がかかるのだ。これでは不安で仕方がない。SVMは諦めようか真剣に悩んでいる。。
investor-satoshi.hatenablog.com
ニューラルネットワークは調整が難しい
通常のモデルでは、学習データをぶっこめばデフォルトの設定で何らかの答えをだしてくれるが、ニューラルネットワークでは自分で構造をきめなければならない。ノードをどのくらい増やすか、レイヤーをどのくらい深くするか、活性化関数になにを使うか、など様々だ。
それで、適当にディープラーニングの構造を作ってみると、ちゃんとした答えを出してくれない。(全部の株を買うとか、何も買わないとかしか出さない。)原理を考えてみると、おそらく、どこかで活性化関数が最大値か最小値に張り付いてしまっているのだろう。
それを原理を紐解いて最適な組み合わせを考えるのは時間がかかりすぎる。だから、試行錯誤で構造を変えながら答えをだしてくれる組み合わせを調整するしかない。これがまた時間がかかる。しかも、この作業はブラックボックスに手を突っ込んであれこれして、なんとなく気に入ったブラックボックスに変える、という作業は知的作業とは程遠く骨の折れる作業だ。そして、まだ、これも解決できていない。
実際に、作業してみると課題はおもったよりも多い。ランダムフォレストとXgboostだけだと流石に心細いので、運用開始までになんとか解決しなければ。。
AI(人工知能)とは単なる複雑な計算モデルにすぎない。
人工知能ときくと、ロボットが考えて何かの答えを出しえいるような事を想像している人も多いと思いますが、実際は単に複雑な計算処理をコンピューターがしているだけです。
たとえば、身長から体重を推定する事を考えます。そこで"体重=身長-110"というモデルを考えましょう。この場合、身長175cmとしてたら、推定体重は175-110=65kgとなります。
これを「人工知能が答えをだしたぞ!」と言う人がいたら、どうでしょう?いやいや結果はもしかしたら妥当かもしれないけど、単に単純な計算をしただけだから。。となりますよね。
このケースと人工知能のケースはなにかというと、"体重=身長-110"という単純なモデルが、大量のデータを処理して複雑なモデルになった、とうだけです。本質的な違いはそこだけです。
大量のデータを扱うのも、複雑なモデルを処理するのも、それなりに高度が技術が必要かもしれませんが、決して頭のいい(あたかも人格のあるような)ロボットが考えて答えを出しているわけではありません。
もちろん、程度の違いだけとはいえ、それはそれですごいことです。複雑な計算モデルによって、AlphaGoは囲碁の世界チャンピオンに勝ってしまったわけですから。
でも、それは「人間のような知能をもった頭のいいロボット」とは程遠いです。画期的な計算モデルが使えるようになった、ということに過ぎません。
それよりも、そういった、計算パッケージの簡易版が、無料で利用できるということはすばらしいことです。そして、これらを使って株の売買の複雑なモデルを開発し、それを利用して金持ちになろうと僕は考えたわけです。笑