The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
Il existe deux manières structurellement différentes pour une régression de vous mentir, et ce blog n’a jusqu’à présent attaqué que l’une d’entre elles.
Le premier est le biais de sélection dans la recherche : vous avez effectué dix mille backtests, vous avez conservé le meilleur, et le nombre que vous regardez est le maximum d'une distribution de bruit plutôt que d'un effet. C'est le sujet du ratio de Sharpe dégonflé et de sa pierre angulaire honnête négatif. La solution consiste à fixer le prix de la recherche.
La seconde est le biais dans le coefficient lui-même, sur une seule régression sur laquelle vous n'avez jamais cherché du tout. Si le régresseur est corrélé au terme d’erreur, l’OLS est biaisé et incohérent – et contrairement au bruit d’échantillonnage, celui-ci ne diminue pas avec la taille de l’échantillon. Plus de données rendent le mauvais chiffre plus serré. Aucun amorçage, marche en avant ou déflation n’y touche, car aucune de ces méthodes ne remet en question l’identification, seulement la sélection.
Cet article concerne le deuxième échec, et il ne s’agit pas ici d’une préoccupation abstraite. L'article sur l'étalonnage d'Almgren-Chriss s'adapte à l'impact permanent en régressant les changements de prix moyens de 5 minutes sur le flux net de preneurs, on obtient un de quelques pour cent et un coefficient qui évolue de 2 à 5 fois entre les jours, et cite l'endogénéité comme première raison structurelle : « Le flux réagit au prix autant que le prix réagit au flux. Les traders Momentum achètent parce que le prix a augmenté ; un MCO naïf des rendements sur le flux capte leur réaction et l'attribue à l'impact. Il nomme également la solution propre – vos propres remplissages, exogènes par construction.
Il s'agit d'un problème de variables instrumentales avec un instrument nommé et des données déjà en interne. Vous trouverez ci-dessous l'estimateur, les diagnostics et l'expérience.
L'endogénéité en un seul paragraphe

OLS estime la causalité dans seulement sous . Trois choses le brisent. Biais de variable omise : si conduit les deux et et inaperçu, il vit dans l'erreur, , et forces - dans la microstructure, l'arrivée d'informations inobservées entraîne ensemble volume et volatilité. Erreur de mesure : avec un proxy bruyant , , toujours atténué vers zéro - le flux aggTrades net est un indicateur du véritable flux d'ordres signés sur un marché fragmenté, et la partie que vous ne voyez jamais est l'erreur de mesure. Simultanéité : déjà indiqué sous une forme plus précise et plus concrète dans le Calibrage d'impact d'Almgren-Chriss, qui est le problème motivant pour tout ce qui suit.
La solution IV

Un instrument doit remplir deux conditions :
- Pertinence : . Testable, et vous devez le tester.
- Exclusions : — affecte seulement à travers . Non testable. Jamais. C'est un argument économique, pas une statistique.
Pour un instrument et un régresseur endogène, l'estimateur est un rapport de deux effets de forme réduite (l'estimateur de Wald) :
Avec des commandes et plusieurs instruments, vous utilisez 2SLS. Étape 1 : régresser la variable endogène sur les instruments et contrôles, , et conservez les valeurs ajustées — par construction, ils ne contiennent que des variations exogènes induites par les instruments. Étape 2 : courir . Sous forme matricielle, avec :
Le piège qui attrape tous ceux qui lancent ceci à la main : si vous en exécutez littéralement deux lstsq appels, vos erreurs standard de niveau 2 sont fausses. est un régresseur généré, et la variance résiduelle doit être calculée à partir de l'original , pas celui ajusté. Les erreurs standard naïves en deux étapes sont trop petites, donc votre -les statistiques sont trop grandes et vous les rejetterez excessivement. Utilisez une véritable implémentation 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
L'expérience : gamma OLS versus gamma 2SLS

La régression testée est l'ajustement à impact permanent de l'article d'Almgren-Chriss :
est endogène par l'argument de simultanéité ci-dessus. L'instrument est vos propres remplissages dans la fenêtre : les remplissages de votre fabricant sont déclenchés par votre propre calendrier de cotation et votre politique d'inventaire, et non par l'évolution des prix du marché, ils sont donc une source de variation du flux d'ordres qui n'est vraisemblablement pas corrélée à la composante dynamique-réaction de l'erreur. La restriction d'exclusion – selon laquelle vos remplissages déplacent le milieu uniquement grâce à leur contribution au flux net – est l'hypothèse sur laquelle il faut discuter, et elle est la plus faible exactement lorsque votre cotation est elle-même pilotée par un signal. Si vos cotations dépendent de prévisions de prix à court terme, l'instrument est contaminé et cette conception échoue. Les remplissages issus d’une politique pure de gestion des stocks ou de capture de spreads sont un cas clair.
Les données de remplissage proviennent de l'enregistrement TCA décrit dans implementation shortfall et DIY TCA — le même journal qui fournit l'échantillon d'ajustement pour les courbes de glissement de vos propres remplissages. Contrôles : décalés et la volatilité réalisée dans la fenêtre.
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"])
Quatre chiffres décident si cela en vaut la peine : l'OLS , le 2SLS , la première étape , et l'écart entre les deux coefficients - qui est la part de l'estimation OLS qui était une réaction de dynamique plutôt qu'un impact.
Si la première étape revient en dessous de 10, voilà le résultat : les propres remplissages représentent une trop petite fraction du débit net à une résolution de 5 minutes pour être identifiés. , et l'article honnête est un négatif dans le style de le négatif honnête. Un résultat négatif d'instrument faible est une découverte réelle : il vous indique que l'endogénéité de l'ajustement gamma n'est pas réparable à cette taille d'échantillon et à cet horizon, et que les estimations de coûts pré-négociation construites sur l'OLS comportent un biais ascendant inamovible.
Diagnostic

F du premier étage (instruments faibles). Règle empirique de Staiger-Stock : . Les valeurs critiques de Stock-Yogo pour un régresseur endogène sont plus strictes : pour une taille IV maximale de 10 %, avec un instrument, 19h93 avec deux, 22h30 avec trois ; pour une taille de 15 %, 8,96 / 11,59 / 12,83 ; pour 20%, 6,66 / 8,75 / 9,54.
Durbin-Wu-Hausman (IV est-il même nécessaire). Si l'OLS est cohérent, il est également plus efficace, alors testez avant de changer. La forme d'augmentation résiduelle est la plus pratique : exécutez l'étape 1, conservez , puis exécutez la régression structurelle OLS avec ajouté comme régresseur. Un coefficient important sur est une preuve d’endogénéité.
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 (suridentification). Avec instruments avec lesquels vous pouvez tester la validité conjointe : , où le provient de la régression des résidus 2SLS sur tous les instruments et contrôles exogènes. La mise en garde compte plus que la statistique : Sargan ne détecte que les instruments invalides de différentes manières. Si chaque instrument est corrélé avec la même variable omise, le test réussit proprement et ne vous dit rien.
Instruments qui existent dans la microstructure crypto

Toute la difficulté réside dans la recherche d’un instrument valable, et les leviers de financement en fonds propres (couverture des analystes, avantages fiscaux, flux de trésorerie exceptionnels) sont ici inertes. Deux classes s'appliquent en réalité :
| Variable endogène | Instrument | Justification |
|---|---|---|
| Flux net de preneurs | Vos propres remplissages | Motivés par votre politique de cotation et d'inventaire, et non par l'évolution des prix du marché – exogène par construction si vos cotations ne sont pas conditionnées par le signal |
| Débit/volume des agrégats | Flux mécaniques d'échange : rééquilibrage des indices, fenêtres de financement, cascades de liquidations programmées | Le timing est fixé par les règles d'échange et non par l'arrivée des informations |
Pièges

Les instruments faibles n'échouent pas bruyamment. Avec un premier étage faible, 2SLS est biaisé vers l'OLS dans des échantillons finis, à peu près
À vous conservez 25 % du biais OLS tout en rapportant une estimation « causale ». Les solutions sont le LIML, qui présente un meilleur comportement sur échantillon fini, ou le test d'Anderson-Rubin, qui est valable quelle que soit la puissance de l'instrument.
** De nombreux instruments sont biaisés. ** . Jeter des décalages de tout dans pour dynamiser la première étape renvoie l'estimation directement à OLS. Si n'est pas négligeable, utilisez LIML, jackknife IV (JIVE), ou un premier étage régularisé.
La restriction d'exclusion ne peut pas être testée. Ni par Sargan, ni par quoi que ce soit. Elle est défendue par un raisonnement de domaine, et la forme honnête de cette défense est une analyse de sensibilité : quelle serait l’ampleur de la violation pour renverser la conclusion ?
À retenir

- La déflation corrige le biais de la recherche. Cela ne fait rien pour le biais du coefficient. Ce sont des échecs différents et nécessitent des outils différents.
- Le biais d'endogénéité ne disparaît pas avec la taille de l'échantillon. Un coefficient serré, bien initialisé et validé par avance peut toujours être systématiquement erroné.
- La régression gamma dans l'étalonnage d'Almgren-Chriss est une instance interne en direct, avec un instrument nommé (propres remplissages) et les données déjà enregistrées par le pipeline TCA.
- Signaler la première étape avant le coefficient 2SLS. En dessous de 10, le coefficient ne constitue pas une preuve, et le dire est le résultat publiable.
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.