← Quay lại danh sách bài viết
August 1, 2026
5 phút đọc

Rừng Nhân Quả cho Hiệu Quả Điều Trị Heterogeneous trong Giao Dịch

Rừng Nhân Quả cho Hiệu Quả Điều Trị Heterogeneous trong Giao Dịch
#causal-inference
#causal-forest
#heterogeneous-effects
#econometrics
#treatment

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 μ(x)=E[YX=x]\mu(\mathbf{x}) = \mathbb{E}[Y \mid \mathbf{X} = \mathbf{x}]. 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:

τ(x)=E[Yi(1)Yi(0)Xi=x]\tau(\mathbf{x}) = \mathbb{E}[Y_i(1) - Y_i(0) \mid \mathbf{X}_i = \mathbf{x}]

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

Một hiệu quả điều trị trung bình phẳng giấu các túi dương và âm được tiết lộ bởi bề mặt hiệu quả điều trị heterogeneous

Hiệu Quả Trung Bình Điều Trị

Thiết lập: điều trị nhị phân Wi{0,1}W_i \in \{0, 1\} (sự kiện đã kích hoạt hoặc không), kết quả YiY_i (một lợi nhuận), covariates Xi\mathbf{X}_i. Average Treatment Effect

τATE=E[Yi(1)Yi(0)]\tau_{\text{ATE}} = \mathbb{E}[Y_i(1) - Y_i(0)]

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 τ(x)\tau(\mathbf{x}) đ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:

Yi=α+βWi+γWiXi+δXi+ϵiY_i = \alpha + \beta W_i + \gamma W_i \cdot \mathbf{X}_i + \delta \mathbf{X}_i + \epsilon_i

nơi γ\gamma 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

Các mẫu rời rạc xây dựng cấu trúc cây và ước lượng hiệu ứng trong lá đông lạnh trước khi nhiều cây honest hợp nhất thành rừng nhân quả

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 jj và điểm split ss. 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 (Yi,Wi,Xi)inode(Y_i, W_i, \mathbf{X}_i)_{i \in \text{node}}, ước lượng hiệu ứng cấp nút là sự khác biệt giữa trung bình nhóm:

τ^node=YˉtreatedYˉcontrol\hat{\tau}_{\text{node}} = \bar{Y}_{\text{treated}} - \bar{Y}_{\text{control}}

và điểm split là

Δ(split)=nLτ^L2+nRτ^R2nτ^parent2\Delta(\text{split}) = n_L \cdot \hat{\tau}_L^2 + n_R \cdot \hat{\tau}_R^2 - n \cdot \hat{\tau}_{\text{parent}}^2

với nL,nR,nn_L, n_R, n 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 YY nhưng trực giao với cách WW 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á:

  1. Chia dữ liệu thành Isplit\mathcal{I}_{\text{split}}Iest\mathcal{I}_{\text{est}}
  2. Xây dựng cây chỉ dùng Isplit\mathcal{I}_{\text{split}} để chọn biến và điểm split
  3. Ước lượng hiệu ứng lá chỉ dùng Iest\mathcal{I}_{\text{est}}, 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:

E[τ^(x)Xi=x]=τ(x)+o(1)\mathbb{E}[\hat{\tau}(\mathbf{x}) \mid \mathbf{X}_i = \mathbf{x}] = \tau(\mathbf{x}) + o(1)

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 BB cây nhân quả, mỗi cái trên một subsample ngẫu nhiên kích thước s<ns < n với một tập con covariate ngẫu nhiên tại mỗi split:

τ^(x)=1Bb=1Bτ^b(x)\hat{\tau}(\mathbf{x}) = \frac{1}{B}\sum_{b=1}^{B} \hat{\tau}_b(\mathbf{x})

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ả:

τ^(x)=i=1nαi(x)Yi\hat{\tau}(\mathbf{x}) = \sum_{i=1}^{n} \alpha_i(\mathbf{x}) \cdot Y_i

với trọng số thích ứng được thiết lập bởi tần suất quan sát ii rơi vào cùng lá với x\mathbf{x}:

αi(x)=1Bb=1B1(XiLb(x))Lb(x)\alpha_i(\mathbf{x}) = \frac{1}{B}\sum_{b=1}^{B} \frac{\mathbb{1}(\mathbf{X}_i \in L_b(\mathbf{x}))}{|L_b(\mathbf{x})|}

nơi Lb(x)L_b(\mathbf{x}) là lá chứa x\mathbf{x} trong cây bb. Đâ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, τ^(x)pτ(x)\hat{\tau}(\mathbf{x}) \xrightarrow{p} \tau(\mathbf{x}), và asymptotically normal:

τ^(x)τ(x)σ^(x)dN(0,1)\frac{\hat{\tau}(\mathbf{x}) - \tau(\mathbf{x})}{\hat{\sigma}(\mathbf{x})} \xrightarrow{d} \mathcal{N}(0, 1)

cho các khoảng điểm τ^(x)±zα/2σ^(x)\hat{\tau}(\mathbf{x}) \pm z_{\alpha/2} \cdot \hat{\sigma}(\mathbf{x}). Phương sai σ^2(x)\hat{\sigma}^2(\mathbf{x}) đế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ả m^(X)=E[YX]\hat{m}(\mathbf{X}) = \mathbb{E}[Y \mid \mathbf{X}] và một mô hình propensity e^(X)=E[WX]\hat{e}(\mathbf{X}) = \mathbb{E}[W \mid \mathbf{X}] được ước lượng bởi cross-fitting, và rừng chạy trên Y~=Ym^\tilde{Y} = Y - \hat{m} chống W~=We^\tilde{W} = W - \hat{e}. 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 m^\hat{m}e^\hat{e} có thể mỗi converge ở n1/4n^{-1/4}τ^\hat{\tau} vẫn converge ở n1/2n^{-1/2}.

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à τ(x)\tau(\mathbf{x}) thay vì τ\tau.

Ứng Dụng Giao Dịch: Heterogeneous của Tác Động Sự Kiện

Một sự kiện thị trường tạo ra các phản hồi counterfactual dương, trung tính và âm trên các tài sản với covariate khác nhau

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ị: Wi=1W_i = 1 nếu sự kiện kích hoạt cho coin ii — 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à Wi=0W_i = 0 cho các cửa sổ non-sự kiện khớp
  • Kết quả: YiY_i = 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 τ^\hat{\tau}, 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 Xi\mathbf{X}_i: 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 Wi\mathbf{W}_i: 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 τ^|\hat{\tau}| 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 e=τ^/we = |\hat{\tau}|/w, 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 τ^\hat{\tau} thay vì μ^\hat{\mu} 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

Overlap, balance, hidden-confounding và kiểm tra placebo gate con đường đến một ước lượng nhân quả defensable

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)

Y(0),Y(1)WX,WY(0), Y(1) \perp W \mid \mathbf{X}, \mathbf{W}

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 UU không quan sát có thể dịch chuyển odds điều trị lên factor Γ\Gamma,

P(W=1X,U)P(W=0X,U)ΓP(W=1X)P(W=0X)\frac{P(W=1 \mid \mathbf{X}, U)}{P(W=0 \mid \mathbf{X}, U)} \leq \Gamma \cdot \frac{P(W=1 \mid \mathbf{X})}{P(W=0 \mid \mathbf{X})}

Γ\Gamma 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 ở Γ=1.1\Gamma = 1.1 không phải là một finding.

2. Overlap (Positivity)

0<P(W=1X=x)<1x0 < P(W = 1 \mid \mathbf{X} = \mathbf{x}) < 1 \quad \forall \mathbf{x}

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à τ^\hat{\tau} của bạn mô tả. Báo cáo fraction nào survive.

3. SUTVA (Stable Unit Treatment Value Assumption)

Yi=Yi(Wi)(no interference between units)Y_i = Y_i(W_i) \quad \text{(no interference between units)}

Đ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:

Yi=τ(Xi)Ti+g(Xi,Wi)+ϵiY_i = \tau(\mathbf{X}_i) \cdot T_i + g(\mathbf{X}_i, \mathbf{W}_i) + \epsilon_i

nơi TiT_i là, ví dụ, kích thước thay đổi funding-rate trong basis points. Bây giờ τ(x)\tau(\mathbf{x}) 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 optimizationdeflated Sharpe và multiple testing. Không có cái nào cho bạn biết τ^(x)\hat{\tau}(\mathbf{x}) có vary với x\mathbf{x} 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:

Yim^(Xi)=α0(Wie^(Xi))+α1(Wie^(Xi))(τ^(Xi)τˉ)+ϵiY_i - \hat{m}(\mathbf{X}_i) = \alpha_0 (W_i - \hat{e}(\mathbf{X}_i)) + \alpha_1 (W_i - \hat{e}(\mathbf{X}_i))(\hat{\tau}(\mathbf{X}_i) - \bar{\tau}) + \epsilon_i

Hai hệ số trả lời hai câu hỏi khác nhau. α0\alpha_0 là hiệu quả trung bình: có bất cứ điều gì ở đây không? α1\alpha_1 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 α1=0\alpha_1 = 0. Dưới calibration hoàn hảo α1=1\alpha_1 = 1. α1\alpha_1 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 nn; 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 tt, giao dịch sự kiện t+1t+1 — 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 t+1t+1 chứa cửa sổ kết quả của sự kiện tt, 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 Isplit\mathcal{I}_{\text{split}}/Iest\mathcal{I}_{\text{est}} 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 — PBOdeflated 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ừ τ^|\hat{\tau}| 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 honestdeflated Sharpe, một phương pháp không có phân phối CATE được đo, một BLP α1\alpha_1 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

  1. Athey, S., Imbens, G.W. "Recursive Partitioning for Heterogeneous Causal Effects." PNAS, 113(27), 7353-7360 (2016).
  2. Wager, S., Athey, S. "Estimation and Inference of Heterogeneous Treatment Effects using Random Forests." JASA, 113(523), 1228-1242 (2018). arXiv:1510.04342
  3. Athey, S., Tibshirani, J., Wager, S. "Generalized Random Forests." Annals of Statistics, 47(2), 1148-1178 (2019).
  4. Chernozhukov, V., et al. "Double/Debiased Machine Learning for Treatment and Structural Parameters." The Econometrics Journal, 21(1), C1-C68 (2018).
  5. Chernozhukov, V., Demirer, M., Duflo, E., Fernandez-Val, I. "Generic Machine Learning Inference on Heterogeneous Treatment Effects in Randomized Experiments." (2018). arXiv:1712.04802
  6. Battocchi, K., et al. "EconML: A Python Package for ML-Based Heterogeneous Treatment Effects Estimation." Microsoft Research (2019). GitHub
Tuyên bố miễn trừ trách nhiệm: Thông tin được cung cấp trong bài viết này chỉ nhằm mục đích giáo dục và thông tin, không cấu thành lời khuyên về tài chính, đầu tư hoặc giao dịch. Giao dịch tiền mã hóa tiềm ẩn rủi ro thua lỗ đáng kể.

Tác Giả

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

Đi Trước Thị Trường

Đăng ký nhận bản tin của chúng tôi để có những thông tin chuyên sâu độc quyền về AI trading, phân tích thị trường và các cập nhật nền tảng.

Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất kỳ lúc nào.