📈

Kedroを使ってNumerai Signals用のパイプライン構築

2020/12/06に公開

Numerai Advent Calendar 2020 6 日目の記事です。

Numerai とは

まず、Numerai について知りたい人は次の記事がオススメです。

ざっくりと Numerai を説明するなら

Kaggle みたいにデータサイエンティストが精度を競い合って株価の予測した結果で実際にファウンドで投資してみたら儲かるんじゃない?

というプロジェクトです。Numerai の場合は特徴量はアノニマイズされているので、Kaggle のコンペ形式で予測値をサブミットして、実際に運用された結果でスコアが計算されます。

Numerai Signals

この前、新しく始まったプロジェクトの Numerai Signals では、Numerai とは違い特徴量は用意されておらず、自分で好きにデータを利用して、実際に世界の株式市場の銘柄が次の 1 週間で上がるか下がるかを予測します。

Kedro

Kedro はパイプライン構築ツールです。
マッキンゼー傘下の QuantumBlack Labs で開発されていて、処理をノード単位でメソッドとして記述してパイプラインで処理を結合していく形式で記述していきます。
パイプラインの実行を並列化できたり、他のプロジェクトでも同じ様な処理が必要な場合などにもノードの処理でまとまっているのでコード・データ・パラメータを管理しておくのに向いていると思います。

特に、今回の Signals だと使えるデータは自由で、今後も新しいデータを追加していく際に管理しておく仕組みを構築しておかないと、後々苦労しそうなのでパイプラインのフレームワークに最初から乗っかっていくのが良いだろうなと判断しました。

ちなみに読み方は開発者の方々は「ケドロ」と呼んでいました。
(私はそれを知るまでずっと、「ケードロ」みたいに伸ばし棒を入れてました)

実際のコード

Numerai Signals ではデータと一緒にサンプルコードがついてくるので、それを参考に Kedro でパイプライン化してみました。

https://github.com/regonn/numerai_signals_kedro

私の方でオリジナルに追加した部分は次の部分です。

  • 学習モデルを LightGBM に変更
  • 特徴量で国のカテゴリーを追加
  • ローカルでの簡単なスコアの表示

Numerai Signals からデータをダウンロードしてきて、 data/01_raw/ フォルダ直下にデータファイルを入れて kedro run をすれば提出ファイルの作成まで実行してくれます。
オリジナルの特徴量も一つしか追加していなかったり、LightGBM のパラメータもデフォルトのままなので、少し改良するとスコアが大きく改善すると思います。
あと、サンプルコードのコメントも削除しているので、適宜サンプルコードも見ておいたほうがやっていることは理解できそうです。

Kedro Viz でパイプラインを図式化

Kedro Viz を利用すると、Kedro でのパイプラインの流れを図式化できます。
今回のパイプラインですと次のようなものができました。

実際の処理やデータに名前が付けられるので、データのフローが理解しやすいですね。

書いてみての所感

未だにのノードの単位をどこで区切るかが迷います。しかし、処理にちゃんとメソッド名(ノード名)で名前をつけてあげると、何をやっている処理なのかが明確になりコードの管理等はやりやすいなと思いました。途中で失敗する場合も考慮すると、もう少しノードは細かくしても良さそうです。

Kedro を使った開発で注意すること

ノートブックだと、コードを追加していくだけなので問題ないのですが、Kedro のノード用にメソッドに切り分けていくと変数のスコープを意識する必要があり、conf\base\catalog.yml のところで、保存した csv を読み込む際の index の指定などが漏れていると、ノートブックでのコードでは動かなくなったりするので注意が必要です。
また、この前 Kedro 公式のイベントがオンラインで開催されて Kedro を開発している人たちに質問ができる機会があったので、以前ハマって気になっていた「一度作った Kedro プロジェクトの Kedro ライブラリのバージョンアップ」について聞いてみたところ、現在はまだまだ開発フェーズのため、破壊的変更もあったりするので、Kedro 自体のバージョンの更新の際などには Change Log を確認する必要があるみたいです。

Numerai 生活

データサイエンティストがデータの処理のみに集中できるようにして、稼ぐ仕組みを作った Numerai は個人的に好きなプロダクトで、これからも色々と Numerai に挑戦していきたいです。
私がなれるのかはわかりませんが、そのうち専業で Numerai だけ活動して生活していける人も出てきたりするのかなとも思っています。

Have a nice Numerai days!

Discussion