【ファイナンス機械学習 解説】著者の解説スライドを日本語でまとめてみる (5/10)

はじめに

『ファイナンス機械学習 』著者のMarcos Lopez de Prado氏が自身のサイト『ファイナンス機械学習』に関する講義スライドを全編無料公開している。
『ファイナンス機械学習 』については、
botter界隈やシストレ界隈では
・『ファイナンス機械学習 』を抱いて寝る人
・『ファイナンス機械学習 』を枕にして寝る人
・『ファイナンス機械学習 』で枕投げをする人
が続出しているらしく?、
幅広く読まれているようだ。

このシリーズ記事では、 著者の了解を得て、上記の講義スライドを日本語でまとめる。 英語だとどうしても読むのに時間がかかったりエネルギーを多く使ってしまう、という方向け。全10回あるが、今回はその第5回のスライドを取り上げる。ログインのような画面になる場合は、メールアドレスとパスワードを入力してSSRNのアカウントを作ればダウンロードできる。
本記事はQuantCollege管理人の学習メモであり、
管理人は必ずしもこの分野の専門家ではない点につきご留意頂きたい。

参考文献

ファイナンス機械学習の続編とも言われている、同じ著者の新しい本はこちら。
(2020/11/12更新) ついに和訳版が出たようだ。

ファイナンス機械学習とその原著はこちら。

第5回のスライドに書かれていること

第5回のスライドでは、ベットサイズ決定、バックテストの危険性、バックテスト手法、などが書かれている。全部で27ページ。

今日学ぶことは何? (p2)

  • ベットサイズ決定
    • 予測確率を使う
    • ベット平均化とサイズ離散化
  • バックテストの危険性
    • ミッション・インポッシブル:完璧なバックテスト
    • 完璧なバックテストでさえ、たいてい誤りである
    • いくつかの一般的な助言
  • バックテスト手法
    • ウォークフォワード
    • 交差検証
    • Combinatorial Purged 交差検証
    • 合成データを用いたバックテスト

ベットサイズ決定

予測確率を用いる (1/3) (p4)

  • \(p[x]\) をラベル \(x\) が起こる確率とする。この確率の予測を使ってベットサイズを求めたい。
  • 2通りの結果があり得る場合、\(x \in \{-1, 1\}\) であり、帰無仮説 \(H_0 : p[x=1] = \frac{1}{2}\) を検定する
  • 検定統計量を計算する。
  • \(z = \frac{p[x = 1] – \frac{1}{2} }{\sqrt{p[x = 1](1 – p[x = 1])} } = \frac{2 p[x = 1] – 1 }{2 \sqrt{p[x = 1](1 – p[x = 1])} } \sim Z \)
  • ここで、\(z \in (-\infty , +\infty ) \) であり、\(Z\) は標準正規分布を表す。
  • ベットサイズは \(m = 2 Z[z] – 1\) と求まる。ここで、\(m \in [-1, 1] \) であり、\(Z[.]\) は \(Z\) のCDF(累積分布関数)である。

予測確率を用いる (2/3) (p5)

横軸が検定統計量 \(z\)、縦軸がベットサイズ \(m\) を表す。

予測確率を用いる (3/3) (p6)

  • 2通り以上の結果があり得る場合、one-versus-all(一対多)法に従う。
  • ベットサイズに対応する様々なラベルを \( X = \{ -1, …, 0, …, 1 \} \) とする。\(x \in X\) を予測されたラベルとする。言い換えると、ラベルはそれに対応するベットサイズによって識別される。
  • 各ラベル \(i = 1, …, \| X \| \) に対して、確率 \(p_i \) を推定する。ここで、\(\sum_{i=1}^{\| X \|} p_i = 1\) である。
  • \(x\) の確率を \( \tilde{p} = \max_{i} \{p_i \} \) と定義し、帰無仮説 \(H_0 : \tilde{p} = \frac{1}{\| X \|} \)を検定するしたい。
  • 検定統計量 \(z = \frac{\tilde{p} – 1/ \| X \| }{\sqrt{\tilde{p} (1 – \tilde{p} ) } } \sim Z \) を計算する。ここで、\(z \in [0, + \infty ) \) である。ベットサイズを \(m = x(2 Z[z] – 1) \) と求める。ここで、\( m \in [-1, 1] \) であり、\(Z[z]\) は予測 \(x\) (サイドは \(x\) からわかる)のサイズを制限する。全ての結果が等確率で起こる場合に、不確実性が最も高まる。

ベットを平均化する (p7)

  • ベットは全て保有期間に対応する。保有期間は、ベットを開始した時点からバリアが初めてタッチした時点 \(t_1 \) (第3章を見よ)までである。
  • ひとつ、あり得るアプローチとしては、新しいベットが到着すると古いベットを上書きすることだ。しかしながら、それは過度な出来高につながる。
  • より実用的なアプローチは、所定の時点においてまだ生きているベット全てに渡って、全サイズを平均してしまうことだ。

サイズの離散化 (p8)

  • 平均化は過度な出来高をいくらか抑えるが、それでも、全ての予測によって、小さいトレードは行われて(triggered)しまう。
  • これは不必要なovertradingを引き起こすので、ベットサイズを \(m^* = \mathrm{round} [\frac{m}{d}] d\) と離散化する。ここで \(d \in (0, 1]\) は離散化の離散化の程度を決める。

バックテストの危険性

ミッション・インポッシブル:完璧なバックテスト (p10)

  • 一般的なバックテストのエラーには以下のようなものがある:
    • 生存バイアス:investment universeとして足元のものを使うこと。したがって、企業が倒産して証券が上場廃止になったことを無視している。
    • Look-aheadバイアス:シミュレーション上で意思決定を行う時点においては公開されていなかった情報を使うこと。各データポイントのタイムスタンプに気を付けよ。リリース日、配布の遅れ、事後的な訂正を考慮せよ。
    • Storytelling:ランダムなパターンを正当化するために、事後的にストーリーを作ること。
    • データマイニングとデータスヌーピング:モデルをテストデータで訓練させること。
    • 取引コスト:取引コストのシミュレーションは難しい。なぜなら、そのコストを正確にする唯一の方法はトレーディングブックとの相互作用(つまり実際にトレードを行うこと)だから。
    • 外れ値:過去に観測されたが二度と起きないであろう極端な結果をもとに戦略を作ること。
    • ショートポジション:現物商品でショートポジションをとるには貸してを見つける必要がある。貸出コストと利用可能な金額は一般的には未知であり、リレーション、在庫、相対的需要などに依存する。

完璧なバックテストでさえ、たいてい間違っている (p11)

  • 期待最大シャープレシオは独立な試行数 \(N\) が増えるにしたがって上昇する。ただし(左のグラフでは)、\(\mathbb{E}[\hat{SR}_n ] = 0, \mathbb{V}[\hat{SR}_n ] \in \{1, 4\} \) としている。
  • Data Dredging:理論的根拠なしに経験的発見を探そうとすると、問題は拡大することが多い。理論による制約がないと、\(\mathbb{V}[\hat{SR_n } ] \) は上昇するからである。
  • 試行数 \(N\) とシャープレシオの分散 \(\mathbb{V}[\hat{SR_n }]\) を常にコントロールしなければならない。
  • これは純粋にランダムな振る舞いの結果である。たとえその戦略クラスに対応する投資スキルがなかったとしても( \(\mathbb{E}[\hat{SR}_n ] = 0 \) )、高シャープレシオ戦略が見つかってしまう。

一般的な助言 (p12)

  • 過学習を防ぐ簡単な方法はないけれども、その影響軽減に役立つであろう手順はたくさんある。
    • 特定の証券に対してではなく、全アセットクラスあるいは投資ユニバースに対してモデルを開発する(第8章)。投資家は分散させる。したがって、間違い \(X\) を証券 \(Y\) だけに犯すわけではない。もし間違い \(X\) を証券 \(Y\) のみに対して見つけたら、見かけ上どれだけ利益になっていたとしても、それは間違った発見だろう。
    • 過学習防止と、予測誤差のバリアンス低下のために、バギングを適用する(第6章)。もしバギングが戦略のパフォーマンスを悪化させたら、少数の観測値か外れ値にオーバーフィットしているだろう。
    • 全てのリサーチが完了するまでバックテストしてはならない(第1章から第10章)。
    • データセットに対して行った全てのバックテストを記録する。これは、バックテストオーバーフィッティングの確率を、最後に選択された結果に対して推定し(Bailey, Borwein, López de Prado and Zhu [2017a] と第14章を見よ)、実施した試行回数によってシャープレシオを低下させる(Bailey and López de Prado [2014b] を見よ)ため。
    • 過去ではなくシナリオをシミュレーションする(第12章)。標準的なバックテストはヒストリカルシミュレーションであり、容易にオーバーフィットする。過去は単に実現したランダムパスのひとつであり、それは全く異なるものになっていたかもしれない。あなたの戦略は逸話的な過去の経路だけではなく、広い範囲のシナリオにおいて利益を生むべきである。何千もの”what if”シナリオの結果に対するオーバーフィットは起こりにくい。
    • バックテストの影響のもとでリサーチしてはならない。もし儲かる戦略がバックテストで見つからなかったら、ゼロからやり直す。その結果を再利用する誘惑に耐えること。

バックテストの方法

ウォークフォワード (1/2) (p14)

  • Walk Forward (WF) は戦略が過去においてどのようなパフォーマンスを見せるか、ヒストリカルシミュレーションするもの。
    • 各戦略の意思決定はその決定より前の観測値に基づく。
  • WFには2つの重要な利点がある:
    • WFはヒストリカルでの解釈がわかりやすい。そのパフォーマンスはペーパートレーディングと一致する。
    • 過去はfiltrationである。したがって、trailing dataの使用は、purging が適切に行われている限り(第7章、7.4.1を見よ)、テストデータが out-of-sample である(情報漏れがない)ことを保証する。
  • WFバックテストに見られる一般的な間違いは、不適切なpurgingによって生じる情報漏れである。つまり、t1.index は訓練データに入るが、t1.values はテストデータに入る(第3章を見よ)
  • WFバックテストにおいてEmbargoingは必要ない。なぜなら訓練データはテストデータよりも常に日付が前になるからである。

ウォークフォワード (2/2) (p15)

  • WFには主な短所が3つある。
    • ひとつのシナリオ(ヒストリカルパス)しかテストされない。これは容易にオーバーフィットする(Bailey et al. [2014])。
    • WFは必ずしも将来のパフォーマンスを表すわけではない。というのも、特定のデータ系列によって結果にバイアスがかかるからだ。真実は、ウォークフォワードによるバックテストは、ウォークバックワードによるバックテストでオーバーフィットするのと同じくらい、容易にオーバーフィットする。観測された系列を変化させることで整合的でない結果が生じるという事実は、そのオーバーフィッティングの証拠である。
    • 初めの意思決定は全サンプルの小さな一部をもとに行われる。たとえwarm-up期間が設定されていたとしても、小さな一部分の意思決定に情報の大半が使われる。

交差検証 (1/2) (p16)

  • 交差検証 (Cross-Validation; CV) によるバックテストのゴールは、ヒストリカルで正確なパフォーマンスを求めることではなく、多くのout-of-sampleシナリオから将来のパフォーマンスを推測することである。
  • バックテストの各期間に対して、その期間以外の全てを知っている分類器のパフォーマンスをシミュレーションする。
  • 長所:
    • テストは特定の系列の結果ではない。walking forwardの結果であるoutcomeもあるが、walking backwardsの結果であるoutcomeもあるし、テストデータ以前の訓練データと、テストデータ以後の訓練データのミックスであるoutcomeもある。系列を逆さにしても完全に異なるCV結果になるわけではない。
    • 全ての意思決定が同じサイズのデータセットに対して行われる。これによって、それらの意思決定をするのに使う情報量の観点から、outcomeを期間に渡って比較可能となる。
    • 全ての観測値がひとつのテストデータの一部である。warm-upサブセットはなく、それによってout-of-sampleのシミュレーション期間を可能な範囲で最も長くすることができる。

交差検証 (2/2) (p17)

  • 短所:
    • WFと同様、バックテスト経路がひとつしかシミュレーションされない(ヒストリカルの経路ではないのだが)。観測ひとつに対して予測はひとつしか生成されない。
    • CVには明確なヒストリカルの解釈がない。アウトプットは、その戦略が過去にどのようなパフォーマンスを見せたかではなく、将来において、様々なストレスシナリオのもとでどのようなパフォーマンスを見せるかをシミュレーションする(それ自体は有用な結果ではある)。
    • 訓練データがテストデータの前に来るとは限らないので、情報漏れがあり得る。テストデータの情報が訓練データに漏れないよう、細心の注意を払わないといけない。purgingとembargoingがCVの文脈で情報漏れ防止にどのように役立つかの議論は、第7章を見よ。

組み合わせパージング交差検証 (Combinatorial Purged Cross-Validation) (1/2) (p18)

  • CPCVはWFとCVの主な弱点に対処する。つまり、WFやCVでは単一の経路しかテストしていない。
  • \(T\) の観測値をシャッフルなしで \(N\) 個のグループに分割したとしよう。ここでグループ \(n = 1, …, N-1\) はサイズ \(\lfloor T/N \rfloor \) で、\(N\) 番目のグループはサイズが \(T – \lfloor T/N \rfloor (N – 1)\) となる。ここで、\(\lfloor . \rfloor \) は床関数。サイズ \(k\) のグループのテストデータに対して、あり得る訓練/テストの分割数は
  • \( {}_N C_{N – k} = \frac{1}{k!} \prod_{i=0}^{k-1} (N – i) \)
  • 各組み合わせは \(k\) 個のテストグループを含むので、テストグループの総数は \(k \left( {}_N C_{N-k} \right) \) となる。そして、あり得る全ての組み合わせを計算したので、これらのテストグループは全ての \(N\) に渡って一様に分布する。これからわかることは、グループが \(N\) 個、サイズ \(k\) のテストデータから、全部で \(\varphi [N, k] \) 通りの経路をバックテストできる。
  • \(\varphi [N, k] = \frac{k}{N} {}_N C_{N-k} = \frac{1}{(k-1)!} \prod _{i=1}^{k-1} (N – i)\)

組み合わせパージング交差検証 (Combinatorial Purged Cross-Validation) (2/2) (p19)

  • \(N = 6\)、\(k = 2\) の場合に訓練/テストデータの構成を考える。
    • \( {}_6 C_4 = 15 \) 個の分割があり、\(S1, …, S15 \) とインデックスを付ける。
    • 各分割に対して、左の図では、テストデータに含まれるグループにバツ印 (x) を付け、訓練データに含まれるグループは空欄にしている。
    • 各グループは \(\varphi [6, 2] = 5\) 回、テストデータに含まれることになる。したがって、この訓練/テストデータの分割によって5通りのバックテスト経路が計算できる。
  • 各テストグループをひとつのバックテスト経路に割り当てる。例えば、経路1は (G1, S1), (G2, S1), (G3, S2), (G4, S3), (G5, S4), (G6, S5) の予測を組み合わせた結果である。経路2は (G1, S2), (G2, S6), (G3, S6), (G4, S7), (G5, S8), (G6, S9) の予測を組み合わせた結果である。以下同様。
  • 上の例では5つしか経路を生成しなかった。しかしCPCVは十分長い系列に対して何千もの経路を生成することができる。経路の数 \(\varphi [N, k] \) は \(N\) が \(T\) に近づくほど、\(k\) が \(N/2\) に近づくほど多くなっていく。
  • CPCVの重要な長所は、(過学習の可能性が高い)シャープレシオの点推定ではなく、シャープレシオの分布を求めることができる点である。

人工データによるバックテスト (1/2) (p20)

  • ファイナンスで重要な問題はデータセットが限られていること。過去のデータしかない。
  • その代わりに、調べたい特定の現象を代表するものとして、人工データセットを生成することができる。例えば、
    • Step1.インプットパラメーター \(\{ \sigma, \varphi \}\) を以下で推定する
      • \(P_{i, t} = \mathbb{E}_0 [P_{i, T_i }] + \varphi (P_{i, t-1} – \mathbb{E}_0 [P_{i, T_i }] ) + \xi_t \)
    • Step2.損切りと利確のペア \( ( \underline{\pi_i } \overline{\pi_i } ) \) のメッシュを構築する
    • Step3.推定値 \( \{ \hat{\sigma}, \hat{\varphi} \} \) を適用して \(\pi_{i, t}\) の経路を多数(例えば10万通り)生成する
    • Step4.生成した10万通りの経路をメッシュ \( ( \underline{\pi_i } \overline{\pi_i } ) \) の各ノードに適用する
      • 各ノードに対して、損切りと利確のロジックを適用し、10万通りの \(\pi_{i, T_i}\) を作る
      • 各ノードに対して、その取引ルールに基づきシャープレシオを計算する

人工データによるバックテスト (2/2) (p21)

  • Step5.以下のように解を計算:
    • インプットパラメーター \( \{ \hat{\sigma}, \hat{\varphi} \} \) と観測された初期条件 \( \{ P_{i, 0}, \mathbb{E}_0 [P_{i, T_i }] \} \) をもとにして、最適な取引ルールのメッシュ内でペア \((\underline{\pi_i } , \overline{\pi_i } )\) を決定する
    • もし戦略 \(S\) が特定の機会 \(i\) の目標利益 \(\overline{\pi_i }\) を提供してくれるとすると、その情報とStep4の結果を組み合わせて、最適な損切り \(\underline{\pi_i}\) を決定する。
    • もしトレーダーがファンドのマネジメントによって最大の損切り \(\underline{\pi_i}\) を課されているとすると、その情報とStep4の結果を組み合わせて、損切りレンジ \( [0, \underline{\pi_i}] \) 内において最適な利確 \(\overline{\pi_i } \) を決定できる。

長期均衡期待リターンがゼロのケース (p22)

  • 左から右に向かって、図が示しているのは、パラメーターの組み合わせが \(\{\mu, \tau, \sigma\} = \{0, 5, 1\}, \{0, 50, 1\}, \{0, 100, 1\} \) の場合のシャープレシオである。
  • half-lifeパラメーター \(\tau\) が短い場合、小さい利確と大きな損切りの組み合わせの、狭いレンジでパフォーマンスは最大化される:最適な取引ルールは小さな利益が生じるまで十分長い間在庫を持つこと。5倍か7倍の損失を被るという代償を払うけれども。
  • これは実際、多くのマーケットメーカーが実際に行っていることであり、Easley et al. [2011]で説明されている「非対称なペイオフのジレンマ」と整合的である。
  • この設定においてあり得る最悪の取引ルールは、損切りが早く利確の閾値が大きいという組み合わせで、これはマーケットメーカーが実際に避ける状況である。

訳者補足

  • 長期均衡期待リターンがゼロというのはつまりパラメーター \(\mu = 0\) のことを指している。
  • グラフは左から右に行くほどパラメーター \(\tau\) が長くなっていくだけで他のパラメーターは同じである。
  • グラフは横軸が利確ポイント、縦軸が損切ポイントであり、色はシャープレシオを表し、緑色になるほど高く、赤色になるほど低い。
  • 緑色はグラフの左上に集まっている。つまり利確の閾値( 横軸 )が低く、損切りの閾値( 縦軸 )が高い場合にパフォーマンスが良くなる。

長期均衡期待リターンが正のケース (p23)

  • 左から右に向かって、図が示しているのは、パラメーターの組み合わせが \(\{\mu, \tau, \sigma\} = \{5, 5, 1\}, \{5, 50, 1\}, \{5, 100, 1\} \) の場合のシャープレシオである。
  • ポジションは儲かる傾向にあるので、最適な利確ポイントは前のケースよりも高くなっている。
  • half-lifeパラメーター \(\tau\) を長くするほど、最適な利確のレンジは広くなっていくが、最適な損切りのレンジは狭くなっていく。初めは長方形だったエリアが四角形になり、その後、半円になる。
  • このケースでも、half-lifeパラメーター \(\tau\) が長いほど過程はランダムウォークに近づく。

長期均衡期待リターンが負のケース (p24)

  • 左から右に向かって、図が示しているのは、パラメーターの組み合わせが \(\{\mu, \tau, \sigma\} = \{-5, 5, 1\}, \{-5, 50, 1\}, \{-5, 100, 1\} \) の場合のシャープレシオである。
  • 結果は正のケースで得られたものを回転した形になっている。
  • 理由は、前の図における利益が今回の図では損失に変わっており、逆は逆だからである:片方のケースが他方の像になり、単にギャンブラーの損失がハウスの利益になる。

参考文献

ファイナンス機械学習の続編とも言われている、同じ著者の新しい本はこちら。まだ翻訳版は出ていないようだ。

ファイナンス機械学習とその原著はこちら。

関連記事

前回(第4回)のスライドをまとめた記事はこちら。