← लेखों की सूची पर वापस जाएँ
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

रिग्रेशन आपके साथ संरचनात्मक रूप से दो अलग तरीकों से झूठ बोल सकता है, और इस ब्लॉग ने अब तक उनमें से केवल एक पर हमला किया है।

पहला तरीका सर्च में चयन-पक्षपात है: आपने दस हजार बैकटेस्ट चलाए, सबसे अच्छा परिणाम रखा, और जिस संख्या को देख रहे हैं वह प्रभाव के बजाय शोर-वितरण का अधिकतम है। यही डिफ्लेटेड शार्प अनुपात और उसके निष्कर्ष ईमानदार नकारात्मक परिणाम का विषय है। इसका समाधान सर्च की कीमत तय करना है।

दूसरा तरीका स्वयं गुणांक में पक्षपात है, ऐसे एकल रिग्रेशन में जिसे आपने बिल्कुल खोजा ही नहीं। यदि रिग्रेसर त्रुटि पद से सहसंबद्ध है, तो OLS पक्षपाती और असंगत होता है — और सैंपलिंग शोर के विपरीत, यह सैंपल आकार के साथ कम नहीं होता। अधिक डेटा गलत संख्या को और अधिक कसकर स्थापित करता है। बूटस्ट्रैपिंग, वॉक-फॉरवर्ड या डिफ्लेशन की कोई मात्रा इसे नहीं छूती, क्योंकि इनमें से कोई भी पहचान पर सवाल नहीं उठाता, केवल चयन पर उठाता है।

यह लेख दूसरी विफलता के बारे में है, और यह यहां कोई अमूर्त चिंता नहीं है। Almgren-Chriss कैलिब्रेशन लेख स्थायी प्रभाव γ\gamma का अनुमान नेट टेकर फ्लो पर 5-मिनट के मिड-प्राइस बदलावों का रिग्रेशन करके लगाता है, कुछ प्रतिशत का R2R^2 और दिनों के बीच 2-5x बदलने वाला गुणांक पाता है, और एंडोजेनेटी को पहला संरचनात्मक कारण बताता है: "फ्लो कीमत पर उतना ही प्रतिक्रिया करता है जितनी कीमत फ्लो पर। मोमेंटम ट्रेडर इसलिए खरीदते हैं क्योंकि कीमत बढ़ी; फ्लो पर रिटर्न का भोला OLS उनकी प्रतिक्रिया को पकड़कर उसे प्रभाव मान लेता है।" लेख साफ समाधान भी बताता है — आपके अपने फिल, जो निर्माण से ही एक्सोजेनस हैं।

यह एक नामित इंस्ट्रूमेंट वाली इंस्ट्रूमेंटल-वैरीएबल समस्या है, और डेटा पहले से हमारे पास है। नीचे एस्टीमेटर, डायग्नोस्टिक्स और प्रयोग दिए गए हैं।

एक पैराग्राफ में एंडोजेनेटी

आपस में गुंथी शक्तियां एंडोजेनेटी बनाती हैं

OLS कारणात्मक β1\beta_1 का अनुमान Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i में केवल E[εiXi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0 के अंतर्गत लगाता है। तीन चीजें इसे तोड़ती हैं। छोड़े गए चर का पक्षपात: यदि WW XX और YY दोनों को चलाता है और देखा नहीं गया है, तो वह त्रुटि में रहता है, εi=γWi+ui\varepsilon_i = \gamma W_i + u_i, और Cov(Xi,Wi)0\text{Cov}(X_i, W_i) \neq 0 से Cov(Xi,εi)0\text{Cov}(X_i, \varepsilon_i) \neq 0 अनिवार्य हो जाता है — माइक्रोस्ट्रक्चर में अनदेखी सूचना का आगमन वॉल्यूम और अस्थिरता दोनों को साथ चलाता है। मापन त्रुटि: शोर वाले प्रॉक्सी Xi=Xi+νiX_i = X_i^* + \nu_i के साथ, plim β^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 को दो शर्तें पूरी करनी होंगी:

  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 को प्रभावित करता है। यह जांचने योग्य नहीं है। कभी नहीं। यह सांख्यिकी नहीं, आर्थिक तर्क है।

एक इंस्ट्रूमेंट और एक एंडोजेनस रिग्रेसर के लिए एस्टीमेटर दो reduced-form प्रभावों का अनुपात है (वाल्ड एस्टीमेटर):

β^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}.

वह जाल जिसमें हाथ से इसे लिखने वाला हर व्यक्ति फंसता है: अगर आप सचमुच दो lstsq कॉल चलाते हैं, तो स्टेज-2 की standard errors गलत होंगी। X^i\hat{X}_i एक generated रिग्रेसर है, और residual variance की गणना फिट किए गए XX से नहीं, मूल XX से करनी चाहिए। भोली दो-चरणीय standard errors बहुत छोटी होती हैं, इसलिए आपके tt-stats बहुत बड़े होंगे और आप जरूरत से ज्यादा बार शून्य परिकल्पना को खारिज करेंगे। असली IV implementation का उपयोग करें:

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 लेख का स्थायी-प्रभाव फिट है:

Δ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}} ऊपर दिए गए समकालिकता तर्क के कारण एंडोजेनस है। इंस्ट्रूमेंट विंडो में आपके अपने फिल हैं: आपके maker फिल आपके अपने quoting schedule और inventory policy से ट्रिगर होते हैं, बाजार के price path से नहीं, इसलिए वे ऑर्डर-फ्लो में बदलाव का ऐसा स्रोत हैं जो संभवतः त्रुटि के momentum-reaction घटक से असहसंबद्ध है। बहिष्करण प्रतिबंध — आपके फिल मिड को केवल नेट फ्लो में अपने योगदान के माध्यम से ही बदलते हैं — वह धारणा है जिस पर बहस करनी है, और यह ठीक तब सबसे कमजोर होती है जब आपकी quoting स्वयं signal-driven हो। अगर आपके quotes अल्प-अवधि price prediction पर निर्भर हैं, तो इंस्ट्रूमेंट दूषित है और यह डिजाइन विफल होता है। शुद्ध inventory-management या spread-capture policy से आए फिल साफ मामला हैं।

फिल डेटा implementation shortfall और DIY TCA में बताए गए TCA रिकॉर्ड से आता है — वही लॉग आपके अपने फिल से slippage curves के fitting sample की आपूर्ति करता है। कंट्रोल: विंडो में lagged ΔS\Delta S और realized volatility।

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, first-stage FF, और दोनों गुणांकों के बीच का अंतर — यही OLS अनुमान का वह हिस्सा है जो प्रभाव के बजाय momentum reaction था।

अगर first-stage FF 10 से कम आता है, तो वही परिणाम है: 5-मिनट resolution पर own fills net flow का बहुत छोटा अंश हैं और γ\gamma की पहचान नहीं कर सकते, और ईमानदार लेखन ईमानदार नकारात्मक परिणाम की शैली में नकारात्मक होगा। कमजोर इंस्ट्रूमेंट का नकारात्मक परिणाम वास्तविक खोज है — यह बताता है कि इस sample size और horizon पर गामा फिट की एंडोजेनेटी ठीक नहीं की जा सकती, और OLS γ\gamma पर बने pre-trade cost estimates में ऊपर की ओर ऐसा पक्षपात है जिसे हटाया नहीं जा सकता।

डायग्नोस्टिक्स

कारणात्मक पथ के चारों ओर सत्यापन के छल्ले

First-stage F (कमजोर इंस्ट्रूमेंट)। Staiger-Stock का सामान्य नियम: F>10F > 10। एक एंडोजेनस रिग्रेसर के लिए Stock-Yogo critical values और कड़े हैं — 10% अधिकतम IV size के लिए, एक इंस्ट्रूमेंट के साथ F>16.38F > 16.38, दो के साथ 19.93, तीन के साथ 22.30; 15% size के लिए, 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 consistent है तो वह अधिक efficient भी है, इसलिए बदलने से पहले जांच करें। Residual-augmentation रूप व्यावहारिक है: स्टेज 1 चलाएं, v^i=XiX^i\hat{v}_i = X_i - \hat{X}_i रखें, फिर v^i\hat{v}_i को रिग्रेसर के रूप में जोड़कर OLS structural regression चलाएं। 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 (overidentification)। 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 सभी इंस्ट्रूमेंट और exogenous controls पर 2SLS residuals का रिग्रेशन करने से आता है। सावधानी statistic से अधिक महत्वपूर्ण है: Sargan केवल उन इंस्ट्रूमेंट को पकड़ता है जो अलग-अलग तरीकों से अवैध हैं। यदि हर इंस्ट्रूमेंट उसी छोड़े गए चर से सहसंबद्ध है, तो टेस्ट साफ पास हो जाता है और आपको कुछ नहीं बताता।

क्रिप्टो माइक्रोस्ट्रक्चर में मौजूद इंस्ट्रूमेंट

क्रिप्टो बाजार नेटवर्क में स्वतंत्र झटका

वैध इंस्ट्रूमेंट ढूंढना पूरी कठिनाई है, और इक्विटी-कॉरपोरेट-फाइनेंस के सामान्य साधन (analyst coverage, tax shields, windfall cash flow) यहां निष्क्रिय हैं। वास्तव में दो वर्ग लागू होते हैं:

एंडोजेनस चर इंस्ट्रूमेंट तर्क
नेट टेकर फ्लो आपके अपने फिल आपकी quoting और inventory policy से संचालित, बाजार के price path से नहीं — निर्माण से exogenous यदि आपके quotes signal-conditioned नहीं हैं
aggregate flow / volume एक्सचेंज-मैकेनिकल फ्लो: index rebalancing, funding-settlement windows, scheduled liquidation cascades समय एक्सचेंज के नियमों से तय होता है, सूचना के आगमन से नहीं

जोखिम

छिपे हुए पथ इंस्ट्रूमेंट को कमजोर करते हैं

कमजोर इंस्ट्रूमेंट जोर से विफल नहीं होते। कमजोर first stage के साथ, सीमित सैंपल में 2SLS OLS की ओर पक्षपाती होता है, लगभग

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

F=5F = 5 पर आप OLS पक्षपात का 25% बनाए रखते हुए "कारणात्मक" अनुमान रिपोर्ट करते हैं। उपाय LIML है, जिसका finite-sample व्यवहार बेहतर है, या Anderson-Rubin टेस्ट, जो इंस्ट्रूमेंट की strength की परवाह किए बिना वैध है।

बहुत सारे इंस्ट्रूमेंट पक्षपात पैदा करते हैं। Bias2SLS(q/n)BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}}। first-stage FF बढ़ाने के लिए हर चीज के lag को Z\mathbf{Z} में डालना अनुमान को सीधे OLS की ओर वापस ले जाता है। अगर q/nq/n नगण्य नहीं है, तो LIML, jackknife IV (JIVE) या regularized first stage का उपयोग करें।

बहिष्करण प्रतिबंध की जांच नहीं की जा सकती। Sargan से नहीं, किसी भी चीज से नहीं। इसका बचाव domain reasoning से किया जाता है, और उस बचाव का ईमानदार रूप sensitivity analysis है: निष्कर्ष को पलटने के लिए कितने बड़े उल्लंघन की जरूरत होगी?

मुख्य बातें

शोर वाले डेटा में विश्वसनीय कारणात्मक पथ

  • Deflation search से आने वाले पक्षपात को ठीक करता है। यह coefficient में पक्षपात के लिए कुछ नहीं करता। ये अलग विफलताएं हैं और अलग औजार मांगती हैं।
  • Endogeneity bias sample size के साथ गायब नहीं होता। कसकर अनुमानित, अच्छे से bootstrapped, walk-forward-validated coefficient भी व्यवस्थित रूप से गलत हो सकता है।
  • Almgren-Chriss calibration में gamma regression एक वास्तविक, in-house उदाहरण है, जिसमें नामित इंस्ट्रूमेंट (own fills) और TCA pipeline द्वारा पहले से लॉग किया गया डेटा मौजूद है।
  • 2SLS coefficient से पहले first-stage FF रिपोर्ट करें। 10 से नीचे coefficient प्रमाण नहीं है, और यह कहना ही publishable result है।
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 ट्रेडिंग इनसाइट्स, मार्केट एनालिसिस और प्लेटफ़ॉर्म अपडेट के लिए हमारे न्यूज़लेटर को सब्सक्राइब करें।

हम आपकी गोपनीयता का सम्मान करते हैं। किसी भी समय अनसब्सक्राइब करें।