← Kembali ke artikel
August 1, 2026
5 menit baca

Causal Forests untuk Efek Perawatan Heterogen dalam Trading

Causal Forests untuk Efek Perawatan Heterogen dalam Trading
#causal-inference
#causal-forest
#heterogeneous-effects
#econometrics
#treatment

Setiap model prediktif di blog ini memperkirakan objek yang sama: rata-rata bersyarat μ(x)=E[YX=x]\mu(\mathbf{x}) = \mathbb{E}[Y \mid \mathbf{X} = \mathbf{x}]. Feature engineering, gradient boosting, interval konformal, validasi walk-forward — semuanya melayani satu estimand. Artikel ini tentang estimand yang berbeda dan mesin yang berubah saat Anda menukarnya.

Objeknya adalah rata-rata efek perawatan bersyarat:

τ(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}]

perbedaan antara dua hasil potensial untuk unit yang sama — yang tidak pernah Anda amati. Anda tidak bisa melakukan regresi padanya, karena itu tidak ada di data Anda. Causal forests (Athey dan Imbens 2016; Wager dan Athey 2018) memperkiraannya secara nonparametrik dan, luar biasanya, memberikan interval kepercayaan yang valid di sekitarnya.

Tiga hal membuat ini mungkin dan tidak ada satupun yang ada dalam random forest standar: kriteria pemisahan yang memaksimalkan varians efek perawatan alih-alih meminimalkan kesalahan prediksi, kendala kejujuran yang melarang menggunakan observasi yang sama untuk memilih split dan memperkirakan efek di dalamnya, dan pembacaan ulang hutan sebagai kernel adaptif yang mengubah ko-kejadian daun menjadi bobot estimasi. Ketiga hal ini, ditambah tes kalibrasi yang memberi tahu Anda apakah heterogenitas yang Anda temukan adalah sinyal, adalah isi artikel ini.

Dari Efek Rata-rata ke Efek Heterogen

Efek perawatan rata-rata yang datar menyembunyikan saku positif dan negatif yang diungkap oleh permukaan efek perawatan heterogen

Efek Perawatan Rata-rata

Pengaturan: perawatan biner Wi{0,1}W_i \in \{0, 1\} (suatu kejadian terjadi atau tidak), hasil YiY_i (return), kovariat Xi\mathbf{X}_i. Efek Perawatan Rata-rata adalah

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

dampak rata-rata di seluruh unit. Untuk trading ini hampir tidak berguna — Anda tidak trading rata-ratanya. Jika suatu kejadian mendorong setengah alam semesta naik dan setengah turun, ATE adalah nol dan peluangnya maksimal.

Efek Perawatan Rata-rata Bersyarat

CATE $\tau(\mathbf{x})` mengkondisikan pada karakteristik. Diberikan koin dengan kapitalisasi pasar tertentu, volatilitas terealisasi, riwayat pendanaan, dan kedalaman buku, apa dampak return yang diharapkan dari kejadian ini pada aset ini? CATE adalah fungsi atas ruang kovariat, dan memperkirakan fungsi itu tanpa memaksakan bentuknya adalah yang dilakukan causal forests.

Kenapa Tidak Hanya Gunakan Model Interaksi Linier?

Alternatif buku teks adalah regresi jenuh:

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

di mana γ\gamma membawa interaksi. Ini mengasumsikan interaksi linier. Jarang terjadi: sensitivitas terhadap flip pendanaan adalah cembung dalam leverage, tidak linier; kedalaman berinteraksi secara multiplicative dengan kapitalisasi pasar; rezim volatilitas mengatur segala sesuatu. Causal forests tidak memaksakan hal ini — mereka mempartisi ruang kovariat secara adaptif dan membiarkan struktur heterogenitas muncul dari data.

Causal Forests: Algoritma

Sampel terpisah membangun struktur pohon dan memperkirakan efek dalam daunbeku sebelum banyak pohon jujur bergabung menjadi causal forest

Causal forest adalah random forest yang dibangun kembali di sekitar estimand efek perawatan. Setiap pohon adalah pohon kausal yang mempartisi ruang kovariat untuk memaksimalkan heterogenitas efek perawatan.

Pohon Kausal

Di setiap simpul internal, algoritma memilih variabel split jj dan titik split ss. Perbedaan kunci dari pohon regresi: kriteria memaksimalkan varians efek perawatan yang diperkirakan di seluruh anak alih-alih meminimalkan kesalahan prediksi kuadrat.

Untuk simpul dengan data (Yi,Wi,Xi)inode(Y_i, W_i, \mathbf{X}_i)_{i \in \text{node}}, estimasi efek tingkat simpul adalah perbedaan mean grup:

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

dan skor split adalah

Δ(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

dengan nL,nR,nn_L, n_R, n ukuran sampel di anak kiri, anak kanan, dan induk. Ini persis varians antar-grup dari efek perawatan: split bagus ketika dua anak tidak setuju tentang efeknya, bukan ketika mereka memprediksi hasil dengan baik. Kovariat yang memprediksi YY dengan kuat tapi ortogonal terhadap cara kerja WW tidak akan pernah dipilih.

Estimasi Jujur

Inovasi kritis adalah kejujuran. Data yang digunakan untuk menentukan struktur pohon harus terpisah dari data yang digunakan untuk memperkirakan efek daun:

  1. Bagi data menjadi Isplit\mathcal{I}_{\text{split}} dan Iest\mathcal{I}_{\text{est}}
  2. Bangun pohon menggunakan hanya Isplit\mathcal{I}_{\text{split}} untuk memilih variabel dan titik split
  3. Perkirakan efek daun menggunakan hanya Iest\mathcal{I}_{\text{est}}, dengan menjatuhkan observasi tersebut ke pohon yang sudah tetap

Tanpa ini, pohon bercurang: ia mengukir daun yang efek ekstremnya adalah noise di sampel yang sama yang digunakan untuk menemukannya, lalu melaporkan noise itu sebagai estimasi. Ini adalah kegagalan seleksi-adaptif yang sama yang probabilitas overfitting backtest ukur di tingkat strategi, kecuali di sini dipertahankan di dalam estimator alih-alih didiagnosis setelahnya. Kejujuran membelikan ketidakbiasan asimptotik:

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

Harganya adalah efisiensi sampel — separuh data Anda membangun struktur yang kemudian tidak dapat digunakan untuk mengisinya.

Dari Pohon ke Hutan

Causal forest mengagregasi BB pohon kausal, masing-masing pada sub-sampel acak ukuran s<ns < n dengan subset kovariat acak di setiap split:

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

Cara yang lebih berguna untuk menulis ini adalah sebagai rata-rata tertimbang dari hasil:

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

dengan bobot adaptif yang ditetapkan oleh seberapa sering observasi ii mendarat di daun yang sama dengan 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})|}

di mana Lb(x)L_b(\mathbf{x}) adalah daun yang berisi x\mathbf{x} di pohon bb. Ini adalah pandangan generalized-random-forest (Athey, Tibshirani dan Wager 2019): causal forest adalah estimator kernel lokal-adaptif. Ini mempelajari notion sendiri tentang "mirip", ditentukan oleh kovariat yang sebenarnya penting untuk heterogenitas efek, alih-alih oleh jarak Euclidean di ruang tempat Anda harus memilih scaling secara manual.

Teori Asimptotik

Di bawah kondisi keteraturan (Wager dan Athey 2018) estimator konsisten, τ^(x)pτ(x)\hat{\tau}(\mathbf{x}) \xrightarrow{p} \tau(\mathbf{x}), dan asimptotik 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)

memberikan interval titik τ^(x)±zα/2σ^(x)\hat{\tau}(\mathbf{x}) \pm z_{\alpha/2} \cdot \hat{\sigma}(\mathbf{x}). Varians σ^2(x)\hat{\sigma}^2(\mathbf{x}) berasal dari jackknife infinitesimal (atau bootstrap-of-little-bags), dihitung dari struktur sub-sampel yang sama yang hutan sudah bangun — tidak ada loop bootstrap luar.

Worth being precise about what this guarantee is and is not. Ini asimptotik dan titik, dan berlaku untuk CATE. Interval prediksi konformal yang digunakan di tempat lain di blog ini adalah finite-sample dan bebas-distribusi, tapi marjinal, dan mencakup hasil. Estimand berbeda, jaminan berbeda; mereka bukan pengganti.

Koneksi Double Machine Learning

Ketika perawatan tidak ditetapkan secara acak, causal forest dipasang pada data yang di-residualisasi: model hasil m^(X)=E[YX]\hat{m}(\mathbf{X}) = \mathbb{E}[Y \mid \mathbf{X}] dan model propensi e^(X)=E[WX]\hat{e}(\mathbf{X}) = \mathbb{E}[W \mid \mathbf{X}] diperkirakan dengan cross-fitting, dan hutan berjalan pada Y~=Ym^\tilde{Y} = Y - \hat{m} melawan W~=We^\tilde{W} = W - \hat{e}. Ortogonalitas Neyman adalah yang membuat ini aman: kesalahan estimasi nuisance masuk hanya sebagai produk, jadi m^\hat{m} dan e^\hat{e} dapat masing-masing konvergen pada n1/4n^{-1/4} dan τ^\hat{\tau} masih konvergen pada n1/2n^{-1/2}.

Framework itu — residualisasi, cross-fitting, argumen ortogonalitas, implikasi ukuran sampel — adalah subjek artikelnya sendiri, Double Machine Learning untuk Sinyal Trading Kausal. Bacalah dulu; semua di bawah mengasumsikan itu dan hanya mencakup apa yang berubah ketika estimand adalah τ(x)alihalih\tau(\mathbf{x})` alih-alih \tau$.

Aplikasi Trading: Heterogenitas Dampak Kejadian

Satu kejadian pasar menghasilkan respons kontrafaktual positif, netral, dan negatif di seluruh aset dengan kovariat berbeda

Pengaturan

Domain alami untuk blog ini adalah alam semesta koin perpetual-futures, di mana kejadian sering, bertanda waktu, dan dapat diamati tanpa feed vendor.

  • Unit: observasi koin-kejadian di seluruh alam semesta perp yang dapat diperdagangkan
  • Perawatan: Wi=1W_i = 1 jika kejadian terjadi untuk koin ii — flip tanda tingkat pendanaan, listing spot, atau kaskade likuidasi yang melintasi ambang superkritis yang dijelaskan dalam kaskade likuidasi sebagai sinyal trading — dan Wi=0W_i = 0 untuk jendela non-kejadian yang cocok
  • Hasil: YiY_i = return abnormal selama jendela kejadian, bukan return mentah. Pasang model pasar pada jendela estimasi sebelum kejadian, lalu ambil return abnormal kumulatif. Spesifikasi tepatnya — jendela estimasi, regresi model pasar, konstruksi CAR dan statistik t-nya — dikerjakan di bagian studi-kejadian dari mining alpha LLM dari earnings call; gunakan lagi verbatim. Langkah ini tidak opsional: hasil close-to-close mentah membiarkan gerakan pasar-wide masuk ke τ^\hat{\tau}, dan karena gerakan pasar umum untuk semua unit yang dirawat terlihat persis seperti efek perawatan
  • Kovariat $\mathbf{X}_i`: kapitalisasi pasar, volatilitas terealisasi, riwayat pendanaan, kedalaman order book, rasio open-interest-to-cap
  • Pengkonfusi $\mathbf{W}_i`: variabel rezim yang menggeser probabilitas kejadian dan return

Sinyal Trading

Permukaan CATE dipetakan ke position sizer persis seperti estimasi ketidakpastian yang dikalibrasi: ukur dengan τ^|\hat{\tau}| relatif terhadap lebar interval, dan jangan trading ketika interval menyeberangi nol. Aturan keputusan ini — sizing lebar-terbalik, rasio edge e=τ^/we = |\hat{\tau}|/w, filter no-trade, varian sadar-biaya, dan argumen mengapa Anda tidak harus mengalikannya ke fraksi Kelly — diturunkan dalam Prediksi Konformal untuk Position Sizing Sadar-Risiko. Gunakan lagi dengan τ^sebagaipengganti\hat{\tau}` sebagai pengganti \hat{\mu}` dan interval causal forest sebagai pengganti konformal. Seimbangkan kaki panjang dan pendek dan buku netral-pasar menurut konstruksi.

Implementasi Python dengan 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

Menginterpretasikan Permukaan CATE

Plot efek marjinal menunjukkan bagaimana efek perawatan bergerak di sepanjang satu kovariat dengan sisanya ditahan di mediannya:

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

Baca ini sebagai deskripsi permukaan yang dipasang, bukan sebagai kurva dosis-respons kausal — menahan kovariat lain di mediannya dapat menempatkan Anda di wilayah ruang kovariat tanpa dukungan.

Asumsi Kunci dan Diagnostik

Overlap, keseimbangan, hidden-confounding, dan pemeriksaan placebo mengatur jalur ke estimasi kausal yang dapat dibela

Langgar ini dan Anda mendapatkan efek yang percaya diri, presisi, tapi salah.

1. Unconfoundedness (Seleksi pada Observables)

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

Penetapan perawatan harus independen dari hasil potensial diberikan kovariat yang diamati. Untuk kejadian yang didefinisikan secara mekanis ini dapat dibela; untuk kejadian yang merupakan reaksi pasar itu sendiri — pengumuman listing, mesin likuidasi bursa sendiri menembak — tidak, karena aliran tak teramati yang sama yang memicu kejadian juga menggerakkan return.

Uji dengan analisis sensitivitas Rosenbaum: jika UU tak teramati dapat menggeser odds perawatan hingga faktor Γ\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})}

seberapa besar Γ\Gamma harus sebelum efek yang diperkirakan berbalik tanda? Desain yang rusak pada Γ=1.1\Gamma = 1.1 bukan temuan.

2. Overlap (Positivitas)

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

Setiap unit perlu probabilitas positif muncul di kedua lengan. Periksa skor propensi dan 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 tidak gratis — mendefinisikan ulang populasi yang dijelaskan τ^\hat{\tau} Anda. Laporkan fraksi mana yang bertahan.

3. SUTVA (Asumsi Nilai Perawatan Unit Stabil)

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

Perawatan satu unit tidak boleh mempengaruhi hasil unit lain. Dalam crypto ini terlemah dari tiga: kaskade likuidasi dalam satu perp menyebar melalui collateral bersama dan inventory market maker ke setiap pasang berkorelasi, yang adalah interferensi menurut definisi. Mengelompokkan kesalahan standar oleh grup korelasi secara parsial mengatasinya; tidak ada yang sepenuhnya.

Di Luar Perawatan Biner

Causal forests meluas ke perawatan kontinu melalui mesin DML yang sama — memperkirakan seberapa banyak besarnya guncangan, bukan hanya kejadiannya, memindahkan aset secara berbeda:

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

di mana TiT_i adalah, katakanlah, ukuran perubahan tingkat pendanaan dalam basis point. Sekarang τ(x)\tau(\mathbf{x}) adalah efek per 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)

Pertimbangan Praktis

Apakah Heterogenitas Nyata?

Ini adalah pertanyaan yang dijawab oleh causal forests dan tidak ada yang lain di blog ini, dan pantas untuk tes sungguhan alih-alih aturan jempol. Kejujuran melindungi dari split palsu di dalam estimator; evaluasi out-of-sample atas kejadian yang ditahan (bukan aset yang ditahan) adalah standar dan dibahas dalam optimasi walk-forward dan Sharpe deflated dan multiple testing. Tidak ada yang memberi tahu Anda apakah τ^(x)bervariasidengan\hat{\tau}(\mathbf{x})` bervariasi dengan \mathbf{x}$ sama sekali.

Tes Prediktor Linier Terbaik melakukan itu. Regresikan hasil yang di-residualisasi pada perawatan yang di-residualisasi dan interaksinya dengan estimasi CATE yang di-demean:

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

Dua koefisien menjawab dua pertanyaan berbeda. α0\alpha_0 adalah efek rata-rata: apakah ada sesuatu di sini sama sekali? α1\alpha_1 adalah kemiringan kalibrasi pada prediksi Anda sendiri: ketika hutan Anda mengatakan efeknya lebih besar, apakah itu benar-benar lebih besar? Di bawah nol dari tanpa heterogenitas α1=0\alpha_1 = 0. Di bawah kalibrasi sempurna α1=1\alpha_1 = 1. α1\alpha_1 secara signifikan di atas nol tapi jauh di bawah satu berarti hutan menemukan urutan nyata tapi melebih-lebihkan penyebarannya — Anda dapat trading peringkatannya, bukan magnitudonya.

RScorer EconML memberikan skor pemilihan-model pendamping:

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

Pasang scorer pada split validasi yang hutan tidak pernah lihat, lalu gunakan untuk membandingkan model CATE kandidat satu sama lain dan melawan baseline efek-konstan. Hutan yang tidak bisa mengalahkan model efek-konstan pada R-score tidak menemukan heterogenitas yang worth trading, apa pun yang dikatakan kepentingan in-samplenya.

Ukuran Sampel

Causal forests butuh data lebih banyak daripada model hasil, karena estimand adalah perbedaan dan kedua lengan harus dihuni di setiap daun. Disiplin data-vs-parameter umum — berapa banyak poin out-of-sample per parameter bebas, dan koreksi Bonferroni setelah Anda membandingkan konfigurasi — ada di bagian persyaratan data dari optimasi walk-forward. Jawaban khususal causal forest empiris, bukan aturan jempol: pasang hutan pada sub-sampel bersarang dan plot lebar interval median terhadap nn; ukuran sampel yang dapat digunakan adalah tempat lebar jatuh di bawah ukuran efek yang berniat Anda trading.

Walk-Forward, Dengan Dua Rincian

Protokol evaluasi adalah walk-forward terjangkar biasa — refit pada semua kejadian hingga tt, trade kejadian t+1t+1 — dan perawatan lengkap, termasuk purging, embargo, rasio efisiensi walk-forward dan tingkat degradasi, ada di optimasi walk-forward. Dua hal spesifik untuk estimator ini.

Pertama, jendela kejadian tumpang tindih. Jika jendela kovariat sebelum kejadian t+1t+1 berisi jendela hasil kejadian tt, fold berbagi observasi dan hasil out-of-sample terkontaminasi. Buang jendela yang tumpang tindih sebelum menghitung satu angka PnL; dengan perawatan sering mekanis seperti flip pendanaan ini dapat menghapus porsi besar kejadian.

Kedua, split jujur harus digambar ulang di setiap refit. Membawa partisi Isplit\mathcal{I}_{\text{split}}/Iest\mathcal{I}_{\text{est}} yang sama melintasi fold reintroduksi kebocoran seleksi-struktur persis yang kejujuran ada untuk mencegah, karena kejadian yang baru ditambahkan mendarat di partisi yang dipilih dengan pengetahuan yang lama.

Lalu jalankan PnL out-of-sample tingkat kejadian melalui gerbang biasa — PBO dan rasio Sharpe deflated — sebelum percaya apa pun.

Biaya

Sinyal CATE dihargai seperti sinyal driven-kejadian lainnya: kurangi setengah spread yang diharapkan dari $|\hat{\tau}|` sebelum filter no-trade, dan sizing turun di buku tipis. Versi kuantitatif — hukum dampak akar-kuadrat dan kurva biaya yang dipasang dalam model biaya slippage, filter no-trade sadar-biaya dalam prediksi konformal, dan akuntansi eksekusi dalam implementation shortfall dan TCA — semua mentransfer tanpa perubahan.

Satu hal yang tidak mentransfer: shelf-life sinyal CATE dibatasi oleh jendela kejadian, jadi biaya diamortisasi atas periode holding pendek tetap alih-alih periode terbuka. Sinyal yang terus ditahan membayar spread sekali dan menghasilkan selama edge bertahan; ini membayarnya setiap kejadian. Apakah edge bertahan itu adalah pertanyaan empiris tentang kejadian dan alam semesta spesifik Anda, dan itu hal pertama untuk diperiksa, karena bisa membunuh strategi sebelum mesin kausal penting.

Kesimpulan

Causal forests memperkirakan objek yang berbeda dari sisanya toolkit blog ini. Bukan "apa yang akan return aset ini", tapi "seberapa banyak kejadian ini menggerakkan aset ini, relatif terhadap kontrafaktual di mana itu tidak menembak". Mesin yang membuatnya estimable — split yang memaksimalkan heterogenitas, estimasi jujur, representasi bobot kernel adaptif dan interval jackknife-infinitesimal — tidak ada analog dalam pembelajaran terbim bias biasa, dan asumsi yang dibutuhkan (unconfoundedness, overlap, SUTVA) cukup kuat bahwa harus diuji alih-alih ditegaskan.

Yang tidak dimiliki artikel ini adalah hasil. Setiap angka di atas adalah placeholder. Melawan standar yang ditetapkan oleh negatif jujur dan Sharpe deflated, metode tanpa distribusi CATE yang diukur, BLP α1\alpha_1 dengan nilai p, diagnostik overlap, dan PnL out-of-sample yang digate oleh DSR/PBO adalah tutorial, bukan temuan. Angka-angka itu adalah pekerjaan berikutnya; hasil negatif worth dipublikasikan.

Referensi

  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
Penafian: Informasi yang disediakan dalam artikel ini hanya untuk tujuan edukasi dan informasi serta tidak merupakan nasihat keuangan, investasi, atau trading. Trading mata uang kripto mengandung risiko kerugian yang signifikan.

Penulis

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

Selangkah Lebih Maju dari Pasar

Berlangganan newsletter kami untuk wawasan AI trading eksklusif, analisis pasar, dan pembaruan platform.

Kami menghormati privasi Anda. Berhenti berlangganan kapan saja.