← Torna agli articoli
August 10, 2026
5 min di lettura

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

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[εiXi]=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σX2/(σX2+σν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) = 0ZZ 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+πZZi+πCCi+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+βCCi+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i. In forma matriciale, 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 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 buystaker 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.

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=(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 (è 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=XiX^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=nRε^Z2χ2(qp)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 endogena Strumento Motivazione
Flusso netto di acquirenti I tuoi riempimenti Guidato 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 aggregato Flussi meccanici dei cambi: ribilanciamento degli indici, finestre di regolamento dei finanziamenti, cascate di liquidazione programmate La 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

Bias2SLSBiasOLS1F1.\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.
Disclaimer: le informazioni fornite in questo articolo hanno solo scopo didattico e informativo e non costituiscono consulenza finanziaria, di investimento o di trading. Il trading di criptovalute comporta un rischio significativo di perdita.

Autori

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

Resta un Passo Avanti al Mercato

Iscriviti alla nostra newsletter per approfondimenti esclusivi sul trading con IA, analisi di mercato e aggiornamenti sulla piattaforma.

Rispettiamo la tua privacy. Annulla l'iscrizione in qualsiasi momento.