CUSUMフィルターとは:金融データのイベントサンプリング
対称CUSUMフィルターが対数リターンからイベント時刻を抽出する仕組み、固定・動的しきい値の選び方、先読みを避ける方法を解説します。
このガイドの内容CUSUMフィルターが答える問い
短い要約
CUSUMフィルターは、同じ方向の対数リターンが累積し、しきい値を超えた時点を記録します。得られるのはサンプル構築に使うイベント時刻であり、価格方向の予測、結果ラベル、あるいは市場が定常であるという保証ではありません。
CUSUMフィルターが答える問い
すべての取引日に1行ずつモデルへ渡すと、目立った変化のない期間がサンプルの大半を占めることがあります。CUSUMフィルターは、同方向の値動きが十分に積み重なった時点を規則に基づいて選びます。各リターンは引き続き監視されますが、条件を満たしたバーだけをイベントとして記録します。ここでいう「フィルター」は観測時刻の選別であり、売買シグナルという意味ではありません。
累積和(CUSUM)の考え方は、逐次的な統計モニタリングに由来します。E. S. Pageは1954年の連続検査方式に関する論文でこの考え方を扱いました。金融データでは、Advances in Financial Machine Learning 第2章がサンプリングをデータ構造の構築と関連づけています。mlfinpyのドキュメントは、累積変動でバーを選ぶ対称CUSUMフィルターを説明しています。
対数リターンから2つの累積和を計算する
正の終値 (P_t) について、対数リターンを (r_t=\ln(P_t/P_{t-1})) とします。フィルターはゼロから始まる正側と負側の累積和を別々に更新します。再帰式は S+_t = max(0, S+_(t-1) + r_t) と S-_t = min(0, S-_(t-1) + r_t) です。前者はゼロより上の累積、後者はゼロより下の累積を保持します。
対称しきい値 (h>0) に対し、S+_t > h または S-_t < -h になった時刻 (t) を記録します。上方向のイベント後は S+ をゼロに、下方向のイベント後は S- をゼロに戻します。以降のリターンも処理を続けます。単一のリターンがしきい値を超える場合だけを検出するのではなく、小さなリターンが同じ方向に続けば累積してイベントになります。
しきい値と等しい場合の扱いは、事前に決める必要があります。mlfinpyの説明文はしきい値への到達を含む一方、参照される実装コードは厳密な > と < を使います。S=h ちょうどの場合、両者の結果は異なります。等号を含むかどうかを明記してください。「CUSUM」という名前だけでは境界の動作は決まりません。
仮定の価格経路を追う
終値が 100.00 → 100.20 → 100.40 → 100.60 → 100.40 → 100.20 → 100.00 と推移し、対数リターン単位のしきい値を (h=0.005)、つまり0.5%とします。以下の価格と結果は仕組みを示す仮定例であり、市場データや約定価格ではありません。
上昇局面では、開始点から100.60までの累積対数変化は ln(100.60 / 100.00) = 0.005982 で、約0.598%です。100.60の終値で正側の累積和がしきい値を超えるため、その時刻が上方向のイベントとして記録され、正側の累積和がリセットされます。その後、価格は下落します。100.00まで戻った時点で、リセット後の累積対数変化は ln(100.00 / 100.60) = -0.005982 です。負側の累積和が -h を下回り、100.00が下方向のイベントになります。
2つの時刻はサンプリング規則から得られたものです。最初のイベントはその後の上昇を予測せず、次のイベントも売却の推奨ではありません。実装を確認する際は、リターンと累積和をバーごとに追い、選択した境界・リセット規則どおりの時刻が出るか確かめてください。
市場の変動幅に合わせてしきい値を選ぶ
固定しきい値は監査しやすく、常に同じ (h) と累積和を比較します。ただし0.5%の動きは、静かな市場では大きく、変動の激しい局面では通常の範囲かもしれません。動的しきい値ならボラティリティの尺度に追随できます。例として h_t = k × σ_(t-1) と置きます。(k) は選んだ倍率、(sigma) はリターンのボラティリティ尺度です。
先読みを避けるには、(sigma) がいつ利用可能かを定義します。時点 (t) の終値後にイベント判定を行うなら、(t-1) までのデータから計算済みのしきい値を使うのが明確な因果的設計です。推定器、窓幅、バー単位か年率換算かという尺度、外れ値や欠損値の扱いを一貫させます。過去に魅力的なイベント列ができるという理由だけで (k) を選ばず、アウト・オブ・サンプルで評価してください。
しきい値が低すぎるとイベントが増え、ノイズやスプレッド、手数料、スリッページに埋もれる小さな動きも拾います。高すぎればイベントが減り、意味のある動きを逃すことがあります。万能な値はありません。妥当な複数の設定について、イベント数、イベント間の時間、期間ごとの安定性、後段の取引コストを比べます。
価格と時刻を因果的に扱う
対数リターンには正の価格が必要です。ゼロや負の価格になり得る商品に対数価格をそのまま適用することはできません。単純リターンなど別の変換を使う場合は、尺度とフィルターの特性が変わるため、定義し直して検証します。株式分割や配当の調整も確認してください。分割調整済み終値はトータルリターン系列と同じではありません。また、連続先物のロールによる段差は、単一の取引可能な限月の値動きとは限りません。
終値で発生したイベントは、その終値が確定して初めてわかります。モデルの特徴量はその時点以前に実際に利用できた情報から作れますが、イベントを発生させた終値で約定できたとバックテストが仮定するのは、執行ルールと市場データがそれを裏付ける場合に限ります。通常はトリガー後の価格・気配値で注文を模擬し、スプレッド、スリッページ、市場インパクト、資金調達費用、手数料を考慮します。
フィルターが返すのはイベント時刻であり、全履歴を等間隔の時系列に変換するわけではありません。非イベントのバーも時間ベースの特徴量、ボラティリティ、市場状態には必要です。実際の間隔と予測期間を確認せずに、等間隔サンプルを前提とする統計量の年率換算などを適用しないでください。
サンプリング・安定性検定・結果ラベルを区別する
同じ名称が異なる手法を指すことがあります。ここで扱う価格のCUSUMフィルターは、方向付き対数リターンを累積してイベントを選びます。一方、回帰安定性と再帰残差のCUSUM検定のような計量経済学の検定は、回帰パラメーターが安定しているという仮定に対して残差パターンを調べます。価格イベントを選ぶ規則とは別です。どちらも、境界を超えたからといって系列や過程を定常にするわけではありません。
フィルターは学習ターゲットを定義しません。イベント時刻を選んだ後、特徴量はその時点で利用可能な情報だけから作ります。ターゲット (y) は明示した将来結果の規則で別に構成します。金融イベントのトリプルバリア法は、イベント後にどのバリアへ最初に到達したかという別の問いに答えます。CUSUMはそのラベルを自動で割り当てず、方向を予測せず、流動性や利益も保証しません。
検証時は各しきい値を当時利用可能だったデータだけで再計算し、時間順を維持し、重複するラベル期間が検証へ漏れないようにします。ビッド・アスク・スプレッド、手数料、資金調達費、スリッページ、取引可能規模、シグナルから執行までの遅れも評価します。イベント数が少ないこと自体は戦略の優位性を示しません。指標と約定の前提は、実運用で知りたい問いと一致させます。
よくある質問
Q1CUSUMフィルターは計量経済学のCUSUM検定と同じですか?
いいえ。このフィルターは価格の対数リターンを累積してイベントを選びます。回帰のCUSUM検定は、固有の仮定と臨界値のもとで再帰残差を用い、モデルの安定性を評価します。
Q20.5%のしきい値はすべての市場に適していますか?
いいえ。固定値の発火頻度はボラティリティ、バーの頻度、銘柄によって変わります。因果的に利用できる情報だけを使い、後段のコストも含めて固定・動的しきい値を比較します。
Q3CUSUMの時刻なら終値で注文が約定したという意味ですか?
いいえ。終値が確定してからイベント時刻がわかります。その後の注文送信と約定を、適切なデータとコスト前提でシミュレーションしてください。
出典
問題を報告
この記事のリンクを含むメールを準備します。送信すると Mark に報告が届きます
クイックチェック
記事を読み終えたら、3問で確認しましょう
問題 01
CUSUMフィルターがバーをイベントとして記録する条件はどれですか?
答えを選ぶと解説を確認できます