← กลับไปยังบทความ
August 10, 2026
อ่าน 5 นาที

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

มีสองวิธีที่แตกต่างกันในเชิงโครงสร้างซึ่งทำให้การถดถอยหลอกคุณได้ และจนถึงตอนนี้บล็อกนี้เพิ่งโจมตีไปเพียงวิธีเดียวเท่านั้น

วิธีแรกคืออคติจากการเลือกใน กระบวนการค้นหา: คุณรันแบ็กเทสต์หนึ่งหมื่นครั้ง เก็บผลลัพธ์ที่ดีที่สุดไว้ และตัวเลขที่คุณกำลังดูอยู่คือค่าสูงสุดของการแจกแจงของสัญญาณรบกวน ไม่ใช่ผลกระทบ นี่คือหัวข้อของ อัตราส่วน Sharpe ที่หักล้างอคติแล้ว และบทสรุป ผลลัพธ์เชิงลบอย่างตรงไปตรงมา วิธีแก้คือประเมินต้นทุนของการค้นหา

วิธีที่สองคืออคติใน ค่าสัมประสิทธิ์เอง จากการถดถอยเพียงครั้งเดียวที่คุณไม่ได้ค้นหาผ่านทางเลือกต่าง ๆ เลย หากตัวแปรถดถอยมีสหสัมพันธ์กับพจน์ความคลาดเคลื่อน OLS จะมีอคติและไม่สอดคล้อง — และต่างจากสัญญาณรบกวนจากการสุ่มตัวอย่าง ปัญหานี้ไม่ลดลงเมื่อขนาดตัวอย่างเพิ่มขึ้น ข้อมูลที่มากขึ้นเพียงทำให้ตัวเลขที่ผิดมีช่วงแคบลง ไม่มีการบูตสแตรป การเดินหน้าแบบ walk-forward หรือการหักล้างอคติใดแตะปัญหานี้ได้ เพราะไม่มีวิธีใดตั้งคำถามกับการระบุเหตุ แต่ตั้งคำถามกับการคัดเลือกเท่านั้น

บทความนี้ว่าด้วยความล้มเหลวประการที่สอง และไม่ใช่ความกังวลเชิงนามธรรมในกรณีนี้ บทความการสอบเทียบ Almgren-Chriss ฟิตผลกระทบถาวร γ\gamma ด้วยการถดถอยการเปลี่ยนแปลงราคากลางในช่วง 5 นาทีตามกระแสคำสั่ง taker สุทธิ ได้ค่า R2R^2 เพียงไม่กี่เปอร์เซ็นต์และค่าสัมประสิทธิ์ที่เปลี่ยนไป 2-5 เท่าระหว่างวัน พร้อมระบุว่าภาวะเอนโดจีนิตีเป็นเหตุผลเชิงโครงสร้างประการแรก: "กระแสคำสั่งตอบสนองต่อราคาในระดับเดียวกับที่ราคาตอบสนองต่อกระแสคำสั่ง นักเทรดโมเมนตัมซื้อ เพราะ ราคาปรับขึ้น; OLS แบบไร้เดียงสาของผลตอบแทนต่อกระแสคำสั่งจะจับปฏิกิริยาของพวกเขาได้ แล้วตีความว่าเป็นผลกระทบ" บทความนั้นยังระบุวิธีแก้ที่สะอาด — การเติมคำสั่งของคุณเอง ซึ่งเป็นภายนอกโดยการออกแบบ

นี่คือปัญหาตัวแปรเครื่องมือที่มีเครื่องมือระบุชื่อไว้แล้วและมีข้อมูลอยู่ภายในองค์กร ด้านล่างคือเครื่องประมาณค่า การวินิจฉัย และการทดลอง

ภาวะเอนโดจีนิตีในหนึ่งย่อหน้า

แรงที่พันเกี่ยวกันก่อให้เกิดภาวะเอนโดจีนิตี

OLS จะประมาณค่าเชิงสาเหตุ β1\beta_1 ใน Yi=β0+β1Xi+εiY_i = \beta_0 + \beta_1 X_i + \varepsilon_i ได้ก็ต่อเมื่อ E[εiXi]=0\mathbb{E}[\varepsilon_i \mid X_i] = 0 มีสามสิ่งที่ทำลายเงื่อนไขนี้ได้ อคติจากตัวแปรที่ละไว้: หาก WW เป็นตัวขับเคลื่อนทั้ง XX และ YY แต่ไม่ได้สังเกตเห็น มันจะอยู่ในความคลาดเคลื่อน εi=γWi+ui\varepsilon_i = \gamma W_i + u_i และ Cov(Xi,Wi)0\text{Cov}(X_i, W_i) \neq 0 จะบังคับให้ Cov(Xi,εi)0\text{Cov}(X_i, \varepsilon_i) \neq 0 — ในโครงสร้างจุลภาค การเข้ามาของข้อมูลที่ไม่ได้สังเกตจะขับเคลื่อนทั้งปริมาณและความผันผวนไปพร้อมกัน ความคลาดเคลื่อนในการวัด: เมื่อมีตัวแทนที่มีสัญญาณรบกวน 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) จะถูกลดทอนเข้าหาศูนย์เสมอ — กระแส aggTrades สุทธิเป็นตัวแทนของกระแสคำสั่งที่มีเครื่องหมายจริงในตลาดที่แยกส่วน และส่วนที่คุณไม่เคยเห็นคือความคลาดเคลื่อนในการวัด ความเกิดขึ้นพร้อมกัน: ได้ระบุไว้ในรูปแบบที่คมชัดและเป็นรูปธรรมกว่าแล้วใน การสอบเทียบผลกระทบ Almgren-Chriss ซึ่งเป็นปัญหาที่สร้างแรงจูงใจให้ทุกอย่างด้านล่างนี้

วิธีแก้ด้วย IV

เครื่องมือที่แยกผลกระทบเชิงสาเหตุของตลาด

เครื่องมือ ZZ ต้องเป็นไปตามสองเงื่อนไข:

  1. ความเกี่ยวข้อง: Cov(Zi,Xi)0\text{Cov}(Z_i, X_i) \neq 0 ทดสอบได้ และคุณต้องทดสอบ
  2. เงื่อนไขการตัดออก: Cov(Zi,εi)=0\text{Cov}(Z_i, \varepsilon_i) = 0ZZ ส่งผลต่อ YY ผ่าน XX เท่านั้น ทดสอบไม่ได้ ไม่เคยทำได้เลย นี่คือข้อโต้แย้งทางเศรษฐศาสตร์ ไม่ใช่สถิติ

สำหรับเครื่องมือหนึ่งตัวและตัวแปรถดถอยเอนโดจีนัสหนึ่งตัว เครื่องประมาณค่าคืออัตราส่วนของผลกระทบรูปแบบลดรูปสองรายการ (เครื่องประมาณค่า 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}}}

เมื่อมีตัวควบคุมและเครื่องมือหลายตัว ให้ใช้ 2SLS ขั้นที่ 1: ถดถอยตัวแปรเอนโดจีนัสกับเครื่องมือและตัวควบคุม Xi=π0+πZZi+πCCi+viX_i = \pi_0 + \boldsymbol{\pi}_Z' \mathbf{Z}_i + \boldsymbol{\pi}_C' \mathbf{C}_i + v_i แล้วเก็บค่าที่ฟิตได้ X^i\hat{X}_i — โดยการออกแบบ ค่าดังกล่าวมีเพียงความแปรผันภายนอกที่ขับเคลื่อนด้วยเครื่องมือเท่านั้น ขั้นที่ 2: รัน Yi=β0+β1X^i+βCCi+εiY_i = \beta_0 + \beta_1 \hat{X}_i + \boldsymbol{\beta}_C' \mathbf{C}_i + \varepsilon_i ในรูปเมทริกซ์ เมื่อ 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}.

กับดักที่จับทุกคนซึ่งเขียนวิธีนี้ด้วยตัวเอง: หากคุณรันคำสั่ง lstsq สองครั้งตามตัวอักษร ค่าความคลาดเคลื่อนมาตรฐานในขั้นที่ 2 จะผิด X^i\hat{X}_i เป็นตัวแปรถดถอยที่ ถูกสร้างขึ้น และต้องคำนวณความแปรปรวนของส่วนเหลือจาก XX เดิม ไม่ใช่จากค่าที่ฟิตแล้ว ค่าความคลาดเคลื่อนมาตรฐานแบบสองขั้นอย่างไร้เดียงสาจะเล็กเกินไป ดังนั้นสถิติ tt จะใหญ่เกินไปและคุณจะปฏิเสธสมมติฐานมากเกินไป ใช้การติดตั้ง 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:

Δ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}} เป็นเอนโดจีนัสตามเหตุผลเรื่องความเกิดขึ้นพร้อมกันข้างต้น เครื่องมือคือ การเติมคำสั่งของคุณเอง ในหน้าต่างนั้น: การเติมคำสั่ง maker ของคุณถูกกระตุ้นโดยตารางการเสนอราคาและนโยบายสินค้าคงคลังของคุณเอง ไม่ใช่เส้นทางราคาของตลาด ดังนั้นจึงเป็นแหล่งความแปรผันของกระแสคำสั่งที่น่าจะไม่สัมพันธ์กับองค์ประกอบปฏิกิริยาโมเมนตัมของความคลาดเคลื่อน ข้อจำกัดการตัดออก — การเติมคำสั่งของคุณจะขยับราคากลาง ผ่าน การมีส่วนร่วมต่อกระแสคำสั่งสุทธิเท่านั้น — เป็นสมมติฐานที่ต้องโต้แย้ง และจะอ่อนแอที่สุดเมื่อการเสนอราคาของคุณขับเคลื่อนด้วยสัญญาณเอง หากราคาเสนอของคุณมีเงื่อนไขตามการพยากรณ์ราคาในช่วงเวลาสั้น เครื่องมือจะปนเปื้อนและการออกแบบนี้จะล้มเหลว การเติมคำสั่งจากนโยบายบริหารสินค้าคงคลังหรือเก็บสเปรดอย่างบริสุทธิ์คือกรณีที่สะอาด

ข้อมูลการเติมคำสั่งมาจากบันทึก TCA ที่อธิบายใน implementation shortfall และ TCA ทำเอง — บันทึกเดียวกับที่ให้ตัวอย่างสำหรับฟิต เส้นโค้ง slippage จากการเติมคำสั่งของคุณเอง ตัวควบคุม: ΔS\Delta S ที่ล่าช้าและความผันผวนที่เกิดขึ้นจริงในหน้าต่าง

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"])

ตัวเลขสี่รายการจะตัดสินว่านี่คุ้มค่าหรือไม่: γ\gamma ของ OLS, γ\gamma ของ 2SLS, FF ในขั้นแรก และช่องว่างระหว่างค่าสัมประสิทธิ์ทั้งสอง — ซึ่งคือสัดส่วนของค่าประมาณ OLS ที่เป็นปฏิกิริยาโมเมนตัมแทนที่จะเป็นผลกระทบ

หาก FF ในขั้นแรกต่ำกว่า 10 นั่นคือผลลัพธ์: การเติมคำสั่งของคุณเองมีสัดส่วนเล็กเกินไปของกระแสคำสั่งสุทธิที่ความละเอียด 5 นาที จนไม่สามารถระบุค่า γ\gamma ได้ และการเขียนอย่างซื่อตรงคือผลลัพธ์เชิงลบในรูปแบบของ ผลลัพธ์เชิงลบอย่างตรงไปตรงมา ผลลัพธ์เชิงลบจากเครื่องมืออ่อนเป็นข้อค้นพบจริง — มันบอกว่าภาวะเอนโดจีนิตีในการฟิต Gamma ไม่สามารถแก้ไขได้ที่ขนาดตัวอย่างและช่วงเวลานี้ และค่าประมาณต้นทุนก่อนการซื้อขายที่สร้างจาก γ\gamma ของ OLS มีอคติขาขึ้นที่ไม่สามารถกำจัดได้

การวินิจฉัย

วงแหวนตรวจสอบรอบเส้นทางเชิงสาเหตุ

F ในขั้นแรก (เครื่องมืออ่อน) กฎโดยประมาณของ Staiger-Stock: F>10F > 10 ค่าวิกฤตของ Stock-Yogo สำหรับตัวแปรถดถอยเอนโดจีนัสหนึ่งตัวเข้มงวดกว่า — สำหรับขนาด IV สูงสุด 10%, F>16.38F > 16.38 เมื่อมีเครื่องมือหนึ่งตัว, 19.93 เมื่อมีสองตัว, 22.30 เมื่อมีสามตัว; สำหรับขนาด 15%, 8.96 / 11.59 / 12.83; สำหรับ 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 (จำเป็นต้องใช้ IV หรือไม่) หาก OLS สอดคล้อง มันก็มีประสิทธิภาพมากกว่าเช่นกัน ดังนั้นจงทดสอบก่อนเปลี่ยน วิธีเสริมส่วนเหลือคือวิธีที่ใช้ได้จริง: รันขั้นที่ 1 เก็บ v^i=XiX^i\hat{v}_i = X_i - \hat{X}_i จากนั้นรันการถดถอยโครงสร้าง OLS โดยเพิ่ม v^i\hat{v}_i เป็นตัวแปรถดถอย ค่าสัมประสิทธิ์ที่มีนัยสำคัญของ v^i\hat{v}_i เป็นหลักฐานของภาวะเอนโดจีนิตี

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 (การระบุเกิน) เมื่อมีเครื่องมือ q>pq > p คุณสามารถทดสอบความถูกต้องร่วมกันได้: J=nRε^Z2χ2(qp)J = n \cdot R^2_{\hat{\varepsilon} \sim \mathbf{Z}} \sim \chi^2(q - p) โดย R2R^2 มาจากการถดถอยส่วนเหลือของ 2SLS ตามเครื่องมือทั้งหมดและตัวควบคุมภายนอก ข้อควรระวังสำคัญกว่าสถิติ: Sargan ตรวจพบเฉพาะเครื่องมือที่ไม่ถูกต้องใน วิธีที่แตกต่างกัน หากเครื่องมือทุกตัวสัมพันธ์กับตัวแปรที่ละไว้เดียวกัน การทดสอบจะผ่านอย่างราบรื่นและไม่ได้บอกอะไรคุณเลย

เครื่องมือที่มีอยู่ในโครงสร้างจุลภาคของคริปโต

ช็อกอิสระในเครือข่ายตลาดคริปโต

การหาเครื่องมือที่ถูกต้องคือความยากทั้งหมด และเครื่องมือมาตรฐานจากการเงินองค์กร-หุ้น (การครอบคลุมโดยนักวิเคราะห์ เกราะกำบังภาษี กระแสเงินสดพิเศษ) ใช้การไม่ได้ที่นี่ มีสองกลุ่มที่นำมาใช้ได้จริง:

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

หลุมพราง

เส้นทางที่ซ่อนอยู่บ่อนทำลายเครื่องมือ

เครื่องมืออ่อนไม่ได้ล้มเหลวอย่างชัดเจน เมื่อขั้นแรกอ่อน 2SLS จะมีอคติ เข้าหา OLS ในตัวอย่างจำกัด โดยประมาณเป็น

Bias2SLSBiasOLS1F1.\frac{\text{Bias}_{2\text{SLS}}}{\text{Bias}_{\text{OLS}}} \approx \frac{1}{F - 1}.

ที่ F=5F = 5 คุณยังคงมีอคติ OLS อยู่ 25% ขณะรายงานค่าประมาณแบบ "เชิงสาเหตุ" วิธีแก้คือ LIML ซึ่งมีพฤติกรรมในตัวอย่างจำกัดดีกว่า หรือการทดสอบ Anderson-Rubin ซึ่งใช้ได้ไม่ว่าความแข็งแรงของเครื่องมือจะเป็นเท่าใด

เครื่องมือจำนวนมากทำให้เกิดอคติ Bias2SLS(q/n)BiasOLS\text{Bias}_{2\text{SLS}} \approx (q/n) \cdot \text{Bias}_{\text{OLS}} การใส่ค่าล่าช้าของทุกอย่างเข้าไปใน Z\mathbf{Z} เพื่อเพิ่ม FF ในขั้นแรกจะลากค่าประมาณกลับไปหา OLS โดยตรง หาก q/nq/n ไม่เล็กน้อย ให้ใช้ LIML, jackknife IV (JIVE) หรือขั้นแรกแบบมีการทำให้เป็นปกติ

ไม่สามารถทดสอบเงื่อนไขการตัดออกได้ ไม่ใช่ด้วย Sargan และไม่ใช่ด้วยสิ่งใดเลย เงื่อนไขนี้ปกป้องด้วยเหตุผลเฉพาะด้าน และรูปแบบการปกป้องที่ซื่อตรงคือการวิเคราะห์ความไว: การละเมิดต้องใหญ่เพียงใดจึงจะพลิกข้อสรุปได้?

ประเด็นสำคัญ

เส้นทางเชิงสาเหตุที่เชื่อถือได้ผ่านข้อมูลที่มีสัญญาณรบกวน

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

ผู้เขียน

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

ก้าวนำหน้าตลาด

สมัครรับจดหมายข่าวของเราเพื่อรับข้อมูลเชิงลึกการเทรดด้วย AI เฉพาะ การวิเคราะห์ตลาด และการอัปเดตแพลตฟอร์ม

เราเคารพความเป็นส่วนตัวของคุณ ยกเลิกการสมัครได้ทุกเมื่อ