🌅

ファクターモデルって何それ美味し...儲かるの?

2022/09/19に公開

「...Numeraiってどう実際に運用してるんだっけ?」

Numerai Tournamentに参加して早X年, Leaderboardをたまに眺めてキャッキャしているだけの猿だった私は, 最近Numerai CEOであるRichardのこのtweetを見かけました。

https://twitter.com/richardcraib/status/1570470044064436228?s=20&t=0jybEQCvO33u220oR53p3w

いやメチャメチャ強いやんけ!

2020, 2021年は米株買っておけばOK, 2022年は急速な金融引き締めで米株含むリスク商品は大幅な下落, という市況がアホみたいに変わる中でも, 継続して高いパフォーマンスを出せていることがわかります。

この高いパフォーマンスは注目を集めており, Numerai fundへの資金流入も絶好調のようです。

https://twitter.com/richardcraib/status/1570505051378163712?s=20&t=0jybEQCvO33u220oR53p3w

リチャード様, ワイの年金もついでに運用していただけませんか?

この市況でfundがこうもイケイケだと, 冒頭の疑問が出てこざるを得ません。

もちろん, 自分もNumerai参加者の端くれなので, Numeraiがmarket neutral fundであり, コンペを開催し参加者から集めた(世界株対象の)リターン予測値をいい感じにアンサンブルして実運用で使っていることは知っています。

しかし, Numeraiが内部でどのように運用を行っているかは, 外部からではわかりようがありません。

それでも,

「(Numerai含む) 機関投資家が一体どのようにポートフォリオのリスク管理をしているのか?」

という基本のところは, この機会に押さえておくと, 良いパフォーマンスを出すコツがわかるのでは?と思い至りました。

現在日本でも個人がAPIを使ってシステムトレードを行える環境がジョジョに整いつつあり,

https://zenn.dev/gamella/articles/af7985c7b95bd2

個人投資家として関心のある方も多いかもしれないなーと思ったので勉強しました。

何をかと言うと, ずばり, ファクターモデルについてです。

ファクターモデル

自分は機関投資家じゃないのですが, それなりの額を株で運用する機関投資家は「ワイはVTuberが好きだからAnyc●lorに全ツするお!」とはいきません。複数銘柄を組み合わせたポートフォリオを作成します。

その際, ポートフォリオに含める銘柄間の分散共分散行列 (covariance matrix)が気になります。平たく言えば, 銘柄間の相関があまり高すぎると, いい時期はウハウハですが何かあると全部仲良く死んでしまうからです。2022年のナスダックとか, 暗号資産とかね...。

よりリスクの少ないポートフォリオを作るために, ファクターリスクモデル (factor risk model) というものを考えます。ここでは, ある銘柄のリターン(騰落率: r) は, 銘柄間で共通のファクター (f) と, その銘柄独自の動き (μ)の和によって説明されると考えます。

ここで言うファクターというのは, 例えば以下のようなものが挙げられます。機械学習モデルに入れる特徴量だと考えていいかと思います。

  • 利益成長率 (Earnings growth)
  • 出来高 (Share turnover)
  • モメンタム (Momentum)
  • ボラティリティ (Volatility)
  • 流動性 (Liquidity)
  • 株価収益率 (Price earning ratios)
  • 時価総額 (Size)

こういうのってどの銘柄にもそれぞれ値があって, おおむね同じ感じで値動きに影響を与えてそうですよね(利益が増えていれば値上がりするだろう, みたいに)。

このとき, ポートフォリオn番目の銘柄のリターンr_{n}は, ファクターfのエクスポージャー(影響の度合い)をXとすれば, 以下のように数式で表現することができます。

ただの線形回帰モデルですね。

ここで切片μスペシフィックリターン (specific return) と呼ばれ, ファクターに依存しないその銘柄独自のリターンを表現しています。

こうして銘柄ごとにファクターリスクモデルを作ることができたとして, ポートフォリオとしてのリターンR_{P}はどうなるかというと, n番目の銘柄のポートフォリオの重みをw_{n}としたとき, 全銘柄分リターンに重みをかけて足し合わせればOKなので以下のようになります。

このポートフォリオはどれだけ銘柄間で共通のファクターに影響を受けているんでしょう?

その指標であるファクターエクスポージャー (factor exposure: X^{P}) は, あるファクターkについて, リターンと同様に以下のように表現できます。

(1.2), (1.3)で同じ銘柄の重みw_{n}を使っていることに注意してください。

(1.2)式に(1.1), (1.3)を入れると, ポートフォリオリターンR^{P}は,

  • (銘柄共通の) ファクターリターン
  • (銘柄固有の) スペシフィックリターン

に分解できることがわかります。

右辺の左項がファクターリターン, 右項がスペシフィックリターンですね。

なんでこうやってポートフォリオリターンが銘柄共通の成分と銘柄独自の成分に分解できると嬉しいかというと,

  1. ファクターリターンはスペシフィックリターンと相関しない
  2. スペシフィックリターン同士で無相関

であるという仮定を置けば, ポートフォリオリターンR^{p}の分散が以下のように計算できるからです。

ここでF_{kl}は2つのファクターf_{k}, f_{l}の共分散です。

難しい数式はさておき, 作成するポートフォリオの分散(リスク)が計算可能であることは, 機関投資家として嬉しいだろうなーというのは想像できるかと思います。

そして, Numeraiのような機械学習を用いて投資を行う機関投資家は, モデル予測値からファクターリターンを除去してスペシフィックリターン成分のみを用いてポートフォリオを構築することで, より個別銘柄特有の動きを捉えた高いパフォーマンスが期待できるポートフォリオが作れるようになります。

「どうやってモデル予測値からファクターリターン除去するんだお!?」

と思われるかもしれませんが, feature neutralization (直交化) というNumerai参加者には特に有名な手法があります。

日本が誇る伝説のシステムトレーダーUKIさんも, kaggleで開催されたJPXコンペで直交化がめっさ効いたとおっしゃっていました。

https://qiita.com/blog_UKI/items/efba4ac7b1543a9bef85

直交化がどういうものか知りたい方は, 一時期Numerai Tournamentを蹂躙していたyaakuさんの記事が神なのでそちらをご覧ください。

https://yaakublog.com/numerai-feature-neutralization

ファクターモデルを作るときに注意すること

ここまで読んでいただいた方の多くは, YouTubeで料理番組を見た後のように「自分でも作れそう!」って思っていると思います。でも実はこれ結構大変です。

ファクターモデルにおいて, 銘柄リターンは銘柄共通のファクターリターンと銘柄独自のスペシフィックリターンに綺麗に分けられていますが, 綺麗に分けるためには, 使用するファクターによって銘柄共通リターン成分をほぼ完全に説明できている必要があります。

一方で, ファクターリターンは銘柄固有のスペシフィックリターンとは相関してはいけないので, ファクター候補を弱いものでもあれもこれもとモデルに入れるのは良くありません。

...じゃあどうやって使うファクターを選んだらいいのよ!?

と思われる方に, 一応の目安があります。Factor stability coefficientというもので, ある月と次の月(月次でポートフォリオを入れ替える場合)のファクターエクスポージャーX_{k}^{t}, X_{k}^{t+1}の相関係数です。以下のように表現されます。

ここでv_{n}^{t}は, 銘柄nの時間tにおける回帰係数です。

あくまで目安ですが, この相関係数が0.8を割ると, ファクターの銘柄への影響が時間によってコロコロ変わることになるので, あまりファクターモデルには入れない方が良いかも, と判断します。

またお気づきのようにファクターモデルはただの線形回帰モデルですので, 使用するファクター間に多重共線性 (collinearity)があるとファクターごとの係数推定がうまくできません。そのため, 一般的な手法ではありますが, あるファクターをその他のファクターで回帰しVariance Inflation Factor (VIF)を計算することで, もしVIF < 10ならファクターモデルに入れる, というように一応は一定の基準で使用するファクターを選ぶことができます。

ファクターモデル自分で作るのめんど...誰かタスケテ...ってなった人へ

Numeraiをやろう!

Numerai Tournamentでは(匿名化されてるからわからないけどたぶんいい感じに選ばれた)特徴量と(たぶんいい感じにスペシフィックリターン抽出済みの)ターゲットを運営が与えてくれます。

なんと言うことでしょう!

つまり上でぐだぐだ説明した面倒な処理は全部Numeraiが事前にやってくれていて, 参加者は機械学習モデルを与えられたデータに対し学習させるだけなんです!

ありがとうRichard!

その結果出てくるモデル予測値をそのまま提出してもいいし, 使った特徴量をファクターと見做して直交化して, よりスペシフィックリターン成分純度を上げてから提出してもいい。

ここまで読んで下さった方でこの記事の内容が全然わからない人もいるでしょう。

でも大丈夫です!

こういう金融独自の事情を何もわからなくても, というかそういうのをむしろ意識しないで機械学習モデリングに取り組んでほしいというのがNumerai運営の意向ですので, 興味が湧いたら↓の記事などを参考に始めてみるのも良いかと思います。

https://jp.docs.numer.ai/numerai-tnamento/new-users

Numeraiが投資対象としているのは世界の大型株5,000弱銘柄ですが, 個人でこれだけのポートフォリオを組んで運用するのは資金的に無理ですよね。そういった点でも, 個人がNumeraiに参加する意義はあるかなぁと思います。

......え?資金はある??

そういった方は投げ銭をしていただけると私がNumeraiで溶かします。

ではhappy trading life!

引用

https://www.semanticscholar.org/paper/The-Barra-US-Equity-Model-(-USE-4-)-Methodology-Menchero-Orr/4fc8d22a4d9e22427be83984c5420ec2ca6ae387

https://www.slideshare.net/ssuserbe0bf0/ss-162851743

Discussion