ここまでの6本の記事により、機械学習システムを使って株価を予測したい人にとって有用なヒントのいくつかを提示できたと自負している。今回は、もう少し基本に立ち返り、初心者がやらかしがちな凡ミスを紹介したい。
このシリーズは、 機械学習を使って株価を予測したい人に役立つヒント集のつもりで執筆している。「こうすると失敗する」といった例や「こういったアプローチで取り組むのは有効」 という例を示していくものである。
前回:人工知能で株価を予測したい人へのヒント集(6):未来人によるチート
上がると予測するだけ
極端な話、例えば第二次安倍政権が発足した2012年末から2015年夏くらいまでの日経平均株価のように、明確に上昇トレンドが見られるデータを教師データとして採用した場合、よほど慎重に学習させない限り「ひたすら上がると予測するだけのシステム」が生まれやすい。
特に強化学習などを利用した場合に起こりやすいが、採用した教師データに明確に上昇トレンド(もしくは下落トレンド)があれば、一方向を予測し続ければ当たる確率は高いので、あまり意味のないシステムが出来上がるケースが多い。
当然、正解率だけではなく混同行列を利用して適合率や再現率を見なければならないという話は出てくるが、それだけではなく、そもそも機械学習に利用する時系列データの選び方自体に注意しなければならないが、これが意外に難しい。
上昇トレンドも下落トレンドも含むようなデータを採用したり、開始時点と終了時点の株価水準が同じくらいのものを採用したり、といった方法は誰でも思いつくが、単純にトレンドフォロー手法を採用するシステムが出来上がるなど「労多くして功少なし」の状態に陥りやすい。
もっとも、筆者の投資スタンスとしては「トレンドがある時はトレンドに乗るべき」と考えているので、必ずしも全てのケースで人工知能に任せるべきとは思わない。
- 明確なトレンドが無い時を中心に学習させる
- トレンドフォロー時に予想を外した時の罰則を大きくする
- トレンド転換のタイミングを目的変数とする
など様々な工夫が考えられる。
直近の株価を出力するだけ
騰落ではなく株価自体を予測しようとする場合にありがちなパターンである。株価を目的変数とし、平均二乗誤差を基準とすれば、直近の株価を後追いして近い値を出力していればかなり誤差が少なくなる。しかし、実際の株価からは遅れているので、それを使って投資をしようとしてもまるで当たらないというミスがよくある。
これの対策には色々と考えられる。例えば、
- 株価ではなく騰落を目的変数とする
- 1期後、5期後、10期後など複数の株価出力で評価する
- 強化学習的な手法で一定期間の投資パフォーマンスで評価する
などが考えられる。複数の株価出力で評価する場合は、単純に過去の株価を追随しているだけではコスト関数の誤差が下がりにくいので、この問題を是正できることがある。但し、上のはあくまでも例であり、
- 何期後の出力を使うべきか
- 出力は何個にすべきか
- 1期の単位は何が良いのか
などは開発者の工夫次第である。
関連記事:人工知能で株価を予測したい人へのヒント集(1):キリの良い数値という固定観念
ターゲット漏洩
集めたデータを必ず教師データ・交差検証データ・テストデータに分け、教師データで学習したモデルをテストデータで評価するというのは常識である。未知の情報のカンニングとなるからだ。しかし、こうした基本的なことは分かっていてもターゲット漏洩(target leakage)を引き起こすケースは少なくない。
ターゲット漏洩(データ漏洩<data leakage>とも言うが、セキュリティ事故と混同しやすい)とは、予測する時点で利用できないはずの特徴量をモデルに組み込むことである。
流石に株価を予測するのに間違えて株価を説明変数に入れる人はいないと思うが、以下のようなケースはありがちである。
- 経済指標やリセッション入りなど「後から発表される情報」をリアルタイムに入る情報として利用
- タイムゾーンが異なる地域の情報を間違えて処理
- 計算能力が追いつかないほど直近の情報の利用
1と2は完全に凡ミスである。1は例えば、10月の雇用統計が発表されるのは11月だが、10月の情報として利用してしまうといった凡ミスはありがちである。頭では分かっていても、データベースに10月と入っているのを、そのまま処理してしまうことはベテランでもやりがちである。10月の時点で10月の雇用統計データが手に入れば荒稼ぎができるが、そんなものはまともな手段では手に入らない。2も同様で、タイムゾーンの処理を間違え、未来の情報を使ってしまうということはありがちである。
3はプロセスとしては、ちゃんと「予測する時点で手に入る情報」を使っている。しかし、実際に機械学習によって生み出したモデルを投資に活かす場合、
- 情報公開の把握
- 情報の取得
- 情報から必要なデータを抽出
- データをモデルに当てはめて予測
- 予測に応じて注文
という一連のプロセスを経る必要がある。特に短いスパンでトレードを行うことを想定しているのであれば、かなりの速度が求められる。モデルを作ってしまえば4の処理はすぐに完了するが、 画像なりPDFなり、場合によっては音声や映像など処理に時間がかかるような情報を使って分析している場合、 1~3に時間がかかることが多い。
データを集めて機械学習を行っている段階では速度は関係ないが、いざ投資に活かすには注文まで迅速に行えなければならない。これらを瞬時に実行できる計算資源があるのなら気にする必要はないが、そうでなければ実質的に予測する時点で利用できないはずの特徴量を利用していることと等しい。筆者はこれもターゲット漏洩の一種と捉えるべきと考えている。
凡ミスをあなどらない
最初の2つ(「上がると予測するだけ」と「直近の株価を出力するだけ」)については、ある程度経験を積めば最初から回避することができると考えられるが、最後の「ターゲット漏洩」は慣れていてもやらかしがちであるので注意が必要である。
最初から運用面までの事を考えて開発計画を立ててデータを集めていくことが重要で、これによってターゲット漏洩も回避しやすくなると思われる。
前回:人工知能で株価を予測したい人へのヒント集(6):未来人によるチート
次回:そのうち