← Volver a los artículos
August 10, 2026
5 min de lectura

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

Hay dos formas estructuralmente diferentes en las que una regresión puede mentirle, y hasta ahora este blog sólo ha atacado una de ellas.

El primero es el sesgo de selección en la búsqueda: ejecutaste diez mil pruebas retrospectivas, conservaste lo mejor y el número que estás viendo es el máximo de una distribución de ruido en lugar de un efecto. Ese es el tema de la proporción de Sharpe desinflada y su piedra angular negativo honesto. La solución es fijar el precio de la búsqueda.

El segundo es el sesgo en el coeficiente en sí, en una regresión única que nunca buscó en absoluto. Si el regresor está correlacionado con el término de error, MCO es sesgado e inconsistente y, a diferencia del ruido de muestreo, este no se reduce con el tamaño de la muestra. Más datos hacen que el número equivocado sea más ajustado. Ninguna cantidad de bootstrapping, walk-forward o deflación lo toca, porque ninguno de esos métodos cuestiona la identificación, sólo la selección.

Este artículo trata sobre el segundo fracaso y no es una preocupación abstracta aquí. El artículo sobre calibración de Almgren-Chriss se ajusta al impacto permanente γ\gamma al hacer una regresión de los cambios de precio medio de 5 minutos en el flujo neto de compradores, obtiene una R2R^2 de un pequeño porcentaje y un coeficiente que se mueve entre 2 y 5 veces entre días, y menciona la endogeneidad como la primera razón estructural: "El flujo responde al precio tanto como el precio responde al flujo. Los traders de impulso compran porque el precio subió; un MCO ingenuo de rendimientos sobre el flujo recoge su reacción y la atribuye al impacto". También nombra la solución limpia: sus propios rellenos, exógenos por construcción.

Se trata de un problema de variables instrumentales con un instrumento con nombre y datos ya internos. A continuación se muestra el estimador, el diagnóstico y el experimento.

Endogeneidad en un párrafo

Fuerzas entrelazadas crean endogeneidad

MCO estima la causa β1\beta_1 en Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i solo bajo E[εiXi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0. Tres cosas lo rompen. Sesgo de variable omitida: si WW conduce ambos XX y YY y es inadvertida, vive en el error, εi=γWi+ui\varepsilon_i = \gamma W_i + u_i, y Cov(Xi,Wi)0\text{Cov}(X_i, W_i) \neq 0 efectivo Cov(Xi,εi)0\text{Cov}(X_i, \varepsilon_i) \neq 0 — en la microestructura, la llegada de información no observada impulsa el volumen y la volatilidad al mismo tiempo. Error de medición: con un proxy ruidoso 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), siempre atenuado hacia cero: el flujo de aggTrades neto es un indicador del verdadero flujo de órdenes firmadas en un mercado fragmentado, y la parte que nunca ve es el error de medición. Simultaneidad: ya indicado de forma más nítida y concreta en la calibración de impacto de Almgren-Chriss, que es el problema que motiva todo lo que sigue a continuación.

La solución intravenosa

Instrumento que aísla un efecto causal de mercado

un instrumento ZZ debe cumplir dos condiciones:

  1. Relevancia: Cov(Zi,Xi)0\text{Cov}(Z_i, X_i) \neq 0. Comprobable y debes probarlo.
  2. Exclusión: Cov(Zi,εi)=0\text{Cov}(Z_i, \varepsilon_i) = 0ZZ afecta YY sólo a través de XX. No comprobable. Alguna vez. Es un argumento económico, no una estadística.

Para un instrumento y un regresor endógeno, el estimador es una relación de dos efectos de forma reducida (el estimador 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}}}

Con controles y múltiples instrumentos usas 2SLS. Etapa 1: regresión de la variable endógena en instrumentos y controles, Xi=π0+πZZi+πCCi+viX_i = \pi_0 + \boldsymbol{\pi}_Z' \mathbf{Z}_i + \boldsymbol{\pi}_C' \mathbf{C}_i + v_iy mantener los valores ajustados X^i\hat{X}_i — por construcción contienen sólo variación exógena impulsada por instrumentos. Etapa 2: correr Yi=β0+β1X^i+βCCi+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i. En forma matricial, con 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}.

La trampa que atrapa a todos los que hacen esto manualmente: si literalmente ejecutas dos lstsq llamadas, sus errores estándar de etapa 2 son incorrectos. X^i\hat{X}_i es un regresor generado, y la varianza residual debe calcularse a partir del original XX, no el ajustado. Los errores estándar ingenuos de dos pasos son demasiado pequeños, por lo que su tt-Las estadísticas son demasiado grandes y las rechazarás en exceso. Utilice una implementación IV real:

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

El experimento: gamma OLS versus gamma 2SLS

Contrastando dos caminos de estimación

La regresión bajo prueba es el ajuste de impacto permanente del artículo de 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}} es endógeno por el argumento de simultaneidad anterior. El instrumento son sus propios rellenos en la ventana: los rellenos de su creador son activados por su propio cronograma de cotizaciones y política de inventario, no por la trayectoria de precios del mercado, por lo que son una fuente de variación del flujo de órdenes que plausiblemente no está correlacionada con el componente de impulso-reacción del error. La restricción de exclusión (que sus rellenos mueven el medio sólo a través de su contribución al flujo neto) es la suposición sobre la cual hay que discutir, y es más débil exactamente cuando su cotización se basa en señales. Si sus cotizaciones se basan en la predicción de precios a corto plazo, el instrumento está contaminado y este diseño falla. Los reabastecimientos a partir de una política pura de gestión de inventarios o de captura de diferenciales son el caso claro.

Los datos de llenado provienen del registro TCA descrito en déficit de implementación y TCA de bricolaje, el mismo registro que proporciona la muestra de ajuste para curvas de deslizamiento de sus propios rellenos. Controles: retrasados ΔS\Delta S y volatilidad observada en la ventana.

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

Cuatro números deciden si valió la pena hacerlo: el OLS γ\gamma, el 2SLS γ\gamma, la primera etapa FFy la brecha entre los dos coeficientes, que es la proporción de la estimación de MCO que fue una reacción de impulso en lugar de un impacto.

Si la primera etapa FF vuelve por debajo de 10, ese es el resultado: los llenados propios son una fracción demasiado pequeña del flujo neto con una resolución de 5 minutos para identificar γ\gamma, y el artículo honesto es negativo al estilo de el negativo honesto. Un resultado negativo de instrumento débil es un hallazgo real: le indica que la endogeneidad en el ajuste gamma no se puede corregir en este tamaño de muestra y horizonte, y que las estimaciones de costos previas a la negociación se basan en el MCO. γ\gamma llevan un sesgo ascendente inamovible.

Diagnóstico

La validación suena alrededor de un camino causal

Primera etapa F (instrumentos débiles). Regla general de Staiger-Stock: F>10F > 10. Los valores críticos de Stock-Yogo para un regresor endógeno son más estrictos: para un tamaño máximo de IV del 10%, F>16.38F > 16.38 con un instrumento, 19,93 con dos, 22,30 con tres; para un 15% de talla, 8,96/11,59/12,83; para el 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 (incluso se necesita vía intravenosa). Si OLS es consistente, también es más eficiente, así que pruebe antes de cambiar. La forma de aumento residual es la práctica: ejecute la etapa 1, mantenga v^i=XiX^i\hat{v}_i = X_i - \hat{X}_i, luego ejecute la regresión estructural MCO con v^i\hat{v}_i añadido como regresor. Un coeficiente significativo en v^i\hat{v}_i es evidencia de endogeneidad.

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 (sobreidentificación). Con q>pq > p Instrumentos con los que puedes probar la validez conjunta: J=nRε^Z2χ2(qp)J = n \cdot R^2_{\hat{\varepsilon} \sim \mathbf{Z}} \sim \chi^2(q - p), donde el R2R^2 proviene de hacer una regresión de los residuos 2SLS en todos los instrumentos y controles exógenos. La advertencia importa más que la estadística: Sargan sólo detecta instrumentos que no son válidos de diferentes maneras. Si todos los instrumentos se correlacionan con la misma variable omitida, la prueba pasa limpiamente y no dice nada.

Instrumentos que existen en la microestructura criptográfica

Choque independiente en una red de criptomercado

Encontrar un instrumento válido es toda la dificultad, y los recursos de capital, finanzas corporativas (cobertura de analistas, escudos fiscales, flujo de caja extraordinario) son inertes aquí. En realidad se aplican dos clases:

Variable endógena Instrumento Justificación
Flujo neto de compradores Tus propios rellenos Impulsado por su política de cotización e inventario, no por la trayectoria de precios del mercado (exógeno por construcción si sus cotizaciones no están condicionadas por señales
Flujo/volumen agregado Flujos mecánicos cambiarios: reequilibrio de índices, ventanas de liquidación de financiación, cascadas de liquidación programadas El momento lo marcan las reglas de intercambio, no la llegada de la información

trampas

Los caminos ocultos socavan un instrumento

Los instrumentos débiles no fallan ruidosamente. Con una primera etapa débil, 2SLS está sesgado hacia OLS en muestras finitas, aproximadamente

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

En F=5F = 5 retiene el 25% del sesgo de MCO mientras informa una estimación "causal". Las soluciones son LIML, que tiene mejor comportamiento con muestras finitas, o la prueba de Anderson-Rubin, que es válida independientemente de la potencia del instrumento.

Sesgo de muchos instrumentos. Bias2SLS(q/n)BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}}. Lanzar retrasos de todo en Z\mathbf{Z} para impulsar la primera etapa FF lleva la estimación directamente a MCO. Si q/nq/n no es despreciable, utilice LIML, jackknife IV (JIVE) o una primera etapa regularizada.

La restricción de exclusión no se puede probar. Ni Sargan ni nada. Se defiende con razonamiento de dominio, y la forma honesta de esa defensa es un análisis de sensibilidad: ¿qué magnitud de violación sería necesaria para revocar la conclusión?

Comidas para llevar

Ruta causal confiable a través de datos ruidosos

  • La deflación corrige el sesgo de la búsqueda. No elimina el sesgo en el coeficiente. Son fracasos diferentes y necesitan herramientas diferentes.
  • El sesgo de endogeneidad no desaparece con el tamaño de la muestra. Un coeficiente ajustado, bien impulsado y validado en el futuro aún puede ser sistemáticamente erróneo.
  • La regresión gamma en la calibración de Almgren-Chriss es una instancia interna en vivo, con un instrumento con nombre (rellenos propios) y los datos ya registrados por el proceso TCA.
  • Informar la primera etapa. FF antes del coeficiente 2SLS. Por debajo de 10, el coeficiente no es evidencia y decirlo es el resultado publicable.
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

Mantente a la vanguardia

Suscríbete a nuestro boletín para recibir información exclusiva sobre trading con IA, análisis de mercado y actualizaciones de la plataforma.

Respetamos tu privacidad. Puedes darte de baja en cualquier momento.