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.

Esistono due modi strutturalmente diversi in cui una regressione può mentirti e questo blog finora ne ha attaccato solo uno.

Il primo è il bias di selezione nella ricerca: hai eseguito diecimila test retrospettivi, hai mantenuto il meglio e il numero che stai osservando è il massimo di una distribuzione di rumore piuttosto che di un effetto. Questo è l'oggetto dell'indice di Sharpe sgonfio e del suo coronamento onesto negativo. La soluzione è valutare la ricerca.

Il secondo è la distorsione del coefficiente stesso, su una singola regressione su cui non hai mai effettuato alcuna ricerca. Se il regressore è correlato al termine di errore, l’OLS è distorto e incoerente e, a differenza del rumore di campionamento, questo non si riduce con la dimensione del campione. Più dati rendono più stretto il numero sbagliato. Nessuna quantità di bootstrap, walk-forward o deflazione lo tocca, perché nessuno di questi metodi mette in discussione l’identificazione, ma solo la selezione.

Questo articolo riguarda il secondo fallimento e non si tratta di una preoccupazione astratta. L'articolo sulla calibrazione Almgren-Chriss si adatta all'impatto permanente γ\gamma regredendo le variazioni di prezzo medio di 5 minuti sul flusso netto degli acquirenti, ottiene un R2R^2 di pochi punti percentuali e un coefficiente che si sposta di 2-5 volte tra un giorno e l'altro, e nomina l'endogeneità come prima ragione strutturale: "Il flusso risponde al prezzo tanto quanto il prezzo risponde al flusso. I trader di momentum acquistano perché il prezzo è aumentato; un ingenuo OLS di rendimenti sul flusso rileva la loro reazione e la attribuisce all'impatto." Nomina anche la soluzione pulita: i tuoi riempimenti, esogeni per costruzione.

Questo è un problema di variabili strumentali con uno strumento denominato e dati già interni. Di seguito sono riportati lo stimatore, la diagnostica e l'esperimento.

Endogeneità in un paragrafo

Le forze intrecciate creano endogeneità

OLS stima la causale β1\beta_1 In Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i solo sotto E[εi∣Xi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0. Tre cose lo rompono. Distorsione da variabili omesse: se WW guida entrambi XX E YY ed è inosservato, vive nell'errore, εi=γWi+ui\varepsilon_i = \gamma W_i + u_i, E Cov(Xi,Wi)≠0\text{Cov}(X_i, W_i) \neq 0 forze Cov(Xi,εi)≠0\text{Cov}(X_i, \varepsilon_i) \neq 0 — nella microstruttura, l’arrivo di informazioni non osservate determina insieme volume e volatilità. Errore di misura: con proxy rumoroso 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 attenuato verso lo zero: il flusso aggTrades netto è un proxy del vero flusso di ordini firmati in un mercato frammentato e la parte che non vedi mai è l'errore di misurazione. Simultaneità: già affermata in forma più netta e concreta nella calibrazione dell'impatto di Almgren-Chriss, che è il problema motivante per tutto ciò che segue.

La soluzione IV

Strumento che isola un effetto di mercato causale

Uno strumento ZZ deve soddisfare due condizioni:

  1. Pertinenza: Cov(Zi,Xi)≠0\text{Cov}(Z_i, X_i) \neq 0. Testabile e devi testarlo.
  2. Esclusione: Cov(Zi,εi)=0\text{Cov}(Z_i, \varepsilon_i) = 0 — ZZ colpisce YY solo attraverso XX. Non testabile. Mai. È un argomento economico, non una statistica.

Per uno strumento e un regressore endogeno lo stimatore è un rapporto di due effetti in forma ridotta (lo stimatore di 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 controlli e strumenti multipli usi 2SLS. Fase 1: regredire la variabile endogena su strumenti e controlli, Xi=π0+πZ′Zi+πC′Ci+viX_i = \pi_0 + \boldsymbol{\pi}_Z' \mathbf{Z}_i + \boldsymbol{\pi}_C' \mathbf{C}_i + v_ie mantenere i valori adattati X^i\hat{X}_i - per costruzione contengono solo variazioni esogene e guidate dallo strumento. Fase 2: corri Yi=β0+β1X^i+βC′Ci+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i. In forma matriciale, con 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}.

La trappola che cattura chiunque la lanci a mano: se ne esegui letteralmente due lstsq chiamate, gli errori standard della fase 2 sono errati. X^i\hat{X}_i è un regressore generato e la varianza residua deve essere calcolata dall'originale XX, non quello montato. Gli errori standard ingenui in due passaggi sono troppo piccoli, quindi il tuo tt-le statistiche sono troppo grandi e rifiuterai eccessivamente. Utilizza una vera implementazione 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'esperimento: gamma OLS contro gamma 2SLS

Confronto tra due percorsi di stima

La regressione in esame è l'adattamento a impatto permanente dell'articolo di 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}} è endogeno per l'argomento di simultaneità di cui sopra. Lo strumento è i tuoi riempimenti nella finestra: i riempimenti del tuo produttore sono attivati ​​dal tuo programma di quotazione e dalla politica di inventario, non dal percorso dei prezzi di mercato, quindi sono una fonte di variazione del flusso degli ordini che è plausibilmente non correlata con la componente momentum-reazione dell'errore. La restrizione di esclusione (che i tuoi riempimenti spostano la metà solo attraverso il loro contributo al flusso netto) è il presupposto su cui discutere, ed è più debole esattamente quando la tua quotazione è essa stessa guidata dal segnale. Se le tue quotazioni sono condizionate da una previsione dei prezzi a breve orizzonte, lo strumento è contaminato e questo progetto fallisce. I riempimenti derivanti da una pura politica di gestione dell'inventario o di acquisizione degli spread sono il caso pulito.

I dati di riempimento provengono dal record TCA descritto in implementation shortfall e DIY TCA — lo stesso registro che fornisce il campione di adattamento per slippage curve from your own fills. Controlli: ritardati ΔS\Delta S e realizzato la volatilità nella finestra.

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

Quattro numeri decidono se valeva la pena farlo: l'OLS γ\gamma, il 2SLS γ\gamma, la prima fase FFe il divario tra i due coefficienti, ovvero la quota della stima OLS che è stata una reazione allo slancio piuttosto che un impatto.

Se la prima fase FF torna sotto 10, questo è il risultato: i propri riempimenti sono una frazione del flusso netto troppo piccola con una risoluzione di 5 minuti per essere identificata γ\gamma, e il resoconto onesto è negativo nello stile del negativo onesto. Uno strumento debole negativo è una scoperta reale: indica che l’endogeneità nell’adattamento gamma non è risolvibile con queste dimensioni e orizzonte del campione e che le stime dei costi pre-negoziazione si basano sull’OLS γ\gamma comportano una tendenza al rialzo inevitabile.

Diagnostica

La convalida ruota attorno a un percorso causale

Primo stadio F (strumenti deboli). Regola empirica Staiger-Stock: F>10F > 10. I valori critici di Stock-Yogo per un regressore endogeno sono più rigidi: per una dimensione IV massima del 10%, F>16.38F > 16.38 con uno strumento, 19.93 con due, 22.30 con tre; per dimensione 15%, 8,96 / 11,59 / 12,83; per il 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 (è addirittura necessaria la IV). Se OLS è coerente è anche più efficiente, quindi prova prima di cambiare. La forma di aumento residuo è quella pratica: esegui la fase 1, mantieni v^i=Xi−X^i\hat{v}_i = X_i - \hat{X}_i, quindi eseguire la regressione strutturale OLS con v^i\hat{v}_i aggiunto come regressore. Un coefficiente significativo su v^i\hat{v}_i è la prova dell'endogeneità.

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 (sovraidentificazione). Con q>pq > p strumenti per testare la validità congiunta: J=n⋅Rε^∼Z2∼χ2(q−p)J = n \cdot R^2_{\hat{\varepsilon} \sim \mathbf{Z}} \sim \chi^2(q - p), dove il R2R^2 deriva dalla regressione dei residui 2SLS su tutti gli strumenti e i controlli esogeni. L'avvertenza conta più della statistica: Sargan rileva solo gli strumenti che non sono validi in diversi modi. Se ogni strumento è correlato con la stessa variabile omessa, il test passa in modo pulito e non ti dice nulla.

Strumenti che esistono nella microstruttura crittografica

Shock indipendente in una rete di mercato crittografico

Trovare uno strumento valido è l’intera difficoltà, e gli strumenti di supporto azionario-aziendale-finanza (copertura degli analisti, scudi fiscali, flussi di cassa straordinari) sono inerti qui. In realtà si applicano due classi:

Variabile endogenaStrumentoMotivazione
Flusso netto di acquirentiI tuoi riempimentiGuidato dalla tua politica di quotazione e di inventario, non dal percorso dei prezzi del mercato: esogeno per costruzione se le tue quotazioni non sono condizionate dal segnale
Portata/volume aggregatoFlussi meccanici dei cambi: ribilanciamento degli indici, finestre di regolamento dei finanziamenti, cascate di liquidazione programmateLa tempistica è stabilita dalle regole di scambio, non dall'arrivo delle informazioni

Insidie

Percorsi nascosti minano uno strumento

Gli strumenti deboli non falliscono rumorosamente. Con un primo stadio debole, 2SLS è sbilanciato verso OLS in campioni finiti, approssimativamente

Bias2SLSBiasOLS≈1F−1.\frac{\text{Bias}_{2\text{SLS}}}{\text{Bias}_{\text{OLS}}} \approx \frac{1}{F - 1}.

A F=5F = 5 mantieni il 25% del bias OLS mentre riporti una stima "causale". I rimedi sono il LIML, che ha un comportamento migliore a campione finito, o il test di Anderson-Rubin, che è valido indipendentemente dalla forza dello strumento.

Distorsione da molti strumenti. Bias2SLS≈(q/n)⋅BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}}. Gettare ritardi di tutto Z\mathbf{Z} per potenziare il primo stadio FF riporta il preventivo direttamente a OLS. Se q/nq/n non è trascurabile, utilizzare LIML, jackknife IV (JIVE), o un primo stadio regolarizzato.

La restrizione di esclusione non può essere testata. Né da Sargan, né da niente. Viene difeso con il ragionamento di dominio, e la forma onesta di tale difesa è un’analisi di sensibilità: quanta violazione sarebbe necessaria per ribaltare la conclusione?

Da asporto

Percorso causale affidabile attraverso dati rumorosi

  • La deflazione corregge i bias della ricerca. Non fa nulla per la distorsione del coefficiente. Sono fallimenti diversi e necessitano di strumenti diversi.
  • Il bias di endogeneità non svanisce con la dimensione del campione. Un coefficiente rigoroso, ben avviato e convalidato dal walk forward può ancora essere sistematicamente sbagliato.
  • La regressione gamma nella calibrazione Almgren-Chriss è un'istanza interna dal vivo, con uno strumento denominato (riempimenti propri) e i dati già registrati dalla pipeline TCA.
  • Segnalare la prima fase FF prima del coefficiente 2SLS. Al di sotto di 10, il coefficiente non è una prova, e dirlo è il risultato pubblicabile.