金融時系列の定常性(強定常・弱定常・局所定常)

統計学や機械学習の教科書の多くは、データ生成プロセスが「定常(Stationary)」であることを前提としています。しかし、金融市場において真の定常性が永続することはあり得ません。

定常性の種類 数学的定義 金融市場における実態
強定常 (Strict Stationarity) 任意の時点集合をどれだけ時間シフトしても、同時確率分布が完全に不変であること。 金融市場では100%あり得ない(ボラティリティクラスタリングや構造変化のため)。
弱定常 (Weak / Covariance Stationarity) 期待値 \(\mu\) が一定であり、共分散 \( ext{Cov}(X_t, X_{t-h}) = \gamma(h)\) が時点 \(t\) ではなくラグ \(h\) のみに依存すること。 対数リターンに変換しても、時期によってボラティリティが激変するため厳密には成立しない。
局所定常 (Locally Stationary) 十分短い一定の時間窓の内部であれば、統計量の変化が無視できるほど小さいという実務的近似。 クオンツ実務の基盤。適切なローリング窓やレジーム分割によってモデルを適合させる。
レジーム1 平穏・低ボラ相場 順張り・キャリー有利 レジーム2 高ボラ・乱高下相場 逆張り・平均回帰有利 レジーム3 突発ショック・危機 流動性枯渇・急落 利上げ・不確実性増 市場鎮静化 市場状態(レジーム)によって、同一戦略の期待値とリスクは真逆に反転する
図1:金融市場における主要レジーム(状態空間)の相互遷移モデル

全期待値・全分散の法則による無条件成績の分解

過去5年間のバックテストで「平均日次リターンがプラス」であったとしても、その中身を分解すると驚くべき事実が見えてきます。確率変数を戦略リターン \(R\)、意思決定時点の相場レジームを \(S \in \{1, 2, \dots, K\}\) とします。

全期待値の法則(Law of Total Expectation)により、無条件の平均リターン \(E[R]\) は各レジームの条件付き期待値の加重平均として分解されます。

E[R] = \sum_{s=1}^K P(S = s) \cdot E[R \mid S = s]

同様に、全分散の法則(Law of Total Variance)により、リスク(分散)も2つの独立した要素に分解されます。

ext{Var}(R) = E[ ext{Var}(R \mid S)] + ext{Var}(E[R \mid S])

※第1項は「各レジームの内部でのばらつき(純粋な取引リスク)」、第2項は「レジーム間の期待値の落差が生み出すリスク」。

戦略が勝てなくなった2大原因の切り分け
  • 原因A:エッジの直接劣化(\(E[R \mid S]\) の低下)
    同じ「低ボラ相場」であるにもかかわらず、競合の参入やアルゴリズムの普及によってそのレジーム内での期待値自体がゼロへ沈んでしまった状態。戦略の根本的欠陥。
  • 原因B:相場環境の構成変化(\(P(S)\) のシフト)
    戦略自体のエッジは健在だが、得意な「低ボラ相場」の出現頻度が \(70\%\) から \(20\%\) に激減し、不得意な「高ボラ乱高下相場」の出現頻度が急増した状態。この場合、戦略のコードをいじるのではなく、ポジションサイジングの抑制や別戦略への資金シフトで対処すべき問題です。

レジーム変数の定義ルール:未来リークを排除する

相場レジームを分類する際、バックテストで最も多い致命的過ちは「未来情報のカンニング(ルックアヘッド)」です。

絶対にやってはいけないレジーム分類の例
  • 当日の確定データを使う:「当日の高値と安値の値幅(日足ATR)」を使って、その日の寄り付きエントリーのレジームを判定する(未来参照!)。
  • 全期間の分位点を使う:2015年〜2025年の全データから「ボラティリティの上位33%を高ボラ、下位33%を低ボラ」と事前に境界線を引く(2015年時点で未来の2025年のボラティリティ水準を知っていることになる!)。
  • 事後公表された経済指標を使う:「NBERが認定した景気後退期間」を使う(NBERが景気後退を宣言するのは、後退が始まってから半年〜1年後の事後報告です)。

正しいレジーム変数 \(Z_t\) は、必ず「エントリー注文を執行する瞬間の情報集合 \(\mathcal{F}_{t-1}\)(または確定した前足までのデータ)」だけで計算されなければなりません。

Python:安全なレジーム変数の算出(前足確定値のみを使用)
# 前日クローズ時点までの情報だけで算出する
# 1. 前日20日間の実現ボラティリティ (ローリング標準偏差)
vol_20 = returns.shift(1).rolling(20).std()

# 2. 前日20日間のEMAトレンド強度 (EMA20 - EMA50) / ATR
trend_strength = ((df['close'].ewm(span=20).mean() - df['close'].ewm(span=50).mean()) / df['atr']).shift(1)

# 3. 過去500日間のローリング分位点による動的閾値判定(全期間固定値は禁止!)
vol_high_threshold = vol_20.rolling(500).quantile(0.70)
vol_low_threshold  = vol_20.rolling(500).quantile(0.30)

regime = pd.Series(index=df.index, data='normal')
regime[vol_20 > vol_high_threshold] = 'high_vol'
regime[vol_20 < vol_low_threshold]  = 'low_vol'

分布ドリフトの測定:Wasserstein距離の活用

訓練データ(Train)と実運用・テストデータ(OOS)の間で、「相場の分布がどれほど変わってしまったか」を測るために、最適輸送理論に基づくWasserstein距離(ワッサースタイン距離:別名Earth Mover's Distance)を用います。

2つの1次元累積分布関数(CDF)を \(F_P(x)\) と \(F_Q(x)\) とすると、1次Wasserstein距離 \(W_1\) は2つの分布曲線に挟まれた面積として直感的に定義されます。

W_1(P, Q) = \int_{-\infty}^{\infty} |F_P(x) - F_Q(x)| \, dx

KLダイバージェンス(Kullback-Leibler情報量)は、一方の分布で確率がゼロの領域があると無限大(\(\infty\))に発散してしまいますが、Wasserstein距離は幾何学的な「距離(移動コスト)」を測るため、裾が重い金融データでも極めて安定して分布の変化(データドリフト)を定量化できます。

交差検証(Fold内)での厳密なレジーム推定

隠れマルコフモデル(HMM)やガウス混合モデル(GMM)、クラスタリングアルゴリズムを使って機械学習的にレジームを分類する場合、「モデルのフィッティングは各FoldのTrain内だけで行い、Testデータには学習済みモデルを適用するだけ」という原則を徹底します。

検証項目 やってはいけない誤り(リーク) プロ仕様の正しい検証手法
スケーラー(標準化) 全期間のデータで平均と分散を求めて正規化。 各Foldの学習データ(Train)のみで StandardScaler.fit()。
HMM状態学習 全期間のリターンを入れて4状態HMMを学習。 Train期間だけで遷移確率行列と平均ベクトルをEMアルゴリズムで学習。
レジーム別成績集計 全期間集計後に後から都合の良い名前を付ける。 各SplitのOOS期間において、事前に確定した分類器でラベルを付けて成績出力。

実運用モニタリング:CUSUMによる早期警報と停止

実運用に入った後、戦略が壊れた兆候を最も素早く統計的に検知するのが、品質管理工学の金字塔であるCUSUM(Cumulative Sum:累積和)管理図です。

目標とする日次基準リターンを \(\mu_0\)(例えば事前の期待値)、許容スラックパラメータを \(k\) とするとき、下方向への劣化を監視する片側CUSUM統計量 \(C_t\) は以下のように逐次更新されます。

C_t = \min\Big(0, \; C_{t-1} + (r_t - \mu_0 + k)\Big), \quad C_0 = 0 C_t < -h \implies extbf{【緊急アラート】エッジ消失の疑いにより即時停止!}

警報閾値 \(h\) は、事前のモンテカルロシミュレーションにより「正常時に誤警報が出る平均期間(ARL: Average Run Length)が2年〜3年以上」になるように設定します。感情に頼らず、統計的なCUSUM境界を割った瞬間にシステムを停止(キルスイッチ発動)させることで、致命的な破産を未然に防ぎます。

ミニテスト

4問の理解度テストです。

Q1. 全期待値の法則において、無条件の平均リターン \(E[R]\) が低下する2大要因として正しい組み合わせはどれ?

正解はBです。無条件期待値は \(E[R] = \sum P(S) E[R|S]\) で表されるため、相場環境の割合変化か、環境内でのエッジ劣化のどちらかが原因となります。

Q2. ボラティリティによるレジーム境界(高ボラ・低ボラの閾値)を算出する際、情報漏洩を防ぐ正しいデータ範囲はどこか?

正解はCです。全期間のボラティリティ分位点を使ってしまうと、未来の相場水準が漏洩するため、必ずTrainデータ内だけで閾値を推定します。

Q3. バックテストの検証中に、5通りの異なるレジーム定義(ボラ判定期間や移動平均期間)を試して最も良いものを採用した場合の正しい処理はどれ?

正解はAです。結果を見てから一番都合の良いレジーム定義を選ぶ行為も立派な過剰最適化(探索)であり、試行会計で \(N\) を加算する必要があります。

Q4. 実運用モニタリングにおいてCUSUM管理図の警報(\(C_t < -h\))が発動した際、この警報が直接証明する事実はどれ?

正解はBです。CUSUM警報はエッジ消失の確定証明ではなく、速やかに実弾運用を停止し、市場レジームの変化や約定環境を切り分け診断するための安全装置です。

学術文献・参考資料