マーケットAI開発プロジェクトにおけるプロジェクトマネジメントのエッセンス
マケデコ( https://discord.gg/xg6P5RXwaa )という主に株式関連のマーケットAPIを活用し、分析や予測モデルを構築しているbotterのコミュニティをJPX総研様、AlpacaJapanの協賛で運営しています。今日はそのアドベントカレンダーの一環で過去に自分が実施してきたマーケットAI開発プロジェクトにおけるプロジェクトマネジメントのエッセンスをまとめてみたいとおもいます。
何をやってきたか
Alpacaが創業してから2016年から2020年にかけて、様々なマーケットAI開発プロジェクトを担当してきました。主なクライアントは、機関投資家・メガバンク・ロボアド・ヘッジファンドなど様々です。全体で20プロジェクト程度を2020年までの5年間で実施したと思います。以下はその中で公開された一部のプロジェクトです。
ロボアドの設計から短期為替予測モデルの開発、機関投資家との1週間後予測モデルの開発などかなり多岐に渡るプロジェクトで、それぞれPMを担当してきました。
結果が出たものもあれば、当時の技術では難しかったものや、数年頑張ったけど満足なパフォーマンスをライブでは達成できなかったものもあり、一つ一つのプロジェクトに本当に全身全霊で挑んでいきましたが、実際に結果が安定的にでているものはやはり超短期なモデルやポートフォリオ系のモデルになってきます。上げ下げ予測にフォーカスしたモデルはほぼ満足な結果が出ませんでした。このあたりマーケットAI開発プロジェクトを20個くらい担当してみて、学んだことをまとめていきたいと思います。
なお、現在は証券システムの開発やプロダクト設計の統括を主に会社では担当しており、いくつかのお客様に特別に頼まれたときだけJ-QuantsのようなデータサイエンスのプロジェクトでPMを担当させていただくことがあります。
プロジェクト開始時にまずやるべきこと
おそらく機械学習を利用するプロジェクト全体に言えることですが、プロジェクトの目標設計が非常に重要になります。
機械学習に求められることとして基本的には2パターンあるとおもっており、一つは人間が頑張ればできることを機械学習により自動化するパターン、もう一つは人間が頑張ってもできないことを機械学習で実現するというパターンです。で、マーケットAI開発関連はほぼ間違いなく後者をやることになります。
近年後者の人間では達成できない成果がかなりでてきた印象が強いですが、2016-2020年当時はそこまでモデルを良くすることは困難なことが多かったです。また、今思えば、こうやればこの問題はもっとうまく解けただろうなーといういわゆる機械学習のノウハウも広まっておらず、特に特徴量エンジニアリングや学習ラベルの作成は試行錯誤していました。
ただ、複数回のプロジェクトを実施していく中で、わかってきたことがあります。まず最初にやるべきことは メトリクスの設計 です。ご存知の通り、現在機械学習はメトリクスさえきちんと定義できれば、それをどのように解くべきかはKaggleなどのプラットフォームや様々な論文でかなりノウハウは広まっています。2016-2017年当時はこのノウハウもあまりなかったのですが、それでも当時からメトリクス設計の重要性は変わりませんでした。このあたりのノウハウはKaggleの問題設計でも記載しています。
順番としては以下のような流れになります。
- メトリクス設計をプロジェクトの最初のタスクにする、これがある程度確定するまではプロジェクトをすすめない
- 合意したメトリクスを評価するビジュアライゼーション手法を決める、特に時系列方向の動きは人間が直感的に把握するのは非常に難しいので、どのビジュアライゼーションが最も直感的にこれは良いモデルかを理解するためのビジュアライゼーションが必須となる
- ライブ化した場合の意思決定のしきい値を検討しておく。あくまで参考にするだけなのか、ポジションを変えるのか、などなど、そもそもモデルができたときにライブの利用方法を決めておきます
メトリクスの設計というのはどういうことかというと、たとえば解こうとしている問題が、ポートフォリオなのか、方向の予測なのか、リスク管理なのか、金利の予兆管理なのかでやりかたはそれぞれ変わるのですが、順位相関、単純相関、上げ下げ精度、複合的なスコア、非線形な類似度(これはどちらかというと研究領域であることが多い)などなど、どのメトリクスが高まれば、どのくらい業務に貢献するかのマッピングを整理するところから始まります。ここをきちんとやらないとだいたいプロジェクトの後半で挫折します。
そして、あとはビジュアライゼーションです。これはめちゃくちゃ大事です。イメージとしてはこちらの記事のような感じのバックテストのビジュアライゼーションをマーケット全体の様子とか、過去の予測における分位点的な強度とかをすべて確認できるレポートを作ります。
これはモデルの出力とマーケットデータを入力として、Notebook形式で常に出力できるようにしておくと非常にはかどります。ベースラインの作り方
メトリクス設計と各種ビジュアライゼーションがきまったら、いよいよモデルの開発を開始します。体感的にはここですでにプロジェクトの3-4割くらいの時間をつかっていることが多いです。そのくらいモデル開発前の準備は大事です。
モデル開発は まずベースラインを作ります。これはプロジェクトにおいて、何がどの程度効果があるか、どのような手法を追求するべきかを把握するためです。また迷ったときの羅針盤となります。
ベースラインの作り方として、一番いいのは現在運用に利用している各種モデルを公開してもらうことなのですが、これは基本的には公開してもらえません。現在運用しているモデルはどんなにシンプルなモデルでも厳しいライブテストに耐えた、ノウハウの塊なのです。
というわけで、自分でベースラインの設計をまず行います。ベースラインですが、まず機械学習モデルをベースラインにするのはやめましょう。機械学習モデルを実際の運用に導入することは以下のような課題をもたらします。
- スタティックに計算できる特徴量を運用に利用している場合と比較すると、他の人にロジックを説明することが非常に難しくなります
- 仮説に準拠し設計された特徴量であれば、実際にうまく行かないときも何らかの理由を考えることは容易ですが、機械学習による複雑なステップを通して構築した予測モデルがうまく動かなくなったときにその理由を推測するのは簡単ではありません。
- 特徴量設計で良い結果が得られないまま、機械学習モデルを活用すると、仮説が良いのか、モデルのチューニングが良かったのかの区別することが難しくなります
- 機械学習モデルを利用する場合、学習・検証・テストのために、データを3分割する必要が生まれます。大量の過去データがあるのであれば問題ないのですが、実務的にはそこまでの長い期間のデータは用意できないことがあります。
- 実際の運用時に再学習のタイミングなど機械学習モデル特有の問題を考慮する必要が生まれます。
機械学習を運用に活用することは少なくとも上記のような問題を発生させます。機械学習を用いた予測モデルの研究はこれらを考慮してもなお、利用する価値があることを証明しないといけません。このとき、ベースラインを機械学習モデルではなく、特徴量エンジニアリングベースのモデルにすることで、何が良くなっていて、何が悪くなっているかの比較が非常に行いやすくなります。つまり、仮説構築と特徴量エンジニアリングをまず可能な限り頑張り、その結果を機械学習モデルで伸ばしていくとプロジェクト全体が進めやすいです。
なお、2020年くらいまででは、ディープでポンを実際のプロジェクトで行ったことはないのですが、2022年の今ならなんかうまくやれる気もしないでもないです。あと、ChatGPTを活用したプロジェクトとか個人的にはぜひやってみたいです。
ベースライン完成後の進め方
感覚的にはここでプロジェクトの6割くらいが終わっています。メトリクスとビジュアライゼーションとベースラインがおわったら、あとはやっと楽しい、楽しいモデル構築です。なお、残りの2割は資料まとめになるので、モデルを作る部分は全体では2-3割の時間しか使わないです。
これは研究計画と一緒です。なにを実施したら、どのメトリクスがどのように良くなったかをアイディアごとにまとめていきます。アイディアはできるだけ独立のアイディアをまずリスト化し、アイディアに対するメトリクスとビジュアライゼーションの改善を資料にまとめていきます。過去にJQuantsの資料で見せた以下のような特徴量とラベルに対する性能の計測のスプレッドシートみたいなアプローチを取ります。
JQuantsの問題設計でも特徴量とラベルでさまざまなパターンを検証していきメトリクスの傾向(上昇幅や分散)を見ていきました
このあたりは、機械学習の研究計画の大事な部分ですが、いろいろと書籍もあると思うので、ぜひ効果的な研究計画の作り方を勉強してください。
そして、プロジェクトの結果の受け止め方
そのプロジェクトの結果、運用で活用する場面が明確にできたり、商品化をすることができたらこれはハッピーです。体感として3つか4つに1つくらいのプロジェクトはそういう結末になります。上で紹介したプロジェクトとかはその例です。
でも、残念ながらうまくいかないプロジェクトもあります。このうまくいかないプロジェクトというのはどのようにうまれるかというと、例えばローンチした次の月にCOVID-19ショックがおきて、マーケットのすべてのレジュームが切り替わる場合です。泣けます。このあたりはもう正直人事を尽くして天命を待つ、くらいの気持ちでいくしかないのですが、腐らずに実際に発生したマーケットデータのドリフトをQQプロットとかで確認し、モデルへの影響をSHAPのとかで調べたりします。それでもだめなときはあります。
どれだけ頑張っても、作ったモデルのアイディア自体が陳腐化してしまったときは諦めてクライアントに謝ります。なお、モデルによっては、モデルがワークしなくなったこと自体を検証するのに半年とかかかる場合もあって、これは泣けます。こういうときは、既存モデルと向き合いつつ、ウラで新しいアイディアを検証しておくのがおすすめです😎
さいごに
ブログを書き始めると、いつも長くなりがちなのですが、今回も非常に長くなってしまいました。
ただ、こういう話を書いた理由として、マケデコでもよく、どういうふうにモデルを作っていけばいいかとか、どういうふうにアイディアを考えていけばいいか、その基本的なすすめ方に、実際にプロジェクトを進めてきた経験が役立つかと思ったからです。
このような予測モデルの話にご興味あれば、ぜひマケデコ( https://discord.gg/xg6P5RXwaa )に参加して、いろいろ @tomo にメンションいただければディスカッションできると思いますので、ご参加お待ちしております!
Discussion