20. avgust 2026 · Optimizacija

Trije načini, kako neopazno pogrniti pri walk-forward optimizaciji

Trije načini, kako neopazno pogrniti pri walk-forward optimizaciji

Walk-forward optimizacija velja za pošten način uglaševanja strategije in ta sloves si zasluži — vsaj v primerjavi z optimiziranjem na vseh podatkih in občudovanjem rezultata. A tehnika ima tihe načine odpovedi in vsak od njih ustvari isti artefakt: validacijsko poročilo z napisom "robustno", pripeto na strategijo, ki to ni. Tu so trije, proti katerim smo se morali inženirsko zavarovati, urejeni po razdejanju, ki ga pustijo.

Prva odpoved: okna puščajo

Napačen pristop: uglasiš na januarju–juniju, validiraš na juliju, nato pa dovoliš, da karkoli iz julija vpliva na drugi prehod — ponovni zagon po tem, ko si videl številko izven vzorca, "majhen popravek" mreže parametrov, značilka, normalizirana čez celotno serijo. Vsaka stvar zase deluje nedolžno. Skupaj pa spremenijo okno izven vzorca v podatke znotraj vzorca, le z zamikom.

Razdejanje: Sharpe izven vzorca, ki skrivnostno sledi Sharpu znotraj vzorca. Pravi rezultati izven vzorca so šumni in razočarajoči; sumljivo gladko razmerje IS/OOS pomeni, da informacije tečejo nazaj. Razmerje spremljamo izrecno — vrednost znotraj vzorca, večja od 3-kratnika vrednosti izven vzorca, označi zagon, Sharpe izven vzorca pri nič ali pod njim pa ga ubije, pa naj je slika znotraj vzorca še tako lepa.

Druga odpoved: izbiranje metrike po oknih

Poženeš tri walk-forward okna, dobiš tri šumne rezultate in nato povzameš: povprečni Sharpe? Mediana? Bi izpustil najslabše okno zaradi "spremembe režima"? Vsaka odločitev je prostostna stopnja in odločen optimizator (človeški ali bayesovski) bo našel tisti povzetek, pod katerim ta strategija izgleda najbolje. Petinsedemdeset poskusov z Optuno na okno je petinsedemdeset priložnosti za prilagajanje šumu — pomnoženo s številom povzetkov, ki si jih pripravljen upoštevati.

Razdejanje: strategija, ki prestane validacijo in nato v živo dostavi uspešnost najslabšega okna, ker je bilo najslabše okno edino pošteno. Naše pravilo: agregacija je določena v konfiguraciji pred zagonom, proračun poskusov je določen, analitik pa bere rezultate po posameznih oknih skupaj s prikazano razpršenostjo. Strategija, ki za prehod potrebuje prijazen povzetek, ne prestane.

Tretja odpoved: holdout, ki je nehal biti holdout

Holdout deluje natanko enkrat. Ko strategijo drugič ovrednotiš na njem — po popravku parametra, prilagoditvi signala, po "daj samo preverimo" — to ni več holdout; to je počasen validacijski nabor. Petnajst nedotaknjenih dni se sliši trivialno ohraniti, dokler ne pride pritisk iteriranja in se ponovno preverjanje ne zazdi neškodljivo.

Razdejanje je subtilno: rezultati na holdoutu, ki se skozi iteracije iste strategije izboljšujejo. Sveži podatki izven vzorca nimajo nobenega razloga, da bi tretjo iteracijo nagradili bolj kot prvo, in ko se to zgodi, je holdout izrudarjen. Enkratnost uveljavljamo mehanično: holdout se ovrednoti enkrat na zagon cevovoda, rezultat se zapiše v zapis, strategija, ki potrebuje še en poskus, pa gre skozi celoten poligon znova — z novimi okni vred. Ohraniti mora vsaj 70 % Sharpa izven vzorca iz walk-forward faze in te kocke ni mogoče vreči še enkrat.

Znak, ki preživi vse tri

Pred vsem tem opravimo preprost pregled občutljivosti: vsak parameter premaknemo za ±20 % in opazujemo metrike. Pravi edge se poslabšuje postopoma; naključje pade čez rob. To je najcenejši test v cevovodu in zavrne strategije, ki bi zlahka preplule vse zgoraj našteto — kajti prepad v parametru je tisto, kako izgleda prevelika prilagoditev, preden ji daš priložnost, da se skrije v validacijski mehaniki.

3.0×največje razmerje Sharpe IS/OOS
70%delež WF OOS, ki ga mora ohraniti holdout
±20%premik občutljivosti na parameter
1ovrednotenje holdouta, sploh kdaj

Nič od tega optimizacije ne naredi varne. Naredi pa načine odpovedi glasne — in to je največ, kar lahko pošteno pričakuješ od validacijskega procesa.

optimizacijawalk-forwardprevelika prilagoditevholdoutobčutljivost
← Vse objave