はじめに
みんなが同じ夢を見る。あーあ金が無限に増えないかなぁ。それは人類の根源的な欲求ともいえる。僕たちは億万長者になりたいのだ。そしてその欲望にとりつかれたエンジニアは同様に皆こう考えるのだ。
AIに投資させれば無限に儲けられるのでは?
私もそう思った一人です。私がその夢をあきらめるまでの2~3週間を共有したいと思います。僕が主張したいのはAI投資が儲からないということではありません。ただ僕はこう思ったからあきらめたという事実です。いけんじゃね?と思った方はどうぞ僕の屍を超えて、AI投資で稼いでください。そしたらやり方をこそっと僕に教えてください。こそっとね。
何が僕を駆り立てたのか?
金が欲しい。これは前述したように、全人類が抱く欲望です。例にもれず私も思ったわけです。なんか寝てるだけで金稼げねぇかな...そう思ったわけです。
そんな折に、日課の記事探索をしているとこんな記事が目に入ってきました。
UKIさんのこの記事です。これを読んだ時に、 これはいける... そう思ったわけです。こちらの記事を読んでいただければわかるのですが、説得力が大層あります。
統計分析というのでしょうか?詳しいわけではないので、わかりませんが、確固たる理屈があって書かれている記事なのです。そうです。僕のようなものにやってみようかな...と思わせるには十分な説得力だったのです。
というかやってみようかな...どころではなく、やるか...!ぐらいの勢いだったと記憶しています。そして私は情報収集を始めました。その中でさらに私をやる気にする事実が発覚します。それは情報が多くないことです。
...え?ふつうそれはやる気にはならないのでは?そう思うでしょう。間違いではありません。それがために私はやる気になったのです。例を考えてみます稼げる投資AIを作れたとして、あなたはそれを公表しますか?しませんね。その情報は独り占めすればいいわけです。つまりみんなが実際に稼いでいるから、情報が出回らない。そう私は判断したのです。ここでもちろんみんなができなかったから、情報が出回らないという可能性もありますが、考えないこととしました。面白くないので。
そうしてこうして私はアマゾンの奥地のような開けていない場所に迷い込んでいくことになったのです。
やったこと
まぁ何はともあれ、気分は海賊王になる夢を携えて樽の船に乗って大海原に旅出たルフィです。pythonは出来るがデータサイエンスは昔ちょっとかじったくらいだし、株は投信とかはやってるけど、個別株の戦略とか何も知らないわけです。
ただ夢と根拠のない自信があるわけです。
そんな私は情報を集め始めました。彼を知り、己を知らば、百戦危うからずです。まずは参考にしたUKIさん...ここでは先生と呼ばせていただきましょう。今後もお世話になるので...
まずは先生の記事を読み漁りました。
この辺から読み進めて、とりあえずあらかた読みました。その後の感想は「...これイケるな」でした。
ところがどっこい先生は具体的な特徴量などのやり方は一切教えてくれないのです。それがAI投資可能疑惑をどんどん深めていくことになります。本当に可能なら教えないはずなのです。
じゃあ実際に作ってみっか
色々読み漁り、本を幾冊か買い、知識自体は入れました。そうして実際に作ってみました。まずはいったんプロトタイプを作ることが私のマイフェイバリットです。ミニマムなものを作成して、そこから肉付けをしていくのが私の好みです。機械学習におけるミニマムは何だろうと考えたとき、私の考えは説明変数、目的変数でした。
目的変数とは推論したい対象で、説明変数は推論したい対象の要因となりうる変数のことと私は思っています。私はそこまで詳しいわけではないので、正しくないと思います。正確なことを知りたい場合はご自分で調べていただけると助かります。
とりあえず作るプロトタイプでは最小限の説明変数でとりあえず実装を目指しました。
データは先生の記事を見習って以下のjquantsを使用しました。
使用したデータはミニマムにtopixLarge70とcore30にしました。おおよそ100程度のデータ量です。
またある日の終値-始値を目的変数とし、それ以前のデータを用いて説明変数を作成しました。
説明変数
ミニマムにした説明変数はテクニカル指標とファンダメンタル指標をある程度混ぜたものにしました。
- PER
- PBR
- MACD
- RSI
- 配当性向
以上を説明変数としました。各々の意味の解説は割愛します。私が説明するよりもgoogle先生やgpt先生のほうが正しいと思います。
これらを選択した理由としては一番ノーマルそうだからです。奇をてらったものではなく、比較的ノーマルなものを入れて判断しようと思いました。配当性向を使用したのはjquantsにて一番簡単に取れた配当系の指標だったからです。
目的変数
終値-始値を目的変数としました。売るタイミング、買うタイミングまでを予測するのは難しいと先生の記事から私は感じ取り、市場の開始とともに株を買い、終わりとともに株を売るというシステムにしようと考えました。
そのため、終値-始値を目的変数にしました。
使用した回帰モデル
Lasso回帰を使用しました。大先生が使用していたので、あまり何も考えずに使用しました。
結果
MSE: 26801.90424094344
Coefficients: [-2.22810148e+00 1.59344383e-03 1.25574576e+00 2.35161840e+00
7.93734793e-02 -4.41860288e+00]
考察
まずよかったこととしてはプロトタイプができたことです。これに改良を加えることができるので、とりあえず十分だと考えました。
評価指標の問題点
問題点としてはMSEが指標になりづらいところです。そもそもMSEとは最小二乗誤差の略なのですが、これが今回の場合の評価指標では適切でないことが一番の問題と考えました。この値は実際の値と推測した値の二乗を加算したものですが、いまいち26801といわれてもよくわからないという特徴があります。同じデータを使用していくばくかの改良を加えて、比較するのであれば有用でありますが、今回のケースではこの指標がいいのか悪いのかがわかりません。
そこで次は実際の値と推測した値の正負の一致率を評価指標にしようと考えました。正負の一致率は今回の場合は株価が上昇するか、下降するかをあてられたかということにほかなりません。若し仮にそれを100%にすることができるのであれば、100%の勝率を誇ることができるわけです。またそこまでは無理でも、これが50%を超えることができれば、ある程度の確率で勝つことは出来るわけです。
しかしながら99%あてることができても、1%がその利益を上回るくらいの損失があれば、勝てるモデルを作成することは出来ないわけです。そこである程度は実際の値と推測した値が近いことは必要になると考えました。
なので正負の一致率とMSEの両輪で評価指標とするのが適切であると考えました。
特徴量の洗練
現状では特徴量が多くはないのが問題でした。先生の記事では39の特徴量と書いてあったので、大幅に足りないのが分かります。私が今回使用した特徴量5つです。多くの特徴量を突っ込んでみる必要が有ると考えました。
少なすぎるデータ量
100程度じゃあまりにも少なすぎると考えました。この対策としては会社数を増やすことと、別時間軸でデータを取ってくる方法の二軸が考えられます。
リベンジマッチ
プロトタイプを作成したことで、対策すべきことが分かりました。あとはその対策をガンガンしていくだけです。この時点ではもう私はウキウキでした。なんかもう出来そうじゃね?そんな妄想で有頂天でした。
前回との差分
データ量
今回はmid400も入れ、加えて特定の日の終値-始値を目的変数としていましたがその特定の日をたくさん作りました。具体的には過去五年において、すべての日の終値-始値を目的変数として、それ以前のデータで説明変数を構築しました。これにより、1銘柄当たり1000近いデータを作成することに成功しました。
特徴量
先生のこのjquantsのコンペのコードを参考にしました。このコードは決算直後の株の動きを予測する者ですが、一般の状態の時でも適用可能なものと考え、いくつかの特徴量を流用しました。数が膨大なので、すべてを列挙することは避けますが、
50近い特徴量を使用しました。
評価指標
前述した考察のように正負の一致率を導入しました。
結果
符号の一致率: 50.81%
考察
特徴量を洗練もさせていないし、雑に作っただけではあるが、符号の一致率が50.81%なのは未来がないように感じました。ちょっと変えたりすると45.81%になったりして、本当に50%の間をウロチョロする感じで、未来を感じませんでした。作成したモデルは上がるか、下がるかも推測することができなかったのです。
まとめ
だから僕は投資AIの夢をあきらめた。しかしながら私があきらめただけであって、投資AIが不可能であると私は主張したいわけでは決してありません。ただそれ相応のデータサイエンス系の知識と株のドメイン知識が必要になるといいたいのです。一朝一夕で簡単にできるようなものではなかったということが私は主張したいのです。
私はまだ若いので、やりたいこともやるべきこともまだたくさんあります。この投資AIを作成することに全力を注ぐような時間は私にはないと考えました。そういった意味で私は投資AIを作成することをあきらめました。私の雑な皮算用ですが一年は勉強と実装期間が必要になって、きちんと収益化できるのはもっと後になりそうな感じがしました。
不肖私いいわけですが、やりたいことがたくさんあるのです。たかが金儲けのためにそこまでの時間をかけたくないのです。あくまでこれは私の意見です。金儲けに一年死ぬほど頑張る価値が有ると思うお方はやってみるといいと思います。
挑戦するお方のために役に立つかわからない私の感覚を言語化します。株をミクロで見るとランダムウォークで、マクロでみると上昇という一つの傾向が見える気がします。私の肌感覚としてはこのマクロとミクロの境目に機械学習が入り込む余地があって、金を稼ぐ余地がありそうだなという感覚でした。またそのランダムウォークにも人間の意志が介在するので、微妙なほころびがあって、その隙をつくような手段が必要になりそうだなという印象でした。
是非私をステップにして、最強の投資AIを作り上げてください。出来たときに、一ミリでも私に感謝の念があるならば、こそっとやり方を教えてください。そうしてもらえば私が記事を公開したかいがあるってもんです。