⏱️

Numeraiのtraining dataの周期構造について

2021/12/07に公開

この記事はNumerai Advent Calendar 2021 の7日目の記事です。

https://adventar.org/calendars/6226

はじめに

この記事では、Numeraiのtraining dataの特徴量の並び方に見られる周期的な構造について簡単にまとめます。また、それに関連して考えたことなどを記述します。

免責

  • ポエム度の高い内容となっていることにご注意ください。
  • 記事中の引用についてご連絡無しに行っております。問題等ある場合、申し訳ありませんがツイッターまでご連絡ください。

新データの周期構造

この記事を書いている2021/12/4現在、Numeraiのtraining dataは、特徴量数が310である旧データ(Legacy Data)と呼ばれるデータセットと、特徴量数が1050で新データと呼ばれるデータセットの2種類が利用可能です。新データリリース時の以下の公式のanalysis and tipsにて、特徴量間の相関について説明されています。

https://github.com/numerai/example-scripts/blob/master/analysis_and_tips.ipynb

ここで明らかにされている通り、新データの1050特徴量は、相関の高い(内容が似ている) 210種類×5周期=1050特徴量の周期的な構造になっています。公式のフォーラムやチャットでは「pattern」や「block」といった言葉が使われているようですが、この記事では各blockを「周期」と呼ぶことにします。

参考① murenohaさんによるRelated listing

https://twitter.com/murenoha/status/1439840636807434245?s=20

参考② 新データの第1周期と第2周期の相関のヒートマップ

新データのの第1周期(0~209)と第2周期(210~419)の特徴量の相関のヒートマップ

自己相関と見紛うグラフになっています。同様のグラフの全体版は前述の公式のanalysis and tipsにあります。

参考③ UKIさんご指摘のfeature_corrの積み上げが強い5つの特徴量

https://twitter.com/blog_uki/status/1436582070151639040?s=20

これらの別格的に強い5つの特徴量は、以下のように210×5周期の位置に配置されており、同じ種類の特徴量であることが予想されます。

209  fl_unvaried_social_bangkok
419  fl_haziest_lifelike_horseback
629  fl_exorbitant_myeloid_crinkle
839  fl_undivorced_unsatisfying_praetorium
1049 fl_lofty_acceptable_challenge
(各間隔:210)

新旧データの比較

当初、旧データの特徴量が新データへ引き継がれていることは公式からアナウンスされていました。しかし、1対1の対応表などはありませんでした。これについて、kunigakuさんが以下の記事にて対応表を作成されました。これにより、新データを使いつつ、旧データ時代に作成したモデルを生かし続ける道が拓けました。

https://zenn.dev/kunigaku/articles/20210910_numerai_old_new_feature_map

上記の記事では、新データと旧データでidが共通であることを使って、共通idのデータにおいて相関が最も高い新旧特徴量を見つけるという方法で対応表が作られています。

新データの周期的な特徴量の並びに対して、このkunigakuさんの対応表を当てはめてみると、以下のようないくつかのことが分かりました。

  • 旧データは155種類×2周期=310特徴量の構造になっている。
  • 新データ210種類、旧データ155種類であるので、新データで追加された新規の特徴量は210-155=55種類である。
  • 旧データの155種類×2周期は(殆どが)新データの第1周期と第4周期にそれぞれ配置されている。

(当時の筆者のツイート)

https://twitter.com/xX4Q7a26311hVFO/status/1442068769791045632?s=20

周期構造とは何なのか

各周期の同じ位置にある相関が高い特徴量同士の違いは何なのかという事について、最初に考えた推測は、「指標の集計期間をずらしたもの」でした。例えば、価格の移動平均であれば、10日移動平均、20日移動平均…というように、集計期間で複数のバリエーションを作ることができますが、同じ10日移動平均でも、少し過去の時点での値を別の周期の特徴量として入れておけば、周期間の比較によって時間変化の情報が取れるようになります。ファンダメンタルズの指標であれば、1つ前の期の数値を入れるといった具合です。

もしこのようにした場合、直観的には、直近の数値を使った特徴量が最も未来の予測力が強く、過去の情報は予測力がどんどん劣化していくと考えるのが自然かと思います。ところが実際のところ、周期毎にtargetとの相関の優劣を調べてみると、直近のデータが含まれているはずの旧データに比較して新規データで追加された周期の予測力が特に弱いということはないようでした。

(参考)各周期毎の特徴量とtargetの相関の絶対値の平均

旧データの周期①、④より、むしろ追加された周期の方が数値が高くなっています。

周期① 周期② 周期③ 周期④ 周期⑤
0.00362 0.00375 0.00377 0.00359 0.00368

周期の違いは、データの取得の時間などに関する違いではなくて、元は同一のデータの何らかの変換のバリエーションではないかというのが今の自分の考えです。そうでなければ、現状のように多種多様な特徴量全部に5周期を統一的に与えるのは難しそうです。時間変化の情報(変化率)などは、それ自体を1つの種類の特徴量にする方が直接的です。

新旧特徴量の対応表

前述のkunigakuさんの対応表を使って210×5の形に並べて旧特徴量の種類別に色分けした新旧特徴量の対応表を共有して本記事の終わりとします。この表をみると、旧特徴量で稀に、第1周期、第4周期以外に配置されているものがあり、かつ、大抵は同じ行の第1周期または第4周期に空席があります。しかし、法則を綺麗に当てはめる為だけ移動させることはしておりません。

以下のリンク(Google Drive)からダウンロードしてください。

共有①(エクセル形式)

共有②(csv形式)

ご指摘等ありましたら、Twitterまでご連絡いただければ幸いです。

Discussion