← Retour aux articles
August 10, 2026
5 min de lecture

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

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 γ\gamma en régressant les changements de prix moyens de 5 minutes sur le flux net de preneurs, on obtient un R2R^2 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

Des forces entrelacées créent l'endogénéité

OLS estime la causalité β1\beta_1 dans Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i seulement sous E[εiXi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0. Trois choses le brisent. Biais de variable omise : si WW conduit les deux XX et YY et inaperçu, il vit dans l'erreur, εi=γWi+ui\varepsilon_i = \gamma W_i + u_i, et Cov(Xi,Wi)0\text{Cov}(X_i, W_i) \neq 0 forces Cov(Xi,εi)0\text{Cov}(X_i, \varepsilon_i) \neq 0 - dans la microstructure, l'arrivée d'informations inobservées entraîne ensemble volume et volatilité. Erreur de mesure : avec un proxy bruyant 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), 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

Instrument isolant un effet causal de marché

Un instrument ZZ doit remplir deux conditions :

  1. Pertinence : Cov(Zi,Xi)0\text{Cov}(Z_i, X_i) \neq 0. Testable, et vous devez le tester.
  2. Exclusions : Cov(Zi,εi)=0\text{Cov}(Z_i, \varepsilon_i) = 0ZZ affecte YY seulement à travers XX. 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) :

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

Avec des commandes et plusieurs instruments, vous utilisez 2SLS. Étape 1 : régresser la variable endogène sur les instruments et contrôles, Xi=π0+πZZi+πCCi+viX_i = \pi_0 + \boldsymbol{\pi}_Z' \mathbf{Z}_i + \boldsymbol{\pi}_C' \mathbf{C}_i + v_i, et conservez les valeurs ajustées X^i\hat{X}_i — par construction, ils ne contiennent que des variations exogènes induites par les instruments. Étape 2 : courir Yi=β0+β1X^i+βCCi+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i. Sous forme matricielle, avec 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}.

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. X^i\hat{X}_i est un régresseur généré, et la variance résiduelle doit être calculée à partir de l'original XX, pas celui ajusté. Les erreurs standard naïves en deux étapes sont trop petites, donc votre tt-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

Deux chemins d'estimation contrastés

La régression testée est l'ajustement à impact permanent de l'article d'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}} 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 ΔS\Delta 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 γ\gamma, le 2SLS γ\gamma, la première étape FF, 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 FF 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. γ\gamma, 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 γ\gamma comportent un biais ascendant inamovible.

Diagnostic

La validation tourne autour d'un chemin causal

F du premier étage (instruments faibles). Règle empirique de Staiger-Stock : F>10F > 10. Les valeurs critiques de Stock-Yogo pour un régresseur endogène sont plus strictes : pour une taille IV maximale de 10 %, F>16.38F > 16.38 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.

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 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 v^i=XiX^i\hat{v}_i = X_i - \hat{X}_i, puis exécutez la régression structurelle OLS avec v^i\hat{v}_i ajouté comme régresseur. Un coefficient important sur v^i\hat{v}_i 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 q>pq > p instruments avec lesquels vous pouvez tester la validité conjointe : J=nRε^Z2χ2(qp)J = n \cdot R^2_{\hat{\varepsilon} \sim \mathbf{Z}} \sim \chi^2(q - p), où le R2R^2 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

Choc indépendant dans un réseau de marché cryptographique

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

Des chemins cachés minent un instrument

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

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

À F=5F = 5 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. ** Bias2SLS(q/n)BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}}. Jeter des décalages de tout dans Z\mathbf{Z} pour dynamiser la première étape FF renvoie l'estimation directement à OLS. Si q/nq/n 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

Chemin causal fiable à travers des données bruitées

  • 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 FF avant le coefficient 2SLS. En dessous de 10, le coefficient ne constitue pas une preuve, et le dire est le résultat publiable.
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

Gardez une longueur d'avance sur le marché

Abonnez-vous à notre newsletter pour des insights exclusifs sur le trading IA, des analyses de marché et des mises à jour de la plateforme.

Nous respectons votre vie privée. Désabonnement possible à tout moment.