Look-ahead bias to błąd polegający na wykorzystaniu w backteście informacji, której inwestor nie mógł znać w symulowanym momencie decyzji. Może nim być późniejsza rewizja danych makroekonomicznych, raport finansowy przypisany do końca kwartału zamiast daty publikacji, dzisiejszy skład indeksu albo cena zamknięcia użyta jednocześnie do wygenerowania sygnału i jego wykonania.
Problem rzadko wygląda jak jawne odwołanie do jutrzejszej ceny. Częściej powstaje w łączeniu tabel, korektach danych, definicji świecy lub kalendarzu rebalancingu. Dlatego samo uporządkowanie rekordów według daty nie wystarcza. Trzeba odtworzyć, kiedy informacja stała się dostępna, a następnie oddzielić ten moment od czasu obserwacji, decyzji i wykonania.
Jedna data nie opisuje historii informacji
Dane inwestycyjne mają co najmniej kilka zegarów. Czas obserwacji mówi, jakiego okresu dotyczy wartość. Czas publikacji określa, kiedy źródło ją ujawniło. Czas odbioru opisuje, kiedy system ją zarejestrował. Dalej występują czas decyzji i czas możliwej egzekucji. Backtest musi respektować ich kolejność.
Przykładowo wynik spółki może dotyczyć kwartału zakończonego 31 marca, lecz zostać opublikowany kilka tygodni później. Przypisanie danych fundamentalnych do 31 marca pozwala modelowi handlować informacją przed jej ujawnieniem. SEC rozróżnia w systemie EDGAR koniec okresu raportowego, oficjalną datę złożenia i dokładny czas przyjęcia dokumentu. Właśnie ostatnie z tych pól jest bliższe granicy dostępności informacji dla strategii.
Reguła kontrolna: rekord może wpłynąć na sygnał tylko wtedy, gdy jego available_at jest wcześniejsze od czasu decyzji.
Skąd najczęściej bierze się look-ahead bias?
Rewizje danych makroekonomicznych
Dzisiejsza historia inflacji, PKB czy zatrudnienia nie musi odpowiadać liczbom znanym uczestnikom rynku w przeszłości. Urzędy statystyczne publikują kolejne szacunki i rewizje. Serwis ALFRED banku Rezerwy Federalnej w St. Louis archiwizuje dane FRED wraz z okresami, w których wartości zostały po raz pierwszy udostępnione i później zmienione. Użycie najnowszej wersji całej szeregu do decyzji z dawnych lat może więc poprawić test wiedzą, której wtedy nie było.
Rozwiązaniem są dane vintage lub zapytanie point-in-time: dla każdej historycznej daty pobieramy wersję szeregu znaną właśnie wtedy. Jeżeli takiej historii nie ma, ograniczenie trzeba jawnie opisać i przetestować wrażliwość strategii na opóźnienia oraz rewizje.
Fundamenty przypisane do okresu zamiast publikacji
Wskaźnik wyliczony z zysku za dany kwartał staje się użyteczny dopiero po publikacji raportu. Baza może jednak podać koniec okresu jako główną datę rekordu. Standardowe połączenie po dacie dopasuje wtedy wartość do zbyt wczesnych notowań. Potrzebne jest połączenie typu as-of, które wybiera ostatnią wersję dostępną przed decyzją, z uwzględnieniem strefy czasowej, godzin sesji i rozsądnego bufora operacyjnego.
Nawet oficjalny znacznik przyjęcia dokumentu nie musi oznaczać natychmiastowej dostępności w każdym kanale. SEC podaje, że dokumenty są zwykle dostępne na sec.gov w ciągu 1–3 minut od czasu przyjęcia przez EDGAR, natomiast interfejsy API mają własne, zwykle krótkie opóźnienia przetwarzania. Backtest powinien modelować realny kanał danych, a nie najlepszy możliwy przypadek.
Sygnał i transakcja na tej samej cenie
Jeśli reguła wymaga pełnej ceny zamknięcia z dnia t, nie można bez dodatkowego modelu założyć wykonania po tym samym zamknięciu. Ostateczna wartość jest znana dopiero po zakończeniu interwału. Bezpieczniejszą konwencją jest decyzja po zamknięciu i egzekucja na następnym dostępnym zdarzeniu, z uwzględnieniem spreadu, luki i poślizgu.
Analogiczny problem występuje wewnątrz świecy. Strategia nie może najpierw poznać maksimum i minimum całej minuty, a następnie wybrać kolejności transakcji, która najbardziej jej odpowiada. Dane zagregowane nie pokazują ścieżki cen wewnątrz interwału.
Uniwersum, skład indeksu i zdarzenia korporacyjne
Dzisiejsza lista spółek wykorzystana dla całej historii przenosi do testu wiedzę o tym, które podmioty przetrwały. To szczególny przypadek przecieku powiązany z błędem przeżywalności. Podobnie aktualne klasyfikacje branżowe, informacje o przejęciach czy późniejsze korekty symboli mogą zmieniać historyczne wybory.
Ceny skorygowane o splity i dywidendy są potrzebne do poprawnego pomiaru zwrotu, ale wymagają jasnej semantyki. Algorytm nie powinien korzystać z przyszłego współczynnika korekty jako informacji o sygnale. Warto oddzielić surową cenę używaną do decyzji i egzekucji od szeregu total return służącego do księgowania wyniku.
Operacje statystyczne i uczenie maszynowe
Przeciek może powstać bez żadnej zewnętrznej publikacji. Standaryzacja zmiennej średnią i odchyleniem z całej próby wykorzystuje przyszły rozkład. Centrowana średnia krocząca obejmuje obserwacje po obu stronach daty. Losowy podział rekordów czasowych może umieścić późniejszy reżim w zbiorze treningowym, a nakładające się etykiety przenoszą część przyszłej stopy zwrotu między zbiory.
Transformacje należy dopasowywać wyłącznie na danych dostępnych w danym oknie treningowym. Walidacja powinna zachować porządek czasu, a przy etykietach obejmujących przyszły horyzont potrzebne jest usunięcie nakładających się obserwacji między treningiem i testem. To uzupełnia, ale nie zastępuje analizy walk-forward.
Minimalny model danych point-in-time
Audytowalny magazyn danych nie powinien nadpisywać historii jedną „najlepszą” wartością. Dla rekordu warto przechowywać:
- event_time: okres lub zdarzenie, którego dotyczy obserwacja;
- published_at: czas oficjalnej publikacji u źródła;
- available_at: moment, od którego strategia mogła użyć danych;
- ingested_at: czas zapisu w lokalnym systemie;
- version lub vintage: identyfikator rewizji;
- source: źródło i reguły jego kalendarza.
Zapytanie dla decyzji o czasie T wybiera najnowszą wersję rekordu spełniającą warunek available_at < T. Zwykły join po dacie obserwacji nie zapewnia tej własności. Ważna jest też polityka duplikatów: dwie publikacje dotyczące tego samego okresu powinny pozostać osobnymi wersjami, a nie zostać po cichu scalone.
Jak wykrywać przeciek przed publikacją wyniku?
- Zapisz chronologię decyzji. Dla każdego sygnału określ granicę informacji, czas obliczenia, najwcześniejsze wykonanie i strefę czasową.
- Dodaj test opóźnienia. Przesuń dostępność danych o jeden interwał lub realistyczny bufor. Duża zmiana wyniku wymaga wyjaśnienia.
- Odetnij przyszłość fizycznie. Uruchom kod na migawce danych kończącej się w dniu decyzji. Wynik powinien być identyczny z wynikiem uzyskanym na pełnej bazie dla tej samej daty.
- Zmieniaj rekordy po dacie decyzji. Losowa modyfikacja przyszłych obserwacji nie może zmienić wcześniejszego sygnału. To prosty test jednostkowy zależności czasowej.
- Porównaj wersję „latest” z vintage. Różnica pokazuje, jak wiele wyniku zależy od późniejszych rewizji.
- Audytuj losowe transakcje. Dla próby decyzji odtwórz wszystkie wartości wejściowe, ich wersje i znaczniki dostępności.
- Sprawdź granice sesji. Publikacja po zamknięciu rynku nie powinna wpływać na transakcję po wcześniejszej cenie zamknięcia.
Warto także uruchamiać te kontrole automatycznie po zmianie dostawcy, schematu lub biblioteki. Test, który był poprawny przy jednej definicji znacznika czasu, może przestać być poprawny po migracji danych.
Przykład: sygnał po raporcie kwartalnym
Załóżmy, że strategia kupuje spółki po dodatniej niespodziance wynikowej. Kwartał kończy się 31 marca, raport zostaje przyjęty przez system źródłowy 7 maja po zamknięciu sesji, a lokalny feed zapisuje go minutę później. Najwcześniejsza decyzja korzystająca z pełnego raportu może powstać po jego odbiorze, a realistyczna egzekucja rozpoczyna się na kolejnej sesji.
Backtest przypisujący zysk do 31 marca tworzy ponad miesiąc sztucznej przewagi. Test używający ceny zamknięcia z 7 maja do sygnału i tej samej ceny do wykonania nadal wyprzedza możliwą kolejność zdarzeń. Dopiero relacja: publikacja → odbiór → decyzja → następna wykonalna cena zachowuje chronologię.
Look-ahead bias a inne błędy backtestu
Look-ahead bias dotyczy czasu dostępności informacji. Błąd przeżywalności dotyczy selekcji podmiotów znanych z perspektywy końca próby. Data snooping i overfitting wynikają z wielokrotnego szukania reguł aż do znalezienia atrakcyjnego rezultatu. Problemy mogą wystąpić jednocześnie, lecz wymagają innych zabezpieczeń.
Dane point-in-time nie ochronią przed przeuczeniem, a próbka poza okresem strojenia nie naprawi raportu udostępnionego zbyt wcześnie. Rzetelny backtesting strategii potrzebuje kontroli chronologii, historycznego uniwersum, kosztów, testu poza próbą i jawnego rejestru wszystkich sprawdzonych wariantów.
Najważniejsze wnioski
Look-ahead bias jest błędem architektury danych i procesu decyzyjnego, nie tylko błędem kodu. Najważniejsze pytanie nie brzmi „jakiej daty dotyczy wartość?”, lecz „od kiedy model mógł ją znać?”. Odpowiedź powinna być zapisana w danych i możliwa do odtworzenia dla każdej transakcji.
Praktyczny standard obejmuje wersjonowanie danych, znaczniki dostępności, połączenia as-of, jawne opóźnienie między sygnałem i egzekucją oraz testy niewrażliwości wcześniejszych decyzji na późniejsze rekordy. Nie gwarantuje to przyszłych wyników, ale usuwa źródło przewagi, którego nie da się było wykorzystać w rzeczywistym czasie.
Źródła
- Federal Reserve Bank of St. Louis, ALFRED oraz Real-Time Periods — archiwalne wersje danych i informacja znana w danym momencie.
- U.S. Securities and Exchange Commission, Webmaster Frequently Asked Questions — znaczenie czasu przyjęcia raportu i opóźnienie publikacji dokumentu.
- U.S. Securities and Exchange Commission, EDGAR Application Programming Interfaces — zakres API i harmonogram aktualizacji danych.
- Federal Reserve Bank of Philadelphia, Real-Time Data Set for Macroeconomists — kompletne historie kolejnych wersji danych makroekonomicznych.
- David H. Bailey, Jonathan M. Borwein, Marcos López de Prado, Qiji Jim Zhu, The Probability of Backtest Overfitting — ryzyko dopasowania testów historycznych i walidacja procesu badawczego.
Źródła sprawdzono 10 listopada 2026 r. Czasy publikacji i opóźnienia zależą od źródła, kanału danych, rynku oraz warunków operacyjnych.
