Rừng Nhân Quả cho Hiệu Quả Điều Trị Heterogeneous trong Giao Dịch
Mọi mô hình dự đoán trên blog này ước lượng cùng một đối tượng: conditional mean . Feature engineering, gradient boosting, khoảng conformal, validation walk-forward — tất cả phục vụ một estimand. Bài viết này về một estimand khác và về machinery thay đổi khi bạn swap nó.
Đối tượng là conditional average treatment effect:
sự khác biệt giữa hai kết quả tiềm năng cho cùng một đơn vị — một trong số đó bạn không bao giờ quan sát. Bạn không thể regress trên nó, vì nó không có trong dữ liệu của bạn. Rừng nhân quả (Athey và Imbens 2016; Wager và Athey 2018) ước lượng nó phi tham số và, đáng chú ý, cung cấp khoảng tin cậy hợp lệ xung quanh nó.
Ba điều làm điều này có thể và không có cái nào trong rừng ngẫu nhiên tiêu chuẩn: tiêu chí splitting tối đa hóa phương sai hiệu quả điều trị thay vì minimize lỗi dự đoán, ràng buộc honesty cấm sử dụng cùng các quan sát để chọn split và ước lượng hiệu ứng bên trong nó, và đọc lại rừng như một kernel thích ứng biến đồng xuất hiện lá thành trọng số ước lượng. Ba điều đó, cộng thêm bài kiểm tra calibration cho bạn biết heterogeneous mà bạn tìm là signal, là nội dung của bài viết này.
Từ Hiệu Quả Trung Bình đến Hiệu Quả Heterogeneous

Hiệu Quả Trung Bình Điều Trị
Thiết lập: điều trị nhị phân (sự kiện đã kích hoạt hoặc không), kết quả (một lợi nhuận), covariates . Average Treatment Effect là
tác động trung bình trên tất cả các đơn vị. Để giao dịch điều này gần như vô dụng — bạn không giao dịch trung bình. Nếu một sự kiện đẩy một half vũ trụ lên và half xuống, ATE bằng không và cơ hội tối đa.
Hiệu Quả Trung Bình Điều Trị Có Điều Kiện
CATE điều kiện trên các đặc điểm. Cho một coin với vốn hóa thị trường cụ thể, biến động thực hiện, lịch sử funding và chiều sâu sổ: tác động lợi nhuận dự kiến của sự kiện này trên tài sản này là gì? CATE là một hàm trên không gian covariate, và ước lượng hàm đó mà không áp đặt hình dạng là điều rừng nhân quả làm.
Tại Sao Không Chỉ Sử Dụng Các Mô Hình Tương Tác Tuyến Tính?
Sự thay thế sách giáo khoa là một regression bão hòa:
nơi mang tương tác. Điều này giả định tương tác là tuyến tính. Hiếm khi là như vậy: sensitivity đến funding flip là lồi trong leverage, không tuyến tính; chiều sâu tương tác với vốn hóa thị trường một cách nhân lên; chế độ biến động gates mọi thứ khác. Rừng nhân quả không áp đặt bất kỳ điều nào — chúng phân vùng không gian covariate thích ứng và để cấu trúc heterogeneous fall out của dữ liệu.
Rừng Nhân Quả: Thuật Toán

Rừng nhân quả là một rừng ngẫu nhiên xây dựng lại quanh estimand hiệu quả điều trị. Mỗi cây là một cây nhân quả phân vùng không gian covariate để tối đa hóa heterogeneous của hiệu quả điều trị.
Cây Nhân Quả
Tại mỗi nút nội bộ, thuật toán chọn biến splitting và điểm split . Sự khác biệt chính so với cây regression: tiêu chí tối đa hóa phương sai của hiệu quả điều trị ước lượng trên các con thay vì minimize lỗi dự đoán bình phương.
Đối với một nút với dữ liệu , ước lượng hiệu ứng cấp nút là sự khác biệt giữa trung bình nhóm:
và điểm split là
với kích thước mẫu trong con trái, con phải và cha mẹ. Đây chính xác là phương sai giữa nhóm của hiệu quả điều trị: split tốt khi hai con không đồng ý về hiệu ứng, không khi chúng dự đoán kết quả tốt. Một covariate dự đoán mạnh nhưng trực giao với cách hành động sẽ không bao giờ được chọn.
Ước Lượng Honest
Sự đổi mới quan trọng là honesty. Dữ liệu dùng để xác định cấu trúc cây phải rời rời từ dữ liệu dùng để ước lượng hiệu ứng lá:
- Chia dữ liệu thành và
- Xây dựng cây chỉ dùng để chọn biến và điểm split
- Ước lượng hiệu ứng lá chỉ dùng , dropping các quan sát đó vào cây đã cố định
Không có điều này, cây gian lận: nó khắc các lá có hiệu ứng cực đoán là nhiễu trong cùng mẫu dùng để tìm chúng, sau đó báo cáo nhiễu đó là ước lượng. Đây là cùng thất bại lựa chọn thích ứng mà xác suất overfit backtest đo ở cấp chiến lược, ngoại trừ ở đây được phòng thủ bên trong bộ ước lượng thay vì chẩn đoán sau thực tế. Honesty mua asymptotic unbiasedness:
Giá là hiệu quả mẫu — half dữ liệu của bạn xây dựng cấu trúc không thể dùng để fill.
Từ Cây Đến Rừng
Rừng nhân quả tổng hợp cây nhân quả, mỗi cái trên một subsample ngẫu nhiên kích thước với một tập con covariate ngẫu nhiên tại mỗi split:
Cách viết hữu ích hơn là như một trung bình có trọng số của kết quả:
với trọng số thích ứng được thiết lập bởi tần suất quan sát rơi vào cùng lá với :
nơi là lá chứa trong cây . Đây là view rừng ngẫu nhiên tổng quát (Athey, Tibshirani và Wager 2019): rừng nhân quả là một bộ ước lượng kernel thích ứng cục bộ. Nó học notch notion của "similar", được định nghĩa bởi covariate nào thực sự quan trọng cho heterogeneous hiệu ứng, thay vì khoảng cách Euclide trong không gian bạn phải chọn scaling bằng tay.
Lý Thuyết Asymptotic
Dưới các điều kiện đều đặn (Wager và Athey 2018) bộ ước lượng consistent, , và asymptotically normal:
cho các khoảng điểm . Phương sai đến từ infinitesimal jackknife (hoặc bootstrap-of-little-bags), tính từ cùng cấu trúc subsample mà rừng đã xây dựng — không có vòng bootstrap ngoài.
Đáng để chính xác về bảo đảm này là gì và không là gì. Nó asymptotic và từng điểm, và giữ cho CATE. Các khoảng dự đoán conformal dùng ở nơi khác blog này là finite-sample và free-from-distribution, nhưng marginal, và cover một kết quả. Estimand khác, bảo đảm khác; chúng không phải là thay thế.
Kết Nối Double Machine Learning
Khi điều trị không được gán ngẫu nhiên, rừng nhân quả được fit trên dữ liệu residualized: một mô hình kết quả và một mô hình propensity được ước lượng bởi cross-fitting, và rừng chạy trên chống . Orthogonality của Neyman là điều làm điều này an toàn: lỗi ước lượng nuisance chỉ nhập như một sản phẩm, vậy và có thể mỗi converge ở và vẫn converge ở .
Framework đó — residualization, cross-fitting, đối số orthogonality, hệ quả kích thước mẫu — là chủ đề của bài viết riêng, Double Machine Learning cho Tín Hiệu Giao Dịch Nhân Quả. Đọc nó trước; mọi thứ dưới đây giả định nó và chỉ bao gồm những gì thay đổi khi estimand là thay vì .
Ứng Dụng Giao Dịch: Heterogeneous của Tác Động Sự Kiện

Thiết Lập
Miền tự nhiên cho blog này là vũ trụ coin perpetual-futures, nơi sự kiện thường, có timestamp và quan sát được không cần vendor feed.
- Đơn vị: quan sát coin-sự kiện across vũ trụ perp có thể giao dịch
- Điều trị: nếu sự kiện kích hoạt cho coin — flip dấu funding-rate, listing spot, hoặc cascade thanh lý vượt ngưỡng supercritical được mô tả trong liquidation cascades as a trading signal — và cho các cửa sổ non-sự kiện khớp
- Kết quả: = lợi nhuận bất thường trên cửa sổ sự kiện, không phải lợi nhuận thô. Fit một mô hình thị trường trên cửa sổ ước lượng trước sự kiện, sau đó lấy lợi nhuận bất thường tích lũy. Đặc tả chính xác — cửa sổ ước lượng, regression mô hình thị trường, xây dựng CAR và t-statistic của nó — được làm ra trong phần nghiên cứu sự kiện của LLM alpha mining from earnings calls; reuse verbatim. Bước này không tùy chọn: kết quả close-to-close thô cho phép chuyển động thị trường toàn cầu nhập , và vì chuyển động thị trường chung cho tất cả đơn vị được điều trị nó trông giống như một hiệu quả điều trị
- Covariates : vốn hóa thị trường, biến động thực hiện, lịch sử funding, chiều sâu order book, tỷ lệ open-interest-to-cap
- Confunders : biến chế độ dịch chuyển cả xác suất sự kiện và lợi nhuận
Tín Hiệu Giao Dịch
Bề mặt CATE map đến một position sizer chính xác như bất kỳ ước lượng uncertainty đã calibrate nào: size bởi so với chiều rộng khoảng, và không giao dịch khi khoảng trải qua không. Quyết định rule đó — inverse-width sizing, tỷ lệ edge , bộ lọc no-trade, biến thể cost-aware và đối số tại sao bạn không nên multiply nó vào một fraction Kelly — được dẫn xuất trong Conformal Prediction for Risk-Aware Position Sizing. Reuse với thay vì và khoảng rừng nhân quả thay vì conformal. Cân bằng chân dài và chân ngắn và sổ book trung tính thị trường bởi xây dựng.
Triển Khai Python với 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
Diễn Giải Bề Mặt CATE
Đồ thị hiệu ứng biên cho biết hiệu quả điều trị di chuyển như thế nào dọc theo một covariate với phần còn lại được giữ ở 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
Đọc các này như mô tả của bề mặt đã fit, không phải như đường cong dose-response nhân quả — giữ các covariate khác ở median có thể đặt bạn trong một vùng của không gian covariate không có hỗ trợ.
Giả Định Chính và Chẩn Đoán

Violate các này và bạn nhận hiệu quả tự tin, chính xác, sai.
1. Unconfoundedness (Selection on Observables)
Gán điều trị phải độc lập với các kết quả tiềm năng đã cho covariate quan sát. Đối với một sự kiện được định nghĩa cơ khí điều này defensable; đối với một sự kiện chính là phản ứng thị trường — một thông báo listing, động cơ thanh lý của một sàn bắn — điều đó không phải, vì cùng dòng chảy không quan sát kích hoạt sự kiện cũng di chuyển lợi nhuận.
Kiểm tra với phân tích sensitivity Rosenbaum: nếu một không quan sát có thể dịch chuyển odds điều trị lên factor ,
phải lớn như thế nào trước khi hiệu quả ước lượng đổi dấu? Một thiết kế break ở không phải là một finding.
2. Overlap (Positivity)
Mọi đơn vị cần xác suất dương xuất hiện trong cả hai nhánh. Kiểm tra propensity scores và 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 không miễn phí — nó redefines population mà của bạn mô tả. Báo cáo fraction nào survive.
3. SUTVA (Stable Unit Treatment Value Assumption)
Điều trị của một đơn vị không được ảnh hưởng kết quả của một đơn vị khác. Trong crypto đây là yếu nhất trong ba: cascade thanh lý trong một perp propagate qua collateral chung và inventory market maker vào mọi cặp tương quan, là interference theo định nghĩa. Clustering standard errors theo nhóm correlation giải quyết một phần; không có gì giải quyết hoàn toàn.
Vượt Qua Điều Trị Nhị Phân
Rừng nhân quả mở rộng sang điều trị liên tục qua cùng machinery DML — ước lượng độ lớn của một cú sốc, không chỉ sự xuất hiện của nó, di chuyển tài sản khác biệt:
nơi là, ví dụ, kích thước thay đổi funding-rate trong basis points. Bây giờ là một hiệu quả trên 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)
Cân Nhắc Thực Tiễn
Heterogeneous Thật Không?
Đây là câu hỏi rừng nhân quả trả lời và không có gì khác trong blog này làm, và xứng đáng một bài kiểm tra thực tế chứ không phải quy tắc ngón tay. Honesty guard chống split spurious bên trong bộ ước lượng; đánh giá out-of-sample trên các sự kiện held-out (không phải tài sản held-out) là tiêu chuẩn và được cover trong walk-forward optimization và deflated Sharpe và multiple testing. Không có cái nào cho bạn biết có vary với hay không.
Bài kiểm tra Best Linear Predictor làm. Regress kết quả residualized trên điều trị residualized và interaction của nó với ước lượng CATE centered:
Hai hệ số trả lời hai câu hỏi khác nhau. là hiệu quả trung bình: có bất cứ điều gì ở đây không? là slope calibration trên dự đoán của chính bạn: khi rừng của bạn nói hiệu quả lớn hơn, nó thực sự lớn hơn không? Dưới null của không heterogeneous . Dưới calibration hoàn hảo . significantly above zero but far below one có nghĩa là rừng đã tìm một ordering thực sự nhưng overstated spread của nó — bạn có thể giao dịch ranking, không phải magnitudes.
RScorer của EconML đưa ra điểm lựa chọn model đồng hành:
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 trên một validation split mà rừng không bao giờ thấy, sau đó dùng nó để so sánh các model CATE candidate với nhau và chống baseline hiệu quả constant. Một rừng không thể beat model hiệu quả constant trên R-score không tìm thấy heterogeneous đáng giao dịch, bất kể importance in-sample của nó nói gì.
Kích Thước Mẫu
Rừng nhân quả cần nhiều dữ liệu hơn một mô hình kết quả, vì estimand là sự khác biệt và cả hai nhánh phải được populate trong mỗi lá. Kỷ luật data-vs-parameters chung — bao nhiêu điểm out-of-sample mỗi parameter free, và hiệu chỉnh Bonferroni khi bạn so sánh configurations — có trong phần requirements dữ liệu của walk-forward optimization. Câu trả lời rừng nhân quả-specific là thực nghiệm, không phải quy tắc ngón tay: fit rừng trên các subsample lồng nhau và plot median interval width vs ; kích thước mẫu usable là nơi width fall dưới kích thước hiệu quả bạn dự định giao dịch.
Walk-Forward, Với Hai Nếp
Giao thức đánh giá là walk-forward anchored bình thường — refit trên tất cả sự kiện đến , giao dịch sự kiện — và toàn bộ điều trị, bao gồm purging, embargo, tỷ lệ hiệu quả walk-forward và tốc độ degradation, có trong walk-forward optimization. Hai việc là cụ thể cho bộ ước lượng này.
Đầu tiên, cửa sổ sự kiện overlap. Nếu cửa sổ covariate trước sự kiện chứa cửa sổ kết quả của sự kiện , các folds chia sẻ quan sát và kết quả out-of-sample bị contaminated. Purge các cửa sổ overlapping trước khi đếm một số PnL duy nhất; với một điều trị thường xuyên cơ khí như flip funding điều này có thể xóa một phần substantial của các sự kiện.
Thứ hai, split honest phải được redraw tại mỗi refit. Mang cùng một partition / qua folds reintroduce chính xác cùng leakage lựa chọn cấu trúc mà honesty tồn tại để ngăn chặn, vì các sự kiện mới thêm hạ cánh trong một partition được chọn với kiến thức của các cũ.
Sau đó chạy PnL out-of-sample cấp sự kiện qua các cổng bình thường — PBO và deflated Sharpe ratio — trước khi tin bất cứ điều gì.
Chi Phí
Một tín hiệu CATE được định giá như bất kỳ tín hiệu event-driven nào khác: subtract half-spread dự kiến từ trước bộ lọc no-trade, và size xuống trong sách mỏng. Các phiên bản định lượng — luật tác động square-root và cost curves fit trong slippage cost models, bộ lọc no-trade cost-aware trong conformal prediction, và kế toán execution trong implementation shortfall và TCA — tất cả chuyển đổi không đổi.
Một điều duy nhất không chuyển: shelf-life của một tín hiệu CATE bị giới hạn bởi cửa sổ sự kiện, vậy chi phí được amortize trên một giai đoạn nắm giữ ngắn cố định thay vì open-ended. Một tín hiệu được nắm giữ liên tục trả spread một lần và kiếm chừng nào edge persist; cái này trả nó mỗi sự kiện. Edge survive điều đó là một câu hỏi thực nghiệm về sự kiện cụ thể và vũ trụ cụ thể của bạn, và nó là thứ đầu tiên để kiểm tra, vì nó có thể giết chiến lược trước khi bất kỳ machinery nhân quả nào quan trọng.
Kết Luận
Rừng nhân quả ước lượng một đối tượng khác so với phần còn lại của toolkit của blog này. Không phải "tài sản này sẽ trả về gì", mà "sự kiện này di chuyển tài sản này bao nhiêu, so với counterfactual nơi nó không kích hoạt". Machinery làm điều đó estimable — các split tối đa hóa heterogeneous, ước lượng honest, biểu diễn trọng số kernel thích ứng và khoảng infinitesimal-jackknife — không có analog trong học có giám sát thường, và các giả định nó cần (unconfoundedness, overlap, SUTVA) đủ mạnh rằng chúng phải được kiểm tra, không phải assert.
Điều bài viết này không có là một kết quả. Mọi số ở trên là một placeholder. Đối với tiêu chuẩn được thiết lập bởi negative honest và deflated Sharpe, một phương pháp không có phân phối CATE được đo, một BLP với p-value, một chẩn đoán overlap và PnL out-of-sample gated bởi DSR/PBO là một hướng dẫn, không phải một finding. Những số đó là công việc tiếp theo; một kết quả negative đáng để xuất bản.
Tài Liệu Tham Khảo
- 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
Tác Giả
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.