The Other Way a Regression Lies: Endogeneity, 2SLS, and the Gamma Calibration Problem
มีสองวิธีที่แตกต่างกันในเชิงโครงสร้างซึ่งทำให้การถดถอยหลอกคุณได้ และจนถึงตอนนี้บล็อกนี้เพิ่งโจมตีไปเพียงวิธีเดียวเท่านั้น
วิธีแรกคืออคติจากการเลือกใน กระบวนการค้นหา: คุณรันแบ็กเทสต์หนึ่งหมื่นครั้ง เก็บผลลัพธ์ที่ดีที่สุดไว้ และตัวเลขที่คุณกำลังดูอยู่คือค่าสูงสุดของการแจกแจงของสัญญาณรบกวน ไม่ใช่ผลกระทบ นี่คือหัวข้อของ อัตราส่วน Sharpe ที่หักล้างอคติแล้ว และบทสรุป ผลลัพธ์เชิงลบอย่างตรงไปตรงมา วิธีแก้คือประเมินต้นทุนของการค้นหา
วิธีที่สองคืออคติใน ค่าสัมประสิทธิ์เอง จากการถดถอยเพียงครั้งเดียวที่คุณไม่ได้ค้นหาผ่านทางเลือกต่าง ๆ เลย หากตัวแปรถดถอยมีสหสัมพันธ์กับพจน์ความคลาดเคลื่อน OLS จะมีอคติและไม่สอดคล้อง — และต่างจากสัญญาณรบกวนจากการสุ่มตัวอย่าง ปัญหานี้ไม่ลดลงเมื่อขนาดตัวอย่างเพิ่มขึ้น ข้อมูลที่มากขึ้นเพียงทำให้ตัวเลขที่ผิดมีช่วงแคบลง ไม่มีการบูตสแตรป การเดินหน้าแบบ walk-forward หรือการหักล้างอคติใดแตะปัญหานี้ได้ เพราะไม่มีวิธีใดตั้งคำถามกับการระบุเหตุ แต่ตั้งคำถามกับการคัดเลือกเท่านั้น
บทความนี้ว่าด้วยความล้มเหลวประการที่สอง และไม่ใช่ความกังวลเชิงนามธรรมในกรณีนี้ บทความการสอบเทียบ Almgren-Chriss ฟิตผลกระทบถาวร ด้วยการถดถอยการเปลี่ยนแปลงราคากลางในช่วง 5 นาทีตามกระแสคำสั่ง taker สุทธิ ได้ค่า เพียงไม่กี่เปอร์เซ็นต์และค่าสัมประสิทธิ์ที่เปลี่ยนไป 2-5 เท่าระหว่างวัน พร้อมระบุว่าภาวะเอนโดจีนิตีเป็นเหตุผลเชิงโครงสร้างประการแรก: "กระแสคำสั่งตอบสนองต่อราคาในระดับเดียวกับที่ราคาตอบสนองต่อกระแสคำสั่ง นักเทรดโมเมนตัมซื้อ เพราะ ราคาปรับขึ้น; OLS แบบไร้เดียงสาของผลตอบแทนต่อกระแสคำสั่งจะจับปฏิกิริยาของพวกเขาได้ แล้วตีความว่าเป็นผลกระทบ" บทความนั้นยังระบุวิธีแก้ที่สะอาด — การเติมคำสั่งของคุณเอง ซึ่งเป็นภายนอกโดยการออกแบบ
นี่คือปัญหาตัวแปรเครื่องมือที่มีเครื่องมือระบุชื่อไว้แล้วและมีข้อมูลอยู่ภายในองค์กร ด้านล่างคือเครื่องประมาณค่า การวินิจฉัย และการทดลอง
ภาวะเอนโดจีนิตีในหนึ่งย่อหน้า

OLS จะประมาณค่าเชิงสาเหตุ ใน ได้ก็ต่อเมื่อ มีสามสิ่งที่ทำลายเงื่อนไขนี้ได้ อคติจากตัวแปรที่ละไว้: หาก เป็นตัวขับเคลื่อนทั้ง และ แต่ไม่ได้สังเกตเห็น มันจะอยู่ในความคลาดเคลื่อน และ จะบังคับให้ — ในโครงสร้างจุลภาค การเข้ามาของข้อมูลที่ไม่ได้สังเกตจะขับเคลื่อนทั้งปริมาณและความผันผวนไปพร้อมกัน ความคลาดเคลื่อนในการวัด: เมื่อมีตัวแทนที่มีสัญญาณรบกวน , จะถูกลดทอนเข้าหาศูนย์เสมอ — กระแส aggTrades สุทธิเป็นตัวแทนของกระแสคำสั่งที่มีเครื่องหมายจริงในตลาดที่แยกส่วน และส่วนที่คุณไม่เคยเห็นคือความคลาดเคลื่อนในการวัด ความเกิดขึ้นพร้อมกัน: ได้ระบุไว้ในรูปแบบที่คมชัดและเป็นรูปธรรมกว่าแล้วใน การสอบเทียบผลกระทบ Almgren-Chriss ซึ่งเป็นปัญหาที่สร้างแรงจูงใจให้ทุกอย่างด้านล่างนี้
วิธีแก้ด้วย IV

เครื่องมือ ต้องเป็นไปตามสองเงื่อนไข:
- ความเกี่ยวข้อง: ทดสอบได้ และคุณต้องทดสอบ
- เงื่อนไขการตัดออก: — ส่งผลต่อ ผ่าน เท่านั้น ทดสอบไม่ได้ ไม่เคยทำได้เลย นี่คือข้อโต้แย้งทางเศรษฐศาสตร์ ไม่ใช่สถิติ
สำหรับเครื่องมือหนึ่งตัวและตัวแปรถดถอยเอนโดจีนัสหนึ่งตัว เครื่องประมาณค่าคืออัตราส่วนของผลกระทบรูปแบบลดรูปสองรายการ (เครื่องประมาณค่า Wald):
เมื่อมีตัวควบคุมและเครื่องมือหลายตัว ให้ใช้ 2SLS ขั้นที่ 1: ถดถอยตัวแปรเอนโดจีนัสกับเครื่องมือและตัวควบคุม แล้วเก็บค่าที่ฟิตได้ — โดยการออกแบบ ค่าดังกล่าวมีเพียงความแปรผันภายนอกที่ขับเคลื่อนด้วยเครื่องมือเท่านั้น ขั้นที่ 2: รัน ในรูปเมทริกซ์ เมื่อ :
กับดักที่จับทุกคนซึ่งเขียนวิธีนี้ด้วยตัวเอง: หากคุณรันคำสั่ง lstsq สองครั้งตามตัวอักษร ค่าความคลาดเคลื่อนมาตรฐานในขั้นที่ 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
การทดลอง: Gamma จาก OLS เทียบกับ Gamma จาก 2SLS

การถดถอยที่กำลังทดสอบคือการฟิตผลกระทบถาวรจากบทความ Almgren-Chriss:
เป็นเอนโดจีนัสตามเหตุผลเรื่องความเกิดขึ้นพร้อมกันข้างต้น เครื่องมือคือ การเติมคำสั่งของคุณเอง ในหน้าต่างนั้น: การเติมคำสั่ง maker ของคุณถูกกระตุ้นโดยตารางการเสนอราคาและนโยบายสินค้าคงคลังของคุณเอง ไม่ใช่เส้นทางราคาของตลาด ดังนั้นจึงเป็นแหล่งความแปรผันของกระแสคำสั่งที่น่าจะไม่สัมพันธ์กับองค์ประกอบปฏิกิริยาโมเมนตัมของความคลาดเคลื่อน ข้อจำกัดการตัดออก — การเติมคำสั่งของคุณจะขยับราคากลาง ผ่าน การมีส่วนร่วมต่อกระแสคำสั่งสุทธิเท่านั้น — เป็นสมมติฐานที่ต้องโต้แย้ง และจะอ่อนแอที่สุดเมื่อการเสนอราคาของคุณขับเคลื่อนด้วยสัญญาณเอง หากราคาเสนอของคุณมีเงื่อนไขตามการพยากรณ์ราคาในช่วงเวลาสั้น เครื่องมือจะปนเปื้อนและการออกแบบนี้จะล้มเหลว การเติมคำสั่งจากนโยบายบริหารสินค้าคงคลังหรือเก็บสเปรดอย่างบริสุทธิ์คือกรณีที่สะอาด
ข้อมูลการเติมคำสั่งมาจากบันทึก TCA ที่อธิบายใน implementation shortfall และ TCA ทำเอง — บันทึกเดียวกับที่ให้ตัวอย่างสำหรับฟิต เส้นโค้ง slippage จากการเติมคำสั่งของคุณเอง ตัวควบคุม: ที่ล่าช้าและความผันผวนที่เกิดขึ้นจริงในหน้าต่าง
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, ในขั้นแรก และช่องว่างระหว่างค่าสัมประสิทธิ์ทั้งสอง — ซึ่งคือสัดส่วนของค่าประมาณ OLS ที่เป็นปฏิกิริยาโมเมนตัมแทนที่จะเป็นผลกระทบ
หาก ในขั้นแรกต่ำกว่า 10 นั่นคือผลลัพธ์: การเติมคำสั่งของคุณเองมีสัดส่วนเล็กเกินไปของกระแสคำสั่งสุทธิที่ความละเอียด 5 นาที จนไม่สามารถระบุค่า ได้ และการเขียนอย่างซื่อตรงคือผลลัพธ์เชิงลบในรูปแบบของ ผลลัพธ์เชิงลบอย่างตรงไปตรงมา ผลลัพธ์เชิงลบจากเครื่องมืออ่อนเป็นข้อค้นพบจริง — มันบอกว่าภาวะเอนโดจีนิตีในการฟิต Gamma ไม่สามารถแก้ไขได้ที่ขนาดตัวอย่างและช่วงเวลานี้ และค่าประมาณต้นทุนก่อนการซื้อขายที่สร้างจาก ของ OLS มีอคติขาขึ้นที่ไม่สามารถกำจัดได้
การวินิจฉัย

F ในขั้นแรก (เครื่องมืออ่อน) กฎโดยประมาณของ Staiger-Stock: ค่าวิกฤตของ Stock-Yogo สำหรับตัวแปรถดถอยเอนโดจีนัสหนึ่งตัวเข้มงวดกว่า — สำหรับขนาด IV สูงสุด 10%, เมื่อมีเครื่องมือหนึ่งตัว, 19.93 เมื่อมีสองตัว, 22.30 เมื่อมีสามตัว; สำหรับขนาด 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 ตรวจพบเฉพาะเครื่องมือที่ไม่ถูกต้องใน วิธีที่แตกต่างกัน หากเครื่องมือทุกตัวสัมพันธ์กับตัวแปรที่ละไว้เดียวกัน การทดสอบจะผ่านอย่างราบรื่นและไม่ได้บอกอะไรคุณเลย
เครื่องมือที่มีอยู่ในโครงสร้างจุลภาคของคริปโต

การหาเครื่องมือที่ถูกต้องคือความยากทั้งหมด และเครื่องมือมาตรฐานจากการเงินองค์กร-หุ้น (การครอบคลุมโดยนักวิเคราะห์ เกราะกำบังภาษี กระแสเงินสดพิเศษ) ใช้การไม่ได้ที่นี่ มีสองกลุ่มที่นำมาใช้ได้จริง:
| ตัวแปรเอนโดจีนัส | เครื่องมือ | เหตุผล |
|---|---|---|
| กระแสคำสั่ง taker สุทธิ | การเติมคำสั่งของคุณเอง | ขับเคลื่อนโดยการเสนอราคาและนโยบายสินค้าคงคลังของคุณ ไม่ใช่เส้นทางราคาตลาด — เป็นภายนอกโดยการออกแบบ หาก ราคาเสนอของคุณไม่ได้มีเงื่อนไขตามสัญญาณ |
| กระแสคำสั่ง / ปริมาณรวม | กระแสตามกลไกของตลาดแลกเปลี่ยน: การปรับสมดุลดัชนี หน้าต่างการชำระ funding และการชำระบัญชีตามกำหนดเวลา | เวลาถูกกำหนดโดยกฎของตลาดแลกเปลี่ยน ไม่ใช่การเข้ามาของข้อมูล |
หลุมพราง

เครื่องมืออ่อนไม่ได้ล้มเหลวอย่างชัดเจน เมื่อขั้นแรกอ่อน 2SLS จะมีอคติ เข้าหา OLS ในตัวอย่างจำกัด โดยประมาณเป็น
ที่ คุณยังคงมีอคติ OLS อยู่ 25% ขณะรายงานค่าประมาณแบบ "เชิงสาเหตุ" วิธีแก้คือ LIML ซึ่งมีพฤติกรรมในตัวอย่างจำกัดดีกว่า หรือการทดสอบ Anderson-Rubin ซึ่งใช้ได้ไม่ว่าความแข็งแรงของเครื่องมือจะเป็นเท่าใด
เครื่องมือจำนวนมากทำให้เกิดอคติ การใส่ค่าล่าช้าของทุกอย่างเข้าไปใน เพื่อเพิ่ม ในขั้นแรกจะลากค่าประมาณกลับไปหา OLS โดยตรง หาก ไม่เล็กน้อย ให้ใช้ LIML, jackknife IV (JIVE) หรือขั้นแรกแบบมีการทำให้เป็นปกติ
ไม่สามารถทดสอบเงื่อนไขการตัดออกได้ ไม่ใช่ด้วย Sargan และไม่ใช่ด้วยสิ่งใดเลย เงื่อนไขนี้ปกป้องด้วยเหตุผลเฉพาะด้าน และรูปแบบการปกป้องที่ซื่อตรงคือการวิเคราะห์ความไว: การละเมิดต้องใหญ่เพียงใดจึงจะพลิกข้อสรุปได้?
ประเด็นสำคัญ

- การหักล้างอคติแก้ไขอคติจาก การค้นหา แต่ไม่ทำอะไรกับอคติใน ค่าสัมประสิทธิ์ นี่คือความล้มเหลวคนละแบบและต้องใช้เครื่องมือคนละชนิด
- อคติจากภาวะเอนโดจีนิตีไม่หายไปเมื่อขนาดตัวอย่างเพิ่มขึ้น ค่าสัมประสิทธิ์ที่แน่นหนา บูตสแตรปอย่างดี และตรวจสอบด้วย walk-forward ยังอาจผิดอย่างเป็นระบบได้
- การถดถอย Gamma ในการสอบเทียบ Almgren-Chriss เป็นกรณีจริงที่มีอยู่ภายในองค์กร พร้อมเครื่องมือที่ระบุชื่อไว้ (การเติมคำสั่งของคุณเอง) และข้อมูลที่บันทึกไว้แล้วโดยไปป์ไลน์ TCA
- รายงาน ในขั้นแรกก่อนค่าสัมประสิทธิ์ 2SLS หากต่ำกว่า 10 ค่าสัมประสิทธิ์นั้นไม่ใช่หลักฐาน และการพูดเช่นนั้นคือผลลัพธ์ที่เผยแพร่ได้
ผู้เขียน
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.