The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
回帰が嘘をつく可能性がある構造的に 2 つの異なる方法があり、このブログではこれまでのところそのうちの 1 つだけを攻撃しています。
1 つ目は、検索 における選択バイアスです。1 万回のバックテストを実行し、最良のものを維持しましたが、表示されている数値は効果ではなくノイズ分布の最大値です。それがしぼんだシャープレシオとその頂点正直なネガティブ]の主題です。解決策は、検索に価格を設定することです。
2 つ目は、まったく検索を行っていない単一の回帰に基づく 係数自体 の偏りです。リグレッサーが誤差項と相関している場合、OLS には偏りがあり、一貫性がありません。また、サンプリング ノイズとは異なり、これはサンプル サイズとともに縮小しません。データが増えると、間違った数値が厳しくなります。ブートストラッピング、ウォークフォワード、またはデフレがどれだけ行われても、それには影響しません。なぜなら、これらの方法のいずれも識別を問題とせず、選択のみを問題にするからです。
この記事は 2 番目の失敗に関するものであり、ここでは抽象的な懸念事項ではありません。 Almgren-Chriss の校正記事 は、ネットテイカーフローの 5 分間の仲値変動を回帰することによって永続的な影響 に適合し、数パーセントの と日ごとに 2 ~ 5 倍変動する係数を取得し、最初の構造的理由として内生性を挙げています。「価格がフローに反応するのと同じくらい、フローも価格に反応します。モメンタムトレーダーは価格がだから購入します」ローズ; フロー収益率の単純な OLS は彼らの反応を拾い上げ、それが影響であると考えます。」また、クリーン フィックス (構造上外生的な独自の塗りつぶし) にも名前が付けられます。
これは、名前付きの機器とデータがすでに社内にある場合の操作変数の問題です。以下は推定、診断、実験です。
内生性を 1 つの段落でまとめる

OLS は、 の下でのみ、 内の原因となる を推定します。 3つのことがそれを壊します。 省略された変数バイアス: が と の両方を駆動し、観測されない場合、それはエラー の中に存在し、 は を強制します。マイクロ構造では、観測されていない情報の到着がボリュームとボラティリティを同時に駆動します。 測定誤差: ノイズの多いプロキシ 、 を使用すると、常にゼロに向かって減衰します。ネット化された aggTrades フローは、断片化された市場全体にわたる真の署名付き注文フローのプロキシであり、目に見えない部分は測定誤差です。 同時性: Almgren-Chriss 衝撃校正] で、より鋭く、より具体的な形ですでに述べられています。これは、以下のすべての動機となる問題です。
IV ソリューション

機器 は、次の 2 つの条件を満たす必要があります。
- 関連性: 。テスト可能、そしてテストする必要があります。
- 除外: — は、 を通じてのみ に影響します。テストできません。これまで。これは経済的な議論であり、統計ではありません。
1 つの機器と 1 つの内因性リグレッサーの場合、推定量は 2 つの縮小型効果 (Wald 推定量) の比になります。
コントロールと複数の機器では 2SLS を使用します。 ステージ 1: 機器とコントロールの内生変数 を回帰し、適合値 を維持します。構造上、これらには機器主導の外生変動のみが含まれます。 ステージ 2: を実行します。マトリックス形式で、 を使用すると、次のようになります。
これを手動で実行する人全員を陥れる罠: 文字通り 2 つの lstsq 呼び出しを実行すると、ステージ 2 の標準エラーが間違っています。 は 生成された 回帰変数であり、残差分散は近似されたものではなく、元の から計算する必要があります。単純な 2 ステップの標準誤差は小さすぎるため、 統計が大きすぎて過剰拒否になってしまいます。実際の IV 実装を使用します。
from linearmodels.iv import IV2SLS
import pandas as pd
def iv_regression(df, dep_var, endog_var, instruments, controls=None):
"""2SLS with correct generated-regressor standard errors."""
y = df[dep_var]
endog = df[[endog_var]]
instr = df[instruments]
const = pd.Series(1, index=df.index, name="const")
exog = pd.concat([const, df[controls]], axis=1) if controls else const
res = IV2SLS(dependent=y, exog=exog, endog=endog,
instruments=instr).fit(cov_type="robust")
print(res.summary)
return res
実験: OLS ガンマと 2SLS ガンマ

テスト中の回帰は、Almgren-Chriss の記事からの永続的な影響の当てはめです。
は、上記の同時性の議論により内生的です。この商品はウィンドウ内の独自の約定です。メーカー約定は、市場の価格経路ではなく、独自の見積スケジュールと在庫ポリシーによってトリガーされるため、誤差のモメンタム反応成分とはおそらく相関関係のない注文フローの変動の原因となります。除外制限 (フィルがネット フローへの寄与を通じてミッドを「のみ」動かすというもの) は議論すべき前提であり、クォート自体がシグナル駆動である場合に最も弱くなります。相場が短期間の価格予測を条件にしている場合、商品は汚染されており、この設計は失敗します。純粋な在庫管理ポリシーまたはスプレッドキャプチャポリシーによる約定は、クリーンなケースです。
フィル データは、実装不足と DIY TCA] で説明されている TCA レコードから取得されます。このログは、独自の fills からのスリッページ カーブのフィッティング サンプルを提供するのと同じログです。コントロール: に遅れがあり、ウィンドウ内のボラティリティを実現しました。
ols = IV2SLS(dependent=df.dS, exog=df[["const", "dS_lag", "rv"]],
endog=None, instruments=None).fit(cov_type="robust")
tsls = iv_regression(df, "dS", "q_net", ["q_own"], ["dS_lag", "rv"])
これを実行する価値があるかどうかは、OLS 、2SLS 、第 1 段階の 、および 2 つの係数間のギャップ (影響ではなく運動量反応である OLS 推定の割合) の 4 つの数値によって決まります。
第 1 段階の が 10 未満に戻った場合、それが結果です。独自のフィルは、 を識別するには 5 分分解能のネット フローの一部にすぎず、正直な書き込みは 正直なネガティブ] の形式でネガティブです。弱い商品の陰性は真の発見です。これは、ガンマ フィットの内生性がこのサンプル サイズと期間では修正できないこと、および OLS に基づいて構築された取引前コスト推定値には、除去できない上方バイアスが存在することを示しています。
診断

第 1 段階 F (弱い楽器)。 Staiger-Stock の経験則: 。 1 つの内因性リグレッサーの Stock-Yogo 臨界値はより厳密です。最大 IV サイズの 10% の場合、1 つの機器では 、2 つの機器では 19.93、3 つの機器では 22.30。 15% サイズの場合、8.96 / 11.59 / 12.83; 20% の場合、6.66 / 8.75 / 9.54。
Durbin-Wu-Hausman (IV は必要ですか)。 OLS に一貫性がある場合は効率も向上するため、切り替える前にテストしてください。残差拡張形式は実際的なものです。ステージ 1 を実行し、 を保持してから、 をリグレッサーとして追加して OLS 構造回帰を実行します。 の有意な係数は内生性の証拠です。
def durbin_wu_hausman(df, dep, endog, instruments, controls):
"""Augmented-regression form of the DWH endogeneity test."""
import statsmodels.api as sm
X1 = sm.add_constant(df[instruments + controls])
v_hat = df[endog] - sm.OLS(df[endog], X1).fit().fittedvalues
X2 = sm.add_constant(df[[endog] + controls].assign(v_hat=v_hat))
res = sm.OLS(df[dep], X2).fit(cov_type="HC1")
return res.tvalues["v_hat"], res.pvalues["v_hat"]
Sargan-Hansen (過剰識別)。 機器を使用すると、共同妥当性をテストできます: 。ここで、 は、すべての機器および外生コントロールの 2SLS 残差を回帰することによって得られます。統計よりも注意点が重要です。Sargan は、さまざまな方法で無効な商品のみを検出します。すべての計測器が同じ省略された変数と相関している場合、テストは問題なく合格し、何も通知されません。
暗号通貨の微細構造に存在する手段

有効な金融商品を見つけるのが最大の難関であり、株式、企業、財務のスタンバイ(アナリストのカバレッジ、税金対策、棚ぼたキャッシュフロー)はここでは役に立たない。実際には 2 つのクラスが適用されます。
| 内生変数 | 楽器 | 理論的根拠 |
|---|---|---|
| ネットテイカーフロー | あなた自身の塗りつぶし | 市場の価格経路ではなく、相場と在庫ポリシーによって決定されます。相場がシグナル条件付けされていない場合、*構造によって外生的です。 |
| 総流量/体積 | 取引所の機械的フロー: インデックスのリバランス、資金調達と決済のウィンドウ、計画された清算カスケード | タイミングは情報の到着によってではなく、交換ルールによって設定されます。 |
落とし穴

弱い機器は大きな音で失敗することはありません。 最初のステージが弱い場合、2SLS は有限サンプル内で大まかに OLS の方に偏ります。
では、「因果関係」の推定値を報告しながら、OLS バイアスの 25% を保持します。解決策は、有限サンプルの動作がより優れている LIML か、機器の強度に関係なく有効な Anderson-Rubin テストです。
多くの楽器に偏りがあります。 。すべてのラグを に投入して、第 1 段階の をブーストすると、推定値が OLS に直接戻されます。 が無視できない場合は、LIML、ジャックナイフ IV (JIVE)、または正規化された最初のステージを使用します。
除外制限はテストできません。 Sargan によるものでも、何かによるものでもありません。それは領域推論によって防御されており、その防御の正直な形式は感度分析です。つまり、結論を覆すにはどのくらいの規模の違反が必要になるでしょうか?
テイクアウト

- デフレは 検索 からのバイアスを修正します。 係数のバイアスには何も影響しません。それらは異なる失敗であり、異なるツールが必要です。
- 内生性バイアスはサンプルサイズによって消えません。厳密で、適切にブートストラップされ、ウォークフォワード検証された係数であっても、体系的に間違っている可能性があります。
- Almgren-Chriss キャリブレーションのガンマ回帰は、指定された機器 (独自のフィル) と TCA パイプラインによって既に記録されたデータを使用した、ライブの社内インスタンスです。
- 2SLS 係数の前に、第 1 段階の を報告します。 10 未満の係数は証拠ではなく、そう言うのは公表可能な結果です。
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.