MLBotを作る際に気をつけるべき事
この記事はBotterアドベントカレンダー2024の19日目の記事です。
「仮想通貨botter Advent Calendar 2024」
— Hoheto (@i_love_profit) November 3, 2024
我こそはという方、ご参加ください。基本的に仮想通貨botに関するトピックであれば何でもOKです。
ただし、過度に利益志向な内容にならないように注意しましょう!今年も神記事が現れますように!https://t.co/w6zhKuTrle
はじめに
あいかわ(@xHibiking)と申します。末端のBotterとして偶に情報発信しています。
この記事では私がML Botを作る時に意識している事や初心者の頃に気をつけるべきと思うことを書きました。
私自身、本業は(一応)AIエンジニアであり、MLBotに類する開発を個人及び業務にて行なっています。業務上の守秘義務がある為、MLBotに関するアウトプットはほとんどした事はないです。この記事でも具体的な成果物の記載はないので実績不透明な奴の戯言だと思って話半分に聞いていただけたらと思います。時期が来たら発表できる機会があるかもしれないのでその時が来ることを楽しみにしています。
ここでの記述はあくまで私の考え方であり、根拠や裏付けなどは無いです。また直感ベースでかなり大雑把にまとめていることをご了承ください。
導入
定義
この記事にてMLBotとは機械学習モデルを用いて特定の金融商品の価格を推定し、その推定を元にトレードを行うスタイルのBotであると定義します。つまり取引対象となる金融商品の価格変動リスクを内包したトレードスタイルであるという事です。
筆者のMLBotに対する見解
この記事を書くにあたりまず私のMLBotに対する見解を述べます。
結論から言うと、基本的にMLBotは初心者にはおすすめできないと考えています。特にリスク管理という観点で他の手法に比べてかなり難易度が高いと思います。ここでいう初心者というのは機械学習及び仮想通貨どちらに対しても平均以上の知識を有していない人と定義しています。平均がどの程度かはみなさんの物差しに任せるものとしますが、少なくともどちらかの領域である程度の自信がある場合に取り組むとより良いのではないかなと思います。
一方でMLBotはある程度大きな資金を運用する事に長けており、他の金融市場への転用が比較的効きやすいことや流動性の大きな市場にて安定したBotを作る事に成功した場合は他の種類のBotに比べるとエッジの生存期間が長いという印象があります。ただ、リスクを十分に考慮したモデルを作るまでの道のりを考えるとかける時間に対して割に合わない事の方が多いです。仮想通貨界隈にはもっと幅広い収益化方法があるのでぜひBotterアドベントカレンダーを全て読んでBotへの取り組み方に関して思案してみることをオススメします。実際私自身も個人開発のBotは簡単な自動化で終わってしまうことがかなり多いです。
また、MLはあくまでも手段に過ぎないという事を常に意識するようにしています。稼ぐことが目的であるBotにおいてMLは稼ぐための手段であり目的ではありません。通常、Bot作りはエッジの調査から始まり、手動Botや簡単に自動化されたBotなどが一号機としてできて、それの改良版のような形で必要に応じてMLを取り入れるというのが自然な成り行きだと考えます。よって初心者がいきなりMLBotを作るというのはその時点で手段の目的化が為されている可能性があるかもしれません。必要に迫られた時に始めるのが最も良いアプローチだと思います。
MLBotは難しいと言及した一方で初心者ほど挑戦しがちなBotだとも思っています。最近は生成AIによるAIブームが再加熱されている背景もあり、MLBotはトレードBotの新規窓口として機能しているのではないでしょうか。
かく言う私もRichmanbtc世代を自称しており、青本を読んでMLBotに期待を持った一人なので、MLBotで一攫千金を志す方々の気持ちは痛いぐらいわかります。
さて、総合的にみて初心者のMLBotへの挑戦は否定的な立場ではありますが、どこかのタイミングで挑戦すべき時が来る事もまた事実だと思います。ここから先ではMLBotが難しいとされる理由を挙げ、それに対応する為の考え方をいくつか挙げてみようと思います。
MLBotの問題点
ここからが本題です。なぜMLBotはなぜ収益化することが難しいのでしょうか。世の中の色々なタスクがAIに置き換えられているのに・・・。
MLBotが難しい原因はそれに類する論文を読めば最初の方に書いてあります。効率的市場仮説がどうとかノイズ比が高いとか非定常性があるだとか・・・。
しかし私はそういった細かい話を全部ひっくるめて予測に必要なデータの取得及び加工難易度が高い!!ということに集約してしまっていいのではないのかなと思っています。つまり、価格を予測するのに必要な情報量というのはあまりにも膨大であり、それを収集・整理するのは困難を極めるという事です。十分な情報量を持ったデータを集めることができない場合当然モデルも正しい学習を行うことができずにオーバーフィッティングやアンダーフィッティングの原因となってしまいます。
ここでいう情報量というのは学習サンプル量の事ではなくデータの複雑さの事です。つまりBTCの価格予測タスクにおいて、本質的に関わっている情報というのはBTCの過去の価格データだけはなく、その他の金融商品の価格や世界情勢、SNSなど多種多様であると考えるのが一般的であり、それらのデータを全て取得すること及びそれを解釈可能・学習可能な状態まで処理するのは非常に難しいということが私が主張したい事です。逆にこれらが可能であるならば予測は可能となります。
"神はサイコロを振らない"というアインシュタインの言葉がありますが、私は金融市場においてこの立場をとっており、もしこの地球上の情報が全て取得できて、かつ神の頭脳を持ったモデルがあった場合未来は完全に予測可能だと考えています。
このような考え方を基にすると、MLBotが正しく予測できない原因は必要な情報が十分に用意できていないからだと考えるのが自然では無いでしょうか。
分かりやすく他のタスクに置き換えてみます。自動運転AIを作る際に車を中心とした360度の映像を用意することができずに前方60度分くらいの映像しか用意できない場合を想像してみてください。このモデルの予測力はかなり落ちる事が簡単に想像できます。横に車がいるかどうかはデータから直接は分からないので、車線変更をしたい場合に車線変更の安全度推定を行ってもノイズが非常に高くなりそうです。これと同じような事が初期段階のMLBotによく起きる現象だと思います。こういった場合、改善の方向性としてモデル自体の調整をするのではなく視野角を広げる努力をした方が効率的であるという事がこの記事で一貫して伝えたい事です。
モデルの学習能力がデータ量に対して追いついていない場合はデータが十分量あってもモデル部分がボトルネックとなってしまう可能性はありますが、近年の計算能力を考えるとこちらが原因となって学習が進まない事は考えにくいのでは無いかなと思います。もちろん断定はできないですが、私的にはモデルの学習が正しく進まないのはほぼ100%情報量不足が原因であると考えて差し支えないと考えています。
必要な情報をカバーするには
さて、私はMLBotの難しさの原因は情報量不足であると結論付けました。
つまりこの記事では情報量不足を解決することができれば予測は(ある程度)可能であるという立場にあることになります。
ではどのようにして情報量不足を解決できるのかをいろんな角度から考えてみます。
データを沢山集める
は?という感じですが、愚直に必要なデータを集める事は単純な解決策としてもちろん有効です。というよりは最終的には必ずここに辿り着きます。
BTCの予測をする際にBinanceの1時間足のohclvデータだけで予測できると考えるのはあまりにも楽観的すぎます。ティックデータの方が情報量としても多いですし、他の金融市場の影響を強く受けるはずなのでFX・債券市場・株式市場などの価格も影響するとしてモデルに組み込むが当然のような気がします。さらにはXなどのSNS系の監視も必要かもしれません。トランプやイーロンマスクの発言に仮想通貨市場がよく反応するのは皆さんもご存知の通りだと思います。他にもETFの流入量なんかも最近は特徴量としてよく効くかもしれません。さて一旦ここまでのデータで十分量だと仮定しても、多種多様なこのデータをどのようにして集めてくるのか、そしてどのように処理してモデルに学習させるのかを考える必要があります。
すると機械学習の知識以外にもデータを貯めるためのクラウド周りの知識や金融時系列に対する理解など、様々な能力が必要になります。
さらにこの段階でデータを集めつつ、予測したい指標との相関などを前処理等を通してみていくことになります。ここである程度自分の中で定性的に説明できるような処理を施して納得感のある特徴量を生成したいところですがこれができるまでには泥臭い試行錯誤が必要不可欠です。
非常にめんどくさいですが、この作業は確実に必要になってきます。
影響力が小さい金融資産を選ぶ
私がよく利用している考え方です。今のBTCの影響力を考えると初心者がいきなりBTCの予測を行うことはオススメできないです。もちろんBTCのデータは他の通貨よりも整備されていることが多く、初心者が挑戦しやすい環境が整っているという観点での初心者優遇ポイントはあるのですが、それはあくまで参入障壁という意味でオススメなだけであり、予測難易度としては全くオススメできないです。結局のところ整備されているデータには何のエッジもないことがほとんどです。(多くのプレイヤーがそのデータを前提として考えているのでよっぽどうまい特徴量エンジニアリングをしない限りエッジとして活かしづらい)
一方で人気でないアルトコインはBTCに比べて情報の複雑度が低いことが予想されます。この場合、前述のデータ収集の難易度が下がり結果的に取得できる情報の網羅性が増します。これにより予測難易度が下がる事が予想される為初心者の方はアルトコインの予測から入ると良いと思っています。注意点として極端にマイナーすぎるのもまた問題があるかもしれません。最近はPump.funなどで草コインが日夜大量生産されていますが、そういった草コインは一人のトレーダーによって簡単に価格操作されてしまいます。つまり個人の影響力が高いということです。画面の奥の人の思考を情報として取得するのは困難を極めます。
重要なことは価格の合意形成が取得可能なデータからうまく説明できるような市場を選択することだと思います。一般的にBTCのように参加者が多すぎる商品はカバーすべき情報が多すぎてデータの取得が難しいですし、草コインのように参加者少なすぎる商品は個々人の意思が反映されやすくこれもまたデータとして取得が難しいと考えられます。もちろん草コイン市場であっても、相手のBotの動きからその思考を定量化できるのであればその情報から予測することも十分可能でしょう。
Botの成績が良くなってきて段々と運用資産が増えていくと、マイナーな市場では流動性の問題で自身の運用資産をフルで活かせなくなってくる段階がやってくるかもしれません。この時に初めてもう一段上のランクの商品に手を伸ばす必要が出てくると思います。つまり、本当は(簡単な市場である)アルトコインを触り続けていたいのだけど、資金効率等の問題で利益率が悪くなってきているので仕方なく難易度の高いメジャーコインに移っていくという感覚です。金融市場全体で考えるとアルトコイン-> BTC->国内株->海外株-> FXのように難易度が上がっていくと考えているので、流動性の限界を感じた時に初めて次のステップに移行してみるのが自然なMLBotの開発フローになると思います。そういう意味では初心者や上級者などは関係なくBotはアルトコインから入るべきだと思っています。(どのアルトコインが適切なのかという問題はありますが、、、、)
少し話は逸れますがAIポメラニアンさん(@AI_ASUKAchan)がHyperliquidのPURRによるスキャルピングで成功したという記事が個人的にかなり共感できます。ここで当時PURRの影響力はかなり限定的であったということが書かれています。AIポメラニアンさんは他にも似たような影響力の限定的な市場を選んで取引しているようです。MLBotを作る上でもこのような考え方は踏襲できると思います。
予測時間軸を短くする
違う視点から影響力を限定する方法を考えると予測時間を短くする事もかなりの効果があるはずです。1日先の予測をする場合その間のファンダ要因も考慮しないといけませんし、単純に市場参加者が膨大になりすぎて、難易度が跳ね上がります。一方で1秒先の予測にするだけで同じ金融商品でも難易度は大幅に下がります。
ただし、予測時間を短くするには一つ大きな弊害があります。それが相対的に執行コストが大きくなってしまうことです。短い予測になればなるほど期待リターンが下がってしまう為に執行コストが相対的に大きくなってしまい、予測力が高くても収益としてはマイナスになってしまうことが考えられます。
ここら辺の話はモデルの予測力とはまた別軸の話で実運用上の問題ですがモデルの予測力と執行コストを天秤にかけてリスクリターン的に最も良い時間軸を選択する必要があります。
ただ、一つ言えることは時間軸は短ければ短いだけ予測が簡単になるので開発初期の段階ではできるだけ短い時間軸の予測モデルを作成するのが妥当だと言えるでしょう。前述の市場選択と同じで利益面で仕方なく難易度を上げざるを得ないという意識を持つ必要がありそうです。
予測対象を変更する
今までは価格を直接予測するというテーマを前提とした時に、よりマイナーな市場に移行することによる影響力の限定化考えましたが、今度は特定の市場を使う事を前提とした時に予測テーマを変更することで影響力を限定する事を考えてみます。大抵の場合でBotで予測したい対象は将来の価格であることが多いのではないでしょうか。もちろん価格を予測のが一番シンプルでわかりやすいのですが、タスクとしては難しい場合が多いです。一方でボラティリティの予測は価格予測よりは簡単であることが多いです。であればこういった簡単なタスクへの置き換えによって収益化は行えないかを考えてみるのも一つの手かもしれません。
例えば、FundingRateは市場の過熱感と強く関係がありそうです。市場の加熱感をうまく予測することができればより効率的にFRをいただくことはできそうなので予測タスクとしてボラティリティを採用する意義があるかもしれません。
MLモデルの選択
さて、データに関して議論をしてきました。私が初期段階で一番重要だと考えるのはデータの適切な収集だと思っているので、ここで本題は終わるのですが、一方でMLBotはデータを取得した後に学習するフェーズが残っています。
実際には大量のデータをどのように前処理するか、モデル選定やハイパ
ーパラメータ選択などで大変な作業が待ってます。(最終的にはここが一番しんどい部分でしょう)
ではどのようなモデルを選択するべきかという問いも残るのかなと思うので今回はざっくりモデルのメリットデメリットを考えて見ようと思います
教師あり学習
最も一般的な学習方法として認知されている学習方法だと思います。初めてMLに取り組むのであれば前処理などに時間をかけてモデルは簡単なブースティング木系から始めても良いと思います。慣れてきたら徐々にニューラルネットなどに取り組むと良さそうです。ボトルネックになるのはモデル部分ではなくデータ部分である事がほとんどだと思うのでモデル自体は比較的簡単なところから入っても大きな問題にはならないと私は考えています。
もちろんモデル改善の方が性能改善に寄与する割合が大きくなるタイミングもいつかは現れるはずですが、そこまでいくにはかなりの時間がかかると思っていいと思います。
強化学習
強化学習はエージェント(ここではMLBot)とエージェントが動ける環境(ここでは取引市場)が存在しているようなタスクで有効な学習方法です。
よくゲームなどで利用されることが多いです。ゲームはプレイヤー(エージェント)の行動によってゲーム(環境)上の敵が倒れたりアイテムが出現したりと相互作用が明確に存在するからです。
トレードも同様にトレーダーの意思決定が市場に影響を与えるものとして考えた時に強化学習は有効な学習方法であると考えることができます。
もう一つ強化学習を採用する上でメリットとして強化学習は累積報酬というものを最大化するような学習を行うということです。
これはいろんなことに応用することができますが、トレードに関していえばポジションを閉じるか保持するかを毎タイムステップで行うことでポジションの保持時間を市況によって柔軟にしたりできそうです。教師あり学習よりもより人間に近い動きができるイメージかもしれません。
一方で単純に強化学習を適用するにはいくつか問題もあります。
そもそも強化学習はエージェントの動きが環境に影響を与えることを前提で話されています。しかし、一般的な個人トレーダーが市場に影響を与える事はありますでしょうか?少なからず影響力はあるでしょうが、無視できるレベルに小さいと考える方が自然なように思えます。であれば強化学習はエージェントが市場に影響力を十分に与えそうな場合にのみ有効であると考えられます。先ほどの話とつながりますが、もしも時間軸が短くかつマイナー市場を狙う場合などは相対的な自身の影響力が高くなることが予想されるので有効な戦略の一つになるかもしれないですね。
正当なモデルとして選択される可能性はあると思いますが前提条件を満たすのに少しクセがあり、独特な設計が多い分難易度は上がりそうです。
かなり前ですが、magitoさん(@regolith1223) が強化学習に関する記事を挙げているので参考にしてみてください。
教師なし学習
あまり選択肢としては入らないと思いますが、、、
最近話題に上がる「生成モデル」はよく教師なし学習が採用されたりしています。
AutoEncoder(AE) 系のモデルや拡散モデルなどがこれに該当するかなと思います。
例えば将来N本分のヒストリカルデータを生成したりする場合には一つの選択肢として入るかもしれません。とはいえ、最初に取り組むタスクではないと思います。
話はそれますがモデルベース強化学習がしたくて世界モデルとして生成モデルを採用したし場合には教師なし学習も一つの選択肢になりそうです。
(個人的に興味があるというだけです)
まとめ
私の考えをまとめます。これからMLBotに挑戦したい人は
自身が取得かつ加工できるデータの中で説明できる市場を選択する。
マイナーであり時間軸が短いほど予測はしやすい。
一方で流動性による資金効率の問題や取引コストなど実運用上の課題が存在するのでそこは予測力とのトレードオフになる
3における実運用上の壁に当たった時に初めてより難易度の高い挑戦する必要性を考える
を意識することをおすすめしたいです。私も常に意識するようにしています。
MLを触り始めの頃は「Deepでポン!」的なイメージを持ってしまうことがあると思います。この言葉は学習用データを"適当な"機械学習モデルに突っ込んでみて"なんとなくいい感じに"学習してもらうという意味の言葉ですが、MLBotにおいてデータの質というの最重要な部分です。情報源を増やすことで幅が予測の幅が広がりますし、加工の仕方で本質的な情報をうまくモデルに流し込むことが可能になります。ここを怠っていい学習モデルを作ることはできません。つまり”楽”にモデルを作る事は不可能なのです。
もしも機械学習にこれまで触れた事がないのであれば機械学習モデルを作るためのコツを知るためにKaggleに参加してみることをオススメします。オンラインゲーム感覚で楽しめる部分がありトレードが好きな人はKaggleにハマる人も多いと思います。
少し前に始まった金融系のコンペティションもあります(Kaggleで金融系のコンペは運ゲーと言われがちですが、、、)
個人的には最近始まったゲームAIコンペが気になってますが、時間がなので参加はしてないです。
こういうのをやると良くわかりますが、性能をだすには予測対象への深い洞察力が求められます。モデルがどれだけ最新のかっこいいものでも結局優れた洞察力の前では無力なのです。
日本人のKaggle Grandmasterの小野寺さんのインタビュー記事は非常に面白いです。Topプレイヤーほどデータとよく睨み合い泥臭い作業をしている事がよく分かります。そういった意味ではMLBotを作る上で必要な知識は機械学習よりも仮想通貨のドメイン知識を有している方が有利だと私は考えています。
終わりに
少し長くなってしまいましたが、ここまで読んでいただきありがとうございました。MLBotに限らずBotが勝てるかどうかは市場選びに大きく左右されます。話としては抽象的でつまらないものだったかもしれませんが非常に大事な部分かと思い記事にさせていただきました。
最近はレンチアタック等が怖い世の中なのであまり成績などの公開はしないという方向性に切り替えていますが、新しい知識などの共有等は細々とアウトプットを続けていく予定ですので良ければSNSのフォローお願いします。
MLBotを作る際に気をつけるべき事|あいかわ ひびき(Hibiki Aikawa) @xHibiking #note
— あいかわ/ Aikawa (@xHibiking) December 18, 2024
アドカレ19日目の記事です。よろしくお願いします! https://t.co/KKDWO16BmX



コメント