← Voltar aos artigos
August 10, 2026
5 min read

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

Existem duas maneiras estruturalmente diferentes pelas quais uma regressão pode mentir para você, e este blog até agora atacou apenas uma delas.

O primeiro é o viés de seleção na pesquisa: você executou dez mil backtests, manteve o melhor, e o número que você está vendo é o máximo de uma distribuição de ruído, e não de um efeito. Esse é o assunto do índice de Sharpe deflacionado e seu ápice negativo honesto. A solução é definir o preço da pesquisa.

O segundo é o viés no coeficiente em si, em uma única regressão que você nunca pesquisou. Se o regressor estiver correlacionado com o termo de erro, o MQO é tendencioso e inconsistente — e, ao contrário do ruído de amostragem, este não diminui com o tamanho da amostra. Mais dados tornam o número errado mais restrito. Nenhuma quantidade de esforço inicial, avanço ou deflação afeta isso, porque nenhum desses métodos questiona a identificação, apenas a seleção.

Este artigo é sobre a segunda falha e não é uma preocupação abstrata aqui. O artigo de calibração Almgren-Chriss se ajusta ao impacto permanente γ\gamma ao regredir as mudanças de preço médio de 5 minutos no fluxo do tomador líquido, obtém-se um R2R^2 de alguns por cento e um coeficiente que se move 2-5x entre os dias, e nomeia a endogeneidade como a primeira razão estrutural: "O fluxo responde ao preço tanto quanto o preço responde ao fluxo. Os traders de momentum compram porque o preço subiu; um MQO ingénuo de retornos sobre o fluxo capta a sua reação e atribui-a ao impacto." Ele também nomeia a solução limpa – seus próprios preenchimentos, exógenos por construção.

Esse é um problema de variáveis ​​instrumentais com um instrumento nomeado e dados já internos. Abaixo está o estimador, o diagnóstico e o experimento.

Endogeneidade em um parágrafo

Forças entrelaçadas criam endogeneidade

OLS estima o causal β1\beta_1 em Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i apenas sob E[εiXi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0. Três coisas quebram isso. Viés de variável omitida: se WW dirige ambos XX e YY e não é observado, vive no erro, εi=γWi+ui\varepsilon_i = \gamma W_i + u_i, e Cov(Xi,Wi)0\text{Cov}(X_i, W_i) \neq 0 forças Cov(Xi,εi)0\text{Cov}(X_i, \varepsilon_i) \neq 0 — na microestrutura, a chegada de informações não observadas une volume e volatilidade. Erro de medição: com um proxy barulhento 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), sempre atenuado em direção a zero – o fluxo líquido de aggTrades é um proxy para o verdadeiro fluxo de ordens assinadas em um mercado fragmentado, e a parte que você nunca vê é o erro de medição. Simultaneidade: já afirmado de forma mais nítida e concreta na calibração de impacto Almgren-Chriss, que é o problema motivador para tudo abaixo.

A solução intravenosa

Instrumento que isola um efeito causal de mercado

Um instrumento ZZ deve satisfazer duas condições:

  1. Relevância: Cov(Zi,Xi)0\text{Cov}(Z_i, X_i) \neq 0. Testável e você deve testá-lo.
  2. Exclusão: Cov(Zi,εi)=0\text{Cov}(Z_i, \varepsilon_i) = 0ZZ afeta YY somente através XX. Não testável. Sempre. É um argumento económico, não uma estatística.

Para um instrumento e um regressor endógeno, o estimador é uma razão de dois efeitos de forma reduzida (o 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}}}

Com controles e vários instrumentos você usa 2SLS. Etapa 1: regressão da variável endógena em instrumentos e controles, Xi=π0+πZZi+πCCi+viX_i = \pi_0 + \boldsymbol{\pi}_Z' \mathbf{Z}_i + \boldsymbol{\pi}_C' \mathbf{C}_i + v_i, e mantenha os valores ajustados X^i\hat{X}_i - por construção, eles contêm apenas variações exógenas e orientadas por instrumentos. Etapa 2: execução Yi=β0+β1X^i+βCCi+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i. Em forma de matriz, com 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}.

A armadilha que pega todos que rolam isso manualmente: se você literalmente executar dois lstsq chamadas, seus erros padrão do estágio 2 estão errados. X^i\hat{X}_i é um regressor gerado, e a variância residual deve ser calculada a partir do original XX, não o equipado. Erros padrão ingênuos de duas etapas são muito pequenos, então seu tt-stats são muito grandes e você rejeitará demais. Use uma implementação 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

O experimento: gama OLS versus gama 2SLS

Contrastando dois caminhos de estimativa

A regressão em teste é o ajuste de impacto permanente do artigo 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}} é endógeno pelo argumento da simultaneidade acima. O instrumento são seus próprios preenchimentos na janela: os preenchimentos do fabricante são acionados por seu próprio cronograma de cotação e política de estoque, e não pela trajetória de preço do mercado, portanto, são uma fonte de variação no fluxo de pedidos que é plausivelmente não correlacionada com o componente de reação ao momento do erro. A restrição de exclusão – que seus preenchimentos se movam no meio apenas através de sua contribuição para o fluxo líquido – é a suposição a ser discutida, e é mais fraca exatamente quando sua cotação é ela mesma orientada por sinais. Se suas cotações dependerem da previsão de preços no horizonte curto, o instrumento estará contaminado e esse design falhará. Os preenchimentos de uma política pura de gerenciamento de estoque ou de captura de spread são o caso limpo.

Os dados de preenchimento vêm do registro TCA descrito em déficit de implementação e TCA DIY — o mesmo registro que fornece a amostra adequada para curvas de deslizamento de seus próprios preenchimentos. Controles: atrasados ΔS\Delta S e percebi volatilidade na janela.

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

Quatro números decidem se valeu a pena fazer isso: o OLS γ\gamma, o 2SLS γ\gamma, a primeira fase FF, e a diferença entre os dois coeficientes — que é a parcela da estimativa MQO que foi reação dinâmica e não impacto.

Se a primeira fase FF volta abaixo de 10, esse é o resultado: os próprios preenchimentos são uma fração muito pequena do fluxo líquido na resolução de 5 minutos para identificar γ\gamma, e o artigo honesto é um negativo no estilo do negativo honesto. Um instrumento fraco negativo é uma descoberta real - indica que a endogeneidade no ajuste gama não pode ser corrigida neste tamanho e horizonte de amostra, e que as estimativas de custos pré-negociação baseadas no OLS γ\gamma carregam uma tendência ascendente irremovível.

Diagnóstico

A validação gira em torno de um caminho causal

Primeiro estágio F (instrumentos fracos). Regra prática de Staiger-Stock: F>10F > 10. Os valores críticos de Stock-Yogo para um regressor endógeno são mais rigorosos - para tamanho IV máximo de 10%, F>16.38F > 16.38 com um instrumento, 19,93 com dois, 22,30 com três; para tamanho de 15%, 8,96/11,59/12,83; para 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 (é mesmo necessário IV). Se o OLS for consistente, também será mais eficiente, portanto, teste antes de mudar. A forma de aumento residual é a mais prática: execute o estágio 1, mantenha v^i=XiX^i\hat{v}_i = X_i - \hat{X}_i, em seguida, execute a regressão estrutural OLS com v^i\hat{v}_i adicionado como regressor. Um coeficiente significativo em v^i\hat{v}_i é evidência de endogeneidade.

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 (sobreidentificação). Com q>pq > p instrumentos que você pode testar a validade conjunta: J=nRε^Z2χ2(qp)J = n \cdot R^2_{\hat{\varepsilon} \sim \mathbf{Z}} \sim \chi^2(q - p), onde o R2R^2 vem da regressão dos resíduos 2SLS em todos os instrumentos e controles exógenos. A advertência é mais importante do que a estatística: Sargan só detecta instrumentos que são inválidos de maneiras diferentes. Se todos os instrumentos estiverem correlacionados com a mesma variável omitida, o teste passa de forma limpa e não diz nada.

Instrumentos que existem na microestrutura criptográfica

Choque independente em uma rede de mercado criptográfico

Encontrar um instrumento válido é toda a dificuldade, e os recursos de capital próprio-financiamento empresarial (cobertura de analistas, benefícios fiscais, fluxo de caixa inesperado) são inertes aqui. Na verdade, duas classes se aplicam:

Variável endógena Instrumento Justificativa
Fluxo líquido de tomadores Seus próprios preenchimentos Impulsionado por sua política de cotação e estoque, não pela trajetória de preços do mercado - exógeno por construção se suas cotações não forem condicionadas por sinal
Fluxo/volume agregado Fluxos mecânicos cambiais: rebalanceamento de índices, janelas de liquidação de financiamento, cascatas de liquidação programadas O tempo é definido pelas regras de troca e não pela chegada da informação

Armadilhas

Caminhos ocultos prejudicam um instrumento

Instrumentos fracos não falham ruidosamente. Com um primeiro estágio fraco, o 2SLS é tendencioso em direção ao OLS em amostras finitas, aproximadamente

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

No F=5F = 5 você retém 25% do viés do MQO ao relatar uma estimativa "causal". As soluções são LIML, que apresenta melhor comportamento em amostras finitas, ou o teste Anderson-Rubin, que é válido independentemente da resistência do instrumento.

Viés de muitos instrumentos. Bias2SLS(q/n)BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}}. Jogando atrasos de tudo em Z\mathbf{Z} para impulsionar a primeira fase FF encaminha a estimativa diretamente para o OLS. Se q/nq/n não for desprezível, use LIML, jackknife IV (JIVE) ou um primeiro estágio regularizado.

A restrição de exclusão não pode ser testada. Nem por Sargan, nem por nada. É defendida com raciocínio de domínio, e a forma honesta dessa defesa é uma análise de sensibilidade: qual a dimensão da violação necessária para anular a conclusão?

Conclusões

Caminho causal confiável por meio de dados ruidosos

  • A deflação corrige o viés da pesquisa. Não faz nada pelo preconceito no coeficiente. São falhas diferentes e precisam de ferramentas diferentes.
  • O viés de endogeneidade não desaparece com o tamanho da amostra. Um coeficiente rígido, bem estruturado e validado passo a passo ainda pode estar sistematicamente errado.
  • A regressão gama na calibração Almgren-Chriss é uma instância interna ao vivo, com um instrumento nomeado (preenchimentos próprios) e os dados já registrados pelo pipeline do TCA.
  • Relatar a primeira fase FF antes do coeficiente 2SLS. Abaixo de 10, o coeficiente não é evidência, e dizê-lo é o resultado publicável.
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

Fique à frente do mercado

Assine nossa newsletter para insights exclusivos sobre trading com IA, análises de mercado e atualizações da plataforma.

Respeitamos sua privacidade. Cancele a inscrição a qualquer momento.