Opt Technologies Magazine

オプトテクノロジーズ 公式Webマガジン

仮想通貨の価格予測コンペティションで優勝した話

f:id:diwata:20220221134247p:plain

データ分析コンペティションに取り組んだことについて紹介します。

はじめに

こんにちは! AIソリューション開発部の岩田です。2021年に開催されたデータ分析コンペティションサイトNishikaの仮想通貨予測のコンペティションで優勝した話について紹介します。

データ分析のコンペティションとは

データ分析コンペティションとは、主催企業が与えた課題について機械学習や統計分析を用いて挑むイベントです。主にオンラインで行われ、国外ではKaggle、国内のものではSIGNATE、Nishikaなどといったプラットフォームがあります。競い合うお題は学術研究・マーケティングなど、データの種類としては画像、音声、テーブルデータと様々なものがあります。今回私が取り組んだものは、Nishikaという国内のコンペティションサイトで開催された仮想通貨の価格を予測するというコンペティションです。

仮想通貨予測のコンペティション

概要

仮想通貨コンペティションの目的はとてもシンプルで、4つの仮想通貨(BTC、ETH、ZEC、LTC)の価格を予測するというものです。"価格を予測する"。わかりやすくていいですね。詳細な背景については、コンペティションサイトを参照していただくとして、そもそも仮想通貨の価格が予測できるのか?という挑戦的な意味が込められています。話はそれますが、最近とある界隈では自動取引のためのbot作成が流行っているとかないとかなんて聞きますね(私も参入しようかな、、、)。

最終モデルに至るまで

まずはじめにやったこと

仮想通貨の価格を予測するために与えられたデータは、仮想通貨の価格データ(対数変換後)、Bitcoinによる推定電力量、ハッシュの推定数、米国の株式市場指数、"仮想通貨"の検索数です。まずデータをプロットしてみたり、基本統計量を確認してみたりと探索的データ分析を行いました。
精度評価には平均絶対パーセント誤差(MAPE)が使われていたのですが、精度の評価値の感覚を掴むために適当な値を提出してみることも行いました。いくつか試している中で、価格データの直近30日分の平均値を提出したもののスコアが良いことに気が付きました。金融時系列データでは、翌日の価格を予測するのが難しく、翌日の価格の期待値が前日の価格になるとも言われることがあるそうなので、それと調和的な結果だと思いました。
価格データ以外にも参考データが与えられていたのですが、コンペティションに取り組む時間的な問題のため、今回は価格データだけを用いた単変量時系列モデルを使う戦略にしました。また、価格が大きく上昇・下降している期間があったのでトレンド成分も考慮した方が精度が良くなるのではと考え、上昇or下降のトレンドを組み込んだモデルを中心に試してみることにしました。モデル自体は状態空間モデルの枠組みで構成し、推定には勉強中だった粒子フィルタを用いました。

モデル1

まず初めに試してみたのは、以下の状態空間モデルを用いて表されるモデルです。 価格差の平均値と価格差の標準偏差が時間と共にゆっくりと変化することを表現したモデルになります。これらの平均値と標準偏差に従う正規分布から実際の価格差が観測されるという過程を想定しています。

f:id:diwata:20220131151237p:plain

このモデルで暫定評価が5位前後でした。

モデル2

次にモデル1を価格差の急激な変化に対してロバストにすることを検討しました。モデル1からの変更点は1箇所のみで、価格差が正規分布から生成されると想定していたものをt分布から生成されるとした点です。

f:id:diwata:20220131151308p:plain

このモデルで暫定評価が3位前後でした。モデル1、2は(中野ほか、2017)*1を参考にしました。

チューニング

モデル2には、調整が必要なパラメータが3つあり(sigma_mu, sigma_sig, df)、optunaを用いて学習データに対して評価指標が良くなるように最適化を行い最終版として提出しました。

感想

本コンペティションでは、モデル提出後の実際の価格変動のデータに基づいて最終的な評価が行われました。評価期間中にイーロン・マスク氏の仮想通貨に関するツイートが話題となり、価格が大きく変動する期間でした。モデルを組むときに急激な価格変化にロバストに対応するようにしていたため、安定して推定ができ高成績につながったのだと考えます。あくまで想像ですが、機械学習系の手法を使っていたら急激な価格変化に対応できずに不安定な推定になって大きく順位を落としていたのではないかと思います。苦労した点としては、numbaを使っていたのですが、乱数シードまわりで別途対応しなくてはならないことに気付かず、乱数の再現性が取れなくて焦りました。今回のモデルで実際に仮想通貨を売買して儲けることができるのかについては検証していないのでわかりません。ただ、価格の予測をしたところで、売買の意思決定へつなげるために、もうワンステップが必要ではないかなと思います。
データサイエンティストとして仕事をしているのですが、こういったコンペティションに本格的に参加したことがほとんどなく、細かなテクニックなどを身につける良い機会になったと思います。今後Kaggleなどにも挑戦していきたいです。

Opt Technologies ではエンジニアを募集中です。カジュアル面談も可能ですので、下記リンク先よりお気軽にご応募ください。

*1:中野雅史, 佐藤整尚, 高橋明彦, & 高橋聡一郎. (2017). 粒子フィルタを用いた最適ポートフォリオの構築. 経済学論集, 81(2), 2-30.