← Terug naar artikelen
August 10, 2026
5 min leestijd

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

Er zijn twee structureel verschillende manieren waarop een regressie tegen je kan liegen, en deze blog heeft tot nu toe slechts één daarvan aangevallen.

De eerste is selectiebias in de zoekopdracht: je hebt tienduizend backtests uitgevoerd, waarvan je de beste hebt behouden, en het getal waar je naar kijkt is het maximum van een ruisverdeling in plaats van een effect. Dat is het onderwerp van de gedefleerd Sharpe-ratio en het sluitstuk ervan eerlijk negatief. De oplossing is om de zoekopdracht te prijzen.

De tweede is een vertekening van de coëfficiënt zelf, op basis van een enkele regressie waar je helemaal niet naar hebt gezocht. Als de regressor gecorreleerd is met de foutterm, is OLS bevooroordeeld en inconsistent - en in tegenstelling tot de bemonsteringsruis neemt dit niet af naarmate de steekproef groter is. Meer data maakt het verkeerde getal strakker. Geen enkele vorm van bootstrapping, walk-forward of deflatie raakt dit, omdat geen van deze methoden de identificatie in twijfel trekt, alleen de selectie.

Dit artikel gaat over de tweede mislukking, en het is hier geen abstracte zorg. Het Almgren-Chriss-kalibratieartikel past bij permanente impact γ\gamma door de middenkoersveranderingen van 5 minuten op de stroom van netto afnemers terug te dringen, wordt een R2R^2 van een paar procent en een coëfficiënt die tussen de dagen 2-5x beweegt, en noemt endogeniteit als de eerste structurele reden: "Flow reageert net zo goed op de prijs als de prijs reageert op de flow. Momentumtraders kopen omdat de prijs steeg; een naïeve OLS van rendement op flow pikt hun reactie op en schrijft deze toe aan impact." Het noemt ook de schone oplossing: je eigen vullingen, exogeen door constructie.

Dat is een instrumenteel-variabelenprobleem met een benoemd instrument en data die al intern zijn. Hieronder vindt u de schatter, de diagnostiek en het experiment.

Endogeniteit in één paragraaf

Verweven krachten creëren endogeniteit

OLS schat het causale verband β1\beta_1 in Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i alleen onder E[εiXi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0. Drie dingen breken het. Vertekening van weggelaten variabelen: als WW rijdt beide XX En YY en wordt niet opgemerkt, het leeft in de dwaling, εi=γWi+ui\varepsilon_i = \gamma W_i + u_i, En Cov(Xi,Wi)0\text{Cov}(X_i, W_i) \neq 0 krachten Cov(Xi,εi)0\text{Cov}(X_i, \varepsilon_i) \neq 0 – in de microstructuur drijft de niet-waargenomen informatie-aankomst volume en volatiliteit samen. Meetfout: met een luidruchtige proxy 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), altijd afgezwakt naar nul – de gesaldeerde aggTrades-stroom is een proxy voor de echte ondertekende orderstroom in een gefragmenteerde markt, en het deel dat u nooit ziet, is meetfouten. Gelijktijdigheid: al in scherpere en concretere vorm vermeld in de Almgren-Chriss impact kalibratie, wat het motiverende probleem is voor alles hieronder.

De IV-oplossing

Instrument dat een causaal markteffect isoleert

Een instrument ZZ moet aan twee voorwaarden voldoen:

  1. Relevantie: Cov(Zi,Xi)0\text{Cov}(Z_i, X_i) \neq 0. Testbaar, en je moet het testen.
  2. Uitsluiting: Cov(Zi,εi)=0\text{Cov}(Z_i, \varepsilon_i) = 0ZZ beïnvloedt YY alleen door XX. Niet testbaar. Ooit. Het is een economisch argument, geen statistiek.

Voor één instrument en één endogene regressor is de schatter een verhouding van twee gereduceerde vormeffecten (de Wald-schatter):

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

Met bedieningselementen en meerdere instrumenten maak je gebruik van 2SLS. Fase 1: regressie van de endogene variabele op instrumenten en bedieningselementen, Xi=π0+πZZi+πCCi+viX_i = \pi_0 + \boldsymbol{\pi}_Z' \mathbf{Z}_i + \boldsymbol{\pi}_C' \mathbf{C}_i + v_ien behoud de aangepaste waarden X^i\hat{X}_i – door hun constructie bevatten ze alleen instrumentgestuurde, exogene variatie. Fase 2: rennen Yi=β0+β1X^i+βCCi+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i. In matrixvorm, met 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}.

De val die iedereen vangt die dit met de hand rolt: als je er letterlijk twee uitvoert lstsq oproepen, zijn uw standaardfouten in fase 2 verkeerd. X^i\hat{X}_i is een gegenereerde regressor en de resterende variantie moet worden berekend op basis van het origineel XX, niet de gepaste. Naïeve standaardfouten in twee stappen zijn te klein, dus uw tt-statistieken zijn te groot en je zult te veel afwijzen. Gebruik een echte IV-implementatie:

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

Het experiment: OLS-gamma versus 2SLS-gamma

Twee schattingspaden contrasteren

De regressie die wordt getest is de permanente impact-fit uit het Almgren-Chriss-artikel:

Δ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}} is endogeen volgens het bovenstaande gelijktijdigheidsargument. Het instrument zijn uw eigen vullingen in het venster: uw makervullingen worden geactiveerd door uw eigen offerteschema en voorraadbeleid, niet door het prijspad van de markt. Ze vormen dus een bron van variatie in de orderstroom die plausibel niet gecorreleerd is met de momentumreactiecomponent van de fout. De uitsluitingsbeperking – dat je vullingen alleen het midden verplaatsen door hun bijdrage aan de nettostroom – is een aanname waar je over kunt discussiëren, en is het zwakst wanneer je citaten zelf signaalgestuurd zijn. Als uw offertes afhankelijk zijn van prijsvoorspellingen op de korte horizon, is het instrument vervuild en mislukt dit ontwerp. Vullingen vanuit een puur voorraadbeheer- of spread-capture-beleid zijn de schone zaak.

De opvulgegevens zijn afkomstig uit het TCA-record dat wordt beschreven in implementation shortfall and DIY TCA — hetzelfde logboek dat het passende voorbeeld levert voor slippage curves from your own fills. Bediening: vertraagd ΔS\Delta S en gerealiseerde volatiliteit in het venster.

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"])

Vier cijfers beslissen of dit de moeite waard was: de OLS γ\gamma, de 2SLS γ\gamma, de eerste fase FF, en de kloof tussen de twee coëfficiënten – wat het deel van de OLS-schatting is dat eerder een momentumreactie dan een impact was.

Als de eerste fase FF komt terug onder de 10, dat is het resultaat: eigen vullingen zijn een fractie van de nettostroom bij een resolutie van 5 minuten te klein om te identificeren γ\gamma, en het eerlijke artikel is negatief in de stijl van het eerlijke negatieve. Een zwak instrument-negatief is een echte bevinding: het vertelt u dat de endogeniteit in de gamma-fit niet kan worden opgelost bij deze steekproefomvang en horizon, en dat schattingen van de pre-trade-kosten voortbouwen op de OLS γ\gamma hebben een onverwijderbare opwaartse tendens.

Diagnostiek

Validatie rond een causaal pad

Eerste trap F (zwakke instrumenten). Vuistregel van Staiger-Stock: F>10F > 10. Stock-Yogo kritische waarden voor één endogene regressor zijn strenger - voor 10% maximale IV-grootte, F>16.38F > 16.38 met één instrument, 19.93 met twee, 22.30 met drie; voor 15% maat, 8,96 / 11,59 / 12,83; voor 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 (is IV zelfs nodig). Als OLS consistent is, is het ook efficiënter, dus test voordat u overstapt. De restvergrotingsvorm is de praktische: voer fase 1 uit, behouden v^i=XiX^i\hat{v}_i = X_i - \hat{X}_ien voer vervolgens de structurele OLS-regressie uit met v^i\hat{v}_i toegevoegd als regressor. Een significante coëfficiënt op v^i\hat{v}_i is een bewijs van endogeniteit.

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 (overidentificatie). Met q>pq > p instrumenten waarmee je de gezamenlijke validiteit kunt testen: J=nRε^Z2χ2(qp)J = n \cdot R^2_{\hat{\varepsilon} \sim \mathbf{Z}} \sim \chi^2(q - p), waar de R2R^2 komt voort uit het terugdringen van de 2SLS-residuen op alle instrumenten en exogene controles. Het voorbehoud is belangrijker dan de statistiek: Sargan detecteert alleen instrumenten die op verschillende manieren ongeldig zijn. Als elk instrument gecorreleerd is met dezelfde weggelaten variabele, slaagt de test zonder problemen en vertelt deze u niets.

Instrumenten die bestaan in crypto-microstructuur

Onafhankelijke schok in een cryptomarktnetwerk

Het vinden van een geldig instrument is de hele moeilijkheid, en de paraatheid van aandelen-bedrijfsfinanciering (dekking door analisten, belastingschilden, meevallers in de cashflow) is hier inert. Er zijn eigenlijk twee klassen van toepassing:

Endogene variabele Instrument Reden
Nettonemerstroom Je eigen vullingen Gedreven door uw offerte- en voorraadbeleid, niet door het prijspad van de markt — exogeen door constructie als uw offertes niet signaalafhankelijk zijn
Totale stroom/volume Beursmechanische stromen: indexherbalancering, financieringsafwikkelingsvensters, geplande liquidatiecascades De timing wordt bepaald door de uitwisselingsregels, niet door de aankomst van informatie

Valkuilen

Verborgen paden ondermijnen een instrument

Zwakke instrumenten falen niet luid. Met een zwakke eerste fase is 2SLS in eindige samples bevooroordeeld in de richting van OLS

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

Bij F=5F = 5 u behoudt 25% van de OLS-bias terwijl u een "causale" schatting rapporteert. De remedies zijn LIML, die een beter eindig-steekproefgedrag heeft, of de Anderson-Rubin-test, die geldig is ongeacht de sterkte van het instrument.

Veel instrumenten zijn vertekend. Bias2SLS(q/n)BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}}. Lag van alles erin gooien Z\mathbf{Z} om de eerste fase een boost te geven FF stuurt de schatting rechtstreeks terug naar OLS. Als q/nq/n niet te verwaarlozen is, gebruik dan LIML, jackknife IV (JIVE), of een geregulariseerde eerste trap.

De uitsluitingsbeperking kan niet worden getest. Niet door Sargan, door wat dan ook. Het wordt verdedigd met domeinredeneringen, en de eerlijke vorm van die verdediging is een gevoeligheidsanalyse: hoe groot is een overtreding nodig om de conclusie ongedaan te maken?

Afhaalrestaurants

Vertrouwd causaal pad door luidruchtige gegevens

  • Deflatie corrigeert de bias van de search. Het doet niets voor de bias in de coëfficiënt. Het zijn verschillende mislukkingen en er zijn verschillende hulpmiddelen nodig.
  • Endogeniteitsbias verdwijnt niet met de steekproefomvang. Een strakke, goed opgezette, voorwaarts gevalideerde coëfficiënt kan nog steeds systematisch verkeerd zijn.
  • De gammaregressie in de Almgren-Chriss-kalibratie is een live, intern exemplaar, met een benoemd instrument (eigen vullingen) en de gegevens die al door de TCA-pijplijn zijn vastgelegd.
  • Rapporteer de eerste fase FF vóór de 2SLS-coëfficiënt. Onder de 10 is de coëfficiënt geen bewijs, maar als dit wel het geval is, is dit het publiceerbare resultaat.
Disclaimer: De informatie in dit artikel is uitsluitend bedoeld voor educatieve en informatieve doeleinden en vormt geen financieel, beleggings- of handelsadvies. Het handelen in cryptovaluta brengt een aanzienlijk risico op verlies met zich mee.

Auteurs

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

Blijf de markt voor

Abonneer je op onze nieuwsbrief voor exclusieve AI-handelsinzichten, marktanalyses en platformupdates.

We respecteren je privacy. Je kunt je op elk moment afmelden.