Backtesty i overfitting - jak zapobiegacie?

Backtesty i overfitting - jak zapobiegacie?
bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1769
0

Jakiś czas temu był tutaj ciekawy temat o tradingu, backtestach i wywiązała się dyskusja m.in. o overfittingu.

Ciekaw jestem jak Wy sobie radzicie z overfittingiem w swoich testach? W przypadku odpowiedzi piszcie proszę o interwale i zakresie danych, wydaje mi się to dość istotnym kontekstem.

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1011
0

Moim zdaniem jeśli masz jakieś założenie to sprawdzasz czy jest poprawne. Jeśli wychodzi na to, że musisz trochę zmienić wskaźniki to znaczy, że już robisz overfitting

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1769
0
anonimowy napisał(a):

Moim zdaniem jeśli masz jakieś założenie to sprawdzasz czy jest poprawne. Jeśli wychodzi na to, że musisz trochę zmienić wskaźniki to znaczy, że już robisz overfitting

Rozumiem i częściowo się zgodzę. Ale jak w praktyce tego unikasz? Hipotetycznie testuję jakiś wskaźnik z ustawieniami w jakimś zakresie i wychodzi mi z testów że któraś wartość ustawień daje historycznie najlepsze wyniki z całego zakresu wartości ustawień. Czy to jest overfitting?

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1011
0

Dlaczego zmieniasz ustawienia wskaźnika? Bo nie zgadza się z hipotezą? I czy daje wyniki na in-sample czy out-sample też?

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1769
0
anonimowy napisał(a):

Dlaczego zmieniasz ustawienia wskaźnika? Bo nie zgadza się z hipotezą? I czy daje wyniki na in-sample czy out-sample też?

Nie zmieniam, tylko testuję na n-ustawień, który się spisze najlepiej

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1011
0

No to dlaczego to nie miałoby być overfittingiem skoro dobrałeś ustawienia tak, że dały najlepszy wynik? Wskaźniki powinny dawać solidny zysk w sporym zakresie e nie tylko dla specyficznych ustawień

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1769
0

Do końca to do mnie nie przemawia. Nie mogę przecież testować na jakimś randomowym wskaźniku z randomowymi ustawieniami nie szukając lepszego wskaźnika i lepszych ustawień. Po co w takim razie testować?

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1011
0

Testujesz po to, żeby udowodnić istnienie rynkowej przewagi, a nie po to, żeby idealnie dopasować krzywą kapitału do historycznego szumu. Jeśli Twoja strategia zarabia tylko dla jednego konkretnego ustawienia wskaźnika, a przy jego delikatnej zmianie zaczyna tracić, to znaczy, że padłeś ofiarą overfittingu. Prawidłowe podejście polega na wybraniu optymalnych parametrów na danych in-sample, a następnie zweryfikowaniu ich na danych out-sample, których Twój algorytm nigdy wcześniej nie widział. Dopiero gdy system utrzyma zyskowność na danych, których nie użyto do optymalizacji, masz dowód, że znalazłeś działający model, a nie tylko szczęśliwy traf

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1769
0

Jak najbardziej się z Tobą zgadzam. Choć do końca nie rozumiem czemu tak stygmatyzujesz szukanie parametrów na danych backtestowych (treningowych). Jeśli leżą wg Ciebie zbyt dobrze, to i tak dane out-sample (testowe) to zeryfikują.

Dodatkowo bym tu dorzucił stress testing, czyli intencjonalne szukanie danych które przetestują wskaźniki w różnych sytuacjach (święta, ciągłe wzrosty, nagłe zjazdy gwałtowne wzrosty itd.). Danych które się nie zawierają w tych backtestowych.

Ale nie wiem czemu nie bawić się parametrami skoro i tak na koniec będą stress-testowane i/lub testowane na randomowych danych których nie widziały

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1011
0

Zobacz, jak to wygląda w praktyce:
Jeśli przetestujesz 10 000 kombinacji parametrów na danych in-sample, wybierzesz tę "najlepszą" i sprawdzisz na out-sample, to co zrobisz, gdy test na out-sample wyjdzie słabo? Zapewne wrócisz do danych treningowych, weźmiesz drugą najlepszą kombinację (albo lekko zmienisz założenia wskaźnika) i znowu puścisz na out-sample.

Gdy powtarzasz ten proces, Twoje dane out-sample przestają być testowe, a stają się de facto drugą próbką treningową. W końcu, czystym przypadkiem, trafisz na ustawienia, które zadziałają i tu, i tu. Będziesz myślał, że znalazłeś idealną strategię, a tak naprawdę podwójnie dopasowałeś się do szumu. Danych out-sample powinieneś użyć w idealnym świecie tylko raz, na samym końcu tworzenia systemu, aby potwierdzić hipotezę.

I ogólnie sąsiednie wartości wskaźników imo też powinny dawać fajne zyski a nie tylko jedna konkretna wartość. Czyli musisz być odporny na sub optymalne wartości

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1769
0

Dobrze, więc jak znajdę wskaźnik który wypada dobrze na in i out, to mogę testować dalej na nowym zestawie danych by potwierdzić wartość wskaźnika. Jeśłi wypada źle, to jestem w punkcie wyjścia. Jak wypadną dobrze to jestem w domu. Czy się zgadza?

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1011
0

Chyba tak, w teorii możesz użyć tego nowego zestawu do testu tylko raz bo inaczej modyfikujasz ustawienia znów wpadniesz w pułapkę overfittingu.

Ale tak patrząc szeszej, to jak będziesz odrzucał wiele wskażników bo nie będą dawały zysków itd. to w końcu trafisz na taki, co da ale też może być overfittingiem, taki brute force na poziomie wyżej :D

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1769
0

To prawda, ale też nie mogę akceptować wskaźników które dają spory drawdown.

Dodatkowo, co by zostać po bezpiecznej stronie z dobrym wskaźnikiem, mogę go ciągle poddawać testom w różnych sytuacjach rynkowych z historii.

ŁW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
1

Głównie testy out-of-sample ale liczy się odsetek odrzuceń (jeśli jest taki sam jak w in-sample to źle, musi być dużo mniejszy). Problem w tym, że to marnuje połowę danych. Można próbować testować na losowej połowie rynków i potem weryfikacja na pozostałych. Ja zawsze patrzę na "szerokość" zyskowności - ile rynków jest dochodowa. Przy budowie systemu: każda nowa reguła musi zwiększać zyskowność w szerokim zakresie (sensownych) parametrów. Mediana zyskowności też musi rosnąć. Jeśli mediana spada, odsetek zyskownych rynków spada, ale najlepszy wynik rośnie - to już jest overfitting. Ewentualnie monte carlo i/lub porównanie do losowego trejdingu (moje narzędzie jest tu: https://github.com/alphatica/alis

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.