The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
회귀가 거짓말을 할 수 있는 구조적으로 서로 다른 두 가지 방법이 있으며, 이 블로그는 지금까지 그 중 하나만 공격했습니다.
첫 번째는 검색의 선택 편향입니다. 10,000번의 백테스트를 실행하고 최상의 결과를 유지했으며 보고 있는 숫자는 효과가 아닌 노이즈 분포의 최대값입니다. 이것이 수축된 샤프지수와 그 관석]정직한 부정]의 주제입니다. 해결책은 검색 가격을 책정하는 것입니다.
두 번째는 전혀 검색하지 않은 단일 회귀에 대한 계수 자체의 편향입니다. 회귀 변수가 오류 항과 상관 관계가 있는 경우 OLS는 편향되고 일관성이 없으며 샘플링 잡음과 달리 이는 샘플 크기에 따라 줄어들지 않습니다. 데이터가 많을수록 잘못된 숫자가 더 엄격해집니다. 부트스트래핑, 앞으로 걷기 또는 수축 등의 방법은 식별에 의문을 제기하지 않고 선택에만 영향을 미치기 때문에 이에 영향을 미치지 않습니다.
이 글은 두 번째 실패에 관한 글이며, 여기서 추상적인 고민을 하려는 것은 아니다. Almgren-Chriss 보정 기사는 순 테이커 흐름의 5분 중간 가격 변화를 회귀하여 영구 영향 에 적합하고 몇 퍼센트의 와 일 사이에 2~5배 이동하는 계수를 얻고 첫 번째 구조적 이유로 내생성을 명명합니다. "가격이 흐름에 반응하는 만큼 흐름은 가격에 반응합니다. 모멘텀 거래자는 가격 상승; 흐름에 대한 순진한 OLS는 그들의 반응을 포착하고 그것이 영향을 미친다고 생각합니다." 또한 클린 픽스(구성에 따라 외부에서 생성되는 자체 채우기)의 이름도 지정됩니다.
이는 이미 사내에 명명된 기기와 데이터가 있는 기기 변수 문제입니다. 아래는 추정기, 진단기, 실험기입니다.
한 문단에 담긴 내생성

OLS는 에서만 의 원인 를 추정합니다. 세 가지가 그것을 깨뜨립니다. 생략된 변수 편향: 가 와 를 모두 구동하고 관찰되지 않는 경우 오류, 에 존재하고 는 를 강제합니다. 미세 구조에서 관찰되지 않은 정보 도착은 볼륨과 변동성을 함께 유도합니다. 측정 오류: 시끄러운 프록시 , 를 사용하면 항상 0으로 감쇠됩니다. 순화된 aggTrades 흐름은 단편화된 시장 전체의 실제 서명된 주문 흐름에 대한 프록시이며, 결코 볼 수 없는 부분은 측정 오류입니다. 동시성: 이미 Almgren-Chriss 충격 보정에서 더 명확하고 구체적인 형태로 명시되어 있으며, 이는 아래 모든 것에 대한 동기 부여 문제입니다.
IV 솔루션

기기 는 두 가지 조건을 충족해야 합니다.
- 관련성: . 테스트 가능하므로 테스트해야 합니다.
- 제외: — 는 를 통해서만 에 영향을 미칩니다. 테스트할 수 없습니다. 항상. 그것은 통계가 아니라 경제적인 주장이다.
하나의 도구와 하나의 내생 회귀 분석기의 경우 추정량은 두 가지 축소 형식 효과(Wald 추정량)의 비율입니다.
컨트롤과 여러 장비를 사용하면 2SLS를 사용합니다. 1단계: 기기 및 컨트롤의 내생 변수인 를 회귀하고 적합값 를 유지합니다. 구성에 따라 기기에 의한 외생적 변동만 포함됩니다. 2단계: 를 실행합니다. 를 사용하는 행렬 형식:
이것을 직접 굴리는 모든 사람을 잡는 함정: 문자 그대로 lstsq 호출을 두 번 실행하면 2단계 표준 오류가 발생합니다. 는 생성된 회귀 변수이며 잔차 분산은 피팅된 것이 아닌 원래 에서 계산되어야 합니다. 순진한 2단계 표준 오류는 너무 작으므로 통계가 너무 커서 과도하게 거부됩니다. 실제 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
실험: OLS 감마 대 2SLS 감마

테스트 중인 회귀는 Almgren-Chriss 기사의 영구 충격 적합성입니다.
는 위의 동시성 인수에 의해 내생적입니다. 해당 상품은 창에서 귀하의 채우기입니다. 귀하의 메이커 채우기는 시장의 가격 경로가 아닌 귀하의 견적 일정 및 재고 정책에 의해 발생하므로 오류의 모멘텀-반응 구성요소와 그럴듯하게 상관관계가 없는 주문 흐름 변동의 소스입니다. 제외 제한(필이 순 흐름에 대한 기여를 통해 만 중간으로 이동한다는)은 논쟁의 여지가 있는 가정이며, 인용 자체가 신호 중심일 때 가장 약합니다. 단기 가격 예측에 대한 견적 조건이 있는 경우 해당 상품은 오염되고 이 설계는 실패합니다. 순수한 재고 관리 또는 분산 캡처 정책에 따른 채우기가 깨끗한 경우입니다.
채우기 데이터는 구현 부족 및 DIY TCA에 설명된 TCA 레코드에서 가져옵니다. 이 로그는 자신의 채우기의 미끄러짐 곡선에 대한 피팅 샘플을 제공하는 것과 동일한 로그입니다. 제어: 를 지연시키고 창에서 변동성을 실현했습니다.
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 , 1단계 , 두 계수 사이의 간격(충격이 아닌 모멘텀 반응인 OLS 추정치의 비율) 등 네 가지 숫자가 이것이 수행할 가치가 있는지 여부를 결정합니다.
첫 번째 단계 가 10 아래로 돌아오면 결과는 다음과 같습니다. 를 식별하기에는 자체 채우기가 5분 해상도에서 순 흐름의 일부에 비해 너무 작으며 정직한 기록은 정직한 부정] 스타일에서 부정적입니다. 약한 계측기 부정은 실제 발견입니다. 이는 감마 적합의 내생성이 이 표본 크기 및 범위에서 고칠 수 없으며 OLS 를 기반으로 구축된 거래 전 비용 추정이 제거할 수 없는 상향 편향을 전달한다는 것을 알려줍니다.
진단

1단계 F(약한 기구). Staiger-Stock 경험 법칙: . 하나의 내인성 회귀 분석기에 대한 Stock-Yogo 임계값은 더 엄격합니다. 10% 최대 IV 크기의 경우 는 1개의 기기, 19.93은 2개, 22.30은 3개입니다. 15% 사이즈의 경우 8.96 / 11.59 / 12.83; 20%의 경우 6.66 / 8.75 / 9.54.
Durbin-Wu-Hausman(IV도 필요함). OLS가 일관적이면 더 효율적이므로 전환하기 전에 테스트하십시오. 잔차 증대 형식은 실용적인 형식입니다. 1단계를 실행하고 를 유지한 다음 를 회귀변수로 추가하여 OLS 구조 회귀를 실행합니다. 의 중요한 계수는 내생성의 증거입니다.
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(과잉식별). 도구를 사용하면 결합 타당성을 테스트할 수 있습니다. , 여기서 는 모든 도구 및 외생적 컨트롤에 대한 2SLS 잔차 회귀에서 비롯됩니다. 주의 사항은 통계보다 더 중요합니다. Sargan은 다른 방식으로 유효하지 않은 기기만 감지합니다. 모든 도구가 동일한 생략된 변수와 상관관계가 있는 경우 테스트는 깔끔하게 통과되며 아무 것도 알려주지 않습니다.
암호화폐 미시구조의 도구변수

유효한 수단을 찾는 것이 가장 어려운 일이며, 주식-기업-금융 대기(분석가 적용, 세금 보호, 횡재 현금 흐름)는 여기에서 비활성입니다. 실제로는 두 가지 클래스가 적용됩니다.
| 내생변수 | 악기 | 근거 |
|---|---|---|
| 순 테이커 흐름 | 나만의 채우기 | 시장의 가격 경로가 아닌 견적 및 재고 정책에 따라 구동 — 견적이 신호 조건이 아닌 경우 구성에 따라 외생적 |
| 총유량/체적 | 교환-기계적 흐름: 지수 재조정, 자금 결제 창, 예정된 청산 단계 | 타이밍은 정보 도착이 아닌 교환 규칙에 따라 결정됩니다 |
함정

약한 계측기는 크게 실패하지 않습니다. 약한 첫 번째 단계의 경우 2SLS는 대략 유한 샘플에서 OLS 쪽으로 편향됩니다.
에서는 "인과관계" 추정치를 보고하는 동안 OLS 편향의 25%를 유지합니다. 해결책은 더 나은 유한 표본 동작을 갖는 LIML 또는 장비 강도에 관계없이 유효한 Anderson-Rubin 테스트입니다.
많은 장비 편향. . 1단계 를 향상시키기 위해 모든 것을 에 지연시키면 추정치가 OLS로 바로 돌아갑니다. 가 무시할 수 없는 경우 LIML, jackknife IV(JIVE) 또는 정규화된 1단계를 사용하세요.
제외 제한은 테스트할 수 없습니다. Sargan에 의해서도, 어떤 것에 의해서도 아닙니다. 이는 도메인 추론을 통해 방어되며 이러한 방어의 정직한 형태는 민감도 분석입니다. 결론을 뒤집으려면 얼마나 큰 위반이 필요한가요?
핵심 요점

- 디플레이션은 검색의 편견을 수정합니다. 계수의 편향에는 아무런 영향을 미치지 않습니다. 그들은 다른 실패이며 다른 도구가 필요합니다.
- 내생성 편향은 표본 크기에 따라 사라지지 않습니다. 엄격하고 잘 부트스트랩된 Walk-forward 검증 계수는 여전히 체계적으로 잘못될 수 있습니다.
- Almgren-Chriss 교정의 감마 회귀는 명명된 기기(자체 채우기)와 TCA 파이프라인에 의해 이미 기록된 데이터를 사용하는 실시간 내부 인스턴스입니다.
- 2SLS 계수 이전에 1단계 를 보고합니다. 10 미만이면 계수가 증거가 되지 않으며, 그렇게 말하는 것이 발표 가능한 결과입니다.
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.