はじめに
UKIです。
前回、初KaggleとしてOptiverに参加したポエムを書きました(こちら)。
今回はKaggle第二戦目ということで、G-Research Crypto Forecastingに参加したポエムを書きます。
G-Researchのコンペってどうなのよ
最近は界隈でMLボットが流行っていますね。MLボットを作っている人にとって、このコンペは非常に興味ある題材だったのではないかと思います。本コンペが理由か定かではありませんが、KagglerからCrypto Botterへ人が流入するような現象も見られました。
まずこのコンペの仕様について所感を述べます。
コンペ仕様
- 14のメジャー通貨(ドル建て価格)のリターンを予測する。
- 1分足データを元に、1分毎に翌15分リターンを予測する。
- 単純なリターンではなく、市場寄与分を控除したレジデュアルリターンを予測する。
- 予測対象は相対値ではなく、あくまで絶対値である。
- スコアは各通貨毎にターゲットと予測のCorrelationを計算し、全通貨で加重平均を取る。
この仕様をみて最初に感じたことは、このコンペで良い結果が出せたからと言って実際の運用ですぐに利益は出せないな、ということです。
(1)データの素性について
そもそもこのコンペで使われているOHLCVデータは、どこの取引所のデータか分かりません(もしかするとディスカッションにあったかもしれません)。
OHLCVデータは取引所によって異なり、取引所の手数料体系によって予測しやすさに違いが出ます。当然ですが「予測しやすい=利益が出やすい」わけではありません。「予測がしやすい=執行が難しく収益化が難しい」ということになります(参考記事:予測力と執行戦略について)。
また、OHLCVにはBid-Askが考慮されていないことも重要です。つまりスプレッドが広い取引所ほど買えない価格で買える(もしくは売れない価格で売れる)ことになり、予測結果が本来の実力よりも水増しされる場合が殆どです。
これらの理由からコストを考慮しないCryptoのリターン予測は基本的に容易であり(取れるとは言ってない)、素性の分からないデータでの分析は敬遠される傾向にあります。
(2)予測するリターンの種類
このコンペのターゲットは、レジデュアルリターンです。レジデュアルリターンを予測するということは、実際の運用はロングショートもしくはマーケットヘッジを想定していることになります。
しかし、クリプトでは株式市場のようなマーケット指数先物は存在せず、上記の両手法ともにマーケット分を完全に控除した運用は不可能です。
また経験上、このタイムフレームでは両建ての取引手数料をペイすることは非常に難しく、14通貨ペアではユニバースが狭いため多銘柄による分散効果が小さくなってしまい市場変動分をニュートラルにできないと思います。
これはどうせならBTC建て価格のリターン予測にすべきだったと思います。そうすれば両建てもしくはクロス通貨売買によるBTC変動分のヘッジは容易ですし、単純なロングショートを組むことで予測ターゲットとほぼ同等の所望のリターンを得ることができます。
実のところ、自分は2018年頃にこのようなクリプトでのロングショートを検討したことがありましたが、上記のような理由でお蔵入りしてしまいました(もしも上手くいっている人がいたらコッソリ教えてください)。
(3)コンペ仕様の総括
上記のような理由から、少しだけ参加してみてすぐやめてしまった方も多いのではと思います。Websiteを見たところ、G-Researchは運用会社ではなくリサーチ会社であり(名前の通りですが)、今回のコンペはCambridge Sparkという欧州のAI教育向け企業が協賛となっています。ガッツリ運用に活かすというよりも1つの題材として取り上げた、という印象を受けました。
ただし、こういうものは否定から入るのではなくポジティブに考えるべきです。多銘柄のクロスセクション的なリターン分析はしばらく行っていなかったため、何かしら得るものはないか参加してみることにしました(ただし他の業務を優先したため参加したのは1/28以降の5日間のみでした)。
Time-Series APIについて
本コンペでは、Time-Series APIと呼ばれる、リークを防ぐための予測提出方法が使われています。これは、バックテストで時系列を順番にイテレーションするように、未来のデータが含まれないよう1行1行最新のデータを受け取りながら、予測を作成し提出していく方法です。
これの時間制約がかなり厳しかったです。考えてみればコンペの検証期間は3ヶ月です。1分足の本数はおよそ13万本であり、これをコード実行制限時間の9時間で行う場合、1回当たりの予測時間は特徴量の生成を含めて0.25secです(0.25secで14銘柄分の予測を行う)。特徴量やモデルの規模が大きいと、この制約に収めるのがかなり困難です。
訓練時は特徴量のデータフレームをPandasで計算していましたが、提出時の計算では全てNumpyに書き下して計算を行い、ギリギリで時間制約をクリアしました。
モデル構築とは別の意味で気を遣う必要があったわけですが、これはこれで実環境を想定するのによいかと思いました(実際のトレードでは、足が更新されてからできるだけ早く予測を出すニーズもある)。
LBのリークについて
本コンペは秘匿化されたデータではなく生データを用いたコンペであるため、Public LBでのリークを防ぐ手段がありません(誰でも容易にPublic期間のターゲットを入手できる)。LBにはズラリとフルスコアが並び、全く当てにならない状態でコンペを進める必要がありました。
ただし、これはあまり気にならなかったです。
ファイナンスデータの予測やバックテストをしたことがある人は分かると思いますが、リターン予測は不確実性が大きく、モデリングと選択を繰り返すことで徐々にオーバーフィッティングとなり、実力以上の好スコアが出てしまいます。よってリターン予測のファイナンスコンペではリークの有無に関わらずビッグシェイクが付き物であり、LB自体そもそも当てにならないからです。
むしろ、生データを用いたコンペのほうが実務へ効果的にフィードバックできるため、好ましかったです。
では何か得るものがあったか?
…まあ、やり込みが浅かったので、特段何か新しい知見を得たということはありません。
もう少し言うと、今回のモデリングでは何か難しいトリックを使ったわけではなく、普通に価格系列から特徴量を作成しモデルに突っ込むという、チュートリアルのようなモデリングになりました。前述したように、暗号通貨の予測モデルではこのような所作でそれなりのモデルが作れてしまいます(下図はサブミッション結果。Public LB期間は使わず。スコア0.0323はまあそこそこの値)。
高度なモデリングの例としては、14通貨ペア同士の挙動から市況を表す特徴を抽出したり、タイムシリーズクラスタリングを使ってパターンマッチングしてみたり、OHLCVのデータを畳み込みに掛けてみたり、ハイクラスなデータサイエンティストの方であれば色々と引き出しがあったような気がします。
入賞のゆくえ
入賞するには幸運の加護が必要です。そこそこのモデルを作ったつもりですが、正直入賞できるとは思っていません。
ただ、Privateはサンプル数がかなり多いです。3ヶ月間ずっと1分間隔で14通貨を売買するのです(そんなヤツおらんやろ)。さすがに予測力の低いモデルは振り落とされるでしょう。上位モデルには特徴量やモデルに何かしらのエッジが含まれている可能性が高く、これらのモデルが公開されたらしっかりと知見を頂きたいと考えています。
書いていて、ポエムかどうか分からなくなってきましたね。どうやらポエムという言葉を使いたかっただけのようでした。それではまたファイナンスコンペで会いましょう。