The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem

Selection bias in the search is not the only way a regression fools you. When the regressor is correlated with the error, more data makes the estimate more confidently wrong. Instrumental variables applied to the one endogeneity problem this blog has already left open: permanent impact from net taker flow.

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[εi∣Xi]=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⋅σX∗2/(σX∗2+σν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) = 0 — ZZ 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+πZ′Zi+πC′Ci+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+βC′Ci+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i. Em forma de matriz, com PZ=Z(Z′Z)−1Z′\mathbf{P}_Z = \mathbf{Z}(\mathbf{Z}'\mathbf{Z})^{-1}\mathbf{Z}':

β^2SLS=(X′PZX)−1X′PZy,Var(β^2SLS)=σ^2(X′PZX)−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 buys−taker 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.

# per 5-min bin over the sample:
#   dS        mid-price change             (outcome)
#   q_net     signed net taker flow        (endogenous)
#   q_own     signed own-fill quantity     (instrument)
#   dS_lag, rv  controls
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=(Runrestricted2−Rrestricted2)/q(1−Runrestricted2)/(n−k)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=Xi−X^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=n⋅Rε^∼Z2∼χ2(q−p)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ógenaInstrumentoJustificativa
Fluxo líquido de tomadoresSeus próprios preenchimentosImpulsionado 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 agregadoFluxos mecânicos cambiais: rebalanceamento de índices, janelas de liquidação de financiamento, cascatas de liquidação programadasO 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

Bias2SLSBiasOLS≈1F−1.\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.