Overfitting, czyli przeuczenie lub nadmierne dopasowanie modelu, to sytuacja, w której strategia inwestycyjna, model statystyczny lub algorytm zostaje zbyt mocno dopasowany do konkretnych danych historycznych.
W efekcie strategia może osiągać świetne wyniki na danych, na których została opracowana, ale znacznie gorzej radzić sobie na nowych danych.
W tradingu jest to jedna z najważniejszych pułapek podczas tworzenia i optymalizacji strategii.
Najprościej można to ująć tak:
Strategia nauczyła się historii zamiast nauczyć się prawidłowo działającej zależności.
Prosty przykład
Załóżmy, że tworzymy strategię dla Bitcoina.
Na początku testujemy prostą zasadę:
Kupuj, gdy cena przebije lokalne maksimum.
Backtest pokazuje umiarkowanie dobre wyniki.
Zaczynamy więc optymalizować strategię:
- zmieniamy interwał,
- długość średniej,
- poziom Stop Lossa,
- Take Profit,
- godziny handlu,
- minimalny wolumen,
- parametry RSI,
- poziomy Fibonacciego.
Po setkach prób znajdujemy konfigurację, która na danych historycznych zarobiła np. +850%.
Wygląda fantastycznie.
Problem polega na tym, że ta konfiguracja została wybrana właśnie dlatego, że najlepiej pasowała do konkretnej historii BTC.
Jeżeli uruchomimy ją na nowych danych, może nagle zacząć generować straty.
To klasyczny overfitting.
Overfitting a backtest
Overfitting jest szczególnie częsty w backtestach.
Im więcej parametrów możemy zmieniać, tym łatwiej dopasować strategię do historycznych przypadków.
Załóżmy, że testujemy strategię z jednym parametrem.
Mamy niewielką przestrzeń możliwych ustawień.
Jeżeli jednak strategia ma 20 parametrów, liczba możliwych kombinacji gwałtownie rośnie.
Możemy wtedy znaleźć konfigurację, która przypadkowo idealnie pasuje do przeszłości.
To nie musi oznaczać, że znaleźliśmy prawdziwą przewagę rynkową.
Overfitting można porównać do nauki na pamięć
Dobrym przykładem jest egzamin.
Jeżeli uczeń nauczy się na pamięć odpowiedzi z konkretnego arkusza, może uzyskać świetny wynik, jeżeli dostanie dokładnie te same pytania.
Jeżeli jednak egzamin będzie zawierał inne pytania, wynik może być znacznie gorszy.
Podobnie zachowuje się przeoptymalizowana strategia.
Historyczne dane są znane, więc strategia może zostać do nich dopasowana.
Nowych danych strategia nie zna.
Jeżeli nie potrafi sobie na nich poradzić, oznacza to, że nauczyła się historii zamiast ogólnej zasady.
Overfitting a liczba parametrów
Jednym z czynników zwiększających ryzyko overfittingu jest zbyt duża liczba parametrów.
Prosta strategia może mieć:
- jeden warunek wejścia,
- jeden Stop Loss,
- jeden Take Profit.
Bardziej skomplikowana może mieć:
- kilka wskaźników,
- kilkanaście progów,
- różne zasady dla różnych dni tygodnia,
- różne ustawienia dla różnych godzin,
- różne parametry zależne od zmienności,
- dodatkowe filtry wolumenu,
- filtry korelacji,
- osobne reguły dla każdego rynku.
Każdy dodatkowy parametr zwiększa możliwość dopasowania strategii do przypadkowych zależności występujących w danych.
Nie oznacza to oczywiście, że prosta strategia zawsze jest lepsza.
Chodzi o to, aby każdy parametr miał sens ekonomiczny lub rynkowy, a nie był dodany wyłącznie dlatego, że poprawia wynik backtestu.
Przykład z godzinami handlu
Załóżmy, że strategia działa przez cały dzień.
W backteście sprawdzamy różne godziny i odkrywamy, że najlepsze wyniki występują dokładnie między:
09:17 a 11:43.
Może to wyglądać jak odkrycie niezwykle precyzyjnej przewagi.
Ale równie dobrze może to być przypadkowa właściwość konkretnego zestawu danych.
Jeżeli zaczniemy testować wystarczająco wiele przedziałów czasowych, prawdopodobnie znajdziemy jakiś, który historycznie wygląda wyjątkowo dobrze.
To właśnie jeden z mechanizmów prowadzących do overfittingu.
Overfitting a parametry Stop Lossa
Podobnie jest ze Stop Lossem.
Załóżmy, że testujemy wartości:
- 0,2%,
- 0,3%,
- 0,4%,
- 0,5%,
- 0,6%,
- 0,7%,
- 0,8%.
Okazuje się, że najlepszy wynik daje dokładnie:
SL = 0,43%.
Jeżeli wybieramy 0,43% tylko dlatego, że historycznie dało najlepszy wynik, możemy nie mieć żadnego powodu, aby sądzić, że właśnie ta wartość będzie działać w przyszłości.
Zdrowszym podejściem jest sprawdzenie, czy strategia działa również w pewnym zakresie parametrów.
Jeżeli wyniki są podobne dla SL 0,4–0,6%, jest to bardziej przekonujące niż sytuacja, w której 0,43% działa świetnie, a 0,42% i 0,44% już zdecydowanie gorzej.
Robustness – odporność strategii
Dlatego przy ocenie strategii warto sprawdzać jej robustness, czyli odporność na niewielkie zmiany parametrów.
Załóżmy, że:
| Stop Loss | Wynik |
|---|---|
| 0,4% | +210% |
| 0,5% | +225% |
| 0,6% | +218% |
| 0,7% | +205% |
To może być dobry znak.
Strategia działa podobnie w całym zakresie.
Natomiast:
| Stop Loss | Wynik |
|---|---|
| 0,4% | +40% |
| 0,5% | +55% |
| 0,6% | +480% |
| 0,7% | -20% |
powinien wzbudzić podejrzenia.
Możliwe, że znaleźliśmy bardzo specyficzne dopasowanie do danych historycznych.
Overfitting a out-of-sample
Jednym z podstawowych sposobów ograniczania overfittingu jest podział danych na:
in-sample
oraz
out-of-sample.
Dane in-sample wykorzystujemy do budowy i optymalizacji strategii.
Dane out-of-sample pozostawiamy nietknięte i wykorzystujemy dopiero do końcowej weryfikacji.
Przykładowo:
2018–2023 → opracowanie strategii
2024–2025 → test na niewidzianych danych
Jeżeli strategia działa dobrze również na danych out-of-sample, zwiększa to wiarygodność wyników.
Nie eliminuje jednak całkowicie ryzyka overfittingu.
Overfitting a walk-forward testing
Jeszcze lepszym podejściem może być walk-forward testing.
Strategia jest tworzona i optymalizowana na jednym okresie, a następnie testowana na kolejnym okresie, którego wcześniej nie widziała.
Następnie proces jest przesuwany w czasie.
Dzięki temu można lepiej sprawdzić, czy strategia potrafi działać w warunkach przypominających rzeczywisty proces tradingowy.
Overfitting a liczba testów
Problemem nie jest tylko liczba parametrów.
Znaczenie ma również liczba przeprowadzonych prób.
Jeżeli przetestujemy:
10 000 różnych strategii
to nawet jeżeli żadna z nich nie ma prawdziwej przewagi, istnieje duża szansa, że jedna z nich przypadkowo będzie wyglądać fantastycznie na danych historycznych.
Jeżeli wybierzemy właśnie tę jedną, możemy błędnie uznać, że odkryliśmy świetną strategię.
To jeden z powodów, dla których wynik typu:
„przetestowałem tysiące ustawień i znalazłem najlepsze”
niekoniecznie jest dobrą wiadomością.
Overfitting a data mining
Overfitting jest blisko związany z data mining, czyli poszukiwaniem zależności w dużych zbiorach danych.
Jeżeli szukamy wystarczająco długo, możemy znaleźć korelacje i wzorce, które powstały całkowicie przypadkowo.
Na rynku finansowym jest to szczególnie niebezpieczne, ponieważ danych jest bardzo dużo:
- ceny,
- wolumen,
- zmienność,
- dane fundamentalne,
- dane makroekonomiczne,
- informacje o sentymencie,
- dane on-chain.
Im więcej możliwości testujemy, tym większa szansa na znalezienie przypadkowego wzorca.
Overfitting a look-ahead bias
Overfitting i look-ahead bias to różne problemy.
Overfitting:
strategia jest zbyt mocno dopasowana do danych historycznych.
Look-ahead bias:
strategia wykorzystuje informacje, które w momencie decyzji nie były jeszcze dostępne.
Oba błędy mogą występować jednocześnie.
Co gorsza, mogą sprawić, że backtest będzie wyglądał znacznie lepiej niż rzeczywisty trading.
Overfitting a survivorship bias
Podobnie wygląda sytuacja z survivorship bias.
Jeżeli testujemy strategię tylko na aktywach, które przetrwały i odniosły sukces, możemy otrzymać zawyżone wyniki.
Jeżeli następnie dodatkowo zoptymalizujemy strategię pod te dane, otrzymujemy jeszcze większe ryzyko błędnych wniosków.
Dlatego przy tworzeniu backtestu warto kontrolować wszystkie te problemy jednocześnie.
Jak ograniczyć overfitting?
Nie ma jednej metody, która całkowicie eliminuje ryzyko przeoptymalizowania strategii.
Można jednak znacząco je ograniczyć.
1. Używaj niewielkiej liczby parametrów
Nie dodawaj kolejnego filtra tylko dlatego, że poprawia wynik backtestu.
Każdy parametr powinien mieć uzasadnienie.
2. Testuj dane out-of-sample
Część danych pozostaw do końcowej weryfikacji.
Nie optymalizuj strategii na całej historii.
3. Sprawdzaj różne okresy rynku
Strategia powinna być testowana w różnych warunkach:
4. Sprawdzaj zakres parametrów
Nie skupiaj się wyłącznie na jednej „idealnej” wartości.
Sprawdź, czy strategia działa również przy niewielkich zmianach parametrów.
5. Uwzględniaj koszty
Prowizje, spread i slippage mogą zmienić wynik strategii.
Strategia, która zarabia wyłącznie przed uwzględnieniem kosztów, może być przykładem pozornej przewagi.
6. Nie optymalizuj wszystkiego
Im więcej prób wykonujesz, tym większa szansa, że znajdziesz przypadkowo bardzo dobry wariant.
Czasami mniej optymalizacji oznacza bardziej wiarygodny wynik.
Overfitting w tradingu
W tradingu overfitting jest szczególnie kuszący.
Trader widzi, że strategia ma:
70% Win Rate
Profit Factor 3,5
niewielki Drawdown
i może uznać, że znalazł idealny system.
Tymczasem może się okazać, że wynik został uzyskany po wielokrotnym dopasowywaniu:
- wskaźników,
- interwałów,
- godzin,
- SL,
- TP,
- filtrów,
- aktywów.
Jeżeli strategia została „wyciśnięta” z danych historycznych, jej przyszłe wyniki mogą być znacznie słabsze.
Najważniejsza zasada
Moim zdaniem najlepszym sposobem myślenia o overfittingu jest:
Nie pytaj tylko, jak dobrze strategia działa na danych historycznych. Sprawdź, czy jej przewaga przetrwa zmianę danych.
Jeżeli niewielka zmiana parametrów, okresu lub rynku całkowicie niszczy wyniki, strategia prawdopodobnie nie jest wystarczająco odporna.
Podsumowanie
Overfitting to nadmierne dopasowanie strategii lub modelu do danych historycznych.
W tradingu może sprawić, że strategia:
- świetnie wygląda w backteście,
- ma bardzo wysoki Win Rate,
- generuje ogromne zyski,
- ma niewielki Drawdown,
ale po uruchomieniu na nowych danych przestaje działać.
Największe ryzyko pojawia się wtedy, gdy wielokrotnie testujemy ogromną liczbę parametrów i wybieramy najlepszą historycznie konfigurację.
Dlatego dobra strategia powinna być nie tylko skuteczna w backteście, ale również odporna na zmianę parametrów, okresu i warunków rynkowych.
Świetny backtest nie zawsze oznacza świetną strategię. Czasami oznacza po prostu, że bardzo dobrze dopasowaliśmy ją do przeszłości.


