The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
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 door de middenkoersveranderingen van 5 minuten op de stroom van netto afnemers terug te dringen, wordt een 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

OLS schat het causale verband in alleen onder . Drie dingen breken het. Vertekening van weggelaten variabelen: als rijdt beide En en wordt niet opgemerkt, het leeft in de dwaling, , En krachten – in de microstructuur drijft de niet-waargenomen informatie-aankomst volume en volatiliteit samen. Meetfout: met een luidruchtige proxy , , 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

Een instrument moet aan twee voorwaarden voldoen:
- Relevantie: . Testbaar, en je moet het testen.
- Uitsluiting: — beïnvloedt alleen door . 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):
Met bedieningselementen en meerdere instrumenten maak je gebruik van 2SLS. Fase 1: regressie van de endogene variabele op instrumenten en bedieningselementen, en behoud de aangepaste waarden – door hun constructie bevatten ze alleen instrumentgestuurde, exogene variatie. Fase 2: rennen . In matrixvorm, met :
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. is een gegenereerde regressor en de resterende variantie moet worden berekend op basis van het origineel , niet de gepaste. Naïeve standaardfouten in twee stappen zijn te klein, dus uw -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

De regressie die wordt getest is de permanente impact-fit uit het Almgren-Chriss-artikel:
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 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 , de 2SLS , de eerste fase , 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 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 , 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 hebben een onverwijderbare opwaartse tendens.
Diagnostiek

Eerste trap F (zwakke instrumenten). Vuistregel van Staiger-Stock: . Stock-Yogo kritische waarden voor één endogene regressor zijn strenger - voor 10% maximale IV-grootte, 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.
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 en voer vervolgens de structurele OLS-regressie uit met toegevoegd als regressor. Een significante coëfficiënt op 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 instrumenten waarmee je de gezamenlijke validiteit kunt testen: , waar de 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

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

Zwakke instrumenten falen niet luid. Met een zwakke eerste fase is 2SLS in eindige samples bevooroordeeld in de richting van OLS
Bij 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. . Lag van alles erin gooien om de eerste fase een boost te geven stuurt de schatting rechtstreeks terug naar OLS. Als 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

- 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 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.
Auteurs
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.