← Makalelere geri dön
July 2, 2026
5 dakikalık okuma

Backtest Aşırı Uyum Olasılığı: Aramanız Yazı Turayı Yendi mi?

Backtest Aşırı Uyum Olasılığı: Aramanız Yazı Turayı Yendi mi?
#algotrading
#backtest
#aşırı uyum
#çapraz-doğrulama
#pbo
#sharpe
#doğrulama
🎯
Part 5 of 7 · Collection
Backtesting Without Fooling Yourself

"Yanılsamasız Backtestler" serisinin bir parçası.

📄 Bu makale bir araştırma makalesine dönüştü. Aşağıdaki her sayı, kontrollü bir referans gerçeklik kuran — sıfır-avantaj aramaları, yerleştirilmiş-avantaj aramaları ve bir rastgele yürüyüş üzerinde gerçek bir hareketli-ortalama parametre ızgarası — ve ardından buna karşı Backtest Aşırı Uyum Olasılığı'nı tahmin etmek için Kombinatoryal Simetrik Çapraz Doğrulama'yı (CSCV) çalıştıran, seçim prosedürünün ne kadar iyi genelleştiğini doğrudan ölçen tek bir deterministik betikten geliyor. Makaleyi çevrimiçi olarak (interaktif sürüm + PDF) pbo-search.marketmaker.cc adresinde, kod ve veriyi ise github.com/suenot/pbo-search adresinde okuyabilirsiniz.

Deflate Edilmiş Sharpe Oranı, kazananınızı yargılamıştı: N konfigürasyon aradığınıza göre, bu tek Sharpe, şansın satın alabileceğinin ötesinde mi? Bu makale başka bir şeyi yargılıyor — seçme eylemini. Bir ızgara çalıştırdınız, en iyi hücreyi tuttunuz, devam ettiniz. Ama seçimin kendisi güvenilir miydi? Tüm örnek-içi/örnek-dışı bölünmeyi farklı bir şekilde yeniden çalıştırsaydınız, aynı konfigürasyon yine en üstte mi çıkardı — yoksa siz sadece yüz yazı-turadan en şanslısını mı taçlandırdınız?

Bailey, Borwein, López de Prado & Zhu (2017) tarafından tanıtılan Backtest Aşırı Uyum Olasılığı (PBO), tam olarak bu soruyu yanıtlıyor ve bunu çoğu insanın ilk bakışta yanlış okuduğu bir sayıyla yapıyor. İşte bu makaledeki tek en önemli cümle, bu yüzden iki kere okuyun:

PBO'nun null'u 0.5'tir, 1 değil. Örnek-dışı becerisi olmayan bir arama PBO ≈ 0.5 puan alır. Yarım, "yarı aşırı uyum" değildir — yarım, tamamen aşırı uyumdur, bir yazı-tura. PBO'nun sıfıra yakın olmasını istersiniz.

Bu herkesi tökezletiyor. Olasılıkları "hiçlik" null'una karşı okumaya eğitildik ve aşırı uyum için içgüdümüz "masum" okumanın 0 olduğunu söylüyor. Değil. PBO, örnek-içinde en iyi olarak seçtiğiniz konfigürasyonun örnek-dışında alanın alt yarısına düşme olasılığıdır. Aramanız gerçekten genelleşen hiçbir şey öğrenmediyse, örnek-içi kazanan, örnek-dışında sıralamada eşit olasılıkla herhangi bir yerde olabilir — bu yüzden zamanın yaklaşık yarısında alt yarıya düşer. PBO ≈ 0.5, seçim prosedürünüzün bir yazı-tura olduğu anlamına gelir. PBO ≈ 0, örnek-içi kazananın örnek-dışında güvenilir bir şekilde kazanan kalmaya devam ettiği anlamına gelir — seçim güvenilirdir. Aşağıdaki her şey, bu tek kalibrasyon gerçeğini, gerçeği bildiğimiz veriler üzerinde somutlaştırmak için kurulmuştur.

Rejim (200 konfig, T = 1000, S = 16) Ne olduğu Kazananın örnek-içi Sharpe'ı Örnek-dışı Sharpe PBO Yargı
Sıfır-avantajlı alan (200 iid gürültü stratejisi) saf şans, hiçbir yerde avantaj yok 1.98 0.06 0.476 aşırı uyum — bir yazı-tura
Yerleştirilmiş avantaj (20 konfig yıllıklandırılmış Sharpe 2.38 taşıyor) gerçek, sağlam beceri 3.73 2.34 0.001 güvenilir
Saf bir rastgele yürüyüş üzerinde MA-kesişim ızgarası (170 konfig) ayartıcı bir yanılsama 0.97 0.04 0.463 aşırı uyum — bir yazı-tura

Sharpe oranları ×√252 ile yıllıklandırılmıştır. Üç satırın tamamı seçilen stratejinin Sharpe'ını 60 Monte-Carlo matrisi üzerinden ortalıyor — elma elmayla, böylece aşırı uyumlu ızgara, null ve yerleştirilmiş avantajla aynı şekilde puanlanıyor. Bu ortalanmış zeminde ızgaranın seçilen örnek-içi Sharpe'ı (0.97), null'un şişirilmiş 1.98'inden aslında daha düşük, örnek-dışı Sharpe'ı hafifçe pozitif 0.04 ve PBO'su (0.463) tam olarak ½'nin altında oturuyor — null'dan istatistiksel olarak ayırt edilemez. Dramatik tek-matris sayıları (ızgara-içi en iyi örnek-içi Sharpe'ın 2.33'ten medyan örnek-dışı −0.22'ye çökmesi, PBO 0.573) temsili bir rastgele-yürüyüş seed'ine ait ve açıkça etiketlenmiş şekilde Perde 4'te görünüyor. Her sayı sonuç dosyasına kadar izlenebilir.

Üç rejim, bir ders. Avantajsız bir arama, gürültü iid olsun (PBO 0.476) ya da gerçek bir hareketli-ortalama ızgarası kılığına girsin (PBO 0.463), 0.5 yazı-tura çizgisinde oturur — ikisi istatistiksel olarak ayırt edilemez ve ikisi de mahkum edici. Gerçek bir avantaj PBO'yu 0.001'e düşürür. Matrisler üzerinden ortalandığında, ızgaranın seçilen kazananı sıradandır — 0.97'lik bir örnek-içi Sharpe, null'un şişirilmiş 1.98'inin altında — ki bu, kendisi dürüst teşhistir: avantajsız bir arama null gibi okunur. Drama kuyrukta yaşıyor. Bir temsili rastgele-yürüyüş matrisinde (Perde 4) ızgaranın en iyi hücresi 2.33'lük bir örnek-içi Sharpe kaydediyor — yerleştirilmiş avantajın örnek-dışı 2.34'üne esasen eşit, baş başa bir yarış — yine de örnek-dışında alt yarıya, üst yarıya düştüğü kadar sık düşüyor. Muhteşem bir backtest ile değersiz bir seçim arasındaki bu boşluk, kazananın kendi Sharpe'ında görünmezdir ve yalnızca prosedürü puanladığınızda görünür olur. PBO'nun yaptığı şey budur.

Perde 1 — Yargılanan prosedür: CSCV gerçekte ne yapar

Bin satır ve iki yüz strateji sütunundan oluşan uzun bir performans matrisinin yatay olarak on altı eşit bloğa dilimlenmesi, sekiz bloğun bir eğitim paneline sekiz bloğun bir test paneline yönlendirilmesi, tek bir örnek-içi-en-iyi sütunun vurgulanması ve aynı sütunun örnek-dışı sıralamada nereye düştüğünü izleyen bir ok

DSR parametriktir: bir null altında maksimum Sharpe'ın dağılımını modeller ve kazananın anlamlılığını analitik olarak deflate eder. CSCV, aynı seçim-yanlılığı problemine parametrik-olmayan bir cevaptır — maksimumu modellemek yerine, eğitim/test bölünmesini yapabildiği her şekilde yeniden örnekler ve örnek-içi kazananın kazanmaya devam edip etmediğini ampirik olarak izler. Hiçbir dağılım varsayımı yok, hiçbir "etkin deneme" sayımı yok. Sadece: seçim genelleşiyor mu?

Ham malzemeyle başlayın. Bir strateji sınıfının N = 200 konfigürasyonunu T = 1000 eşzamanlı gözlem üzerinde backtest ettiniz. Her konfigürasyonun getiri serisini bir sütun halinde istifleyin ve bir T × N performans matrisi M elde edin — 1,000 zaman satırı, 200 strateji sütunu. CSCV'nin ihtiyaç duyduğu tek girdi bu.

Şimdi kuruluş, dört hamlede:

  1. Zamanı eşit uzunlukta (her biri T/S satır) S = 16 ayrık bloğa bölün. Bloklar yerel zaman yapısını korur — getirilerin hafızası olduğu anda önem kazanan bir tasarım seçimi.
  2. Blokların yarısını eğitim, yarısını test için kullanmanın her yolunu seçin. S = 16 ile bu, eğitim seti olarak 16 bloğun 8'ini seçmenin tüm C(16, 8) = 12,870 yoludur; diğer 8'i test setidir. "Kombinatoryal simetrik" ifadesi buradan geliyor: her bölünmenin bir aynası vardır (eğitim ve testi değiştirin), böylece şema, tek bir ileri-yürüyüşün (walk-forward) size verdiği ayrıcalıklı tek geçmiş→gelecek kesimi yerine verinizi simetrik olarak kullanır.
  3. Her bölünmede, 200 konfigürasyonun tamamını örnek-içi Sharpe'a göre sıralayın ve kazanan n*'i seçin. Ardından aynı n* konfigürasyonunun örnek-dışında, tutulan 8 blokta nerede sıralandığını bulun.
  4. Kazananın göreli örnek-dışı sıralamasını kaydedin ve bunu bir logit'e dönüştürün. PBO, 12,870 bölünmenin bu logit'in ≤ 0 olduğu kesridir.

Numaralandırmayı yazmak küçük bir iştir:

from itertools import combinations

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

Her bölünme için, rˉnc\bar r^{\,c}_{n^*}'i, NN konfigürasyon arasında örnek-içi kazananın örnek-dışı sıralaması olarak tanımlayın (sıralama 1 = en kötü, NN = en iyi). Bunu göreli bir sıralamaya ωˉc(0,1)\bar\omega_c \in (0,1) normalize edin, logit'ini λc\lambda_c alın ve bölünmeler üzerinden entegre edin:

ωˉ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 sadece uygun bir cetveldir. λc>0\lambda_c > 0, kazananın örnek-dışında üst yarıya düştüğü anlamına gelir (göreli sıralama ½'nin üzerinde) — örnek-içi/örnek-dışı tutarlılık, iyi. λc0\lambda_c \le 0, örnek-dışı medyanda veya altında düştüğü anlamına gelir — örnek-içi seçim o bölünmede genelleşmemedi. PBO, örnek-içi kazananın örnek-dışında medyanı geçmeyi başaramadığı bölünmelerin kesridir. Bunu tüm matris belirler: M ve S verildiğinde PBO deterministiktir — yeniden örnekleme seed'i yoktur, 12,870 bölünmenin tamamı kapsamlı biçimde numaralandırılır.

Kodda, her bölünmede her konfigürasyonun örnek-içi ve örnek-dışı Sharpe'ına sahip olduğunuzda (matrisler R_tr ve R_te, her biri 12,870 × 200), tahmincinin özü altı satırdır:

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

Burada olmayana dikkat edin: p-değeri yok, kazananın Sharpe'ı üzerinde eşik yok, null dağılımının modeli yok. PBO hiçbir zaman kazananın iyi olup olmadığını sormaz. Örnek-içi en iyiyi seçmenin, tutulan verilerle temas ettikten sonra hayatta kalan bir karar olup olmadığını sorar. Bu, stratejinizin değil, aramanızın bir özelliğidir — ki bu tam olarak kazananın kendi istatistiklerinin yakalayamadığı şeyleri yakalamasının nedenidir.

Perde 2 — Kalibrasyon argümanın tamamıdır: null 0.5'tir

Solda sıfırdan sağda bire uzanan, tam olarak yarıya çizilmiş ve aşırı-uyum çizgisi olarak etiketlenmiş parlak bir tehlike çizgisine, bu orta noktada dengede duran dönen bir madeni paraya ve sıfır-avantajlı bir stratejinin yüksek örnek-içi Sharpe çubuğunun örnek-dışında düz, sıfıra yakın bir çubuğa çökmesine sahip yatay bir PBO kadranı

Kalibre edemediğiniz bir teşhis bir söylentidir. O yüzden PBO'ya gerçek herhangi bir şey üzerinde güvenmeden önce, cevabın bilindiği veriler üzerinde iki uç noktayı sabitleyin: hiçbir yerde avantaj olmayan bir alan ve gerçek bir avantaja sahip bir alan. PBO ilkinde 0.5'e, ikincisinde 0'a yakın düşmüyorsa, değersizdir.

Null uç noktası. Bağımsız, sıfır-sürüklenmeli, sıfır-avantajlı Normal gürültünün 200 sütunundan M'yi kurun — her konfigürasyon için gerçek Sharpe tam olarak 0 — ve CSCV'yi çalıştırın. 60 böyle matris üzerinden ortalayın. Seçilen (örnek-içi-en-iyi) strateji, ortalama 1.98'lik bir örnek-içi yıllıklandırılmış Sharpe kaydediyor. Bu küçük bir sayı değil; DSR makalesinin ölçtüğü aynı seçim şişmesidir — 200 gürültü sütununun en iyisi, fon sağlanabilir bir strateji gibi görünüyor. Örnek-dışında, aynı kazanan 0.06'lık bir yıllıklandırılmış Sharpe veriyor. Esasen her şeyi geri verdi. Ve prosedür üzerindeki yargı:

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

İşte ölçülmüş yazı-tura bu. 12,870 bölünme boyunca, örnek-içi kazanan örnek-dışı medyanın altına düşme olasılığı kadar üstüne düşme olasılığına da sahip — 0.476, ½'nin biraz altında, Monte-Carlo yayılımı göz önüne alındığında 0.5'ten ayırt edilemez. Yardımcı teşhis buna katılıyor: seçilen stratejinin örnek-dışı Sharpe'ının negatif olma olasılığı 0.475 — saf gürültüden örnek-içi en iyiyi seçin ve zamanın yaklaşık yarısında örnek-dışında para kaybediyor. Seçimde beceri yok çünkü bulunacak beceri yok ve PBO tam olarak bunu bildiriyor: 0.5 aşırı-uyum çizgisidir ve saf gürültü onun üzerinde oturur.

Neden 1 değil de 0.5? Çünkü gerçek bir null altında 200 sütunun tamamı değiştirilebilir — aynı gürültü sürecinden istatistiksel olarak birbirinin yerine geçebilir çekilişler. Örnek-içi kazanan yalnızca örnek-içinde özeldir; örnek-dışında sadece başka bir sütundur, herhangi bir yerde sıralanma olasılığı eşittir. Bu yüzden göreli örnek-dışı sıralaması ωˉc\bar\omega_c, (0,1)(0,1) üzerinde tekdüzedir, logit λc\lambda_c 0 etrafında simetriktir ve λc0\lambda_c \le 0 olan kesir ½'ye yakınsar. 1'lik bir PBO, bir yazı-turadan daha kötü olurdu — örnek-içi başarının örnek-dışı başarısızlığı güvenilir bir şekilde öngördüğü anlamına gelirdi, ki bu, salt avantaj yokluğu değil, aktif bir anti-kalıcılık mekanizması gerektirir (bununla ilgili daha fazlası dürüstlük notlarında).

Avantaj uç noktası. Şimdi 200 konfigürasyondan 20'sinin gerçek, yerleştirilmiş bir avantaj taşıdığı bir alan kurun — gözlem başına 0.15'lik bir Sharpe, ki bu yıllıklandırıldığında 2.38 oluyor (türetilmiş: 0.15×2522.380.15 \times \sqrt{252} \approx 2.38) — ve diğer 180'ini gürültü olarak bırakın. Aynı CSCV'yi çalıştırın. Hikaye tamamen tersine dönüyor:

Örnek-içi Sharpe (yıl.) Örnek-dışı Sharpe (yıl.) PBO P(OOS kayıp)
Null (0 avantaj) 1.98 0.06 0.476 0.475
Yerleştirilmiş avantaj (Sharpe 2.38) 3.73 2.34 0.001 0.0006

Yerleştirilmiş-avantaj kazananı, her zaman olduğu gibi seçim tarafından şişirilmiş 3.73'lük bir örnek-içi yıllıklandırılmış Sharpe kaydediyor — ama bu sefer örnek-dışında 2.34koruyor ve PBO 0.001'e çöküyor. 12,870 bölünmenin tamamında, örnek-içi kazanan örnek-dışında esasen hiçbir zaman alt yarıya düşmüyor. Örnek-dışı kayıp olasılığı 0.0006'ya düşüyor. Güvenilir bir seçim prosedürünün görünüşü budur: eğitimi teste karşı hangi şekilde keserseniz kesin, aynı tür konfigürasyon kazanmaya devam eder, çünkü aramanın kilitlenebileceği gerçek, sağlam bir etki vardır. İki uç nokta — gürültüde 0.476, gerçek bir avantajda 0.001 — kalibrasyondur. PBO işe yarıyor.

Perde 3 — Evet/hayır testi değil, sürekli bir termometre

Yatay eksenin gerçek yerleştirilmiş bir avantajın gücü, dikey eksenin PBO olduğu, eğrinin sıfır avantajda yaklaşık yarımdan avantaj arttıkça sıfıra doğru düzgünce düştüğü ve seçilen stratejinin örnek-dışı Sharpe'ının aynı adımda yükseldiği bir ayna eğrisine sahip aşağı-eğimli bir termometre eğrisi

İki uç nokta, PBO'nun gürültüyü avantajdan ayırt edebildiğini kanıtlıyor. Ama daha derin özellik, bunu düzgün bir şekilde yapmasıdır. Yerleştirilmiş avantajı hiçlikten güçlüye tarayın ve PBO 0.5'ten 0'a birdenbire atlamaz — monoton bir rampadan aşağı kayar ve seçilen stratejinin örnek-dışı Sharpe'ı ona adım adım eşlik ederek yükselir:

Yerleştirilmiş gerçek Sharpe (yıllıklandırılmış) PBO Seçilen stratejinin OOS Sharpe'ı (yıl.)
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

İki veri sütununu birlikte okuyun. Sıfır gerçek avantajda PBO 0.52 ve seçilen strateji örnek-dışında −0.05 kazanıyor — yine yazı-tura, ve para kaybeden bir kazanan. Bir avantaj fısıltısı ekleyin (yıllıklandırılmış 0.48) ve PBO 0.44'e düşer. Yıllıklandırılmış gerçek Sharpe 0.95'e gelindiğinde — gerçekten mütevazı, inandırıcı bir avantaj — PBO zaten 0.21 ve örnek-dışı Sharpe 0.81'e tırmanmış. 1.59'da 0.03; 2.38'de 0.001; 3.17'de, seçilen strateji örnek-dışında 3.29 taşırken, etkin biçimde 0.00. Gerçek avantaj büyüdükçe PBO monoton olarak düşer ve kazananın örnek-dışı performansı aynı adımda yükselir — ikisi de iki farklı taraftan görülen aynı gerçektir.

PBO'yu pratikte kullanılabilir kılan özellik bu: ikili bir alarm değil, sürekli bir aşırı-uyum termometresidir. 0.21'lik bir PBO sadece "aşırı uyum yok" demiyor — seçiminizin kısmi örnek-dışı beceriye sahip olduğunu söylüyor: örnek-içi kazanan, zamanın %79'unda örnek-dışı medyanı geçiyor, ama avantaj o kadar ince ki bölünmelerin beşte biri onu hâlâ gömüyor. Sinyalinizi güçlendirdikçe, evreninizi daraltırken ya da ızgaranızı budarken sayının hareket etmesini izleyebilir ve hangi yönün dürüst olduğunu bilebilirsiniz. Makalenin kendi pratik kuralı — PBO 0.05'i aştığında reddet — bu rampadan doğal olarak çıkıyor: yıllıklandırılmış Sharpe ~1.5'in altında arama onu aşmamış; ~1.6'nın üzerinde aşmış. Ama rampanın kendisi tek bir kesim noktasından daha bilgilendiricidir, çünkü size yalnızca aşırı uyum yapıp yapmadığınızı değil, yazı-turaya ne kadar yakın olduğunuzu da söyler.

Perde 4 — Gerçekçi tuzak: güzel bir backtest, değersiz olduğu onaylanmış

Saf bir rastgele yürüyüş üzerinde, 2.33'lük bir örnek-içi Sharpe'ta ayartıcı, parlak bir hücreyi gösteren parıldayan bir hareketli-ortalama-kesişimi parametre ızgarası, yanında aynı kazananın sıfırın altında merkezlenmiş örnek-dışı sonuçlarının bir saçılımı, yarıya yakın sabitlenmiş bir PBO göstergesi ve "değersiz olduğu onaylanmış" yazan bir alt yazı

iid-gürültü null'u dürüst ama göz ardı etmesi kolay — "benim stratejilerim rastgele Normal sütunlar değil." O yüzden burada uygulayıcıların gerçekte içine düştüğü şekildeki tuzak var. Dünyanın en çok backtest edilen kuralı hareketli-ortalama kesişimini ele alın: hızlı bir MA yavaş bir MA'nın üzerine çıktığında uzun pozisyon alın, aksi halde flat kalın. Izgaralayın — geçerli hızlı-yavaşın-altında çiftlerini tutarak 10 hızlı uzunluk ×\times 17 yavaş uzunluk, K = 170 konfigürasyon için. Şimdi bu ızgarayı kanıtlanabilir şekilde sıfır avantajlı bir seri üzerinde çalıştırın: saf bir rastgele yürüyüş. Bulunacak hiçbir şey yok. Bir kesişim rastgele bir yürüyüşü tahmin edemez. Cevabın "strateji yok" olduğunu biliyoruz.

Izgara bunu bilmiyor. Size bir kazanan veriyor ve kazanan ayartıcı:

Teşhis (bir temsili rastgele-yürüyüş matrisi, seed 3000, K = 170, S = 16) Değer
En iyi örnek-içi Sharpe (yıllıklandırılmış) 2.33
PBO 0.573
Medyan örnek-dışı Sharpe (yıllıklandırılmış) −0.22
Örnek-dışı kayıp olasılığı 0.63
Örnek-dışı-örnek-içi bozulma eğimi −0.92
Medyan logit λ\lambda −0.25

Bu tek bir seed'li matris. 60 bağımsız rastgele-yürüyüş matrisi üzerinden ortalandığında, aynı teşhisler PBO 0.463 ± 0.223, 0.04'e bozulan seçilmiş bir örnek-içi Sharpe 0.97 ve P(OOS kayıp) 0.47 okuyor — null'dan istatistiksel olarak ayırt edilemez. Seed 3000'in 0.573'ü, ~0.5 null bandının üst tarafında bir çekiliş — yazı-tura değeri etrafındaki örnekleme gürültüsü, ±0.223'lük matristen-matrise yayılımın oldukça içinde — ve hikaye her iki durumda da aynı.

Bir hareketli-ortalama kesişiminde 2.33'lük bir örnek-içi yıllıklandırılmış Sharpe, bir yatırımcı sunumunda sonlanacak türden bir sonuçtur. Perde 2'deki gerçekten-yerleştirilmiş avantajımızın örnek-dışı Sharpe'ına (2.34 — baş başa bir yarış) esasen eşittir. Backtest'te durmuş olsaydınız, ona fon sağlardınız. CSCV reddediyor. PBO burada bir yazı-tura: 60 matris üzerinden ortalama 0.463, bu belirli olanında 0.573 — ikisi de aramanın örnek-dışı becerisi olmadığını söylüyor. 0.573'ü fazla okumayın: ½'nin 0.073 üzerinde oturuyor, 0.5 null'u etrafındaki örnekleme gürültüsü ve ±0.223'lük matristen-matrise bandın oldukça içinde; gerçekten 0.5'in üzerinde bir PBO — örnek-içi başarının aktif olarak örnek-dışı başarısızlığı öngördüğü yer — bu rastgele yürüyüşün içermediği bir anti-kalıcılık ya da işlem-maliyeti yapısı gerektirir (dürüstlük notlarına bakın). Bu matriste, −0.25'lik medyan logit, medyan örnek-içi kazananı yaklaşık 0.44'lük bir göreli örnek-dışı sıralamaya yerleştiriyor (türetilmiş: 1/(1+e0.25)1/(1+e^{0.25})) — kabaca 170 üzerinden 75. (türetilmiş: 0.44×1710.44 \times 171), liderlik etmesi gereken alanın tam ortasının biraz altında. Bu kazananın medyan örnek-dışı Sharpe'ı −0.22negatif — ve zamanın %63'ünde örnek-dışı bir kayıp alıyor. Örnek-dışı beklentisi bir kayıp olan 2.33'lük bir backtest Sharpe'ı: yanılsamanın tanımı.

−0.92'lik bozulma eğimi ikinci bıçak. Seçilen kazananın her bölünmedeki örnek-dışı Sharpe'ını örnek-içi Sharpe'ı üzerine regresyona sokun; eğim keskin bir şekilde negatif — bir konfigürasyon örnek-içinde ne kadar iyi görünürse, örnek-dışında o kadar kötü performans gösterir. Bu, hafızalı bir seri üzerindeki aşırı uyumun parmak izidir: kesişim, eğitim bloklarındaki, bir rastgele yürüyüşün eserleri olduğu için örnek-dışında tersine dönen geçici desenlere yapışır. Eğimi fazla okumamanız için belirtilmeye değer bir incelik: negatif bir eğim, kendi başına bir yargı değildir. Perde 2'deki gerçek-avantaj rejimi bile negatif bir bozulma eğimine sahiptir (−0.52) — ortalamaya dönüş, seçilen maksimumu örnek-dışında her zaman biraz aşağı çeker. Yanılsamayı gerçek avantajdan ayıran şey, eğimin negatif olması değil, kazananın nereye düştüğüdür: gerçek avantaj biraz geri verirken üstte kalır (PBO 0.001); yanılsama yazı-tura çizgisinde oturur (ortalama PBO 0.463, bu seed'de 0.573), kazananı örnek-dışı medyanın üzerinde olma olasılığı altında olmaktan daha fazla değildir. Eğimi ne kadar küçüldüğü için okuyun; PBO'yu hâlâ genelleşip genelleşmediği için okuyun. Yanılsama ikisinde de başarısız oluyor.

PBO'nun ham bir backtest'in yanındaki yerini kazanmasının nedeni bu. 2.33'lük örnek-içi Sharpe bir yalan değil — strateji bunu gerçekten kazandı, örnek-içinde, o rastgele yürüyüşte. Bu seçimdir, gerçekçi görünen bir ızgarada tanıdık bir kuralla giydirilmiş ve equity eğrisine ne kadar bakarsanız bakın bunu ortaya çıkarmaz. Yalnızca prosedürü puanlamak bunu yapar.

Perde 5 — PBO ve DSR: iki dürüst soru, bir plato

Aynı parametre aramasını farklı açılardan hedef alan iki tamamlayıcı ölçüm aleti: biri PBO olarak etiketlenmiş, tüm eğitim-test yeniden örneklemesini okuyarak seçim prosedürünün aşırı uyum yapıp yapmadığını soruyor; diğeri DSR olarak etiketlenmiş, tek bir kazanan çubuğu deflate ederek bu tek Sharpe'ın şansın ötesinde olup olmadığını soruyor

PBO ve Deflate Edilmiş Sharpe Oranı, aynı dürüstlük kontrolünün iki yarısıdır ve gereksiz değildirler — farklı nesneleri sorgularlar:

Deflate Edilmiş Sharpe Oranı (DSR) Backtest Aşırı Uyum Olasılığı (PBO)
Yargılanan nesne kazanan seçim prosedürü
Soru bu Sharpe, N deneme boyunca şansın satın alabileceğinin ötesinde mi? örnek-içi en iyiyi seçmek örnek-dışında genelleşiyor mu?
Yöntem parametrik — anlamlılık eşiğini deflate et parametrik-olmayan — tüm C(S, S/2) eğitim/test bölünmelerini yeniden örnekle
Null değeri DSR ≈ 0.5 (kazanan yalnızca gürültü tavanını tutturuyor) PBO ≈ 0.5 (kazanan örnek-dışında bir yazı-tura)
İstediğiniz DSR 1'e yakın PBO 0'a yakın
Deneme sayısı N'e ihtiyaç var mı? evet — ve korelasyonlu ızgaralar N'i belirsiz kılar hayır — bölünme yeniden örneklemesi bağımlılığı doğal olarak ele alır

Hatta anlaşmazlığa bile düşebilirler ve bu anlaşmazlık teşhis edicidir. DSR, korelasyonlu bir ızgara tarafından kandırılıp aşırı-deflasyon yapabilir (DSR makalesinin son perdesinin tamamen ilgili olduğu tuzak — 640 korelasyonlu hücre, 640 bağımsız deneme değildir ve ham sayımı beslemek gürültü tavanını aşırı şişirir). PBO hiçbir zaman deneme saymaz; gerçek getiri matrisini yeniden örnekler, bu yüzden ızgara korelasyonu bedava olarak bölünmelere gömülür. Tersine, PBO size prosedürün genelleştiğini söyler ama kazananın bir eşik oranını geçip geçmediğini söylemez — bir arama düşük PBO'ya sahip olabilir ve yine de örnek-dışı Sharpe'ı, güvenilir bir şekilde alan medyanının üzerinde olsa da, işlem yapmak için çok küçük olan bir şeyi seçebilir. DSR kazananı fiyatlandırır; PBO prosedürü fiyatlandırır. İkisini de çalıştırın.

Yan yana iki üç boyutlu parametre-ızgarası yüzeyi: solda, her eğitim-test bölünmesinin düşük PBO vererek üzerinde anlaştığı iyi komşu konfigürasyonlardan oluşan geniş, pürüzsüz bir plato; sağda, farklı bölünmelerin yarıya yakın bir PBO vererek üzerinde anlaşamadığı, düz gürültüyle çevrili yalnız bir tepe

Tüm bunun altında geometrik bir sezgi var ve bu, yanınıza alacağınız en yararlı şey. Gerçek bir avantaj bir platodur; aşırı uyum bir tepedir. Gerçek bir etki ızgaranızı yönlendirdiğinde, iyi konfigürasyonlar kümelenir — fast=3/slow=55 işe yarar, ve komşuları da öyle, çünkü hepsi aynı altta yatan sinyali örnekliyor. O plato yeniden örneklemeye dayanıklıdır: 16 bloğun hangi 8'inde eğitim yaparsanız yapın, örnek-içi kazanan aynı geniş bölgeden çekilir ve o bölge örnek-dışında da hâlâ üsttedir. Birçok bölünme anlaşıyor → düşük PBO. Aşırı uyum ızgaranızı yönlendirdiğinde, "kazanan" yalnız bir tepedir — eğitim bloklarının gürültüsüne tesadüfen uyan, vasat komşularla çevrili tek bir hücre. O tepe kırılgandır: farklı bir eğitim/test bölünmesi farklı bir yalnız tepeyi taçlandırır ve hiçbiri test setine kadar hayatta kalmaz. Bölünmeler anlaşamıyor → PBO ≈ 0.5. Bu, plato-analizi çalışmamızın parametre-haritası tarafından ulaştığı aynı derstir; PBO, etkin olarak, plato-tepe ayrımının verinizin her simetrik yeniden örneklemesi üzerinden aynı anda ölçülmesidir.

Bu aynı zamanda CSCV'nin neden uygulayıcı-varsayılanı ileri-yürüyüş (walk-forward) bölünmesini geçtiğini de açıklıyor. Walk-forward size tek bir geçmiş→gelecek kesim ve tek bir yargı verir; CSCV size 12,870 simetrik kesim verir ve kazananın hepsinde hayatta kalıp kalmadığını sorar. Bir tepe şans eseri tek bir keyfi kesimde hayatta kalabilir; 12,870'te kalamaz. (López de Prado'nun Kombinatoryal Arındırılmış Çapraz Doğrulaması, CPCV, tam olarak bu fikri, düz yeniden örneklemenin seri bağımlılık altında maruz kalabileceği etiket-sızıntısını öldürmek için arındırma ve ambargo ile genişletir — etiketleriniz örtüştüğünde doğal bir sonraki basamak.) Aynı yapısal uyarı tüm seri boyunca işliyor: optimize ettiğiniz metrik gizlice stratejinizi seçer (objektif-fonksiyon tasarımı), tek-barlık bir sızıntı gürültüden 15'lik bir Sharpe üretir (look-ahead yanlılığı), çoklu-test yapan bir arama gürültüden 1.63'lük bir Sharpe üretir (DSR) — ve burada, yeniden örneklenmiş bir seçim prosedürü, yalnızca PBO'nun ortaya çıkarabileceği değersiz bir kazanan üretir.

Dürüstlük notları

Dört uyarı, açıkça ifade edilmiş, çünkü kontrollü bir çalışma sonuçlarını yalnızca sınırlarını adlandırarak hak eder.

  • Veri-üretme süreçleri sentetiktir — bilerek. Null için iid Normal gürültü, avantaj taraması için yerleştirilmiş-Sharpe'lı bir alan ve tuzak için saf bir rastgele yürüyüş üzerinde bir hareketli-ortalama ızgarası. Hiçbiri piyasa gerçekçiliği hakkında bir iddia değildir; her biri kontrollü referans gerçeklik için seçilmiştir. PBO'nun "beceri yok"ta 0.5, "gerçek beceri"de 0 okuduğunu ancak hangisinin hangisi olduğunu bildiğimiz veri üreterek kanıtlayabiliriz. Gerçek getiriler kalın kuyrukludur, otokorelasyonludur ve durağan değildir; buradaki teslim edilecek şey bir strateji değil, kalibre edilmiş teşhistir.
  • PBO'nun null'u 0.5'tir ve bu bir tuhaflık değil, bir özelliktir. Bir PBO bildirdiğinizde her seferinde bunu belirtin, çünkü aksi halde okuyucularınızın yarısı 0.5'i "yarı-güvenli" olarak ele alacaktır. Örnek-dışı becerisi olmayan bir arama 0.5'te oturur; gerçek bir avantaj onu 0'a sürükler. PBO ≈ 0.5'in "masum" bir okuması yoktur — bu, tam-aşırı-uyum yargısıdır.
  • PBO > 0.5, zorlamadığımız "sapkın" bir bölgedir. Sistematik olarak 0.5'in üzerinde bir PBO, örnek-içi başarının aktif olarak örnek-dışı başarısızlığı öngördüğü anlamına gelir — IS-en-kötü konfigürasyonlar OOS-en-iyi olur. Bu, salt avantaj yokluğu değil, bir anti-kalıcılık ya da işlem-maliyeti yapısı gerektirir. Aşırı uyumlu aramalarımız ≈ 0.5'te oturur (iid gürültü için 0.476; MA ızgarası için ortalama 0.463; 60 matris boyunca ±0.14–0.22 Monte-Carlo bandı içinde, üst taraflı bir seed'de 0.573), ki bu zaten "örnek-dışı beceri yok" anlamına gelir. Sapkın bölgeyi biz üretmiyoruz; yalnızca aşırı uyumun sizi yazı-tura çizgisinin üzerine getirdiğini gösteriyoruz, ki bu zaten yeterince mahkum edici.
  • Matris verildiğinde PBO deterministiktir; yalnızca matris rastgeledir. Sabit bir M ve S = 16 için, C(16, 8) = 12,870 bölünmenin tamamı kapsamlı biçimde numaralandırılır — bootstrap seed'i yoktur ve PBO'nun kendisinde örnekleme varyansı yoktur. Bildirdiğimiz yayılım (null'da ±0.137, MA ızgarasında ±0.223), tahminci içinde değil, 60 Monte-Carlo matrisi arasındaki varyanstır. Her iki taraftaki Sharpe, yaklaşık 500 gözlem üzerinde tahmin edilir — CSCV blok kırpmasından sonra 496, çünkü T = 1000, 16 eşit bloğa bölündüğünde 992 kullanılabilir satır kalır, bu da 496'lık iki yarıya bölünür; Sharpe sıra-değişmez olduğundan, bir eğitim ya da test setindeki satır sırası önemli değildir (bir getiri/drawdown oranı gibi yol-bağımlı metrikler için önemli olurdu).

Çıkarımlar

  1. PBO, kazananı değil, seçim prosedürünü puanlar — ve null'u 0.5'tir. Örnek-içinde en iyi olarak seçtiğiniz konfigürasyonun örnek-dışında alt yarıya düşme olasılığıdır. PBO ≈ 0.5 bir yazı-turadır (tam-aşırı-uyum); PBO ≈ 0 güvenilir bir seçimdir. Sıfıra yakın olmasını istersiniz ve bunu yüksek sesle söylemelisiniz, çünkü 0.5 eğitimsiz bir göze "güvenli" olarak okunur ve tam tersini ifade eder.
  2. Kalibrasyon işe yaradığını kanıtlıyor. 200 iid sıfır-avantajlı stratejide, en iyi örnek-içi yıllıklandırılmış Sharpe olan 1.98, örnek-dışında 0.06'ya çöküyor ve PBO = 0.476 — gürültü, zamanın %47.5'inde örnek-dışında para kaybederek yazı-tura çizgisinde oturuyor. Gerçek bir avantaj yerleştirin (yıllıklandırılmış Sharpe 2.38) ve örnek-içi 3.73, PBO 0.001'e düşerken örnek-dışı 2.34'e kadar hayatta kalıyor. İki uç nokta, bir kalibre edilmiş teşhis.
  3. PBO sürekli bir termometredir. Yerleştirilmiş avantajı tarayın ve PBO monoton olarak düşer — yıllıklandırılmış gerçek Sharpe'larda 0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17'de 0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00 — seçilen stratejinin örnek-dışı Sharpe'ı aynı adımda yükselirken (−0.05'ten 3.29'a kadar). Sadece evet/hayır değil, yazı-turaya ne kadar yakın olduğunuzu ölçer.
  4. Gerçekçi tuzak asıl meseledir. Saf bir rastgele yürüyüş üzerinde 170-konfigürasyonluk bir hareketli-ortalama ızgarası, ortalama olarak sadece 0.97'lik bir seçilen örnek-içi Sharpe'ın 0.04'e bozulmasına ve PBO 0.463 — null'dan istatistiksel olarak ayırt edilemez, avantajsız bir aramanın null gibi okunmasına neden oluyor. Bir temsili matriste yanılsama çarpıcı: 2.33 en iyi örnek-içi Sharpe (bir yatırımcı-sunumu sayısı), −0.22 medyan örnek-dışı Sharpe, %63 örnek-dışı kayıp olasılığı, PBO 0.573 ve −0.92'lik keskin bir bozulma eğimi. Kazananın yanına basılan her istatistiğe görünmez ve yalnızca prosedürü puanladığınızda görünür olan, negatif örnek-dışı beklentisine sahip güzel bir backtest.
  5. PBO'yu Deflate Edilmiş Sharpe Oranı ile eşleştirin. DSR kazananı fiyatlandırır (N deneme verildiğinde, bu Sharpe şansın ötesinde mi?); PBO prosedürü fiyatlandırır (seçim genelleşiyor mu?). DSR bir deneme sayısına ihtiyaç duyar ve korelasyonlu ızgaralar tarafından kandırılabilir; PBO matrisi yeniden örnekler ve hiçbir zaman deneme saymaz. Gerçek bir avantaj, birçok bölünmenin üzerinde anlaştığı geniş bir platodur (düşük PBO); yalnız bir örnek-içi tepe aşırı uyumdur (bölünmeler anlaşamaz, PBO ≈ 0.5). İkisini de çalıştırın ve platoyu okuyun.

Bir aramanın kazananı, suçsuzluğu kanıtlanana kadar suçludur — ve PBO, size verdiği mazereti değil, aramanın kendisini çapraz sorguya çeker. Kazananın örnek-içinde ne kadar iyi göründüğünü görmezden gelir ve yalnızca onu seçmenin, 12,870 farklı şekilde yeniden kesilmeye dayanan bir karar olup olmadığını sorar. Olmadığında — muhteşem 2.33 Sharpe'ınızın örnek-dışında en az yarı yarıya alt yarıya düştüğü ortaya çıktığında — bir strateji bulmadınız. En şanslı madeni parayı buldunuz ve PBO onu havada dönerken yakalayan sayıdır.

Tam deney — null-kalibrasyon aracı, yerleştirilmiş-avantaj termometre taraması, rastgele-yürüyüş ızgara tuzağı ve bu makaledeki her sayının tek bir deterministik betikten yeniden üretilebilmesi — pbo-search.marketmaker.cc adresindeki tamamlayıcı makalede, kod ve veri ise github.com/suenot/pbo-search adresinde.

Sorumluluk Reddi: Bu makalede sağlanan bilgiler yalnızca eğitim ve bilgilendirme amaçlıdır ve finansal, yatırım veya ticaret tavsiyesi niteliği taşımaz. Kripto para ticareti önemli bir kayıp riski içerir.

Yazarlar

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

Piyasanın Önünde Olun

Özel yapay zeka ticaret içgörüleri, piyasa analizi ve platform güncellemeleri için bültenimize abone olun.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.