Skip to content
Semua panduan opsi dan kontrak berjangka
Validasi model tradingBacaan 10 menit

Purged cross-validation dan embargo: mencegah kebocoran label pada model trading

Pelajari cara memvalidasi deret waktu keuangan ketika interval label forward saling tumpang tindih, serta perbedaan purging dan embargo dari walk-forward, TimeSeriesSplit, dan CPCV.

Dalam panduan iniMengapa pembagian acak dapat memberi kesan keliru?

Ringkasan singkat

Ketika interval hasil pada label forward saling tumpang tindih, pembagian acak dapat membocorkan informasi antara data latih dan uji. Purging membuang sampel latih yang interval hasilnya bertumpang tindih dengan interval hasil sampel uji. Embargo adalah jeda terpisah setelah blok uji pada skema tertentu. Keduanya tidak otomatis membuat urutan waktu menjadi kronologis atau memperbaiki fitur yang dibentuk dengan keliru.

Mengapa pembagian acak dapat memberi kesan keliru?

Random K-fold membagi baris secara acak ke fold latih dan uji. Ini dapat menyesatkan pada deret waktu keuangan jika observasi saling bergantung atau interval hasil forward bertumpang tindih. Label sampel latih bisa mencakup return dari tanggal yang juga masuk ke label sampel uji. Akibatnya, validasi menjadi lebih mudah daripada memperkirakan periode mendatang yang belum diamati.

Namun, tidak setiap penggunaan K-fold selalu salah. Kecocokannya bergantung pada pertanyaan evaluasi, cara sampel dibentuk, dependensi waktunya, dan definisi label. Mengacak baris return harian saja tidak memeriksa rentang waktu yang direpresentasikan oleh setiap baris.

Tetapkan waktu keputusan, fitur, dan interval label

Untuk setiap sampel, catat waktu keputusan t, informasi yang benar-benar tersedia saat itu, jendela fitur, interval target/label, dan titik akhir penyelesaian label t1. Label return ke depan lima sesi mencakup (t,t+5]: mulai setelah waktu keputusan dan berakhir pada penutupan sesi kelima.

Setiap fitur harus memakai data yang memang tersedia saat prediksi pada t. Riwayat masa lalu yang sama muncul di dua jendela fitur tidak dengan sendirinya merupakan kebocoran; model boleh memakai ulang riwayat pasar yang telah diketahui. Namun, memakai nilai dari masa depan atau revisi data yang baru tersedia setelah keputusan merupakan kebocoran. Simpan waktu mulai dan selesai aktual tiap peristiwa, terutama jika label peristiwa memiliki durasi berbeda-beda.

Buang sampel latih yang hasilnya bertumpang tindih dengan uji

Purging membuang sampel latih jika interval hasil/label aktualnya bertumpang tindih dengan interval hasil sampel uji. Periksa interval waktunya secara langsung, bukan sekadar membuang sejumlah baris tetap di sekitar batas fold. Untuk label peristiwa berdurasi variabel, gunakan timestamp awal dan akhir peristiwa yang sebenarnya; jangan menggantinya dengan hitungan baris tetap yang praktis tetapi tidak sesuai.

Bab 7 Advances in Financial Machine Learning karya Francisco López de Prado membahas cross-validation dan purging untuk menangani tumpang tindih informasi. Menghapus label yang bertumpang tindih tidak otomatis membuat split kronologis: data latih mungkin masih mencakup observasi setelah blok uji. Jelaskan pertanyaan yang dijawab split tersebut, bukan menganggap setiap fold sebagai simulasi penerapan di masa depan.

Contoh per sesi untuk memeriksa tumpang tindih

Anggap keputusan dibuat setiap hari dan interval hasil forward adalah lima sesi, yakni (t,t+5]. Tanggal keputusan pada blok uji adalah 11–15, sehingga label uji berlangsung sampai hari ke-20. Dalam contoh ini, angka hari adalah sesi perdagangan berurutan dan batas kanan interval ikut dihitung, sesuai tanda kurungnya.

Label latih (7,12] bertumpang tindih dengan hasil uji—misalnya label uji yang dimulai pada hari ke-11—maka sampel itu di-purge. Interval latih (16,21] juga bertumpang tindih dengan label uji yang dimulai pada hari ke-15 dan berakhir pada hari ke-20; sampel itu juga di-purge. Keputusan ini mengikuti irisan interval, bukan jarak tetap dalam jumlah baris.

Label sampel yang lebih belakangan mungkin tidak beririsan dengan hasil uji, tetapi tetap dikeluarkan karena masuk ke embargo terpisah setelah blok uji. Ini ilustrasi asumsi tertentu, bukan ketentuan tentang panjang gap yang universal untuk semua data atau strategi.

Perlakukan embargo sebagai jeda terpisah dengan alasan jelas

Embargo adalah buffer yang ditetapkan setelah blok uji. Observasi yang lebih belakangan baru boleh masuk ke data latih setelah buffer itu, pada skema yang dapat memakai data sebelum dan sesudah blok uji. Embargo dapat mengurangi dependensi tersisa dari pembentukan peristiwa atau fitur, sekalipun label sampel belakangan tidak langsung beririsan dengan label uji.

Tidak ada persentase atau durasi yang berlaku untuk semua kasus, dan embargo tidak menggantikan pemeriksaan interval aktual. Tentukan panjangnya berdasarkan frekuensi sampling, horizon label, konstruksi fitur, dan dependensi yang ingin dikurangi; catat alasannya. Embargo terlalu panjang dapat membuang data latih yang berguna, sedangkan jeda terlalu pendek mungkin masih menyisakan dependensi penting.

Garis waktu abstrak menampilkan blok uji, sampel latih yang dihapus karena labelnya beririsan, dan jeda terpisah setelah blok uji.
Sampel latih dengan label yang beririsan dengan uji dibuang; embargo tampak sebagai jeda terpisah setelah blok uji.

Bandingkan metode validasi menurut pertanyaannya

Random K-fold membagi observasi ke fold secara acak; jika observasi bergantung atau label bertumpang tindih, hasilnya belum tentu menyerupai prediksi untuk periode yang lebih baru. Walk-forward atau rolling-origin melatih model pada masa lalu dan menguji blok waktu berikutnya, lalu menggeser batasnya ke depan. Pendekatan ini lebih dekat dengan simulasi penerapan historis, tetapi tidak dengan sendirinya mencegah kebocoran fitur atau pemilihan model berdasarkan data uji.

TimeSeriesSplit dari scikit-learn membuat split berurutan dan opsi gap mengeluarkan sejumlah baris antara data latih dan uji. Dokumentasi resminya menyebut bahwa perbandingan durasi uji mengandaikan observasi berjarak sama; gap menghitung baris, bukan memeriksa interval waktu peristiwa yang bervariasi. Purged K-fold menghapus label yang benar-benar beririsan, tetapi dapat melatih model dengan baris setelah blok uji. Combinatorial purged CV (CPCV) mengombinasikan grup uji untuk membentuk beberapa jalur pengujian, tetapi tidak otomatis menjadi simulasi historis kronologis dan tidak menghapus bentuk kebocoran lain.

Bab 12 Advances in Financial Machine Learning membahas metode walk-forward dan CPCV beserta konteks penggunaannya.

Periksa sumber kebocoran di luar interval label

Hasil validasi tetap dapat tercemar oleh fitur dengan timestamp salah atau yang memakai informasi masa depan, basis data yang memuat revisi kemudian atau hanya sekuritas yang masih bertahan. Kebocoran juga terjadi jika preprocessing atau pemilihan fitur dilakukan pada seluruh data sebelum pembagian fold.

Mencoba banyak variasi model atau strategi lalu melaporkan hasil terbaik menambah bias seleksi, sekalipun label tidak beririsan. Backtest yang mengabaikan biaya trading atau mengandaikan semua order terisi pada harga yang tidak realistis dapat melebihkan kinerja. Bailey dan rekan-rekannya membahas risiko memilih hasil terbaik dari banyak percobaan dalam The Probability of Backtest Overfitting. Desain split saja tidak menyelesaikan masalah tersebut.

Fit preprocessing dan seleksi hanya di dalam fold latih

Pada setiap fold, fit transformasi, pemilihan fitur, dan pemilihan parameter hanya dengan data latih. Gunakan validasi time-aware bertingkat (nested) untuk menilai kandidat, agar fold uji luar tidak dipakai sekaligus untuk memilih model dan mengestimasi kinerjanya.

Setelah metode ditetapkan, sisihkan periode kronologis terakhir yang tidak disentuh sebagai holdout final. Jangan terus mengubah model berdasarkan hasil holdout lalu tetap menyebutnya uji independen. Cross-validation mengukur kinerja di bawah split dan data tertentu; metode ini tidak menjamin kinerja masa depan.

Dokumentasikan validasi agar dapat diulang

Catat unit sampel, waktu keputusan, sumber fitur dan kapan data tersedia, setiap jendela fitur, serta interval label aktual (t,t1]. Dokumentasikan metode split, fold, aturan interval untuk purging, durasi dan alasan embargo, serta jumlah baris gap bila menggunakan TimeSeriesSplit.

Jelaskan apakah data latih mencakup observasi setelah blok uji, bagaimana biaya dan fill diperlakukan, dan fold mana yang digunakan untuk memilih parameter. Bacaan terkait: trade-off bias-varians dan overfitting model keuangan, multiple testing dan false discovery rate dalam keuangan, serta annualisasi rasio Sharpe dengan korelasi serial.

Pertanyaan umum

Q1Apakah random K-fold selalu salah untuk data keuangan?

Tidak. Metode ini dapat sesuai jika cocok dengan pertanyaan evaluasi dan struktur sampel. Namun, dependensi waktu atau interval hasil yang bertumpang tindih dapat menyesatkan; periksa unit sampel serta label sebelum memilih metode.

Q2Apakah embargo menggantikan purging?

Tidak. Purging membuang sampel latih dengan interval hasil yang beririsan dengan uji. Pada skema tertentu, embargo mengeluarkan buffer terpisah setelah blok uji. Keduanya berbeda, dan tidak satu pun membenarkan pemakaian fitur yang belum tersedia saat prediksi.

Q3Apakah CPCV menjamin kinerja masa depan?

Tidak. CPCV menghasilkan beberapa jalur uji di bawah rancangan split tertentu. CPCV tidak menghilangkan kebocoran data, percobaan berulang, perubahan pasar, atau ketidakpastian eksekusi di masa depan.

Sumber dan bacaan lanjutan

Laporkan masalah

Kami akan menyiapkan email berisi tautan artikel ini. Mark menerima laporan setelah Anda mengirimkannya

Cek cepat

Sudah membaca panduannya? Uji diri dengan 3 pertanyaan

Pertanyaan 1 / 3

Pertanyaan 01

Kapan sampel latih harus dibuang melalui purging?

Pilih jawaban untuk melihat penjelasannya

Glosarium opsi