ป่าสาเหตุสำหรับผลกระทบการรักษาที่แตกต่างกันในการเทรด
โมเดลพยากรณ์ทุกตัวในบล็อกนี้ประมาณวัตถุเดียวกัน: ค่าเฉลี่ยแบบมีเงื่อนไข การวิศวกรรมคุณลักษณะ gradient boosting ช่วงความเชื่อมั่นแบบ conformal การตรวจสอบแบบ walk-forward — ทุกอย่างทำหน้าที่เพื่อ estimand เดียว บทความนี้เกี่ยวกับ estimand ที่แตกต่างกันและเครื่องมือที่เปลี่ยนเมื่อคุณสลับมัน
วัตถุคือ ผลกระทบเฉลี่ยของการรักษาแบบมีเงื่อนไข:
ความแตกต่างระหว่างผลลัพธ์ที่เป็นไปได้สองอย่างสำหรับหน่วยเดียวกัน — ซึ่งคุณไม่เคยสังเกตอย่างใดอย่างหนึ่ง คุณไม่สามารถถดถอยมันได้เพราะมันไม่อยู่ในข้อมูลของคุณ ป่าสาเหตุ (Athey และ Imbens 2016; Wager และ Athey 2018) ประมาณมันแบบ non-parametric และอย่างน่าประทับใจ ให้ช่วงความเชื่อมั่นที่ถูกต้องรอบๆ มัน
สามสิ่งทำให้สิ่งนี้เป็นไปได้และไม่มีอย่างใดอย่างหนึ่งในป่าสุ่มมาตรฐาน: คำวิจารณ์การแบ่งที่ขยายความแปรปรวนของผลกระทบการรักษาแทนที่จะลดข้อผิดพลาดในการพยากรณ์ ข้อจำกัดของ ความซื่อสัตย์ ที่ห้ามใช้การสังเกตเดียวกันเพื่อเลือกการแบ่งและประมาณผลกระทบภายในมัน และการอ่านป่าซ้ำว่าเป็นเคอร์เนลแบบปรับตัวที่เปลี่ยน co-occurrence ของใบไม้เป็นน้ำหนักการประมาณ สามอย่างนี้ บวกกับการทดสอบการสอบเทียบที่บอกว่าความแตกต่างที่คุณพบเป็นสัญญาณหรือไม่ เป็นเนื้อหาของบทความนี้
จากผลกระทบเฉลี่ยเป็นผลกระทบที่แตกต่างกัน

ผลกระทบเฉลี่ยของการรักษา
การตั้งค่า: การรักษาแบบไบนารี (เหตุการณ์เกิดขึ้นหรือไม่) ผลลัพธ์ (ผลตอบแทน) ความร่วมมือ ผลกระทบเฉลี่ยของการรักษา คือ
ผลกระทบเฉลี่ยในทุกหน่วย สำหรับการเทรดสิ่งนี้เกือบไร้ประโยชน์ — คุณไม่ได้เทรดค่าเฉลี่ย หากเหตุการณ์ดันครึ่งหนึ่งของจักรวาลขึ้นและครึ่งหนึ่งลง ATE เป็นศูนย์และโอกาสสูงสุด
ผลกระทบเฉลี่ยของการรักษาแบบมีเงื่อนไข
CATE มีเงื่อนไขกับคุณลักษณะ กำหนดเหรียญที่มีมูลค่าตลาดเฉพาะ ความผันผวนที่เกิดขึ้นจริง ประวัติการเงินทุน และความลึกของบุ๊ก: ผลกระทบที่คาดหวังของผลตอบแทนจาก เหตุการณ์ นี้ต่อ สินทรัพย์ นี้คืออะไร CATE เป็นฟังก์ชันบนพื้นที่ความร่วมมือ และการประมาณฟังก์ชันนั้นโดยไม่กำหนดรูปร่างคือสิ่งที่ป่าสาเหตุทำ
ทำไมไม่ใช้โมเดลอินเทอร์แอ็คชันเชิงเส้น?
ทางเลือกในตำราคือ regression แบบ saturated:
ที่ ถืออินเทอร์แอ็คชัน สิ่งนี้ถือว่าอินเทอร์แอ็คชัน เชิงเส้น ซึ่งหายากที่จะเป็น: ความไวต่อการ flip funding เว้าที่ leverage ไม่เชิงเส้น ความลึกโต้ตอบกับมูลค่าตลาดแบบคูณ; รีจิมความผันผวนประตูทุกอย่าง ป่าสาเหตุไม่บังคับสิ่งเหล่านี้ — พวกมันแบ่งพื้นที่ความร่วมมือแบบปรับตัวและปล่อยให้โครงสร้างความแตกต่างออกมาจากข้อมูล
ป่าสาเหตุ: อัลกอริทึม

ป่าสาเหตุคือป่าสุ่มที่สร้างขึ้นใหม่รอบ estimand ของผลกระทบการรักษา ทุกต้นไม้คือ ต้นไม้สาเหตุ ที่แบ่งพื้นที่ความร่วมมือเพื่อขยายความแตกต่างของผลกระทบการรักษา
ต้นไม้สาเหตุ
ที่โหนดภายในทุกโหนด อัลกอริทึมเลือกตัวแปรการแบ่ง และจุดการแบ่ง ความแตกต่างที่สำคัญจากต้นไม้ regression: คำวิจารณ์ขยาย ความแปรปรวนของผลกระทบการรักษาที่ประมาณ ในลูกๆ แทนที่จะลดข้อผิดพลาดกำลังสองของการพยากรณ์
สำหรับโหนดที่มีข้อมูล การประมาณผลกระทบระดับโหนดคือความแตกต่างของค่าเฉลี่ยกลุ่ม:
และคะแนนการแบ่งคือ
กับ ขนาดตัวอย่างในลูกซ้าย ลูกขวา และพาเรนต์ นี่คือความแปรปรวนระหว่างกลุ่มของผลกระทบการรักษา: การแบ่งดีเมื่อลูกสองคนไม่เห็นด้วยกับผลกระทบ ไม่ใช่เมื่อพวกมันพยากรณ์ผลลัพธ์ได้ดี ความร่วมมือที่พยากรณ์ แรง แต่ orthogonal กับวิธีที่ ทำงานจะไม่ถูกเลือก
การประมาณที่ซื่อสัตย์
นวัตกรรมสำคัญคือ ความซื่อสัตย์ ข้อมูลที่ใช้กำหนดโครงสร้างต้นไม้ต้องแยกจากข้อมูลที่ใช้ประมาณผลกระทบใบไม้:
- แบ่งข้อมูล เป็น และ
- สร้างต้นไม้ ใช้เฉพาะ เพื่อเลือกตัวแปรและจุดการแบ่ง
- ประมาณผลกระทบใบไม้ ใช้เฉพาะ dropping การสังเกตเหล่านั้นลงในต้นไม้ที่ถูกตรึงไว้แล้ว
โดยไม่มีสิ่งนี้ ต้นไม้โกง: มันแกะสลักใบไม้ที่ผลกระทบสุดโต่งเป็นสัญญาณรบกวนในตัวอย่างเดียวกันที่ใช้ค้นหาพวกมัน แล้วรายงานสัญญาณรบกวนนั้นเป็นการประมาณ นี่คือความล้มเหลวของการเลือกแบบปรับตัวเดียวกับที่ ความน่าจะเป็นของ backtest overfitting วัดที่ระดับกลยุทธ์ ยกเว้นที่นี่ป้องกันภายในตัวประมาณแทนที่จะวินิจฉัยหลังจากนั้น ความซื่อสัตย์ซื้อความไม่มีอคติเชิง asymptotic:
ราคาคือประสิทธิภาพตัวอย่าง — ครึ่งข้อมูลของคุณสร้างโครงสร้างที่ไม่สามารถใช้เติมได้
จากต้นไม้เป็นป่า
ป่าสาเหตุรวม ต้นไม้สาเหตุ แต่ละต้นบน subsample สุ่มขนาด ด้วยชุดย่อยของความร่วมมือสุ่มที่การแบ่งแต่ละครั้ง:
วิธีที่มีประโยชน์กว่าในการเขียนสิ่งนี้คือเป็น ค่าเฉลี่ยถ่วงน้ำหนักของผลลัพธ์:
กับน้ำหนักแบบปรับตัวที่ตั้งโดยความถี่ที่การสังเกต ตกลงในใบไม้เดียวกับ :
ที่ คือใบไม้ที่มี ในต้นไม้ นี่คือมุมมองป่าสุ่มทั่วไป (Athey, Tibshirani และ Wager 2019): ป่าสาเหตุคือ ตัวประมาณเคอร์เนลแบบปรับตัวในเครื่อง มันเรียนรู้แนวคิดของ "คล้ายกัน" เอง กำหนดโดยความร่วมมือที่สำคัญสำหรับความแตกต่างของผลกระทบ ไม่ใช่ระยะห่างแบบยุคลิดในพื้นที่ที่คุณต้องเลือกสเกลด้วยตนเอง
ทฤษฎี asymptotic
ภายใต้เงื่อนไขความสม่ำเสมอ (Wager และ Athey 2018) ตัวประมาณเป็น consistent, และ asymptotic ปกติ:
ให้ช่วงจุด ความแปรปรวน มาจาก infinitesimal jackknife (หรือ bootstrap-of-little-bags) คำนวณจากโครงสร้าง subsample เดียวกับที่ป่าสร้างไว้แล้ว — ไม่มีวง bootstrap ภายนอก
น่าจะเป็นเฉพาะเจาะจงเกี่ยวกับการรับประกันนี้คืออะไรและไม่ใช่อะไร มันเป็น asymptotic และเป็นจุดๆ และถือสำหรับ CATE ช่วง การพยากรณ์แบบ conformal ที่ใช้ที่อื่นในบล็อกนี้เป็น finite-sample และ free-from-distribution แต่ marginal และครอบผลลัพธ์ Estimand ต่างกัน การรับประกันต่างกัน; พวกมันไม่ใช่ตัวแทน
การเชื่อมต่อ Double Machine Learning
เมื่อการรักษาไม่ได้ถูกกำหนดแบบสุ่ม ป่าสาเหตุ fit บนข้อมูลที่ residualized: โมเดลผลลัพธ์ และโมเดล propensity ถูกประมาณโดย cross-fitting และป่าทำงานบน กับ ความ orthogonal ของ Neyman คือสิ่งที่ทำให้สิ่งนี้ปลอดภัย: ข้อผิดพลาดของการประมาณ nuisance เข้ามาเฉพาะในฐานะผลคูณ ดังนั้น และ แต่ละตัวสามารถ converge ที่ และ ยัง converge ที่
เฟรมเวิร์กนี้ — residualization, cross-fitting, อาร์กิวเมนต์ความ orthogonal, ผลกระทบของขนาดตัวอย่าง — เป็นหัวข้อของบทความของมันเอง, Double Machine Learning สำหรับสัญญาณการเทรดเชิงสาเหตุ อ่านมันก่อน; ทุกอย่างด้านล่างถือว่ามันและครอบเฉพาะสิ่งที่เปลี่ยนเมื่อ estimand เป็น แทน
แอปพลิเคชันการเทรด: ความแตกต่างของผลกระทบเหตุการณ์

การตั้งค่า
โดเมนธรรมชาติสำหรับบล็อกนี้คือจักรวาูลเหรียญ perpetual-futures ที่เหตุการณ์ถี่, มี timestamp และสังเกตได้โดยไม่มี vendor feed
- หน่วย: การสังเกตเหรียญ-เหตุการณ์ across the tradable perp universe
- การรักษา: ถ้าเหตุการณ์เกิดขึ้นสำหรับเหรียญ — flip เครื่องหมาย funding-rate, spot listing, หรือ cascades of liquidation ที่ข้ามเกณฑ์ supercritical ที่อธิบายใน liquidation cascades as a trading signal — และ สำหรับหน้าต่างที่ไม่ใช่เหตุการณ์ที่ match
- ผลลัพธ์: = ผลตอบแทน ผิดปกติ ในช่วงเหตุการณ์ ไม่ใช่ผลตอบแทนดิบ Fit ตลาดโมเดลบนหน้าต่างการประมาณก่อนเหตุการณ์ แล้วรับผลตอบแทนผิดปกติสะสม สเปคที่แน่นอน — หน้าต่างการประมาณ, regression ของตลาดโมเดล, การสร้าง CAR และ t-statistic — ทำงานในส่วนการศึกษาเหตุการณ์ของ LLM alpha mining จาก earnings calls; ใช้ซ้ำ verbatim ขั้นตอนนี้ไม่ใช้ตัวเลือก: ผลลัพธ์ close-to-close ดิบปล่อยให้การเคลื่อนไหวของตลาดเข้า และเนื่องจากการเคลื่อนไหวของตลาดเป็นสายธารร่วมกับหน่วยที่รักษาทั้งหมด มันดูเหมือนผลกระทบการรักษา
- ความร่วมมือ : มูลค่าตลาด ความผันผวนที่เกิดขึ้นจริง ประวัติ funding ความลึกของบุ๊ก อัตรา open-interest-to-cap
- Confounders : ตัวแปรรีจิมที่เลื่อนทั้งความน่าจะเป็นของเหตุการณ์และผลตอบแทน
สัญญาณการเทรด
พื้นผิว CATE map ไปยัง position sizer แม่นยำเหมือนการประมาณความไม่แน่นอนที่สอบเทียบ: sizing โดย สัมพัธ์กับความกว้างช่วง และไม่เทรดเมื่อช่วงข้ามศูนย์ กฎการตัดสินใจนี้ — inverse-width sizing, edge ratio , ฟิลเตอร์ no-trade, cost-aware variant และอาร์กิวเมนต์ทำไมคุณไม่ควรคูณมันเป็นเศษส่วน Kelly — ได้รับมาใน Conformal Prediction for Risk-Aware Position Sizing ใช้ซ้ำด้วย แทน และช่วงป่าสาเหตุแทน conformal สมดุลขาทั้งยาวและสั้นและบุ๊กเป็นกลางตลาดโดยการสร้าง
การใช้งาน Python กับ EconML
import numpy as np
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier
from econml.dml import CausalForestDML
def fit_causal_forest(Y, T, X, W, n_estimators=1000):
"""
CausalForestDML: residualize against (X, W), then fit a causal
forest on the residuals.
Y: abnormal returns over the event window (CAR, market-model adjusted)
T: event indicator
X: effect modifiers -- only these drive heterogeneity
W: confounders -- enter the nuisance models only
"""
cf = CausalForestDML(
model_y=GradientBoostingRegressor(
n_estimators=200, max_depth=5, learning_rate=0.05
),
model_t=GradientBoostingClassifier(
n_estimators=200, max_depth=5, learning_rate=0.05
),
n_estimators=n_estimators,
min_samples_leaf=20,
max_depth=None,
criterion="het", # heterogeneity-based splitting
honest=True, # honest estimation
inference=True, # infinitesimal-jackknife intervals
cv=5, # cross-fitting folds for DML
random_state=42,
)
cf.fit(Y=Y, T=T, X=X, W=W)
return cf
def summarize_cate(cf, X, feature_names):
"""Distribution of the CATE and what drives its heterogeneity."""
tau_hat = cf.effect(X)
tau_lo, tau_hi = cf.effect_interval(X, alpha=0.05)
print(f"Mean CATE: {tau_hat.mean():.4f}")
print(f"Std CATE: {tau_hat.std():.4f}")
print(f"Range: [{tau_hat.min():.4f}, {tau_hat.max():.4f}]")
print(f"% CI excl. 0: {((tau_lo > 0) | (tau_hi < 0)).mean():.1%}")
for idx in np.argsort(cf.feature_importances_)[::-1]:
print(f" {feature_names[idx]:>20s}: {cf.feature_importances_[idx]:.4f}")
return tau_hat, tau_lo, tau_hi
การตีความพื้นผิว CATE
กราฟผลกระทบเชิง margin แสดงว่าผลกระทบการรักษาเคลื่อนที่อย่างไรตามความร่วมมือหนึ่งเมื่อที่เหลือถูกครองที่ median:
def plot_cate_by_feature(cf, X, feature_idx, n_points=50):
x_grid = np.linspace(X[:, feature_idx].min(),
X[:, feature_idx].max(), n_points)
X_eval = np.tile(np.median(X, axis=0), (n_points, 1))
X_eval[:, feature_idx] = x_grid
tau = cf.effect(X_eval)
tau_lo, tau_hi = cf.effect_interval(X_eval, alpha=0.05)
return x_grid, tau, tau_lo, tau_hi
อ่านสิ่งเหล่านี้เป็นคำอธิบายของพื้นผิวที่ fit ไม่ใช่เป็น curves ปริมาณ-การตอบสนองเชิงสาเหตุ — การถือความร่วมมืออื่นที่ median อาจวางคุณในภูมิภาคของพื้นที่ความร่วมมือที่ไม่มีการสนับสนุน
สมมติฐานสำคัญและการวินิจฉัย

ละเมิดสิ่งเหล่านี้และคุณจะได้ผลกระทบที่มั่นใจ แม่นยำ ผิด
1. Unconfoundedness (Selection on Observables)
การกำหนดการรักษาต้องเป็นอิสระจากผลลัพธ์ที่เป็นไปได้เมื่อมีความร่วมมือที่สังเกต สำหรับเหตุการณ์ที่กำหนดทางกลไกสิ่งนี้ปกป้องได้; สำหรับเหตุการณ์ที่เป็นปฏิกิริยาตลาดเอง — ประกาศ listing, liquidation engine ของ exchange ยิง — ไม่ใช่ เพราะการไหลที่ไม่สังเกตเดียวกันที่ทำให้เหตุการณ์เกิดขึ้นก็เคลื่อนผลตอบแทน
ทดสอบด้วยการวิเคราะห์ความไวของ Rosenbaum: ถ้า ที่ไม่สังเกตสามารถเลื่อนอัตราการรักษาได้ถึง factor ,
ต้องใหญ่แค่ไหนก่อนที่ผลกระทบที่ประมาณจะเปลี่ยนเครื่องหมาย? การออกแบบที่แตกที่ ไม่ใช่การค้นพบ
2. Overlap (Positivity)
ทุกหน่วยต้องการความน่าจะเป็นเชิงบวกในการปรากฏในทั้งสองแขนง ตรวจสอบ propensity scores และ trim:
propensity = cf.models_t[0][0].predict_proba(np.hstack([X, W]))[:, 1]
print(f"Propensity range: [{propensity.min():.3f}, {propensity.max():.3f}]")
valid = (propensity > 0.05) & (propensity < 0.95)
print(f"Retained after trimming: {valid.mean():.1%}")
Trimming ไม่ฟรี — มัน redefine ประชากรที่ ของคุณอธิบาย รายงานเศษส่วนที่รอดชีวิต
3. SUTVA (Stable Unit Treatment Value Assumption)
การรักษาของหน่วยหนึ่งต้องไม่กระทบผลลัพธ์ของอีกหน่วยหนึ่ง ในคริปโตนี่คืออ่อนที่สุดในสาม: cascade of liquidation ใน perp หนึ่ง propagate ผ่าน collateral ที่ใช้ร่วมกันและ inventory ของ market maker ไปยังคู่ที่ correlate ทุกคู่ซึ่งเป็น interference โดยคำจำกัดความ การรวม standard errors โดยกลุ่มความสัมพันธ์แก้ปัญหาบางส่วน; ไม่มีอะไรแก้ไข้ทั้งหมด
อยู่เหนือการรักษาแบบไบนารี
ป่าสาเหตุขยายไปยัง การรักษาแบบต่อเนื่อง ผ่านเครื่องมือ DML เดียวกัน — ประมาณว่า ขนาด ของ shock ไม่ใช่เฉพาะการเกิดขึ้น เคลื่อนที่สินทรัพย์แตกต่างกัน:
ที่ คือ, เช่น, ขนาดของการเปลี่ยนแปลง funding-rate ใน basis points ตอนนี้ คือผลกระทบต่อ basis point
cf_continuous = CausalForestDML(
model_y=GradientBoostingRegressor(n_estimators=200),
model_t=GradientBoostingRegressor(n_estimators=200), # regression, not classifier
discrete_treatment=False,
n_estimators=1000,
honest=True,
inference=True,
)
cf_continuous.fit(Y=car, T=funding_change_bps, X=asset_features, W=controls)
effects_25bp = cf_continuous.effect(X_test, T0=0, T1=25)
ข้อควรพิจารณาเชิงปฏิบัติ
ความแตกต่างเป็นสิ่งจริงหรือ?
นี่คือคำถามที่ป่าสาเหตุตอบและไม่มีอะไรในบล็อกนี้ทำ และสมควรได้รับการทดสอบจริง ไม่ใช่กฎยาว ความซื่อสัตย์ป้องกันการแบ่งที่สุ่มภายในตัวประมาณ; การประเมิน out-of-sample บน เหตุการณ์ ที่ถูกถือ (ไม่ใช่สินทรัพย์ที่ถูกถือ) เป็นมาตรฐานและครอบใน walk-forward optimization และ deflated Sharpe และ multiple testing ไม่มีอะไรบอกคุณว่า แตกต่างกับ อย่างไร
การทดสอบ Best Linear Predictor ทำ ถดถอยผลลัพธ์ที่ residualized บนการรักษาที่ residualized และอินเทอร์แอ็คชันกับการประมาณ CATE ที่ centered:
สองสัมประสิทธิ์ตอบคำถามสองอย่างต่างกัน คือผลกระทบเฉลี่ย: มีอะไรที่นี่เลยหรือ? คือความชันของการสอบเทียบในการพยากรณ์ของคุณเอง: เมื่อป่าของคุณบอกว่าผลกระทบใหญ่ขึ้น มันใหญ่ขึ้นจริงหรือ? ภายใต้ null ของไม่มีความแตกต่าง ภายใต้การสอบเทียบสมบูรณ์ มีนัยสำคัญเหนือศูนย์ แต่ไกลจากหนึ่งหมายความว่าป่าพบการจัดลำดับจริง แต่ overstate การกระจาย — คุณสามารถเทรด ranking ไม่ใช่ขนาด
RScorer ของ EconML ให้คะแนนการเลือกโมเดลที่เป็นเพื่อน:
from econml.score import RScorer
scorer = RScorer(
model_y=GradientBoostingRegressor(n_estimators=100),
model_t=GradientBoostingClassifier(n_estimators=100),
discrete_treatment=True,
cv=5,
)
scorer.fit(Y_val, T_val, X=X_val, W=W_val)
print(f"R-score: {scorer.score(cf):.4f}")
Fit scorer บน validation split ที่ป่าไม่เคยเห็น แล้วใช้เปรียบเทียบโมเดล CATE ที่เป็นตัวเลือกกับแต่ละและกับ baseline ของผลกระทบคงที่ ป่าที่ไม่สามารถ beat โมเดลผลกระทบคงที่บน R-score ไม่พบความแตกต่างที่คุ้มเทรด ไม่ว่า importances in-sample จะพูดอะไร
ขนาดตัวอย่าง
ป่าสาเหตุต้องการข้อมูลมากกว่าโมเดลผลลัพธ์เพราะ estimand เป็นความแตกต่างและทั้งสองแขนงต้องถูก populate ภายในทุกใบไม้ วินัยทั่วไปของ data-vs-parameters — กี่จุด out-of-sample ต่อพารามิเตอร์ free และการแก้ไข Bonferroni เมื่อคุณเปรียบเทียบ configurations — อยู่ในส่วนความต้องการข้อมูลของ walk-forward optimization คำตอบเฉพาะของป่าสาเหตุเป็นเชิงประจักษ์ ไม่ใช่กฐินิ้ว: fit ป่าบน nested subsamples และ plot ความกว้างช่วง median กับ ; ขนาดตัวอย่างที่ใช้ได้อยู่ที่ความกว้างตกต่ำกว่าขนาดผลกระทบที่คุณตั้งใจเทรด
Walk-Forward, พร้อมสองเรื่อง
โปรโตคอลการประเมินคือ walk-forward anchored ปกติ — refit บนเหตุการณ์ทั้งหมดถึง , เทรดเหตุการณ์ — และการรักษาเต็ม รวม purging, embargo, walk-forward efficiency ratio และ degradation rate อยู่ใน walk-forward optimization สองสิ่งเฉพาะสำหรับตัวประมาณนี้
ขั้นแรก หน้าต่างเหตุการณ์ overlap ถ้าหน้าต่างความร่วมมือก่อนเหตุการณ์ มีหน้าต่างผลลัพธ์ของเหตุการณ์ folds ใช้การสังเกตร่วมกันและผลลัพธ์ out-of-sample ถูกปนเปื้อน Purge หน้าต่างที่ overlap ก่อนนับจำนวน PnL เดียว; ด้วยการรักษาที่ถี่ทางกลไกเช่น flip funding สิ่งนี้สามารถลบส่วนสำคัญของเหตุการณ์
ขั้นที่สอง การแบ่งที่ซื่อสัตย์ต้องถูกวาดใหม่ที่ทุก refit การพา partition / เดียวกัน across folds reintroduce การรั่วไหลของการเลือกโครงสร้างเดียวกับที่ความซื่อสัตย์มีอยู่เพื่อป้องกัน เพราะเหตุการณ์ที่เพิ่มใหม่ลงใน partition ที่ถูกเลือกด้วยความรู้ของตัวเก่า
จากนั้นรัน PnL out-of-sample ระดับเหตุการณ์ผ่านประตูปกติ — PBO และ deflated Sharpe ratio — ก่อนเชื่อสิ่งใด
ต้นทุน
สัญญาณ CATE ถูกกำหนดราคาเหมือนสัญญาณที่ขับเคลื่อนโดยเหตุการณ์อื่น: ลบ half-spread ที่คาดหวังจาก ก่อนฟิลเตอร์ no-trade และ size down ในบุ๊กบาง เวอร์ชันเชิงปริมาณ — กฎการกระทบรากที่สองและ cost curves ที่ fit ใน slippage cost models, ฟิลเตอร์ no-trade ที่รับรู้ต้นทุนใน conformal prediction และการบัญชีการดำเนินการใน implementation shortfall และ TCA — ทั้งหมดถ่ายโอนไม่เปลี่ยนแปลง
สิ่งเดียวที่ไม่ถ่ายโอน: shelf-life ของสัญญาณ CATE ถูกจำกัดโดยหน้าต่างเหตุการณ์ ดังนั้นต้นทุนถูก amortize ไปยังระยะเวลาการถือครองสั้นตายตัว แทนที่จะเปิดกว้าง สัญญาณที่ถืออย่างต่อเนื่องจ่าย spread ครั้งและได้รับระหว่างที่ edge persist; นี่จ่ายทุกเหตุการณ์ edge รอดไหมเป็นคำถามเชิงประจักษ์เกี่ยวกับเหตุการณ์เฉพาะและจักรวาลเฉพาะของคุณ และเป็นสิ่งแรกที่ต้องตรวจสอบ เพราะมันสามารถฆ่ากลยุทธ์ก่อนที่เครื่องมือสาเหตุจะสำคัญ
บทสรุป
ป่าสาเหตุประมาณวัตถุที่แตกต่างจาก toolkit อื่นของบล็อกนี้ ไม่ใช่ "สินทรัพย์นี้จะคืนอะไร" แต่ "เหตุการณ์นี้เคลื่อนสินทรัพย์นี้มากเท่าไหร่ สัมพัธ์กับค่าต้านที่มันไม่ยิง" เครื่องมือที่ทำให้สิ่งนี้ประมาณได้ — การแบ่งที่ขยายความแตกต่าง การประมาณที่ซื่อสัตย์ การแสดงถึงน้ำหนักเคอร์เนลแบบปรับตัว และช่วง infinitesimal-jackknife — ไม่มีอะนาล็อกในการเรียนรู้แบบมีผู้สอนธรรมดา และสมมติฐานที่ต้องการ (unconfoundedness, overlap, SUTVA) แข็งแรงพอที่จะต้องถูกทดสอบ ไม่ใช่ยืนยัน
สิ่งที่บทความนี้ไม่มีคือผลลัพธ์ ทุกตัวเลขข้างบนเป็นตัวยึดตำแหน่ง กับมาตรฐานที่ตั้งโดย negative ที่ซื่อสัตย์ และ deflated Sharpe วิธีที่ไม่มีการกระจาย CATE ที่วัด BLP กับ p-value, การวินิจฉัย overlap และ PnL out-of-sample ที่ประตูโดย DSR/PBO เป็น tutorial ไม่ใช่การค้นพบ ตัวเลขเหล่านี้คืองานถัดไป; ผลลัพธ์เชิงลบค่าการเผยแพร่
อ้างอิง
- Athey, S., Imbens, G.W. "Recursive Partitioning for Heterogeneous Causal Effects." PNAS, 113(27), 7353-7360 (2016).
- Wager, S., Athey, S. "Estimation and Inference of Heterogeneous Treatment Effects using Random Forests." JASA, 113(523), 1228-1242 (2018). arXiv:1510.04342
- Athey, S., Tibshirani, J., Wager, S. "Generalized Random Forests." Annals of Statistics, 47(2), 1148-1178 (2019).
- Chernozhukov, V., et al. "Double/Debiased Machine Learning for Treatment and Structural Parameters." The Econometrics Journal, 21(1), C1-C68 (2018).
- Chernozhukov, V., Demirer, M., Duflo, E., Fernandez-Val, I. "Generic Machine Learning Inference on Heterogeneous Treatment Effects in Randomized Experiments." (2018). arXiv:1712.04802
- Battocchi, K., et al. "EconML: A Python Package for ML-Based Heterogeneous Treatment Effects Estimation." Microsoft Research (2019). GitHub
ผู้เขียน
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.