💽

Signals のデータ取得と前処理について

2021/12/05に公開約2,500字

これは Numerai Advent Clalendar 5日目の記事です。

今年のカレンダーでは、私が貯めてきたSignalsのノウハウを公開していきたいと思います。二週間後に行われるNumerai Japan Meetup で私が発表する内容とも一部重なる部分がありますので、そちらもご覧いただければと思います。

もくじ

  • Signals へのアプローチについて
  • パフォーマンス≒綺麗なデータ×銘柄数×モデリング
    yfinance で取得したデータにはノイズやバグが結構あるのでちゃんと除きましょう。
    銘柄数はできる限り増やしましょう
    モデリングは丁寧に(こちらは後の記事に)

Signalsへのアプローチについて

Signalsへのアプローチには以下の二つがあると考えられる。

  • yfianance などで取得したOHLCVデータなどからモデルを作って予測
  • オルタナティヴデータを取得してきてそのまま提出

両者のアプローチを取ってきたところ、ターゲットデータを利用する前者の方が圧倒的に安定する。Numerai社は、Signalsにおいてはターゲットの生成に注力しているらしく、ターゲットを利用しないのは不利なのだろうと解釈している。単純なオルタナティヴデータだけからではマーケットを予測するのは容易ではないのもあるだろう。

モデルを作成するアプローチを取るとして、もっとも重要なのはデータ収集と前処理である。筆者は金融のプロではないが、思うに、データの取得という泥臭い作業がもっともバリューを出せるのではないかと思う。そこで、今回は、データ収集と前処理について述べていくこととする。

パフォーマンス≒「綺麗なデータ」×「銘柄数」×「モデリング」

CLEAN DATA ALL YOU NEED!

と誰かが言っていた。まさにその通りだと思う。実際、yfinance で取得されたデータをよく調べると、以下のようなバグがある。

  1. Adj Close が負の値となっている。
  2. Volumeが0 となっている。
  3. ある銘柄の株価が前日比10倍以上となった後、再び元の株価に戻っている。本当に株価があっているのか調べると、実際の株価と異なっている。

1 については、過去のデータになればなるほどひどい。Close 値の方は変化がないようなので、筆者はAdj Close を利用せず、Close 値を利用している。
2 については、Volume が0 となっているデータは利用していない。
3 については、このような銘柄は少数ながら存在している。特定して、取り除けば良いだろう。ちなみに筆者は開発時には気づかなかったのと面倒なのとでやっていない。これから参入する方はやってみるともっと良いモデルができるかもしれない。
これらの地道な作業でモデルのパフォーマンスは劇的に上がる。

銘柄数

これは多い方が圧倒的にパフォーマンスが良い。できるだけ多くの銘柄で学習と予測の提出をしましょう。
この定性的理解は、筆者は大数の法則にあると考えている。例えば、51%の確率で株価の変化を予測することができるモデルがあったとしても、100銘柄のときよりも5000銘柄のときの方が、予測が安定するだろう。前者では52-49=2銘柄多く予測できているが、後者では2550-2450=100銘柄も多く予測できていることとなる。Signalsは単純な銘柄の上げ下げの予測ではないが、根底にある考えは同じだろう。実際、corr とcorr sharpe は銘柄数を増やすことにより劇的に上がる。
また、これは特徴量生成の記事で詳しく述べるが、あまりにも銘柄数が少なすぎる期間のデータは学習データから省いた方が良いと思われる。大数の法則が十分に働かず、ある種のノイズとなっていると解釈している。検証データからも除いた方が良いだろう。
また、取得できる銘柄には生存者バイアスがかかっていることにも注意したほうが良いだろう。実際、後のモデリングの記事でも述べるが、予測結果のヒストグラムは、少なくとも筆者の場合は若干売りシグナル側に偏っている。この点は、昔からデータを収集していた人たちに理がある部分だと思われる。

モデリング

これについては、後の記事で詳細に述べる。意外にも、みなさんが寝るときに利用しているであろう硬い枕の知見が役に立つ。興味のある方は、読まれると、新たな知見が得られるのではないだそうか。

最後に

今回は取り急ぎ、文字ばかりとなってしまった。画像やコードなどについては、後々記事に追加するかもしれません。それではみなさん良いNumerai Life を!

Nuemrai or Die!

Discussion

ログインするとコメントできます