The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
Регрессияның сізді алдауының құрылымдық тұрғыдан әртүрлі екі жолы бар, ал бұл блог әзірге олардың тек біреуімен күресті.
Біріншісі — іздеудегі таңдаудың бұрмалануы: сіз он мың backtest жүргізіп, ең жақсысын қалдырдыңыз, сондықтан қарап отырған сан әсер емес, шу үлестірімінің максимумы болуы мүмкін. Бұл дефляцияланған Sharpe ratio мақаласының және оның қорытындысы адал теріс нәтиже мақаласының тақырыбы. Мұндағы түзету — іздеуге баға беру.
Екіншісі — өзіңіз мүлде іздеп таңдамаған бір регрессиядағы коэффициенттің өзіндегі бұрмалану. Егер регрессор қателік мүшесімен корреляцияланған болса, OLS бұрмаланған және сәйкессіз болады — ал іріктеу шуынан айырмашылығы, бұл үлгі көлемі артқанда азаймайды. Дерек көбейген сайын қате санға деген сенім артады. Bootstrap, walk-forward немесе deflation әдістерінің ешқайсысы бұған әсер етпейді, өйткені олар identification мәселесіне емес, тек selection мәселесіне күмән келтіреді.
Бұл мақала екінші сәтсіздік туралы, әрі ол мұнда абстрактілі қауіп емес. Almgren-Chriss калибрлеу мақаласы permanent impact мәнін 5 минуттық mid-price өзгерістерін net taker flow-ға регрессиялау арқылы бағалайды: бірнеше пайыз ғана, ал коэффициент күндер арасында 2-5 есе өзгереді. Мақала бірінші құрылымдық себеп ретінде эндогендікті атайды: "Ағын бағаға, баға ағынға жауап бергендей жауап береді. Momentum трейдерлері баға өскендіктен сатып алады; кірістерді flow-ға регрессиялайтын аңғал OLS олардың реакциясын ұстап алып, оны impact деп түсіндіреді." Сонымен бірге таза шешімді де атайды — құрылымы бойынша exogenous болып табылатын өз fills-теріңіз.
Бұл — атауы белгілі instrument және деректері іште бар instrumental-variables мәселесі. Төменде estimator, диагностика және эксперимент берілген.
Эндогендік бір абзацта

OLS causal мәнін теңдеуінде тек шарты орындалғанда ғана бағалайды. Бұл шартты үш нәрсе бұзады. Қалдырылған айнымалы бұрмалануы: егер әрі , әрі мәнін анықтаса, бірақ бақыланбаса, ол қателік ішінде қалады: . Ал болса, болады — microstructure-де бақыланбайтын ақпараттың келуі көлем мен volatility-ді қатар қозғайды. Өлшеу қатесі: шулы proxy жағдайында , , сондықтан баға әрдайым нөлге қарай әлсірейді — netted aggTrades flow fragmented market-тегі шынайы signed order flow үшін proxy, ал сіз ешқашан көрмейтін бөлік — өлшеу қатесі. Simultaneity: төмендегі барлық талдауға түрткі болған Almgren-Chriss impact calibration мақаласында бұл мәселе әлдеқайда нақты түрде баяндалған.
IV шешімі

Instrument екі шартты қанағаттандыруы керек:
- Relevance: . Мұны тексеруге болады және міндетті түрде тексеру керек.
- Exclusion: — -ке тек арқылы әсер етеді. Мұны тексеру мүмкін емес. Ешқашан. Бұл статистикалық емес, экономикалық дәлел.
Бір instrument және бір endogenous regressor үшін estimator екі reduced-form effect қатынасынан тұрады (Wald estimator):
Controls және бірнеше instrument болғанда 2SLS қолданылады. 1-кезең: endogenous variable-ді instruments және controls арқылы регрессиялап, теңдеуінен fitted values сақталады — құрылымы бойынша оларда тек instrument-driven, exogenous variation бар. 2-кезең: теңдеуін іске қосу. Matrix түрінде, болғанда:
Мұны қолмен жазатындардың бәріне ортақ тұзақ: егер екі lstsq шақыруын тура іске қоссаңыз, 2-кезеңдегі standard error қате болады. — generated regressor, ал residual variance fitted мәндерден емес, бастапқы -тен есептелуі керек. Наивті екі қадамды standard error тым кішкентай болады, сондықтан -статистика тым үлкен болып, нөлдік гипотезаны шамадан тыс қабылдамайсыз. Нақты IV implementation қолданыңыз:
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
Эксперимент: OLS gamma және 2SLS gamma

Тексерілетін регрессия — Almgren-Chriss мақаласындағы permanent-impact fit:
жоғарыдағы simultaneity аргументіне байланысты endogenous. Instrument — осы window ішіндегі өз fills-теріңіз: maker fills-теріңіз market-тің price path-ына емес, өз quoting schedule және inventory policy-іңізге байланысты іске қосылады. Сондықтан олар error ішіндегі momentum-reaction component-пен plausibly uncorrelated order-flow variation көзі болып табылады. Exclusion restriction — fills mid-ті net flow-ға қосқан үлесі арқылы ғана жылжытады деген болжам — талқылауды қажет етеді және quoting-тің өзі signal-driven болғанда дәл осы жерде ең әлсіз. Егер quotes қысқа мерзімді price prediction-ға шартталса, instrument contaminated болады және бұл design істемейді. Pure inventory-management немесе spread-capture policy арқылы алынған fills — таза жағдай.
Fill деректері implementation shortfall және DIY TCA мақаласында сипатталған TCA record-ынан алынады — бұл өз fills-теріңізден slippage curves үшін fitting sample беретін сол log. Controls: window ішіндегі lagged және realized volatility.
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"])
Мұның қажет болған-болмағанын төрт сан шешеді: OLS , 2SLS , first-stage және екі коэффициент арасындағы айырма — OLS estimate-інің impact емес, momentum reaction болған үлесі.
Егер first-stage 10-нан төмен шықса, нәтиже осы: 5 минуттық resolution кезінде өз fills-теріңіз net flow-дың тым аз бөлігін құрайды, сондықтан -ны identify ету мүмкін емес. Адал есеп адал теріс нәтиже стиліндегі теріс нәтиже болады. Weak-instrument negative — нақты finding: бұл gamma fit-тегі endogeneity-ді осы sample size және horizon жағдайында түзету мүмкін емес екенін, ал OLS -ға негізделген pre-trade cost estimate-терінде жойылмайтын upward bias барын көрсетеді.
Диагностика

First-stage F (weak instruments). Staiger-Stock ережесі: . Бір endogenous regressor үшін Stock-Yogo critical values қатаңырақ — 10% maximal IV size кезінде бір instrument үшін , екі instrument үшін 19.93, үш instrument үшін 22.30; 15% size үшін 8.96 / 11.59 / 12.83; 20% үшін 6.66 / 8.75 / 9.54.
Durbin-Wu-Hausman (IV шынымен қажет пе). Егер OLS consistent болса, ол тиімдірек те болады, сондықтан ауыспас бұрын тест жасаңыз. Residual-augmentation формасы практикалық: 1-кезеңді іске қосып, сақтаңыз, содан кейін регрессор ретінде қосылған OLS structural regression-ды іске қосыңыз. коэффициентінің мәнді болуы endogeneity бар екеніне дәлел.
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 (overidentification). instrument болғанда олардың joint validity мәнін тестілеуге болады: , мұндағы 2SLS residual-дарын барлық instrument және exogenous control-дарға регрессиялаудан алынады. Ескертпе статистиканың өзінен маңызды: Sargan instruments әртүрлі жолмен invalid болған жағдайларды ғана анықтайды. Егер барлық instrument бір omitted variable-мен корреляцияланған болса, тест таза өтіп, ештеңе айтпайды.
Crypto microstructure-де бар instruments

Valid instrument табу — бүкіл қиындық, ал equity corporate finance-дегі әдеттегі құралдар (analyst coverage, tax shields, windfall cash flow) мұнда әрекетсіз. Іс жүзінде екі класс қолданылады:
| Endogenous variable | Instrument | Rationale |
|---|---|---|
| Net taker flow | Өз fills-теріңіз | Market price path-ына емес, quoting және inventory policy-іңізге байланысты — quotes signal-conditioned болмаса, құрылымы бойынша exogenous |
| Aggregate flow / volume | Exchange-mechanical flows: index rebalancing, funding-settlement windows, scheduled liquidation cascades | Timing information arrival-ға емес, exchange rules-ға байланысты белгіленеді |
Қателіктер

Weak instruments қатты байқалатын түрде істен шықпайды. Weak first stage кезінде 2SLS finite sample-дерде OLS бағытына қарай bias алады, шамамен:
кезінде "causal" estimate жариялағаныңызбен, OLS bias-інің 25%-ы сақталады. Шешімдер — finite-sample behaviour-і жақсырақ LIML немесе instrument strength-ке қарамастан valid болып қалатын Anderson-Rubin test.
Көп instrument bias тудырады. . Барлық айнымалының lag-тарын ішіне first-stage көтеру үшін тықсаңыз, estimate OLS-ке қайта жақындайды. Егер елеусіз болмаса, LIML, jackknife IV (JIVE) немесе regularized first stage қолданыңыз.
Exclusion restriction-ді тестілеу мүмкін емес. Sargan арқылы да, басқа ештеңе арқылы да емес. Оны domain reasoning арқылы қорғау керек, ал мұндай қорғаныстың адал түрі — sensitivity analysis: қорытындыны жоққа шығару үшін violation қаншалықты үлкен болуы керек?
Негізгі қорытындылар

- Deflation search-тен туындайтын bias-ті түзетеді. Ол coefficient-тегі bias-ке еш әсер етпейді. Бұл — әртүрлі сәтсіздіктер, сондықтан әртүрлі құралдар қажет.
- Endogeneity bias sample size артқанда жоғалмайды. Тығыз, жақсы bootstrap жасалған және walk-forward арқылы тексерілген coefficient бәрібір жүйелі түрде қате болуы мүмкін.
- Almgren-Chriss calibration-ындағы gamma regression — нақты, ішкі мысал: оның атауы бар instrument-і (own fills) және TCA pipeline арқылы жазылған деректері бар.
- 2SLS coefficient-інен бұрын first-stage мәнін көрсетіңіз. 10-нан төмен болса, coefficient evidence емес, мұны ашық айту — жариялауға болатын нәтиже.
Authors
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.