Double Machine Learning: Menganggar Parameter Sebab Bukkan Meramal Pulangan
Setiap artikel pemodelan dalam blog ini setak ini menimbulkan bentuk soalan yang sama: diberi ciri, ramalkan nombor, kemudian sahkan bahawa ramalan itu kekal luar sampel. Model spread meramalkan spread. Model isian meramalkan kebarangkalian isian. Seluruh aparatus pengesahan — walk-forward yang dibersihkan, Sharpe yang menguncup, taksonomi look-ahead — wujud untuk memeriksa sama ada ramalan itu nyata.
Artikel ini menimbulkan bentuk soalan yang berbeza, dan ia adalah satu-satunya jentera yang tidak pernah dimiliki blog ini: anggarkan satu parameter skalar yang mempunyai tafsiran sebab, dan lampirkan ralat standard kepadanya yang hidup fakta bahawa model ML fleksibel digunakan untuk sampai ke sana.
Itu bukan perbezaan retorik. "Kedudukan giliran meramalkan kebarangkalian isian" adalah remeh dan tidak berguna secara operasi — sudah tentu ia berlaku, kedua-duanya dipacu oleh kedalaman dan ketaktentuan. "Bergerak satu kedudukan ke hadapan dalam giliran menyebabkan perubahan dalam kebarangkalian isian, memegang keadaan pasaran tetap" adalah nombor yang boleh anda masukkan ke dalam dasar penempatan pesanan. Yang pertama ialah penyesuaian regresi. Yang kedua memerlukan anggar yang tidak wujud dalam kotak alat ML standard, kerana penyetelan dan overfitting dalam peringkat pertama yang fleksible memesongkan tepat pekali yang anda pedulikan.
Double Machine Learning (Chernozhukov, Chetverikov, Demirer, Duflo, Hansen, Newey & Robins, 2018) ialah anggar yang membetulkan ini. Setiap peniaga kuantitatif pernah mendengar ini: korelasi bukan sebab. DML ialah bahagian yang datang selepas ayat itu.
Mengapa Regresi Naif Gagal

Tetapkan soalan di wilayah blog sendiri. Kita mahu kesan sebab kedudukan giliran ke atas kebarangkalian isian:
- : sama ada pesanan had terhad pada pemerhatian diisi dalam ufuk.
- : kedudukan giliran pada penempatan (dinormalisasi oleh saiz aras).
- : pengganggu — ketaktentuan terlaksana, spread sebut, ketidakseimbangan kedalaman, saiz aras, masa hari, label rejim. Ini adalah pembolehubah keadaan pasaran yang blog ini sudah kira dalam pemodelan spread dengan pembelajaran mesin.
Parameter sebab ialah dalam
di mana menangkap hubungan (berpotensi kompleks, tidak linear) antara keadaan pasaran dan hasil isian.
Rawatan tidak diberikan secara rawak. Anda berada di bahagian hadapan giliran kerana aras nipis, atau kerana anda menyiarkan semasa tempoh tenang, atau kerana buku tidak seimbang memihak anda. Keadaan yang sama memacu secara bebas sama ada anda diisi. Itu ialah kekacauan.
Pendekatan 1: Abaikan pengganggu. Regresikan pada sahaja. Anggaran menyerap kesan setiap pengganggu yang berkorelasi dengan kedua-duanya. Bias pembolehubah hilang klasik: aras nipis memberi anda kedua-dua slot giliran yang baik dan kadar isian tinggi, jadi anda membesar-besarkan nilai slot itu sendiri.
Pendekatan 2: Regresi linear dengan kawalan. Regresikan pada dan . Ini hanya berfungsi jika benar-benar linear. Dinamik buku tidak — hubungan isian/ketaktentuan mempunyai ambang, kesan ketidakseimbangan kedalaman menukar tanda mengikut rejim. Menentukan dengan salah memperkenalkan semula bias.
Pendekatan 3: Ramalan ML. Sesuaikan model yang dikuasakan kecerunan pada . Anda mendapat diskriminasi luar sampel yang baik, dan tiada tafsiran sebab sama sekali. Model menangkap setiap corak ramalan, sebab atau tidak; penyetelan mengecilkan sumbangan rawatan dengan cara yang membandingkan ; dan tiada ralat standard yang boleh anda percayai.
Inilah ketegangan teras. ML baik dalam ramalan, tetapi permohonan naif kepada parameter sebab menghasilkan anggaran berat, tidak normal, dan tidak dipercayai.
Model Separuh Linear

DML beroperasi dalam rangka struktur. Kerja utama ialah regresi separuh linear (PLR):
- ialah parameter sebab yang diminati.
- ialah fungsi gangguan — bahagian hasil yang dijelaskan oleh keadaan pasaran.
- ialah fungsi gangguan lain — jangkaan bersyarat rawatan diberi keadaan pasaran ("propensity" dalam tetapan rawatan berterusan).
- dan ialah sisaan struktur.
Pandangan utama: berdimensi rendah, tetapi dan boleh menjadi sangat kompleks. Kita mahu ML mengendalikan fungsi gangguan sambil masih memberikan inferens yang sah pada skalar.
Mengapa "Double"?
Dua model ML, bukan satu:
- Model hasil: — ramalkan hasil dari keadaan pasaran sahaja.
- Model rawatan: — ramalkan rawatan dari keadaan pasaran sahaja.
Bentuk sisaan
dan anggarkan dengan meregresikan pada :
Ini ialah Frisch-Waugh-Lovell dengan steroid: bahagian keluar pengganggu dengan ML dan bukannya unjuran linear, kemudian baca kesan rawatan dari variasi sisaan.
Ortogonality Neyman: Mengapa Ia Berfungsi
Pendekatan bahagian keluar naif (anggarkan , tolak, regresi) gagal kerana ralat anggaran ML dalam disebarkan terus ke . Skor DML dibina untuk menjadi Neyman ortogonal — tidak sensitif kepada gangguan kecil dalam fungsi gangguan.
Skor ortogonal untuk PLR:
di mana . Syarat ortogonality ialah
Secara intuitif, skor menggunakan hanya variasi dalam dan yang bebas dari , dan ralat dalam satu fungsi gangguan diimbangi oleh yang lain. Jika meramalkan rawatan sedikit berlebihan, sedikit terlalu kecil, tetapi ralat yang sepadan dalam dari menganggarkan salah menolak dalam arah pampasan. Bias menjadi tertib kedua — hasil dua ralat peringkat pertama — dan bukan tertib pertama.
Secara formal, jika kedua-dua penganggar gangguan memusat pada kadar (sederhana; kebanyakan kaedah ML yang munasabah memenuhi ini), maka
jadi memusat pada kadar parametrik dan asymptotically normal.
Cross-Fitting: Mengapa Ia Wajib Di Sini
Ortogonaliti sahaja tidak cukup. Jika model gangguan disesuaikan pada baris yang sama digunakan untuk menganggarkan , overfitting peringkat pertama mencemari peringkat kedua — dan bahaya spesifik ini berharga dinyatakan dengan tepat, kerana ia bukan bahaya yang biasa anda lihat. Di tempat lain, overfitting muncul sebagai skor pengesahan yang kembung: anda perasan, anda diskaun, anda teruskan. Di sini ia muncul sebagai anggaran titik yang beralih untuk , dengan selang keyakinan yang masih sempit dan masih berpusat pada nombor yang salah. Tiada skor untuk disyaki. Anggar hanya berbohong senyap.
Cross-fitting memecahkan pergantungan: ramalan gangguan setiap pemerhatian datang dari model yang dilatih tanpanya, dan dianggarkan dari sisaan terkumpul held-out. Mekaniknya ialah jentera K-fold biasa, dibincangkan dalam pemodelan spread dengan pembelajaran mesin; yang penting di bawah ialah fold mana yang anda berikan.
Algoritma DML Langkah demi Langkah
Input: data , kaedah ML dan , fold .
Langkah 1 — Bahagian: bahagikan kepada fold terpisah.
Langkah 2 — Cross-fit model gangguan: untuk , latih dan pada pelengkap fold , kemudian kira dan untuk .
Langkah 3 — Anggaran:
Langkah 4 — Inferens:
dengan selang .
Selang keyakinan sah untuk tepat satu soalan
Inilah pengecualian yang memutuskan sama ada hasil DML ber nilai, dan di mana kebanyakan kegunaan digunakan kaedah ini runtuh senyap.
Keanormalan asymptotik di atas ialah kenyataan tentang satu rawatan pra-specified, satu set pengganggu pra-specified, satu skor pra-specified. Tetapkan ini terlebih dahulu, jalankan anggar sekali, dan selang bermaksud apa yang ia katakan. Cuba tiga rawatan calon, atau empat set pengganggu, atau tukar learner sehingga p-value kelihatan lebih baik, dan anda tidak lagi melakukan inferens — anda menjalankan pencarian, dan p-value yang dilaporkan ialah p-value maksimum, bukan cabutan.
Blog ini sudah mengukur apa yang dilakukannya. Dalam kajian nisbah Sharpe yang menguncup, pencarian atas hingar-baku tulen dengan sifar pingat nyata menghasilkan kadar penemuan palsu naif 1.000 — uji yang tidak laras setiap kali — sementara median p-value naif pemenang duduk berhampiran 0.0007. Tiada apa-apa mengenai ortogonality Neyman melindungi anda dari ini. Ortogonality membetulkan bias dari anggaran gangguan; ia tidak mengatakan apa-apa mengenai bias dari pencarian spesifikasi. P-value DML 1e-05 yang diperoleh selepas mencuba enam spesifikasi berhak mendapat rawatan Bonferroni/Holm/BHY yang sama seperti mana-mana pemenang lain yang ditarik dari grid, dengan ditetapkan kepada bilangan spesifikasi yang sebenarnya anda jalankan.
Ini mempunyai akibat praktikal langsung untuk ciri kemudahan alat. DoubleMLData menerima senarai dalam d_cols dan dengan gembiranya akan kembali tiga kesan rawatan dalam satu jadual ringkasan:
dml_data_multi = dml.DoubleMLData(
df, y_col='filled', d_cols=['queue_pos', 'toxicity', 'spread_at_post'],
x_cols=confounder_cols,
)
Tiga baris, tiga p-values, dan masalah ujian berbilang yang jadual ringkasan tidak sebut. Jika anda membaca ketiga-tiganya, laraskan ketiga-tiganya. Jika hanya satu ialah soalan pra-daftar, katakan begitu, dan rawat dua yang lain secara eksplisit sebagai eksploratori.
Cross-Fitting pada Siri Masa: Purge, Embargo, Lipatan Tersuai

DML standard menganggap pemerhatian i.i.d. Data buku tidak, dan mod kegagalan ialah satu yang blog ini sudah dokumentasikan secara terperinci: baris bersebelahan berkongsi tetingkap hadapan bertindih, jadi TimeSeriesSplit biasa masih bocor jawapan merentasi sempadan lipatan. Lihat pemodelan spread dengan pembelajaran mesin untuk pelaksanaan walk-forward yang dibersihkan dan diembargo dan sebab sekurang-kurangnya horizon baris diperlukan, dan taksonomi bias look-ahead untuk katalog lengkap kebocoran dan magnitud yang diukur.
Bahagian yang benar-benar khusus DML ialah bagaimana anda memberikan lipatan yang dibersihkan kepada anggar, kerana set_sample_splitting mempunyai kontrak yang tersandung orang:
import numpy as np
import doubleml as dml
def purged_folds(n: int, n_splits: int, horizon: int):
"""Lipatan tingkap yang mengembang dengan jurang purge/embargo `horizon` baris.
Pembinaan yang sama dengan CV walk-forward yang dibersihkan dalam artikel
pemodelan spread: jurang membuang pertindahan antara tetingkup hadapan
baris latihan dan baris pengesahan.
"""
fold_size = n // (n_splits + 1)
for k in range(1, n_splits + 1):
train_end = fold_size * k
val_start = train_end + horizon
val_end = val_start + fold_size
if val_end > n:
break
yield np.arange(0, train_end - horizon), np.arange(val_start, val_end)
folds = list(purged_folds(len(df), n_splits=5, horizon=HORIZON))
dml_plr = dml.DoubleMLPLR(dml_data, ml_l=ml_l, ml_m=ml_m)
dml_plr.set_sample_splitting([folds])
dml_plr.fit()
Dua perkara yang perlu diketahui, tidak satupun jelas dari docs perpustakaan:
- Lipatan walk-forward yang dibersihkan tidak meliputi setiap baris. Jurang purge dan blok latihan awal tidak pernah menjadi lipatan ujian sesiapa, jadi dianggarkan dari kurang daripada sisaan. Itu ialah tingkah laku yang betul, bukan pepijat, tetapi bermakna berkesan dalam formula varians ialah bilangan baris ujian terkumpul — semak dan bukannya anggap.
- Ulangan
n_reptidak percuma di sini. Dengan K-fold rawak, mengulangi cross-fitting dan rata-rata ialah pengurangan varians murah. Dengan pembahagian teratur yang tertib masa, hanya ada satu pembahagian, jadin_reptidak membeli apa-apa dan tidak menyembunyikan apa-apa; kestabilan mesti datang dari menjalankan semula pada tingkap data yang berbeza.
Untuk struktur panel (banyak simbol pada tempoh yang sama), DoubleML menyokong ralat standard kuat-kluster — kluster pada simbol, bukan masa, dan lihat pengesahan multi-simbol untuk kedudukan blog tentang bila hasil cross-instrumen benar-benar ditubuhkan.
Kes yang Diukur: Kedudukan Giliran dan Kebarangkalian Isian

Ini ialah satu-satunya soalan sebab dalam artikel di mana projek sudah mempunyai data, dan ia harus dijalankan dan bukan dicadangkan. Analisis kedudukan giliran sudah merangkumi anggaran kedudukan, mekanik FIFO, kadar saliran dan masa-ke-isian pada data buku nyata; simulasi isian merangkumi pemodelan kebarangkalian isian dan gelung kalibrasi terhadap isian langsung. Kedua-duanya menghasilkan model ramalan isian. DML menukar input yang sama kepada anggaran sebab.
Spesifikasi, pra-daftar sebelum melihat anggaran:
- Hasil : diisi dalam
HORIZONsnapshot (binari). - Rawatan : kedudukan giliran ternormal pada penempatan.
- Pengganggu : ketaktentuan terlaksana 1s, spread sebut dalam bps, ketidakseimbangan kedalaman, saiz aras pada siaran, jarak dari mid dalam tick, pengekodan masa hari, label rejim.
from sklearn.ensemble import GradientBoostingRegressor
import doubleml as dml
confounder_cols = [
'rv_1s', 'spread_bps', 'depth_imbalance', 'level_size',
'dist_from_mid_ticks', 'tod_sin', 'tod_cos', 'regime',
]
dml_data = dml.DoubleMLData(
df, y_col='filled', d_cols='queue_pos_norm', x_cols=confounder_cols,
)
ml_l = GradientBoostingRegressor(n_estimators=300, max_depth=5)
ml_m = GradientBoostingRegressor(n_estimators=300, max_depth=5)
dml_plr = dml.DoubleMLPLR(dml_data, ml_l=ml_l, ml_m=ml_m, score='partialling out')
dml_plr.set_sample_splitting([folds])
dml_plr.fit()
print(dml_plr.summary)
dml_plr.sensitivity_analysis()
print(dml_plr.sensitivity_summary)
Hasil untuk dilaporkan ialah perbandingan empat lajur, bukan satu pekali: anggaran OLS naif pada sahaja, anggaran kawalan linear pada dan , anggaran DML dengan ralat standardnya, dan nilai ketahanan dari analisis sensitiviti — seberapa kuat pengganggu yang tidak diperhatikan harus untuk membatalkan kesan. Jurang antara lajur naif dan DML ialah kuantiti minat sebenar: ia adalah berapa banyak nilai jelas kedudukan giliran adalah keadaan pasaran yang memakai pakaian.
null atau negatif di sini ialah hasil yang boleh diterbitkan dan lebih sesuai dengan blog ini daripada yang positif bersih. Jika kesan sebab kedudukan giliran runtuh setelah ketaktentuan dan saiz aras dibahagikan keluar, itu ialah penemuan langsung mengenai dasar penempatan pesanan: slot bukan yang memperoleh isian, syarat di mana anda mendapat slot itulah.
Analisis Faktor Sebab
Pendekatan standard untuk pelaburan faktor ialah persatuan: isih oleh ciri, bentuk portfolio panjang-pendek, perhatikan bahawa pulangan berbeza. DML membolehkan ujian yang berbeza — anggarkan kesan sebab langsung ciri pada pulangan, membersihkan kesan kekacauan ciri lain. Jika kesan hilang di bawah DML, faktor tidak bebas sebab; ia ialah proksi.
Ini ialah kedua, bentuk skeptisisme faktor yang bebas, dan ia berharga menjadi eksplisit tentang bagaimana ia berkaitan dengan satu yang blog ini sudah terbitkan. Nisbah Sharpe yang menguncup menyerang zoo faktor dari sisi pemilihan: dengan cukup percubaan, faktor boleh kelihatan penting semata-mata kerana anda melihat banyak kali. DML menyerangnya dari sisi kekacauan: faktor boleh kelihatan penting pada satu ujian jujur dan masih menjadi proksi untuk sesuatu yang lain dalam set syarat. Faktor harus terus hidup kedua-duanya untuk menarik, dan dua mod kegagalan adalah bebas — lulus yang satu tidak memberitahu anda apa-apa mengenai yang lain.
Apa yang DML Tidak Boleh Lakukan
-
Ia memerlukan pengganggu untuk diperhatikan. Jika pembolehubah yang tidak diperhatikan memacu kedua-dua rawatan dan hasil, DML berat, dan tiada kecanggihan ML membetulkan masalah pengenalpastian. Analisis sensitiviti mengikat risiko; ia tidak membuangnya.
-
Ia menganggar kesan purata. Jika kesan kedudukan giliran berbeza dengan ketara merentasi rejim, anggaran titik ialah purata merentasi campuran rejim sampel anda. Untuk heterogenitas gunakan Model Regresi Interaktif (
DoubleMLIRM) atau hutan sebab. -
Ia menganggap model struktur. Spesifikasi separuh linear memerlukan rawatan memasuki persamaan hasil dengan cara tertentu. Jika proses sebenar asasnya berbeza, DML salah dengan yakin.
-
Ia tidak menemui struktur sebab. DML menganggar kesan rawatan pra-specified. Ia tidak memberitahu anda pembolehubah mana yang punca sebab.
-
Ia tidak mengecualikan anda dari ujian berbilang. Mengulang titik di atas kerana ia paling sering dilangkau: ortogonality menyah-bias anggaran gangguan, bukan pencarian spesifikasi.
Nota Praktikal
Saiz sampel. DML memerlukan model gangguan memusat pada , yang dalam amalan bermakna cukup baris untuk model ML untuk menghampiri dan sama sekali. Daripada mempercayai ambang bulat, tetapkan kecukupan secara empirik dengan cara pengesahan multi-simbol lakukan — semak sama ada anggaran kekal merentasi instrumen dan sub-tempoh, dan treat ketidakstabilan sebagai isyarat yang ia.
Pilihan learner. Fakta khusus DML adalah sempit tetapi berguna: memandangkan penumpukan , learner menjejaki kecekapan (lebar selang), bukan konsistensinya. Learner yang berbaloi untuk dicapai pada data pasaran jadual, dan mengapa peningkatan kecerunan ialah lalai, sudah dibincangkan dalam pemodelan spread dengan pembelajaran mesin. Jika bergerak secara material merentasi learner, itu bukan menu untuk dipilih — ia bukti fungsi gangguan dianggar dengan teruk, dan mengikut bahagian di atas, memilih yang paling mesra menjadikan senaman ini kepada pencarian.
Kesimpulan
DML memberikan blog sesuatu yang tidak dimilikinya: cara untuk menyatakan tuntutan mikrostruktur pasaran sebagai parameter sebab dengan ralat standard yang boleh dipertahankan, dan bukan sebagai ramalan dengan skor pengesahan yang baik.
Tiga idea yang menanggung beban ialah:
- Ortogonalise skor supaya ralat peringkat pertama batal ke tertib kedua.
- Cross-fit, dengan lipatan yang dibersihkan dan diembargo pada data siri masa, supaya overfitting peringkat pertama tidak boleh menggeser .
- Pra-tentukan, supaya selang yang anda laporkan ialah selang yang sebenarnya anda peroleh.
Anggar ialah bahagian mudah. Bahagian sukar tidak berubah: memutuskan pengganggu yang penting, berhujah bahawa andaian pengenalpastian dipegang, dan menahan diri dari menjalankan spesifikasi satu kali lagi.
Rujukan
Keturunan DML pendek dan berharga satu baris: ia ialah model separuh linear Robinson (1988) dengan ML menggantikan penganggar kernel, mencapai sempadan kecekapan semiparametrik, dengan syarat ortogonality menjejuri kembali ke ujian C() Neyman dan sepupu dekat dalam literatur pembelajaran bersasaskan (TMLE). Sumbangan Chernozhukov et al. adalah menunjukkan ini boleh dikendalikan dengan learner ML sewenang-wenang sambil mengekalkan inferens -konsisten, asymptotically normal.
- Chernozhukov, V., Chetverikov, D., Demirer, M., Duflo, E., Hansen, C., Newey, W., & Robins, J. (2018). Double/Debiased Machine Learning for Treatment and Structural Parameters. The Econometrics Journal, 21(1), C1-C68.
- Robinson, P. M. (1988). Root-N-Consistent Semiparametric Regression. Econometrica, 56(4), 931-954.
- Bach, P., Chernozhukov, V., Kurz, M. S., & Spindler, M. (2022). DoubleML — An Object-Oriented Implementation of Double Machine Learning in Python. Journal of Machine Learning Research, 23(53), 1-6.
- Facure, M. (2022). Causal Inference for the Brave and True. Chapter 22: Debiased/Orthogonal Machine Learning.
- Cahan, E., Bai, J., & Ng, S. (2024). Causal Factor Investing. Quantitative Finance.
Pengarang
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.