← Kembali ke artikel
July 2, 2026
5 menit baca

Probability of Backtest Overfitting: Apakah Pencarian Anda Mengalahkan Lemparan Koin?

Probability of Backtest Overfitting: Apakah Pencarian Anda Mengalahkan Lemparan Koin?
#algotrading
#backtest
#overfitting
#cross-validation
#pbo
#sharpe
#validasi
🎯
Part 5 of 7 · Collection
Backtesting Without Fooling Yourself

Bagian dari seri "Backtests Without Illusions".

📄 Artikel ini berkembang menjadi paper riset. Setiap angka di bawah berasal dari satu skrip deterministik yang membangun ground truth terkontrol — pencarian ber-edge nol, pencarian dengan edge yang ditanam, dan grid parameter moving-average nyata pada random walk — lalu menjalankan Combinatorially Symmetric Cross-Validation (CSCV) untuk mengestimasi Probability of Backtest Overfitting terhadapnya, mengukur langsung seberapa baik prosedur seleksi itu men-generalisasi. Baca paper-nya online (versi interaktif + PDF) di pbo-search.marketmaker.cc, kode dan data di github.com/suenot/pbo-search.

Deflated Sharpe Ratio mengadili pemenang Anda: mengingat Anda mencari N konfigurasi, apakah Sharpe yang satu ini melampaui apa yang bisa dibeli keberuntungan? Artikel ini mengadili sesuatu yang lain — tindakan memilih itu sendiri. Anda menjalankan grid, Anda menyimpan sel terbaik, Anda melanjutkan. Tetapi apakah seleksi itu sendiri dapat dipercaya? Jika Anda menjalankan ulang seluruh pemisahan in-sample/out-of-sample dengan cara berbeda, apakah konfigurasi yang sama akan tetap muncul di puncak — atau Anda hanya menobatkan yang paling beruntung dari seratus koin?

Probability of Backtest Overfitting (PBO), diperkenalkan oleh Bailey, Borwein, López de Prado & Zhu (2017), menjawab tepat pertanyaan itu, dan ia melakukannya dengan sebuah angka yang salah dibaca hampir semua orang sekali lihat. Berikut kalimat paling penting dalam artikel ini, jadi bacalah dua kali:

Null PBO adalah 0.5, bukan 1. Sebuah pencarian dengan tanpa skill out-of-sample mencetak PBO ≈ 0.5. Setengah bukan berarti "setengah overfit" — setengah berarti sepenuhnya overfit, sebuah lemparan koin. Anda menginginkan PBO mendekati nol.

Itulah yang menjegal semua orang. Kita dilatih untuk membaca probabilitas terhadap null "ketiadaan," dan untuk overfitting insting kita berkata bacaan "tidak bersalah" adalah 0. Itu keliru. PBO adalah probabilitas bahwa konfigurasi yang Anda pilih sebagai terbaik in sample mendarat di separuh bawah dari lapangan out of sample. Jika pencarian Anda benar-benar tidak mempelajari apa pun yang men-generalisasi, pemenang in-sample, out of sample, sama mungkinnya berada di mana pun dalam peringkat — sehingga ia jatuh ke separuh bawah kira-kira separuh waktu. PBO ≈ 0.5 berarti prosedur seleksi Anda adalah lemparan koin. PBO ≈ 0 berarti pemenang in-sample secara andal tetap menjadi pemenang out of sample — seleksinya dapat dipercaya. Semua yang di bawah ini dibangun untuk mengonkretkan satu fakta kalibrasi itu, pada data di mana kita tahu ground truth-nya.

Rezim (200 konfigurasi, T = 1000, S = 16) Apa itu Sharpe in-sample pemenang Sharpe out-of-sample PBO Vonis
Ladang ber-edge nol (200 strategi noise iid) keberuntungan murni, tanpa edge di mana pun 1.98 0.06 0.476 overfit — lemparan koin
Edge yang ditanam (20 konfigurasi membawa Sharpe tahunan 2.38) skill sejati, robust 3.73 2.34 0.001 dapat dipercaya
Grid MA-crossover pada random walk murni (170 konfigurasi) fatamorgana yang menggoda 0.97 0.04 0.463 overfit — lemparan koin

Rasio Sharpe ditahunkan ×√252. Ketiga baris merata-ratakan Sharpe strategi terpilih atas 60 matriks Monte-Carlo — apel-ke-apel, sehingga grid yang overfit dinilai dengan cara yang sama seperti null dan edge yang ditanam. Pada dasar rata-rata ini, Sharpe in-sample terpilih dari grid (0.97) sebenarnya lebih rendah daripada 1.98 tergelembung milik null, Sharpe out-of-sample-nya sedikit positif 0.04, dan PBO-nya (0.463) berada tepat di bawah ½ — secara statistik tak terbedakan dari null. Angka-angka dramatis satu-matriks (Sharpe in-sample terbaik-dalam-grid sebesar 2.33 runtuh menjadi median out-of-sample −0.22, PBO 0.573) berasal dari satu seed random-walk representatif dan muncul, diberi label jelas, di Babak 4. Setiap angka dapat ditelusuri ke file hasil.

Tiga rezim, satu pelajaran. Pencarian tanpa edge duduk tepat pada garis lemparan koin 0.5, entah noise-nya iid (PBO 0.476) atau berdandan sebagai grid moving-average sungguhan (PBO 0.463) — keduanya secara statistik tak terbedakan, dan keduanya sama-sama mencelakakan. Edge sejati menjatuhkan PBO ke 0.001. Dirata-ratakan atas matriks, pemenang terpilih dari grid biasa-biasa saja — Sharpe in-sample 0.97, di bawah 1.98 tergelembung milik null — yang justru merupakan diagnosis jujurnya sendiri: pencarian tanpa edge terbaca sebagai null. Dramanya hidup di ekor. Pada satu matriks random-walk representatif (Babak 4) sel terbaik grid mencetak Sharpe in-sample 2.33 — pada dasarnya setara dengan 2.34 out-of-sample milik edge yang ditanam, sebuah hasil imbang mati — namun out of sample ia mendarat di separuh bawah kira-kira sesering di separuh atas. Kesenjangan antara backtest yang indah dan seleksi yang tak bernilai itu tak terlihat pada Sharpe pemenang itu sendiri dan hanya terlihat ketika Anda menilai prosedurnya. Itulah yang dilakukan PBO.

Babak 1 — Prosedur yang diadili: apa yang sebenarnya dilakukan CSCV

Matriks performa tinggi berisi seribu baris dan dua ratus kolom strategi yang diiris horizontal menjadi enam belas blok yang sama, dengan delapan blok dialirkan ke panel training dan delapan lainnya ke panel testing, satu kolom terbaik-in-sample disorot dan sebuah panah menelusuri ke mana kolom yang sama itu mendarat dalam peringkat out-of-sample

DSR bersifat parametrik: ia memodelkan distribusi Sharpe maksimum di bawah sebuah null dan mendeflasi signifikansi pemenang secara analitik. CSCV adalah jawaban non-parametrik untuk masalah selection-bias yang sama — alih-alih memodelkan maksimum, ia me-resample pemisahan train/test dengan setiap cara yang mungkin dan mengamati, secara empiris, apakah pemenang in-sample tetap menang. Tanpa asumsi distribusional, tanpa menghitung "trial efektif." Cukup: apakah pilihan itu men-generalisasi?

Mulai dengan bahan mentah. Anda melakukan backtest pada N = 200 konfigurasi dari satu kelas strategi selama T = 1000 observasi sinkron. Tumpuk seri return setiap konfigurasi menjadi sebuah kolom dan Anda mendapatkan matriks performa M berukuran T × N — 1,000 baris waktu, 200 kolom strategi. Ini adalah satu-satunya input yang dibutuhkan CSCV.

Sekarang konstruksinya, dalam empat langkah:

  1. Bagi waktu menjadi S = 16 blok disjoint dengan panjang sama (T/S baris masing-masing). Blok mempertahankan struktur waktu lokal — pilihan desain yang menjadi penting begitu return memiliki memori.
  2. Pilih setiap cara untuk menggunakan separuh blok sebagai training dan separuh sebagai testing. Dengan S = 16, itu adalah seluruh C(16, 8) = 12,870 cara untuk memilih 8 dari 16 blok sebagai training set; 8 lainnya menjadi test set. Dari sinilah "combinatorially symmetric" berasal: setiap pemisahan memiliki cerminnya (menukar train dan test), sehingga skema ini menggunakan data Anda secara simetris alih-alih satu potongan masa lalu→masa depan yang diistimewakan yang diberikan oleh satu walk-forward tunggal.
  3. Pada setiap pemisahan, ranking seluruh 200 konfigurasi berdasarkan Sharpe in-sample dan pilih pemenangnya n*. Kemudian temukan di mana konfigurasi n* yang sama itu ranking out of sample, pada 8 blok yang ditahan.
  4. Catat rank relatif out-of-sample milik pemenang dan ubah menjadi sebuah logit. PBO adalah pecahan dari 12,870 pemisahan di mana logit itu ≤ 0.

Enumerasinya kecil untuk ditulis:

from itertools import combinations

combos = list(combinations(range(S), S // 2))   # C(16, 8) = 12,870 splits

Untuk setiap pemisahan, misalkan rˉnc\bar r^{\,c}_{n^*} adalah rank out-of-sample dari pemenang in-sample di antara NN konfigurasi (rank 1 = terburuk, NN = terbaik). Normalisasikan menjadi rank relatif ωˉc(0,1)\bar\omega_c \in (0,1), ambil logit-nya λc\lambda_c, dan integralkan atas seluruh pemisahan:

ωˉc=rˉncN+1,λc=ln ⁣ωˉc1ωˉc,PBO=1#CScCS1{λc0}\bar\omega_c = \frac{\bar r^{\,c}_{n^*}}{N+1}, \qquad \lambda_c = \ln\!\frac{\bar\omega_c}{1 - \bar\omega_c}, \qquad \text{PBO} = \frac{1}{\#C_S}\sum_{c \,\in\, C_S} \mathbf{1}\{\lambda_c \le 0\}

Logit hanyalah penggaris yang praktis. λc>0\lambda_c > 0 berarti pemenang mendarat di separuh atas out of sample (rank relatif di atas ½) — konsistensi in-sample/out-of-sample, bagus. λc0\lambda_c \le 0 berarti ia mendarat pada atau di bawah median out-of-sample — pilihan in-sample gagal men-generalisasi pada pemisahan itu. PBO adalah pecahan dari pemisahan di mana pemenang in-sample gagal mengalahkan median out of sample. Seluruh matriks menentukannya: dengan M dan S tertentu, PBO bersifat deterministik — tanpa seed resampling, seluruh 12,870 pemisahan dienumerasi secara eksaustif.

Dalam kode, begitu Anda memiliki Sharpe in-sample dan out-of-sample dari setiap konfigurasi pada setiap pemisahan (matriks R_tr dan R_te, masing-masing 12,870 × 200), inti dari estimatornya adalah enam baris:

n_star  = R_tr.argmax(axis=1)                      # in-sample winner, per split
oos_sh  = R_te[rows, n_star]                        # that winner's OWN out-of-sample Sharpe
rank    = (R_te <= oos_sh[:, None]).sum(axis=1)     # its OOS rank among N configs, 1..N
omega   = np.clip(rank / (N + 1.0), 1e-6, 1 - 1e-6) # relative OOS rank in (0,1)
lambdas = np.log(omega / (1.0 - omega))             # logit

pbo = float(np.mean(lambdas <= 0.0))                # fraction of splits with lambda <= 0

Perhatikan apa yang tidak ada di sini: tanpa p-value, tanpa ambang batas pada Sharpe pemenang, tanpa model distribusi null. PBO tidak pernah bertanya apakah pemenangnya bagus. Ia bertanya apakah memilih yang terbaik in-sample adalah keputusan yang bertahan dari kontak dengan held-out data. Itu adalah properti dari pencarian Anda, bukan dari strategi Anda — tepatnya mengapa ia menangkap hal-hal yang tidak bisa ditangkap oleh statistik pemenang itu sendiri.

Babak 2 — Kalibrasi adalah seluruh pembuktian: null-nya adalah 0.5

Dial PBO horizontal yang membentang dari nol di sisi kiri hingga satu di sisi kanan dengan garis bahaya terang digambar tepat di setengah berlabel garis overfitting, sebuah koin yang berputar dan seimbang di titik tengah itu, serta batang Sharpe in-sample tinggi milik sebuah strategi ber-edge nol yang runtuh menjadi batang datar mendekati nol out of sample

Sebuah diagnostik yang tidak bisa Anda kalibrasi hanyalah rumor. Jadi sebelum mempercayai PBO pada apa pun yang nyata, patoklah dua titik akhir pada data di mana jawabannya sudah diketahui: sebuah ladang tanpa edge di mana pun, dan sebuah ladang dengan edge sejati. Jika PBO tidak mendarat mendekati 0.5 pada yang pertama dan mendekati 0 pada yang kedua, ia tidak bernilai.

Titik akhir null. Bangun M dari 200 kolom noise Normal yang independen, tanpa drift, ber-edge nol — Sharpe sejati tepat 0 untuk setiap konfigurasi — dan jalankan CSCV. Rata-ratakan atas 60 matriks semacam itu. Strategi terpilih (terbaik-in-sample) mencetak rata-rata Sharpe tahunan in-sample sebesar 1.98. Itu bukan angka kecil; itu adalah inflasi seleksi yang sama yang diukur artikel DSR — yang terbaik dari 200 kolom noise terlihat seperti strategi yang layak didanai. Out of sample, pemenang yang sama itu memberikan Sharpe tahunan sebesar 0.06. Ia mengembalikan hampir semuanya. Dan vonis atas prosedurnya:

PBOnull=0.476(±0.137)\text{PBO}_{\text{null}} = 0.476 \quad (\pm\, 0.137)

Itulah lemparan koin, terukur. Di seluruh 12,870 pemisahan, pemenang in-sample sama mungkinnya mendarat di bawah median out-of-sample seperti di atasnya — 0.476, sedikit di bawah ½, tak terbedakan dari 0.5 mengingat sebaran Monte-Carlo. Diagnostik pendampingnya sepakat: probabilitas bahwa Sharpe out-of-sample strategi terpilih itu negatif adalah 0.475 — pilih yang terbaik in-sample dari noise murni dan ia merugi out of sample kira-kira separuh waktu. Tidak ada skill dalam seleksi karena tidak ada skill untuk ditemukan, dan PBO melaporkan tepatnya itu: 0.5 adalah garis overfitting, dan noise murni duduk tepat di atasnya.

Mengapa 0.5 dan bukan 1? Karena di bawah null sejati, seluruh 200 kolom bersifat exchangeable — tarikan yang secara statistik dapat dipertukarkan dari proses noise yang sama. Pemenang in-sample istimewa hanya in sample; out of sample ia hanyalah kolom lain, sama mungkinnya ranking di mana pun. Jadi rank relatif out-of-sample-nya ωˉc\bar\omega_c bersifat uniform pada (0,1)(0,1), logit λc\lambda_c simetris di sekitar 0, dan pecahan dengan λc0\lambda_c \le 0 konvergen ke ½. PBO sebesar 1 akan lebih buruk daripada lemparan koin — itu akan berarti kesuksesan in-sample secara andal memprediksi kegagalan out-of-sample, yang membutuhkan mekanisme anti-persistensi aktif, bukan sekadar ketiadaan edge (lebih lanjut tentang ini di catatan kejujuran).

Titik akhir edge. Sekarang bangun sebuah ladang di mana 20 dari 200 konfigurasi membawa edge nyata yang ditanam — Sharpe per-observasi sebesar 0.15, yang jika ditahunkan menjadi 2.38 (turunan: 0.15×2522.380.15 \times \sqrt{252} \approx 2.38) — dan biarkan 180 sisanya sebagai noise. Jalankan CSCV yang identik. Ceritanya terbalik sepenuhnya:

Sharpe in-sample (tahunan) Sharpe out-of-sample (tahunan) PBO P(kerugian OOS)
Null (edge 0) 1.98 0.06 0.476 0.475
Edge yang ditanam (Sharpe 2.38) 3.73 2.34 0.001 0.0006

Pemenang edge-yang-ditanam mencetak Sharpe tahunan in-sample sebesar 3.73 — tergelembung oleh seleksi, seperti biasa — tetapi kali ini ia mempertahankan 2.34 out-of-sample, dan PBO runtuh menjadi 0.001. Di seluruh 12,870 pemisahan, pemenang in-sample pada dasarnya tidak pernah jatuh ke separuh bawah out of sample. Probabilitas kerugian out-of-sample turun menjadi 0.0006. Beginilah tampilan prosedur seleksi yang dapat dipercaya: dengan cara apa pun Anda memotong train melawan test, jenis konfigurasi yang sama tetap menang, karena ada efek nyata dan robust di sana untuk dikunci oleh pencarian. Kedua titik akhir — 0.476 pada noise, 0.001 pada edge sejati — adalah kalibrasinya. PBO berhasil.

Babak 3 — Termometer kontinu, bukan uji ya/tidak

Kurva termometer menurun di mana sumbu horizontal adalah kekuatan sebuah edge nyata yang ditanam dan sumbu vertikal adalah PBO, kurva jatuh mulus dari sekitar setengah pada edge nol menuju nol seiring edge bertambah kuat, dengan kurva cermin Sharpe out-of-sample strategi terpilih yang naik selangkah demi selangkah

Dua titik akhir membuktikan PBO bisa membedakan noise dari edge. Tetapi properti yang lebih dalam adalah ia melakukannya secara mulus. Sapukan edge yang ditanam dari tidak ada menjadi kuat dan PBO tidak melompat dari 0.5 ke 0 — ia meluncur turun sepanjang landaian monoton, dan Sharpe out-of-sample strategi terpilih naik menemuinya, langkah demi langkah:

Sharpe sejati yang ditanam (tahunan) PBO Sharpe OOS strategi terpilih (tahunan)
0.00 0.52 −0.05
0.48 0.44 0.19
0.95 0.21 0.81
1.59 0.03 1.65
2.38 0.001 2.48
3.17 0.00 3.29

Baca kedua kolom data itu bersamaan. Pada edge sejati nol, PBO adalah 0.52 dan strategi terpilih memperoleh −0.05 out of sample — lemparan koin lagi, dan pemenang yang merugi. Tambahkan sedikit bisikan edge (tahunan 0.48) dan PBO menurun ke 0.44. Pada Sharpe sejati tahunan 0.95 — edge yang sungguh sederhana dan masuk akal — PBO sudah 0.21 dan Sharpe out-of-sample sudah memanjat ke 0.81. Pada 1.59 angkanya 0.03; pada 2.38, 0.001; pada 3.17, secara efektif 0.00, dengan strategi terpilih membawa 3.29 out of sample. PBO jatuh secara monoton seiring edge nyata bertambah, dan performa out-of-sample pemenang naik selangkah demi selangkah — keduanya adalah fakta yang sama dilihat dari dua sisi.

Inilah properti yang membuat PBO dapat digunakan dalam praktik: ia adalah termometer overfitting kontinu, bukan alarm biner. PBO sebesar 0.21 bukan hanya mengatakan "tidak overfit" — ia mengatakan seleksi Anda memiliki skill out-of-sample parsial: pemenang in-sample mengalahkan median out-of-sample 79% dari waktu, tetapi edge-nya cukup tipis sehingga seperlima dari pemisahan masih mengubur pemenang itu. Anda dapat mengamati angka itu bergerak saat Anda memperkuat sinyal, mempersempit universe, atau memangkas grid Anda, dan mengetahui arah mana yang jujur. Rule of thumb dari paper itu sendiri — tolak ketika PBO melebihi 0.05 — muncul secara alami dari landaian ini: di bawah Sharpe tahunan ~1.5 pencarian belum melewatinya; di atas ~1.6 sudah. Tetapi landaian itu sendiri lebih informatif daripada satu cutoff tunggal mana pun, karena ia memberitahu Anda bukan hanya apakah Anda overfit tetapi seberapa dekat dengan lemparan koin Anda berada.

Babak 4 — Jebakan realistis: backtest indah, disertifikasi tak bernilai

Grid parameter moving-average crossover yang berpendar pada random walk murni menunjukkan satu sel terang yang menggoda pada Sharpe in-sample 2.33, di sebelah sebaran hasil out-of-sample pemenang yang sama berpusat di bawah nol, dengan gauge PBO tertancap dekat setengah dan sebuah keterangan bertuliskan disertifikasi tak bernilai

Null noise-iid itu jujur tetapi mudah disingkirkan — "strategi saya bukan kolom Normal acak." Jadi inilah jebakan dalam bentuk yang benar-benar dijalani para praktisi. Ambil sebuah moving-average crossover, aturan yang paling banyak di-backtest di dunia: long ketika MA cepat menyilang di atas MA lambat, flat jika tidak. Grid-kan itu — 10 panjang fast ×\times 17 panjang slow, mempertahankan pasangan fast-di-bawah-slow yang valid, untuk K = 170 konfigurasi. Sekarang jalankan grid itu pada sebuah seri dengan edge nol yang terbukti: sebuah random walk murni. Tidak ada apa pun untuk ditemukan. Crossover tidak bisa memprediksi random walk. Kita tahu jawabannya adalah "tidak ada strategi."

Grid itu tidak tahu itu. Ia menyerahkan seorang pemenang kepada Anda, dan pemenangnya menggoda:

Diagnostik (satu matriks random-walk representatif, seed 3000, K = 170, S = 16) Nilai
Sharpe in-sample terbaik (tahunan) 2.33
PBO 0.573
Median Sharpe out-of-sample (tahunan) −0.22
Probabilitas kerugian out-of-sample 0.63
Slope degradasi out-of-sample-vs-in-sample −0.92
Median logit λ\lambda −0.25

Ini adalah satu matriks berseed. Dirata-ratakan atas 60 matriks random-walk independen, diagnostik yang sama ini terbaca PBO 0.463 ± 0.223, Sharpe in-sample terpilih sebesar 0.97 meluruh menjadi 0.04, dan P(kerugian OOS) 0.47 — secara statistik tak terbedakan dari null. Angka 0.573 milik seed 3000 adalah satu tarikan di sisi tinggi dari pita null ~0.5 — noise sampling di sekitar nilai lemparan-koin, jauh di dalam sebaran matriks-ke-matriks ±0.223 — dan ceritanya identik dengan cara mana pun.

Sharpe in-sample tahunan sebesar 2.33 pada sebuah moving-average crossover adalah jenis hasil yang berujung di dalam pitch deck. Angka itu pada dasarnya setara dengan Sharpe out-of-sample dari edge-yang-ditanam-sungguhan kita dari Babak 2 (2.34 — hasil imbang mati). Jika Anda berhenti pada backtest, Anda akan mendanainya. CSCV menolak. PBO adalah lemparan koin di sini: 0.463 dirata-ratakan atas 60 matriks, 0.573 pada matriks khusus ini — keduanya mengatakan pencarian ini tidak memiliki skill out-of-sample. Jangan membaca 0.573 secara berlebihan: angka itu berada 0.073 di atas ½, noise sampling di sekitar null 0.5 dan jauh di dalam pita matriks-ke-matriks ±0.223; PBO yang sungguh-sungguh di atas 0.5 — di mana kesuksesan in-sample akan secara aktif memprediksi kegagalan out-of-sample — membutuhkan struktur anti-persistensi atau biaya-trading yang tidak dikandung random walk ini (lihat catatan kejujuran). Pada matriks ini, median logit sebesar −0.25 menempatkan pemenang in-sample median pada rank relatif out-of-sample sekitar 0.44 (turunan: 1/(1+e0.25)1/(1+e^{0.25})) — kira-kira ke-75 dari 170 (turunan: 0.44×1710.44 \times 171), tepat di bawah pertengahan lapangan yang seharusnya ia pimpin. Median Sharpe out-of-sample dari pemenang itu adalah −0.22negatif — dan ia mengalami kerugian out-of-sample 63% dari waktu. Sharpe backtest 2.33 yang ekspektasi out-of-sample-nya adalah kerugian: itulah definisi fatamorgana.

Slope degradasi sebesar −0.92 adalah pisau kedua. Regresikan Sharpe out-of-sample pemenang terpilih pada setiap pemisahan terhadap Sharpe in-sample-nya; slope-nya negatif tajam — semakin bagus sebuah konfigurasi terlihat in sample, semakin buruk performanya out of sample. Ini adalah sidik jari overfitting pada sebuah seri yang memiliki memori: crossover mengunci pada pola transien di blok training yang, karena merupakan artefak dari random walk, berbalik arah out of sample. Satu kehalusan yang layak dinyatakan agar Anda tidak membaca slope secara berlebihan: slope negatif bukan dengan sendirinya sebuah vonis. Bahkan rezim edge-sejati dari Babak 2 memiliki slope degradasi negatif (−0.52) — regresi ke mean selalu menarik maksimum terpilih turun sedikit out of sample. Yang membedakan fatamorgana dari edge sejati bukanlah fakta bahwa slope-nya negatif melainkan di mana pemenang mendarat: edge sejati tetap dekat puncak (PBO 0.001) sambil mengembalikan sedikit; fatamorgana duduk di garis lemparan-koin (PBO 0.463 rata-rata, 0.573 pada seed ini), pemenangnya tidak lebih mungkin berada di atas median out-of-sample daripada di bawahnya. Baca slope untuk mengetahui seberapa banyak penyusutan; baca PBO untuk mengetahui apakah itu masih men-generalisasi. Fatamorgana gagal pada keduanya.

Inilah mengapa PBO memperoleh tempatnya di sebelah backtest mentah. Sharpe in-sample 2.33 bukanlah kebohongan — strategi itu benar-benar memperolehnya, in sample, pada random walk itu. Itu adalah seleksi, berdandan dalam aturan yang familiar pada grid yang terlihat realistis, dan berapa lama pun Anda menatap kurva ekuitas tidak akan mengungkapnya. Hanya menilai prosedurnya yang bisa.

Babak 5 — PBO dan DSR: dua pertanyaan jujur, satu plateau

Dua instrumen pengukuran komplementer diarahkan pada pencarian parameter yang sama dari sudut berbeda, satu berlabel PBO menanyakan apakah prosedur seleksi overfit dengan membaca seluruh resampling train-test, yang lain berlabel DSR menanyakan apakah Sharpe yang satu ini melampaui keberuntungan dengan mendeflasi satu batang pemenang

PBO dan Deflated Sharpe Ratio adalah dua belahan dari pemeriksaan kejujuran yang sama, dan keduanya tidak redundan — mereka menginterogasi objek yang berbeda:

Deflated Sharpe Ratio (DSR) Probability of Backtest Overfitting (PBO)
Objek yang diadili pemenang prosedur seleksi
Pertanyaan apakah Sharpe ini melampaui apa yang bisa dibeli keberuntungan di seluruh N trial? apakah memilih yang terbaik in-sample men-generalisasi out of sample?
Metode parametrik — mendeflasi ambang signifikansi non-parametrik — me-resample seluruh C(S, S/2) pemisahan train/test
Nilai null DSR ≈ 0.5 (pemenang persis menyamai plafon noise) PBO ≈ 0.5 (pemenang adalah lemparan koin out of sample)
Yang Anda inginkan DSR mendekati 1 PBO mendekati 0
Membutuhkan jumlah trial N? ya — dan grid berkorelasi membuat N ambigu tidak — resampling pemisahan menangani dependensi secara native

Keduanya bahkan bisa tidak sepakat, dan ketidaksepakatan itu bersifat diagnostik. DSR bisa dikelabui oleh grid yang berkorelasi menjadi over-deflate (jebakan yang menjadi keseluruhan pokok babak terakhir artikel DSR — 640 sel berkorelasi bukanlah 640 trial independen, dan memasukkan jumlah mentah menginflasi plafon noise secara berlebihan). PBO tidak pernah menghitung trial; ia me-resample matriks return sesungguhnya, sehingga korelasi grid sudah terbakukan ke dalam pemisahan secara gratis. Sebaliknya, PBO memberitahu Anda bahwa prosedurnya men-generalisasi tetapi tidak apakah pemenang melewati hurdle rate — sebuah pencarian bisa memiliki PBO rendah dan tetap memilih sesuatu yang Sharpe out-of-sample-nya, meski secara andal di atas median lapangan, terlalu kecil untuk ditradingkan. DSR memberi harga pada pemenang; PBO memberi harga pada prosedur. Jalankan keduanya.

Dua permukaan grid-parameter tiga dimensi berdampingan: di sebelah kiri sebuah plateau lebar dan mulus dari konfigurasi-konfigurasi tetangga yang baik yang disepakati setiap pemisahan train-test sehingga menghasilkan PBO rendah, di sebelah kanan sebuah spike tunggal yang kesepian dikelilingi noise datar yang diperselisihkan pemisahan-pemisahan berbeda sehingga menghasilkan PBO mendekati setengah

Ada sebuah intuisi geometris di balik semua ini, dan itulah hal paling berguna untuk dibawa pulang. Edge sejati adalah plateau; overfitting adalah spike. Ketika efek nyata menggerakkan grid Anda, konfigurasi-konfigurasi yang baik berkumpul — fast=3/slow=55 bekerja, begitu pula tetangga-tetangganya, karena semuanya sama-sama menyampel sinyal yang mendasarinya. Plateau itu robust terhadap resampling: blok mana pun dari 8 dari 16 yang Anda gunakan untuk training, pemenang in-sample ditarik dari region luas yang sama, dan region itu tetap berada di puncak out of sample. Banyak pemisahan sepakat → PBO rendah. Ketika overfitting menggerakkan grid Anda, "pemenang" adalah spike yang kesepian — satu sel yang kebetulan cocok dengan noise blok training, dikelilingi tetangga-tetangga yang biasa saja. Spike itu rapuh: pemisahan train/test yang berbeda menobatkan spike kesepian yang berbeda pula, dan tak satu pun dari mereka bertahan hingga test set. Pemisahan tidak sepakat → PBO ≈ 0.5. Ini adalah pelajaran yang sama yang dicapai studi plateau-analysis kami dari sisi peta-parameter; PBO, pada dasarnya, adalah distinksi plateau-vs-spike yang diukur di seluruh setiap resampling simetris dari data Anda sekaligus.

Ini juga menjelaskan mengapa CSCV mengalahkan pemisahan walk-forward default para praktisi. Walk-forward memberi Anda satu potongan masa lalu→masa depan dan satu vonis; CSCV memberi Anda 12,870 potongan simetris dan bertanya apakah pemenang bertahan dari semuanya. Sebuah spike bisa bertahan dari satu potongan sembarang karena keberuntungan; ia tidak bisa bertahan dari 12,870. (Combinatorial Purged Cross-Validation milik López de Prado, CPCV, memperluas tepatnya gagasan ini dengan purging dan embargoing untuk membunuh kebocoran-label yang bisa diderita resampling biasa di bawah dependensi serial — tangga alami berikutnya begitu label Anda saling tumpang tindih.) Peringatan struktural yang sama membentang di seluruh seri: metrik yang Anda optimalkan secara diam-diam memilih strategi Anda (desain objective-function), kebocoran satu-bar membuat Sharpe 15 dari noise (look-ahead bias), pencarian multiple-testing membuat Sharpe 1.63 dari noise (DSR) — dan di sini, prosedur seleksi yang di-resample membuat pemenang tak bernilai yang hanya bisa diungkap oleh PBO.

Catatan kejujuran

Empat caveat, dinyatakan secara terus terang, karena sebuah studi terkontrol memperoleh kesimpulannya hanya dengan menyebutkan batasan-batasannya.

  • Proses penghasil-data bersifat sintetis — dengan sengaja. Noise Normal iid untuk null, ladang Sharpe-yang-ditanam untuk sapuan edge, dan grid moving-average pada random walk murni untuk jebakan. Tak satu pun adalah klaim tentang realisme pasar; masing-masing dipilih untuk ground truth terkontrol. Kita hanya bisa membuktikan bahwa PBO terbaca 0.5 pada "tanpa skill" dan 0 pada "skill nyata" dengan menghasilkan data di mana kita tahu mana yang mana. Return nyata bersifat fat-tailed, terautokorelasi, dan non-stasioner; hasil akhir (deliverable) di sini adalah diagnostik yang terkalibrasi, bukan sebuah strategi.
  • Null PBO adalah 0.5, dan itu adalah fitur, bukan keanehan. Nyatakan itu setiap kali Anda melaporkan sebuah PBO, karena tanpa itu separuh pembaca Anda akan memperlakukan 0.5 sebagai "cukup aman." Pencarian tanpa-skill-out-of-sample duduk di 0.5; edge sejati mendorongnya ke 0. Tidak ada bacaan "tidak bersalah" untuk PBO ≈ 0.5 — itu adalah vonis fully-overfit.
  • PBO > 0.5 adalah region "perverse" yang tidak kami paksakan. PBO yang secara sistematis di atas 0.5 berarti kesuksesan in-sample secara aktif memprediksi kegagalan out-of-sample — konfigurasi-konfigurasi terburuk-IS menjadi terbaik-OOS. Itu membutuhkan struktur anti-persistensi atau biaya-trading, bukan sekadar ketiadaan edge. Pencarian-pencarian overfit kami duduk pada ≈ 0.5 (0.476 untuk noise iid; 0.463 rata-rata untuk grid MA; 0.573 pada satu seed sisi-tinggi, di dalam pita Monte-Carlo ±0.14–0.22 di seluruh 60 matriks), yang sudah berarti "tanpa skill out-of-sample." Kami tidak membuat region perverse itu; kami hanya menunjukkan bahwa overfitting mendaratkan Anda tepat pada garis lemparan-koin, yang sudah cukup mencelakakan.
  • PBO bersifat deterministik dengan matriks tertentu; hanya matriksnya yang acak. Untuk M dan S = 16 tetap, seluruh C(16, 8) = 12,870 pemisahan dienumerasi secara eksaustif — tidak ada seed bootstrap dan tidak ada varians sampling dalam PBO itu sendiri. Sebaran yang kami laporkan (±0.137 pada null, ±0.223 pada grid MA) adalah varians di seluruh 60 matriks Monte-Carlo, bukan di dalam estimatornya. Sharpe pada masing-masing sisi diestimasi pada sekitar 500 observasi — 496 setelah truncation blok CSCV, karena T = 1000 dibagi menjadi 16 blok sama besar menyisakan 992 baris yang bisa digunakan, dipisah menjadi dua separuh masing-masing 496; karena Sharpe bersifat order-invariant, urutan baris dalam sebuah train atau test set tidak penting (akan penting, untuk metrik path-dependent seperti rasio return/drawdown).

Poin-Poin Kunci

  1. PBO menilai prosedur seleksi, bukan pemenang — dan null-nya adalah 0.5. Ia adalah probabilitas bahwa konfigurasi yang Anda pilih sebagai terbaik in sample mendarat di separuh bawah out of sample. PBO ≈ 0.5 adalah lemparan koin (sepenuhnya overfit); PBO ≈ 0 adalah seleksi yang dapat dipercaya. Anda menginginkannya mendekati nol, dan Anda harus menyatakannya dengan lantang, karena 0.5 terbaca "aman" bagi mata yang tidak terlatih dan berarti kebalikannya persis.
  2. Kalibrasi membuktikan itu berhasil. Pada 200 strategi iid ber-edge nol, Sharpe tahunan in-sample terbaik sebesar 1.98 runtuh menjadi 0.06 out of sample dan PBO = 0.476 — noise duduk di garis lemparan-koin, merugi out of sample 47.5% dari waktu. Tanamkan edge sejati (Sharpe tahunan 2.38) dan angka in-sample 3.73 bertahan menjadi 2.34 out-of-sample sementara PBO turun ke 0.001. Dua titik akhir, satu diagnostik terkalibrasi.
  3. PBO adalah termometer kontinu. Sapukan edge yang ditanam dan PBO jatuh secara monoton — 0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00 pada Sharpe sejati tahunan 0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17 — dengan Sharpe out-of-sample strategi terpilih naik selangkah demi selangkah (−0.05 hingga 3.29). Ia mengukur seberapa dekat dengan lemparan koin Anda berada, bukan sekadar ya/tidak.
  4. Jebakan realistis adalah keseluruhan intinya. Grid moving-average 170-konfigurasi pada random walk murni merata-ratakan Sharpe in-sample terpilih hanya 0.97 yang meluruh menjadi 0.04, dengan PBO 0.463 — secara statistik tak terbedakan dari null, pencarian tanpa-edge yang terbaca sebagai null. Pada satu matriks representatif fatamorgananya jelas: Sharpe in-sample terbaik sebesar 2.33 (angka kelas pitch-deck), median Sharpe out-of-sample sebesar −0.22, peluang 63% mengalami kerugian out-of-sample, PBO 0.573, dan slope degradasi tajam sebesar −0.92. Sebuah backtest yang indah dengan ekspektasi out-of-sample negatif, tak terlihat oleh setiap statistik yang dicetak di sebelah pemenang dan hanya terlihat ketika Anda menilai prosedurnya.
  5. Pasangkan PBO dengan Deflated Sharpe Ratio. DSR memberi harga pada pemenang (apakah Sharpe ini melampaui keberuntungan, mengingat N trial?); PBO memberi harga pada prosedur (apakah seleksinya men-generalisasi?). DSR membutuhkan jumlah trial dan bisa dikelabui grid berkorelasi; PBO me-resample matriks dan tidak pernah menghitung trial. Edge sejati adalah plateau lebar yang disepakati banyak pemisahan (PBO rendah); spike in-sample yang kesepian adalah overfit (pemisahan tidak sepakat, PBO ≈ 0.5). Jalankan keduanya, dan baca plateau-nya.

Pemenang sebuah pencarian bersalah sampai terbukti tidak bersalah — dan PBO memeriksa-silang pencarian itu sendiri, bukan alibi yang diserahkannya kepada Anda. Ia mengabaikan seberapa bagus pemenang terlihat in sample dan hanya bertanya apakah memilihnya adalah keputusan yang bertahan dari dipotong ulang 12,870 cara. Ketika ia tidak bertahan — ketika Sharpe 2.33 Anda yang indah ternyata mendarat di separuh bawah out of sample kira-kira sesering tidak — Anda belum menemukan sebuah strategi. Anda telah menemukan koin paling beruntung, dan PBO adalah angka yang menangkapnya sedang dilempar.

Eksperimen lengkapnya — harness kalibrasi-null, sapuan termometer edge-yang-ditanam, jebakan grid random-walk, dan setiap angka dalam artikel ini yang dapat dibangkitkan ulang dari satu skrip deterministik — ada di paper pendamping di pbo-search.marketmaker.cc, dengan kode dan data di github.com/suenot/pbo-search.

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.