← 記事一覧に戻る
August 10, 2026
読了時間: 5分

The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem

The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
#causal-inference
#instrumental-variables
#2SLS
#econometrics
#endogeneity

回帰が嘘をつく可能性がある構造的に 2 つの異なる方法があり、このブログではこれまでのところそのうちの 1 つだけを攻撃しています。

1 つ目は、検索 における選択バイアスです。1 万回のバックテストを実行し、最良のものを維持しましたが、表示されている数値は効果ではなくノイズ分布の最大値です。それがしぼんだシャープレシオとその頂点正直なネガティブ]の主題です。解決策は、検索に価格を設定することです。

2 つ目は、まったく検索を行っていない単一の回帰に基づく 係数自体 の偏りです。リグレッサーが誤差項と相関している場合、OLS には偏りがあり、一貫性がありません。また、サンプリング ノイズとは異なり、これはサンプル サイズとともに縮小しません。データが増えると、間違った数値が厳しくなります。ブートストラッピング、ウォークフォワード、またはデフレがどれだけ行われても、それには影響しません。なぜなら、これらの方法のいずれも識別を問題とせず、選択のみを問題にするからです。

この記事は 2 番目の失敗に関するものであり、ここでは抽象的な懸念事項ではありません。 Almgren-Chriss の校正記事 は、ネットテイカーフローの 5 分間の仲値変動を回帰することによって永続的な影響 γ\gamma に適合し、数パーセントの R2R^2 と日ごとに 2 ~ 5 倍変動する係数を取得し、最初の構造的理由として内生性を挙げています。「価格がフローに反応するのと同じくらい、フローも価格に反応します。モメンタムトレーダーは価格がだから購入します」ローズ; フロー収益率の単純な OLS は彼らの反応を拾い上げ、それが影響であると考えます。」また、クリーン フィックス (構造上外生的な独自の塗りつぶし) にも名前が付けられます。

これは、名前付きの機器とデータがすでに社内にある場合の操作変数の問題です。以下は推定、診断、実験です。

内生性を 1 つの段落でまとめる

絡み合う力が内生性を生み出す

OLS は、E[εiXi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0 の下でのみ、Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i 内の原因となる β1\beta_1 を推定します。 3つのことがそれを壊します。 省略された変数バイアス: WWXXYY の両方を駆動し、観測されない場合、それはエラー εi=γWi+ui\varepsilon_i = \gamma W_i + u_i の中に存在し、Cov(Xi,Wi)0\text{Cov}(X_i, W_i) \neq 0Cov(Xi,εi)0\text{Cov}(X_i, \varepsilon_i) \neq 0 を強制します。マイクロ構造では、観測されていない情報の到着がボリュームとボラティリティを同時に駆動します。 測定誤差: ノイズの多いプロキシ Xi=Xi+νiX_i = X_i^* + \nu_iplim β^1OLS=β1σX2/(σX2+σν2)\text{plim } \hat{\beta}_1^{\text{OLS}} = \beta_1 \cdot \sigma_{X^*}^2 / (\sigma_{X^*}^2 + \sigma_\nu^2) を使用すると、常にゼロに向かって減衰します。ネット化された aggTrades フローは、断片化された市場全体にわたる真の署名付き注文フローのプロキシであり、目に見えない部分は測定誤差です。 同時性: Almgren-Chriss 衝撃校正] で、より鋭く、より具体的な形ですでに述べられています。これは、以下のすべての動機となる問題です。

IV ソリューション

因果関係のある市場効果を隔離する手段

機器 ZZ は、次の 2 つの条件を満たす必要があります。

  1. 関連性: Cov(Zi,Xi)0\text{Cov}(Z_i, X_i) \neq 0。テスト可能、そしてテストする必要があります。
  2. 除外: Cov(Zi,εi)=0\text{Cov}(Z_i, \varepsilon_i) = 0ZZ は、XX を通じてのみ YY に影響します。テストできません。これまで。これは経済的な議論であり、統計ではありません。

1 つの機器と 1 つの内因性リグレッサーの場合、推定量は 2 つの縮小型効果 (Wald 推定量) の比になります。

β^1IV=Cov(Zi,Yi)Cov(Zi,Xi)=π^reduced formπ^first stage\hat{\beta}_1^{\text{IV}} = \frac{\text{Cov}(Z_i, Y_i)}{\text{Cov}(Z_i, X_i)} = \frac{\hat{\pi}_{\text{reduced form}}}{\hat{\pi}_{\text{first stage}}}

コントロールと複数の機器では 2SLS を使用します。 ステージ 1: 機器とコントロールの内生変数 Xi=π0+πZZi+πCCi+viX_i = \pi_0 + \boldsymbol{\pi}_Z' \mathbf{Z}_i + \boldsymbol{\pi}_C' \mathbf{C}_i + v_i を回帰し、適合値 X^i\hat{X}_i を維持します。構造上、これらには機器主導の外生変動のみが含まれます。 ステージ 2: Yi=β0+β1X^i+βCCi+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i を実行します。マトリックス形式で、PZ=Z(ZZ)1Z\mathbf{P}_Z = \mathbf{Z}(\mathbf{Z}'\mathbf{Z})^{-1}\mathbf{Z}' を使用すると、次のようになります。

β^2SLS=(XPZX)1XPZy,Var(β^2SLS)=σ^2(XPZX)1.\hat{\boldsymbol{\beta}}_{2\text{SLS}} = \left(\mathbf{X}' \mathbf{P}_Z \mathbf{X}\right)^{-1} \mathbf{X}' \mathbf{P}_Z \mathbf{y}, \qquad \text{Var}(\hat{\boldsymbol{\beta}}_{2\text{SLS}}) = \hat{\sigma}^2 \left(\mathbf{X}' \mathbf{P}_Z \mathbf{X}\right)^{-1}.

これを手動で実行する人全員を陥れる罠: 文字通り 2 つの lstsq 呼び出しを実行すると、ステージ 2 の標準エラーが間違っています。 X^i\hat{X}_i生成された 回帰変数であり、残差分散は近似されたものではなく、元の XX から計算する必要があります。単純な 2 ステップの標準誤差は小さすぎるため、tt 統計が大きすぎて過剰拒否になってしまいます。実際の 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 ガンマ

2 つの推定パスの対比

テスト中の回帰は、Almgren-Chriss の記事からの永続的な影響の当てはめです。

ΔS5m=γQnet+noise,Qnet=taker buystaker sells.\Delta S_{5m} = \gamma\, Q_{\text{net}} + \text{noise}, \qquad Q_{\text{net}} = \text{taker buys} - \text{taker sells}.

QnetQ_{\text{net}} は、上記の同時性の議論により内生的です。この商品はウィンドウ内の独自の約定です。メーカー約定は、市場の価格経路ではなく、独自の見積スケジュールと在庫ポリシーによってトリガーされるため、誤差のモメンタム反応成分とはおそらく相関関係のない注文フローの変動の原因となります。除外制限 (フィルがネット フローへの寄与を通じてミッドを「のみ」動かすというもの) は議論すべき前提であり、クォート自体がシグナル駆動である場合に最も弱くなります。相場が短期間の価格予測を条件にしている場合、商品は汚染されており、この設計は失敗します。純粋な在庫管理ポリシーまたはスプレッドキャプチャポリシーによる約定は、クリーンなケースです。

フィル データは、実装不足と DIY TCA] で説明されている TCA レコードから取得されます。このログは、独自の fills からのスリッページ カーブのフィッティング サンプルを提供するのと同じログです。コントロール: ΔS\Delta S に遅れがあり、ウィンドウ内のボラティリティを実現しました。

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 γ\gamma、2SLS γ\gamma、第 1 段階の FF、および 2 つの係数間のギャップ (影響ではなく運動量反応である OLS 推定の割合) の 4 つの数値によって決まります。

第 1 段階の FF が 10 未満に戻った場合、それが結果です。独自のフィルは、γ\gamma を識別するには 5 分分解能のネット フローの一部にすぎず、正直な書き込みは 正直なネガティブ] の形式でネガティブです。弱い商品の陰性は真の発見です。これは、ガンマ フィットの内生性がこのサンプル サイズと期間では修正できないこと、および OLS γ\gamma に基づいて構築された取引前コスト推定値には、除去できない上方バイアスが存在することを示しています。

診断

因果関係を中心とした検証リング

第 1 段階 F (弱い楽器)。 Staiger-Stock の経験則: F>10F > 10。 1 つの内因性リグレッサーの Stock-Yogo 臨界値はより厳密です。最大 IV サイズの 10% の場合、1 つの機器では F>16.38F > 16.38、2 つの機器では 19.93、3 つの機器では 22.30。 15% サイズの場合、8.96 / 11.59 / 12.83; 20% の場合、6.66 / 8.75 / 9.54。

F=(Runrestricted2Rrestricted2)/q(1Runrestricted2)/(nk)F = \frac{(R_{\text{unrestricted}}^2 - R_{\text{restricted}}^2) / q}{(1 - R_{\text{unrestricted}}^2) / (n - k)}

Durbin-Wu-Hausman (IV は必要ですか)。 OLS に一貫性がある場合は効率も向上するため、切り替える前にテストしてください。残差拡張形式は実際的なものです。ステージ 1 を実行し、v^i=XiX^i\hat{v}_i = X_i - \hat{X}_i を保持してから、v^i\hat{v}_i をリグレッサーとして追加して OLS 構造回帰を実行します。 v^i\hat{v}_i の有意な係数は内生性の証拠です。

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 (過剰識別)。 q>pq > p 機器を使用すると、共同妥当性をテストできます: J=nRε^Z2χ2(qp)J = n \cdot R^2_{\hat{\varepsilon} \sim \mathbf{Z}} \sim \chi^2(q - p)。ここで、R2R^2 は、すべての機器および外生コントロールの 2SLS 残差を回帰することによって得られます。統計よりも注意点が重要です。Sargan は、さまざまな方法で無効な商品のみを検出します。すべての計測器が同じ省略された変数と相関している場合、テストは問題なく合格し、何も通知されません。

暗号通貨の微細構造に存在する手段

仮想通貨市場ネットワークにおける独立した衝撃

有効な金融商品を見つけるのが最大の難関であり、株式、企業、財務のスタンバイ(アナリストのカバレッジ、税金対策、棚ぼたキャッシュフロー)はここでは役に立たない。実際には 2 つのクラスが適用されます。

内生変数 楽器 理論的根拠
ネットテイカーフロー あなた自身の塗りつぶし 市場の価格経路ではなく、相場と在庫ポリシーによって決定されます。相場がシグナル条件付けされていない場合、*構造によって外生的です。
総流量/体積 取引所の機械的フロー: インデックスのリバランス、資金調達と決済のウィンドウ、計画された清算カスケード タイミングは情報の到着によってではなく、交換ルールによって設定されます。

落とし穴

隠されたパスは機器を損なう

弱い機器は大きな音で失敗することはありません。 最初のステージが弱い場合、2SLS は有限サンプル内で大まかに OLS の方に偏ります。

Bias2SLSBiasOLS1F1.\frac{\text{Bias}_{2\text{SLS}}}{\text{Bias}_{\text{OLS}}} \approx \frac{1}{F - 1}.

F=5F = 5 では、「因果関係」の推定値を報告しながら、OLS バイアスの 25% を保持します。解決策は、有限サンプルの動作がより優れている LIML か、機器の強度に関係なく有効な Anderson-Rubin テストです。

多くの楽器に偏りがあります。 Bias2SLS(q/n)BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}}。すべてのラグを Z\mathbf{Z} に投入して、第 1 段階の FF をブーストすると、推定値が OLS に直接戻されます。 q/nq/n が無視できない場合は、LIML、ジャックナイフ IV (JIVE)、または正規化された最初のステージを使用します。

除外制限はテストできません。 Sargan によるものでも、何かによるものでもありません。それは領域推論によって防御されており、その防御の正直な形式は感度分析です。つまり、結論を覆すにはどのくらいの規模の違反が必要になるでしょうか?

テイクアウト

ノイズの多いデータを通る信頼できる因果経路

  • デフレは 検索 からのバイアスを修正します。 係数のバイアスには何も影響しません。それらは異なる失敗であり、異なるツールが必要です。
  • 内生性バイアスはサンプルサイズによって消えません。厳密で、適切にブートストラップされ、ウォークフォワード検証された係数であっても、体系的に間違っている可能性があります。
  • Almgren-Chriss キャリブレーションのガンマ回帰は、指定された機器 (独自のフィル) と TCA パイプラインによって既に記録されたデータを使用した、ライブの社内インスタンスです。
  • 2SLS 係数の前に、第 1 段階の FF を報告します。 10 未満の係数は証拠ではなく、そう言うのは公表可能な結果です。
blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

市場の先を行く

ニュースレターを購読して、独占的なAI取引の洞察、市場分析、プラットフォームの更新情報を受け取りましょう。

プライバシーを尊重します。いつでも配信停止可能です。