🗂️

Numeraiのモデル紹介(旧Dataset)

2021/12/06に公開

はじめに

この記事は、Numerai Advent Calendar 2021の6日目の記事です。
https://adventar.org/calendars/6226
旧Dataset(特徴量310個)の弊モデル群は、そのモデルを確定させてから1年程度経過しました。比較しても良さそうな長期データになっているので、改善のヒントが得られるかも?と思い整理してみました。

モデルの概要

以下、ROUND292受付時点(2021/11/29)での成績のスクショ、及びモデルの対応表です。

Model 更新R Type 特徴量 Validation Neutralization
USIGMA 235 Ridge+GR A Holdout(trainとvalidを入れ替え)
USIGMA2 235 xgb ShuffleCV4のensemble C train+valid Shuffle 4-Fold
USIGMA3 230 Ridge+ET B Holdout あり
USIGMA4 230 lgb ShuffleCV4のensemble B train+valid Shuffle 4-Fold
USIGMA5 228 Ridge+ET A Holdout(trainとvalidを入れ替え)
USIGMA6 230 xgb seed10個のensemble B Holdout(trainとvalidを入れ替え)
USIGMA7 235 Ridge+ET B Holdout(trainとvalidを入れ替え)
USIGMA8 230 lgb B Holdout(trainとvalidを入れ替え)
USIGMA9 230 xgb ShuffleCV4のensemble C train+valid Shuffle 4-Fold
USIGMA10 235 4, 5, 7 のensemble - -
Typeについて、GRはGradientBoostingRegressor,ETはExtraTreesRegressorです。モデル確定前にNNを検討していた時期がありましたが、他のモデルに比べて成績が改善しなかったため現在は使っていません。

特徴量A~Cについては次節で説明します。

Validationについて、Numeraiから与えられたtraining_dataで学習してtournament_data(valid)でテストするのが通常の方法で、USIGMA3のHoldoutはそのようにしています。その他のモデルは、trainとvalidを入替える、または全て結合してからシャッフルする方法を使っています。モデルの取捨選択をしているうちに通常以外の方法が多く残りました。最近のデータを使って学習した方が良い感触があります。理由は定かではありませんが、"中和"されているとはいえ過去と最近で使われているTickerの組合わせが異なるので、学習するなら最近のほうが良いのかな?と考えています。

Neutralizationについて、USIGMA3はその予測値に対し、メタモデル想定として初期特徴量(310)でXGBRegressorした予測値を使ってneutralizeしたものです。validationが異なるので単純な比較はできませんが、Type, 特徴量が同じUSIGMA7と比べてMMCは改善しているようです。その他、特定の特徴量を使って行うfeature neutralizationは検討していません。

特徴量

旧Datasetは特徴量名から6つのグループに分けることができるので、それを元に新しい特徴量を生成しました。私が検討した特徴量は合計で約1400個になりますが、後の特徴量選択で除外されて使っていないものも多くあります。一部を除いて紹介します。

  • 初期特徴量(310)
  • すべての特徴量の平均値(1)
  • すべての特徴量で値が1の数(1)
  • 各グループ内の平均値(6)
  • 各グループ内で値が1の数(6)
  • 各グループ内平均値との差分(310)
  • 各グループ内平均値との差分の絶対値(310)
  • ラウンド毎で各特徴量のターゲットに対する相関係数C_{t}を計算
    →各C_{t}の前後ラウンド間の相関関係数C_{t,t-1}を求める
    |C_{t,t-1}|が大きいものについて、前ラウンドから次ラウンドのC_{t}を予想する回帰式を作成
    →特徴量xの予想C_{t}が正ならx、負なら値を1-xとする新特徴量を生成(約100)

--- ここまでが特徴量セットA ---

  • メタモデル想定として、初期特徴量(310)でXGBRegressorした予測値(1)
    exampleモデルそのままではなくて、パラメータチューニングしています。

--- ここまでが特徴量セットB ---

  • 初期特徴量(310)同士の和、差、積(約300)
    全ての組み合わせだと大変なので、後述の特徴量選択で抽出したものだけで実施

--- ここまでが特徴量セットC ---

単純な比較ができる組み合わせとして、USIGMA5と7は1つの特徴量「メタモデル想定の予測値」の有無だけの差になっています。CORR, MMC, FNC全てにおいてUSIGMA5が勝っているので、この特徴量の追加は余計だったようです。

特徴量選択

GBDTのFeature Importanceも試しましたが、以下の手順で特徴量選択を行っています。

  1. 似た特徴量を除外(相関係数>0.95)
  2. ラウンド毎で各特徴量のターゲットに対する相関係数C_{t}を計算し、|シャープレシオ|, |平均値|, メタモデルとの相関の低さでぞれぞれ並べてトップから機械的にN個抽出
  3. Nx3個(重複あり)とは別に、C_{t}の累積和をグラフ化し見た目(安定上昇 or 下降)で除外または追加

これはfeature_charismaの例ですが、手順2で並べた順番にグラフを描画し目視で除外、または追加抽出しました。定量的にやりたい方は、最近のラウンド側に重み付けをする等で似たような抽出になるかと思います。

最後に

モデル変更をしていないUSIGMAのRank推移を見て分かる通り、現状のRankは"まぐれ"の産物です。そのうち沈みそうなので、安定的に強いモデルを作りたいです。

USIGMA11以降では、成績が向上するという噂の新Dataset(特徴量1050個)を使ったモデルを放流しています。新Datasetは特徴量名がランダムなため今回紹介した特徴量生成は使えませんが、クラスタリング等を使って自前でグルーピングすれば使えます。また、メモリ不足でGBDTのFeature Importanceすら厳しい!という環境の方は、紹介した特徴量選択で予め絞ってしまうというのも一案かもしれません。

いつも受信ばかりで発信が少なかったので、つらつら書いてみました。
Numerai新規~ベテラン参加者の皆様の一助になれば幸いです。

Discussion