The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
Ada dua cara yang secara struktural berbeda yang dapat membuat regresi menyesatkan Anda, dan sejauh ini blog ini baru menyerang salah satunya.
Yang pertama adalah bias seleksi dalam pencarian: Anda menjalankan sepuluh ribu backtest, mempertahankan yang terbaik, dan angka yang Anda lihat adalah maksimum dari distribusi noise, bukan suatu efek. Itulah pokok bahasan deflated Sharpe ratio dan penutupnya, honest negative. Solusinya adalah memperhitungkan biaya pencarian.
Yang kedua adalah bias pada koefisien itu sendiri, dalam satu regresi yang sama sekali tidak Anda cari melalui banyak percobaan. Jika regressor berkorelasi dengan term error, OLS menjadi bias dan tidak konsisten — dan tidak seperti noise sampling, bias ini tidak menyusut ketika ukuran sampel bertambah. Lebih banyak data justru membuat angka yang salah semakin rapat. Tidak ada bootstrap, walk-forward, atau deflation yang dapat menyentuh masalah ini, karena tidak satu pun dari metode tersebut mempertanyakan identifikasi; semuanya hanya mempertanyakan seleksi.
Artikel ini membahas kegagalan kedua, dan ini bukan kekhawatiran abstrak di sini. Artikel kalibrasi Almgren-Chriss mengestimasi dampak permanen dengan meregresikan perubahan mid-price 5 menit terhadap net taker flow, mendapatkan beberapa persen dan koefisien yang berubah 2-5x antarhari, lalu menyebut endogenitas sebagai alasan struktural pertama: "Flow merespons harga sama seperti harga merespons flow. Momentum trader membeli karena harga naik; OLS naif atas return terhadap flow menangkap reaksi mereka dan mengatribusikannya sebagai impact." Artikel itu juga menyebut perbaikan yang bersih — fill Anda sendiri, yang secara konstruksi bersifat eksogen.
Ini adalah masalah instrumental variables dengan instrumen yang jelas dan data yang sudah tersedia di internal. Di bawah ini ada estimator, diagnostik, dan eksperimennya.
Endogenitas dalam satu paragraf

OLS mengestimasi kausal dalam hanya jika . Ada tiga hal yang dapat merusaknya. Bias akibat variabel yang dihilangkan: jika memengaruhi dan sekaligus tetapi tidak teramati, variabel itu masuk ke dalam error, , dan memaksa — dalam microstructure, kedatangan informasi yang tidak teramati mendorong volume dan volatilitas secara bersamaan. Measurement error: dengan proxy noisy , , yang selalu terattenuasi menuju nol — flow aggTrades yang sudah dinetkan adalah proxy untuk order flow bertanda yang sebenarnya di pasar yang terfragmentasi, dan bagian yang tidak pernah Anda lihat merupakan measurement error. Simultanitas: sudah dinyatakan dalam bentuk yang lebih tajam dan konkret di kalibrasi impact Almgren-Chriss, yang menjadi masalah pemicu untuk semua hal di bawah ini.
Solusi IV

Sebuah instrumen harus memenuhi dua kondisi:
- Relevansi: . Ini dapat diuji, dan Anda wajib mengujinya.
- Eksklusi: — memengaruhi hanya melalui . Ini tidak dapat diuji. Tidak pernah. Ini adalah argumen ekonomi, bukan statistik.
Untuk satu instrumen dan satu regressor endogen, estimatornya merupakan rasio dua efek reduced-form (estimator Wald):
Dengan kontrol dan banyak instrumen, gunakan 2SLS. Tahap 1: regresikan variabel endogen terhadap instrumen dan kontrol, , lalu simpan nilai fitted — secara konstruksi, nilai ini hanya mengandung variasi eksogen yang didorong instrumen. Tahap 2: jalankan . Dalam bentuk matriks, dengan :
Jebakan yang menangkap semua orang yang menulis ini sendiri: jika Anda benar-benar menjalankan dua pemanggilan lstsq, standard error tahap 2 Anda akan salah. adalah regressor generated, dan varians residual harus dihitung dari asli, bukan dari nilai fitted. Standard error dua langkah yang naif terlalu kecil, sehingga statistik- Anda terlalu besar dan Anda akan terlalu sering menolak hipotesis nol. Gunakan implementasi IV yang sebenarnya:
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
Eksperimen: gamma OLS versus gamma 2SLS

Regresi yang diuji adalah fitting dampak permanen dari artikel Almgren-Chriss:
endogen karena argumen simultanitas di atas. Instrumennya adalah fill Anda sendiri dalam jendela tersebut: fill maker Anda dipicu oleh jadwal kuotasi dan kebijakan inventori Anda sendiri, bukan oleh jalur harga pasar, sehingga menjadi sumber variasi order flow yang secara masuk akal tidak berkorelasi dengan komponen reaksi momentum dalam error. Restriksi eksklusi — bahwa fill Anda menggerakkan mid hanya melalui kontribusinya pada net flow — adalah asumsi yang harus diperdebatkan, dan paling lemah tepat ketika kuotasi Anda sendiri digerakkan oleh sinyal. Jika kuotasi Anda bergantung pada prediksi harga jangka pendek, instrumen tersebut terkontaminasi dan desain ini gagal. Fill dari kebijakan manajemen inventori atau spread-capture murni adalah kasus yang bersih.
Data fill berasal dari catatan TCA yang dijelaskan dalam implementation shortfall dan DIY TCA — log yang sama yang menyediakan sampel fitting untuk kurva slippage dari fill Anda sendiri. Kontrol: lagged dan volatilitas terealisasi dalam jendela tersebut.
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"])
Empat angka menentukan apakah eksperimen ini layak dilakukan: OLS, 2SLS, tahap pertama, dan selisih antara kedua koefisien — yaitu bagian dari estimasi OLS yang merupakan reaksi momentum, bukan impact.
Jika tahap pertama berada di bawah 10, itulah hasilnya: fill Anda merupakan bagian yang terlalu kecil dari net flow pada resolusi 5 menit untuk mengidentifikasi , dan penulisan yang jujur adalah hasil negatif dengan gaya honest negative. Hasil negatif dari instrumen lemah adalah temuan yang nyata — ini memberi tahu Anda bahwa endogenitas dalam fitting gamma tidak dapat diperbaiki pada ukuran sampel dan horizon ini, serta estimasi biaya pra-perdagangan yang dibangun berdasarkan OLS membawa bias ke atas yang tidak dapat dihilangkan.
Diagnostik

F tahap pertama (instrumen lemah). Aturan praktis Staiger-Stock: . Nilai kritis Stock-Yogo untuk satu regressor endogen lebih ketat — untuk ukuran IV maksimum 10%, dengan satu instrumen, 19.93 dengan dua, 22.30 dengan tiga; untuk ukuran 15%, 8.96 / 11.59 / 12.83; untuk 20%, 6.66 / 8.75 / 9.54.
Durbin-Wu-Hausman (apakah IV benar-benar diperlukan). Jika OLS konsisten, OLS juga lebih efisien, jadi lakukan pengujian sebelum beralih. Bentuk residual-augmentation adalah yang praktis: jalankan tahap 1, simpan , lalu jalankan regresi struktural OLS dengan ditambahkan sebagai regressor. Koefisien yang signifikan merupakan bukti adanya endogenitas.
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 (overidentifikasi). Dengan instrumen, Anda dapat menguji validitas bersama: , dengan berasal dari regresi residual 2SLS terhadap semua instrumen dan kontrol eksogen. Peringatannya lebih penting daripada statistiknya: Sargan hanya mendeteksi instrumen yang tidak valid dengan cara yang berbeda. Jika semua instrumen berkorelasi dengan variabel yang dihilangkan yang sama, pengujian akan lolos dengan bersih dan tidak memberi tahu Anda apa pun.
Instrumen yang tersedia dalam microstructure kripto

Menemukan instrumen yang valid adalah seluruh kesulitannya, dan andalan equity-corporate-finance (cakupan analis, tax shield, windfall cash flow) tidak aktif di sini. Dua kelas benar-benar berlaku:
| Variabel endogen | Instrumen | Alasan |
|---|---|---|
| Net taker flow | Fill Anda sendiri | Didorong oleh kuotasi dan kebijakan inventori Anda, bukan jalur harga pasar — eksogen secara konstruksi jika kuotasi Anda tidak dikondisikan oleh sinyal |
| Aggregate flow / volume | Flow mekanis bursa: rebalancing indeks, jendela funding-settlement, cascade likuidasi terjadwal | Waktunya ditetapkan oleh aturan bursa, bukan oleh kedatangan informasi |
Jebakan

Instrumen lemah tidak gagal dengan suara keras. Dengan tahap pertama yang lemah, 2SLS bias menuju OLS pada sampel berhingga, kira-kira
Pada , Anda masih membawa 25% bias OLS sambil melaporkan estimasi "kausal". Perbaikannya adalah LIML, yang memiliki perilaku sampel berhingga lebih baik, atau pengujian Anderson-Rubin, yang valid terlepas dari kekuatan instrumen.
Banyak instrumen menyebabkan bias. . Memasukkan lag dari segala hal ke dalam untuk menaikkan tahap pertama akan membawa estimasi kembali langsung menuju OLS. Jika tidak dapat diabaikan, gunakan LIML, jackknife IV (JIVE), atau tahap pertama yang diregularisasi.
Restriksi eksklusi tidak dapat diuji. Bukan oleh Sargan, bukan oleh apa pun. Restriksi ini dipertahankan dengan penalaran domain, dan bentuk pembelaan yang jujur adalah analisis sensitivitas: seberapa besar pelanggaran yang diperlukan untuk membalikkan kesimpulan?
Inti kesimpulan

- Deflation memperbaiki bias dari pencarian. Deflation tidak melakukan apa pun terhadap bias pada koefisien. Keduanya adalah kegagalan yang berbeda dan membutuhkan alat yang berbeda.
- Bias endogenitas tidak menghilang ketika ukuran sampel bertambah. Koefisien yang rapat, di-bootstrap dengan baik, dan divalidasi dengan walk-forward tetap dapat salah secara sistematis.
- Regresi gamma dalam kalibrasi Almgren-Chriss adalah kasus nyata di internal, dengan instrumen yang jelas (fill sendiri) dan data yang sudah dicatat oleh pipeline TCA.
- Laporkan tahap pertama sebelum koefisien 2SLS. Di bawah 10, koefisien tersebut bukan bukti, dan mengatakan hal itu adalah hasil yang layak dipublikasikan.
Penulis
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.