الغابات السببية للتأثيرات الشرطية للعلاج في التداول
كل نموذج تنبؤ في هذه المدونة يقدر نفس الكائن: متوسط شرطي . هندسة الميزات، والتعزيز المتدرج، وفواصل المطابقة، والتحقق المتقدم للأمام — كل هذا يخدم مقدراً واحداً. تتناول هذه المقالة مقدراً مختلفاً، والآلات التي تتغير عند استبداله.
الكائن هو متوسط تأثير العلاج الشرطي:
الفرق بين نتيجتين محتملتين لنفس الوحدة — واحدة منها لا تراقب أبداً. لا يمكنك الانحدار عليها، لأنها ليست في بياناتك. الغابات السببية (Athey and Imbens 2016; Wager and Athey 2018) تقدرها بشكل غير حدودي، وللغرابة، تعطيك فترة ثقة صالحة حولها.
ثلاثة أشياء تجعل ذلك ممكناً ولا شيء منها موجود في غابة عشوائية قياسية: معيار تقسيم يزيد من تباين تأثير العلاج بدلاً من تقليل خطأ التنبؤ، وقيد الأمانة الذي يمنع استخدام نفس الملاحظات لاختيار تقسيم وتقدير التأثير داخله، وإعادة قراءة الغابة كنواة تكيفية تحول التزامن في الأوراق إلى أوزان تقدير. هذه الثلاثة، بالإضافة إلى اختبار المعايرة الذي يخبرك ما إذا كان التباين الذي وجدته هو إشارة، هي محتوى هذه المقالة.
من التأثيرات المتوسطة إلى التأثيرات غير المتجانسة

متوسط تأثير العلاج
الإعداد: علاج ثنائي (حدث حدث أو لم يحدث)، نتيجة (عائد)، متغيرات مشتركة . متوسط تأثير العلاج هو
التأثير المتوسط عبر جميع الوحدات. للتداول هذا عديم الفائدة تقريباً — لا تتاجر المتوسط. إذا دفع حدث نصف الكون للأعلى والنصف للأسفل، فإن ATE هو صفر والفرصة قصوى.
متوسط تأثير العلاج الشرطي
CATE يشترط على الخصائص. عملة مع قيمة سوقية محددة، وتقلب محقق، وتاريخ تمويل، وعمق دفتر — ما هو تأثير العائد المتوقع لهذا الحدث على هذا الأصل؟ CATE هي دالة عبر فضاء المتغير المشترك، وتقدير تلك الدالة دون فرض شكلها هو ما تفعله الغابات السببية.
لماذا لا تستخدم نماذج التفاعل الخطية فحسب؟
البديل النصي هو انحدار مشبع:
حيث يحمل التفاعل. هذا يفترض أن التفاعل خطي. نادراً ما يكون كذلك: الحساسية لقلب التمويل محدبة في الرافعة المالية، وليست خطية؛ العمق يتفاعل مع القيمة السوقية بشكل مضاعف؛ نظام التقلب يبوّب كل شيء آخر. الغابات السببية لا تفرض أي شيء من هذا — تقسم فضاء المتغير المشترك بشكل تكيفي وتترك بنية التباين تنبثق من البيانات.
الغابات السببية: الخوارزمية

الغابة السببية هي غابة عشوائية أعيد بناؤها حول مقدر تأثير العلاج. كل شجرة هي شجرة سببية تقسم فضاء المتغير المشترك لتعظيم تباين تأثير العلاج.
الأشجار السببية
في كل عقدة داخلية، تختار الخوارزمية متغير تقسيم ونقطة تقسيم . الاختلاف الرئيسي عن شجرة الانحدار: المعيار يعظم تباين تأثير العلاج المقدر عبر الأبناء بدلاً من تقليل خطأ التنبؤ التربيعي.
لعقدة ببيانات , مقدر التأثير على مستوى العقدة هو الفرق في وسائل المجموعة:
واختيار التقسيم هو
مع أحجام العينة في الابن الأيسر، والابن الأيمن، والأب. هذا بالضبط تباين بين المجموعات لتأثيرات العلاج: التقسيم جيد عندما يختلف الابنان حول التأثير، وليس عندما يتنبآن بالنتيجة بشكل جيد. المتغير المشترك الذي يتنبأ بقوة بـ لكنه متعامد مع كيفية عمل لن يتم اختياره أبداً.
التقدير الصادق
الابتكار الحرج هو الأمانة. البيانات المستخدمة لتحديد هيكل الشجرة يجب أن تكون منفصلة عن البيانات المستخدمة لتقدير تأثيرات الأوراق:
- قسم البيانات إلى و
- ابنِ الشجرة باستخدام فقط لاختيار متغيرات ونقاط التقسيم
- قدر تأثيرات الأوراق باستخدام فقط، بإسقاط تلك الملاحظات في الشجرة الثابتة مسبقاً
بدون هذا، ت cheating الشجرة: تنحت أوراقاً تأثيراتها المتطرفة هي ضوضاء في نفس العينة المستخدمة لإيجادها، ثم تبلغ تلك الضوضاء كالتقدير. هذا نفس فشل الاختيار التكيفي الذي يقيس احتمال إفراط الت fitted في الاختبار الخلفي على مستوى الاستراتيجية، باستثناء أنه هنا يدافع ضده داخل المقدر بدلاً من تشخيصه بعد الحدث. الأمانة تشتري عدم التحيز المقارب:
السعر هو كفاءة العينة — نصف بياناتك يبني هيكلاً لا يمكنه بعد ذلك استخدامه لملئه.
من الأشجار إلى الغابات
الغابة السببية تتجمع شجرة سببية، كل واحدة على عينة عشوائية فرعية بحجم مع مجموعة متغيرات مشتركة عشوائية في كل تقسيم:
الطريقة الأكثر فائدة لكتابة هذا هي متوسط مرجح للنتائج:
مع أوزان تكيفية محددة بمدى تكرار وقوع الملاحظة في نفس الورقة مثل :
حيث هي الورقة التي تحتوي على في الشجرة . هذه هي عرض الغابة العشوائية المعممة (Athey, Tibshirani and Wager 2019): الغابة السببية هي مقدر نواة محلي التكيف. تتعلم مفهومها الخاص من "المشابه"، المحدد بأي متغيرات مشتركة تهم فعلاً لتباين التأثير، بدلاً من المسافة الإقليدية في فضاء كان عليك اختيار القياس يدوياً.
النظرية المقاربة
تحت ظروف الانتظام (Wager and Athey 2018) المقدر متسق، , ومتطابق مقارباً:
تعطي فترات نقطية . التباين يأتي من سكين متناهي الصغر (أو bootstrap-for-little-bags)، المحسوب من نفس هيكل العينة الفرعية الذي بنته الغابة بالفعل — لا حلقة bootstrap خارجية.
الجدير بالدقة ما يضمنه هذا الضمان وما لا يضمنه. هو مقارب ونقطي، ويعقد لـ CATE. فترات التنبؤ المطابق المستخدمة في مكان آخر في هذه المدونة هي محدودة العينة وخالية من التوزيع، لكن هامشية، وتغطي نتيجة. مقدر مختلف، ضمان مختلف؛ هم ليسوا بدائل.
اتصال التعلم المزدوج بالآلة
عندما لا يكون العلاج معيناً عشوائياً، يتم تركيب الغابة السببية على بيانات مُبقاة: نموذج نتيجة ونموذج الميل يقدران بالت fitting المتقاطع، وتعمل الغابة على ضد . التعامد Neyman هو ما يجعل هذا آمناً: خطأ تقدير الإزعاج يدخل كمنتج فقط، لذا و يمكن أن يتقاربا كل عند و لا يزال يتقارب عند .
ذلك الإطار — البقاة، والت fitting المتقاطع، ووسيط التعامد، وتداعيات حجم العينة — هو موضوع مقالته الخاصة، التعلم المزدوج بالآلة لإشارات التداول السببية. اقرأها أولاً؛ كل ما يلي افترضها ويغطي فقط ما يتغير عندما المقدر هو بدلاً من .
تطبيق التداول: تباين تأثير الحدث

الإعداد
المجال الطبيعي لهذه المدونة هو كون العملة المستمرة، حيث الأحداث متكررة، ومؤرقة، وقابلة للملاحظة بدون تغذية بائع.
- الوحدات: ملاحظات عملة-حدث عبر كون perp القابل للتداول
- العلاج: إذا أطلق الحدث للعملة — قلب إشارة معدل التمويل، أو إدراج نقطة، أو سلسلة تصفية تعبر العتبة الفائقة الحرجة الموصوفة في سلاسل التصفية كإشارة تداول — و لنوافذ غير حدث متطابقة
- النتيجة: = العائد غير الطبيعي عبر نافذة الحدث، ليس العائد الخام. ركب نموذج سوق على نافذة تقدير تسبق الحدث، ثم خذ العائد غير الطبيعي التراكمي. المواصفات الدقيقة — نافذة التقدير، وانحدار نموذج السوق، وبناء CAR وإحصائه t — مدعولة في قسم دراسة الحدث من تعدين ألفا LLM من مكالمات الأرباح؛ أعد استخدامه حرفياً. هذه الخطوة ليست اختيارية: نتيجة close-to-close خام تسمح لحركة السوق الواسعة بالدخول في ، وبما أن حركة السوق مشتركة لجميع الوحدات المعالجة تبدو تماماً مثل تأثير علاج
- المتغيرات المشتركة : القيمة السوقية، والتقلب المحقق، وتاريخ التمويل، وعمق دفتر الأوامر، ونسبة الفائدة المفتوحة إلى القيمة السوقية
- المربِكات : متغيرات النظام التي تغير كل من احتمال الحدث والعوائد
إشارة التداول
سطح CATE يخطط لحجم موضع تماماً مثل أي تقدير عدم يقين معاير: الحجم بواسطة بالنسبة لعرض الفترة، ولا تتاجر عندما تعبر الفترة صفراً. قاعدة القرار هذه — الحجم العكسي للعرض، ونسبة الحافة ، وفلتر عدم التداول، والنوع المحد بالتكلفة، والحجة لسبب عدم ضربكها في كسر Kelly — مشتقة في التنبؤ المطابق لحجم الموضع المدرك للمخاطرة. أعد استخدامه مع بدلاً من وفترة الغابة السببية بدلاً من فترة المطابقة. توازن الساقين الطويل والقصير والدفاع محايد للسوق بالبناء.
تنفيذ 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
مخططات التأثير الهامشي تظهر كيف يتحرك تأثير العلاج على طول متغير مشترك واحد مع الباقي محتفظ به عند وسطه:
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
اقرأ هذه كأوصاف للسطح المُركب، وليس كمنحنيات جرعة-استجابة سببية — الاحتفاظ بالمتغيرات المشتركة الأخرى عند وسطها يمكن أن يضعك في منطقة من فضاء المتغير المشترك بدون دعم.
الافتراضات الرئيسية والتشخيصات

انتهك هذه وتحصل على تأثيرات واثقة، دقيقة، خاطئة.
1. عدم الخلط (الاختيار على المرئيات)
تعيين العلاج يجب أن يكون مستقلاً عن النتائج المحتملة مع المتغيرات المشتركة المرصودة. لحدث محدد ميكانيكياً هذا قابل للدفاع؛ لحدث هو نفسه رد فعل سوقي — إعلان إدراج، أو محرك تصفية البورصة نفسه يطلق — ليس كذلك، لأن نفس التدفق غير المرصود الذي أطلق الحدث يحرك العائد أيضاً.
اختبره بتحليل الحساسية Rosenbaum: إذا غير مرصود يمكن أن يغير احتمالات العلاج حتى عامل ,
كم يجب أن تكون كبيرة قبل أن يقلب التأثير المقدر إشارته؟ تصميم ينكسر عند ليس اكتشافاً.
2. التداخل (الإيجابية)
كل وحدة تحتاج احتمالاً إيجابياً للظهور في كلا الذراعين. تحقق من درجات الميل وقص:
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%}")
القص ليس مجانياً — يعيد تعريف السكان الذين يصفهم . أبلغ ما هي النسبة التي نجت.
3. SUTVA (افتراض قيمة العلاج للوحدة المستقرة)
علاج وحدة واحدة يجب أن لا يؤثر على نتيجة أخرى. في التشفير هذا هو أضعف الثلاثة: سلسلة تصفية في perp واحد تنتشر عبر الضمان المشترك ومخزور صانع السوق إلى كل زوج مترابط، وهو تداخل بالتعريف. تجميع الأخطاء المعيارية بمجموعة الارتباط يعالجه جزئياً؛ لا شيء يعالجه بالكامل.
ما بعد العلاجات الثنائية
الغابات السببية تمتد إلى علاجات مستمرة عبر نفس آلية DML — تقدير كيفية تحرك حجم صدمة، ليس فقط حدوثها، للأصول بشكل مختلف:
حيث هو، على سبيل المثال، حجم تغيير معدل التمويل بالنقاط الأساس. الآن هو تأثير لكل نقطة أساس.
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)
اعتبارات عملية
هل التباين حقيقي؟
هذا هو السؤال الذي تجيب عليه الغابات السببية ولا شيء آخر في هذه المدونة، ويستحق اختباراً فعلياً بدلاً من قاعدة إبهام. الأمانة تحمي ضد التقسيمات الزائفة داخل المقدر؛ التقييم خارج العينة عبر أحداث محجوزة (ليس أصولاً محجوزة) قياسي ومغطى في التحسين المتقدم للأمام و Sharpe المنتفخ والاختبارات المتعددة. لا شيء يخبرك ما إذا كان يختلف مع على الإطلاق.
اختبار أفضل تنبؤ خطي يفعل ذلك. انحدار النتيجة المُبقاة على العلاج المُبقى وعلى تفاعله مع تقدير CATE المُصغ:
المعاملان يجيبان سؤالين مختلفين. هو التأثير المتوسط: هل هناك شيء هنا على الإطلاق؟ هو ميل المعايرة على تنبؤاتك الخاصة: عندما تقول غابتك أن التأثير أكبر، هل هو فعلاً أكبر؟ تحت فرضية عدم التباين . تحت المعايرة المثالية . أعلاه صفر بشكل كبير ولكن أقل بكثير من واحد يعني الغابة وجدت ترتيباً حقيقياً لكن بالغت في انتشاره — يمكنك التداول بالترتيب، وليس المقادير.
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}")
ركب الدراسة على تقسيم تحقق لم تره الغابة أبداً، ثم استخدمها لمقارنة نماذج CATE المرشحة ضد بعضها البعض وضد خط الأساس ذي التأثير الثابت. غابة لا يمكنها التغلب على نموذج التأثير الثابت على R-score لم تجد تبايناً يستحق التداول، أي تقول أهمياتها داخل العينة.
حجم العينة
الغابات السببية تحتاج بيانات أكثر من نموذج النتيجة، لأن المقدر هو فرق وكلا الذراعين يجب أن يكونا مأهولين داخل كل ورقة. انضباط البيانات مقابل المعاملات العام — كم من نقاط خارج العينة لكل معامل حر، وتصحيح Bonferroni بمجرد ما تقارن التكوينات — في قسم متطلبات البيانات من التحسين المتقدم للأمام. الإجابة الخاصة بالغابة السببية هي تجريبية، وليست قاعدة إبهام: ركب الغابة على عينات فرعية متداخلة وارسم عرض الفترة المتوسط مقابل ؛ حجم العينة القابل للاستخدام هو حيث ينخفض العرض تحت أحجام التأثير التي تنوي تداولها.
المتقدم للأمام، مع نتيحتين
بروتوكول التقييم هو المتقدم للأمام المثبت العادي — إعادة التركيب على جميع الأحداث حتى ، تداول الحدث — والعلاج الكامل، بما في ذلك التطهير، والحظر، ونسبة كفاءة التحسين المتقدم للأمام ومعدل التدهور، في التحسين المتقدم للأمام. شيئان خاصان بهذا المقدر.
أولاً، نوافذ الأحداث تتداخل. إذا كانت نافذة المتغير المشتركة التي تسبق الحدث تحتوي على نافذة نتيجة الحدث ، فإن الطيات تشارك الملاحظات والنتيجة خارج العينة ملوثة. طهر النوافذ المتداخلة قبل أن تحسب رقم PnL واحد؛ مع علاج متكرر ميكانيكياً مثل قلب التمويل يمكن هذا أن يزيل حصة كبيرة من الأحداث.
ثانياً، يجب إعادة رسم التقسيم الصادق عند كل إعادة تركيب. حمل نفس قسم / عبر الطيات يعيد إدخال بالضبط تسرب اختيار الهيكل الذي الأمانة موجود لمنعه، لأن الأحداث المضافة حديثاً تهبط في قسم تم اختياره بمعرفة القديمة.
ثم شغل PnL خارج العينة على مستوى الحدث عبر الأبواب المعتادة — PBO و نسبة Sharpe المنتفخة — قبل تصديق أي شيء.
التكاليف
إشارة CATE تسعّر مثل أي إشارة مدفوعة بالأحداث الأخرى: اطرح نصف الانتشار المتوقع من قبل فلتر عدم التداول، وصغّر الحجم في الدفاتر الرقيقة. النسخ الكمية — قانون التأثير الجذري ومنحنيات التكلفة المركبة في نماذج تكلفة الانزلاق، وفلتر عدم التداول المدرك للتكلفة في التنبؤ المطابق، والمحاسبة التنفيذية في العجز التنفيذي و TCA — كلها تنتقل بدون تغيير.
الشيء الوحيد الذي لا ينتقل: العمر الافتراضي لإشارة CATE محدود بنافذة الحدث، لذا التكلفة تُمهل عبر فترة احتفاظ قصيرة ثابتة بدلاً من فترة مفتوحة. إشارة محتفظ بها باستمرار تدفع الانتشار مرة واحدة وتكسب طالما الحافة مستمرة؛ هذه تدفعها في كل حدث. ما إذا كانت الحافة تنجو من ذلك هو سؤال تجريبي عن حدثك الخاص وكونك الخاص، وهو أول شيء تتحقق منه، لأنه يمكن أن يقتل الاستراتيجية قبل أن تكون الآلة السببية مهمة.
الخاتمة
الغابات السببية تقدر كائناً مختلفاً عن بقية أدوات هذه المدونة. ليس "ما سيعود هذا الأصل"، بل "كم حرك هذا الحدث هذا الأصل، بالنسبة للمضاد الفعلي حيث لم يطلق". الآلات التي تجعل ذلك قابل للتقدير — التقسيمات التي تعظّم التباين، والتقدير الصادق، وتمثيل وزن النواة التكيفية، وفترات سكين متناهي الصغر — ليس لها نظير في التعلم الخاضع الإشراف العادي، والافتراضات التي تحتاجها (عدم الخلط، والتداخل، و SUTVA) قوية بما يكفي أنه يجب اختبارها بدلاً من تأكيدتها.
ما لا تمتلكه هذه المقالة هو نتيجة. كل رقم أعلى هو عنصر نائب. مقابل المعيار الذي حدده السلبي الصادق و Sharpe المنتفخ، طريقة بدون توزيع CATE مقاس، و BLP بقيمة p، وتشخيص تداخل، و PnL خارج العينة مُؤطر بواسطة DSR/PBO هو درس تعليمي، ليس اكتشافاً. تلك الأرقام هي قطعة العمل التالية؛ النتيجة السلبية تستحق النشر.
المراجع
- 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
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.