Trafna Pogoda
PolskaBlog
Warsztat
Warsztat

Brzeg psuł nam wyniki. Anatomia jednego błędu (postmortem)

Przez cały lipiec błąd w naszym systemie łączył Brzeg ze stacją pomiarową w Kołobrzegu — 389 km dalej. Wyjaśniamy mechanizm pomyłki, jej skutki i naprawę.

W ostatnich dniach lipca dostawaliśmy od Was liczne pytania dotyczące trafności prognoz w kilku miejscowościach, ze szczególnym uwzględnieniem Brzegu. Zauważyliście, że nasze codzienne rozliczenia wskazywały tam na nietypowo duże błędy. Pragniemy odnieść się do tych obserwacji w sposób rzeczowy i transparentny, zgodnie z misją serwisu Trafna Pogoda.

Przyczyną nie była ani wyjątkowo kapryśna pogoda, ani słabość modeli prognostycznych. Źródłem problemu okazał się subtelny błąd w naszym wewnętrznym systemie parowania miast ze stacjami pomiarowymi IMGW. Błąd ten, obecny przez cały lipiec, został zidentyfikowany i naprawiony 1 sierpnia, dzięki spostrzegawczości jednego z naszych użytkowników.

Problem dotyczył zaledwie 3 z 396 miast w naszej bazie, co stanowi mniej niż 1% całości. Prognozy i rozliczenia dla pozostałych 393 miejscowości przez cały ten okres były przetwarzane poprawnie. Poniżej przedstawiamy szczegółową analizę tego, co się wydarzyło.

Jak doszło do błędu w parowaniu stacji?

Każdego dnia nasz system automatycznie przypisuje do każdego z prognozowanych miast najbliższą stację meteorologiczną IMGW, aby móc zweryfikować trafność prognozy z rzeczywistym pomiarem. Jednym z mechanizmów dopasowania było porównywanie nazw. Niestety, logika ta dopuszczała sytuację, w której nazwa miasta zawierała się w nazwie stacji, nawet jeśli nie była jej początkiem.

To właśnie ta reguła spowodowała trzy błędne połączenia. Nazwa „Brzeg” została odnaleziona wewnątrz nazwy „Kołobrzeg”, co skutkowało przypisaniem do miasta w województwie opolskim stacji pomiarowej oddalonej o 389 km, położonej nad Bałtykiem. Analogiczna sytuacja wystąpiła dla Ełku (znalezionego w „Ostrołęce”, 97 km odległości) oraz Ujścia (w „Świnoujściu”, 190 km odległości).

Dlaczego automatyczne kontrole jakości danych nie wychwyciły tak dużych odległości? Ponieważ system zakładał, że dopasowanie po nazwie jest idealne i z definicji przypisywał mu odległość 0,0 km. To uniemożliwiło standardowym procedurom wykrycie anomalii.

Jakie były skutki tego błędu dla prognoz i rozliczeń?

Konsekwencje były najbardziej widoczne w przypadku Brzegu. Przez cały lipiec średni błąd prognozy temperatury dla tego miasta wynosił 3,97°C, podczas gdy średnia krajowa w tym samym okresie to 1,11°C. Systematycznie prognozowaliśmy pogodę dla ciepłego, śródlądowego miasta, a weryfikowaliśmy ją pomiarem z chłodniejszego, nadmorskiego Kołobrzegu, gdzie temperaturę obniżała bryza morska.

Skutkowało to regularnym „przegrzewaniem” prognozy, które osiągnęło apogeum 31 lipca. Tego dnia prognoza dla Brzegu wynosiła 33°C, podczas gdy „pomiar” z Kołobrzegu wskazał zaledwie 22°C, co dało rekordowy, lecz wynikający z błędu, wynik 11°C rozbieżności.

Wystąpił również skutek drugiego rzędu. Nasza autorska metoda korekty M5, opisana w sekcji metodologia, dostraja prognozę na podstawie ostatnich pomiarów z lokalnej stacji. W przypadku Brzegu, Ełku i Ujścia oznacza to, że przez cały lipiec prognozy mogły być nieznacznie „ściągane” w kierunku pogody panującej w zupełnie innej części kraju. Mieszkańców tych trzech miast, a zwłaszcza Brzegu, serdecznie za te niedogodności przepraszamy.

Anatomia błędu: trzy miasta, którym system podpiął stacje z zupełnie innej części Polski — bo ich nazwy zawierają się w nazwach innych miejscowości.
Anatomia błędu parowania stacjiNazwa miasta odnaleziona w środku nazwy innej stacji:BrzegKOŁOBRZEG389 kmopolskie → stacja nad BałtykiemEłkOSTROŁĘKA97 km„ełk” ukryte w środku „Ostrołęki”UjścieŚWINOUJŚCIE190 kmwielkopolskie → stacja na wyspiedopasowanie po nazwie raportowało odległość „0,0 km” — dlatego kontrole dystansu milczałySkutek w liczbach — średni błąd lipca (temperatura):Brzeg (pomiar z Kołobrzegu)3,97°Cśrednia krajowa1,11°C

Jak naprawiliśmy problem i skorygowaliśmy dane?

Natychmiast po zdiagnozowaniu problemu, 1 sierpnia, wprowadziliśmy poprawkę do systemu. Usunęliśmy logikę dopasowania „w środku słowa”, pozostawiając jedynie parowanie po pełnej nazwie lub po prefiksie (np. miasto Warszawa do stacji Warszawa-Okęcie). Następnie wycofaliśmy z naszego archiwum wszystkie błędne pomiary dla trzech miast z całego lipca, zachowując ich kopię zapasową.

Wprowadziliśmy również nową, bardziej rygorystyczną zasadę: jeśli w promieniu 15 km od centrum miasta nie znajduje się żadna wiarygodna stacja pomiarowa, w rozliczeniu pojawi się informacja „brak pomiaru”. Uważamy, że brak danych jest lepszy niż dane fałszywe.

Po oczyszczeniu danych przeliczyliśmy rozliczenie z 31 lipca. Ogólna trafność prognoz dla Polski wzrosła z 86% do 87%, a średni błąd spadł z 1,19°C do 1,13°C. Najtrudniejszym miastem do prognozy tego dnia okazały się Police (prognoza 27°C, pomiar 23°C), gdzie za błąd odpowiadało gwałtowne ochłodzenie po przejściu burzy. Korekty dotknęły też nieznacznie inne dni: 26 lipca (trafność z 79% na 80%) i 28 lipca (z 98% na 99%).

Co jeszcze mogło zepsuć ten błąd? Wyniki audytu

Po wdrożeniu poprawki przeprowadziliśmy wewnętrzny audyt, aby ocenić pełny wpływ błędu na działanie serwisu. Poniżej przedstawiamy jego wyniki.

Elementy, na które błąd miał wpływ:

  • Rozliczenia dzienne: Były zniekształcone przez cały lipiec z powodu trzech błędnych punktów danych. Archiwum zostało już oczyszczone, a kluczowe raporty przeliczone.
  • Prognozy dla 3 miast: Jak wspomniano, metoda M5 mogła powodować niewielkie odchylenia prognoz. Od 1 sierpnia prognozy dla Brzegu, Ełku i Ujścia są już generowane na podstawie poprawnych danych.
  • Krajowa korekta biasu D+2: Nasz system stosuje ogólnokrajową korektę dla prognozy pojutrza, wyliczaną na podstawie błędów ze wszystkich miast. Trzy błędne punkty zawyżały ją o około 0,04°C. Wartość ta skoryguje się automatycznie przy najbliższym cyklu na oczyszczonych danych.

Elementy, które pozostały nienaruszone:

  • Wagi modeli i backtesty: Kalibracja naszego zespołu prognostycznego opiera się na niezależnym źródle danych (reanaliza ERA5), więc błąd w pomiarach IMGW nie miał na nią wpływu.
  • Prognozy wiatru: Porywy wiatru są parowane ze stacjami wyłącznie na podstawie współrzędnych geograficznych (do 15 km), więc ten mechanizm od początku działał poprawnie.
  • Nagłówki i teksty dnia: Automatyczne opisy i podsumowania na stronie głównej generowane są na podstawie prognoz, a nie pomiarów weryfikacyjnych, dlatego pozostały wolne od błędu.

Najczęściej zadawane pytania

Czy błąd wpływał na prognozy, czy tylko na rozliczenia?

Błąd wpływał na oba te elementy, ale wyłącznie w trzech wymienionych miastach. Wpływ na rozliczenia był bezpośredni i znaczący. Wpływ na prognozy był pośredni i subtelniejszy, wynikający z działania metody M5, która uczy się na lokalnych błędach z ostatnich dni. Dla pozostałych 393 miast zarówno prognozy, jak i rozliczenia były poprawne.

Skąd wiadomo, że reszta miast jest poprawnie sparowana?

W ramach audytu po incydencie zweryfikowaliśmy wszystkie 396 parowań. Błędna logika „zawierania się w środku słowa” została usunięta. Pozostałe metody parowania — po pełnej nazwie, po prefiksie oraz po odległości geograficznej — są bezpieczne. W przypadku parowania po odległości, system zawsze zapisuje rzeczywisty dystans, co pozwala na bieżącą kontrolę i wykluczenie podobnych pomyłek w przyszłości.

Dlaczego publiczne rozliczenia są tak ważne?

Ten incydent jest najlepszym dowodem na to, dlaczego fundamentem naszego serwisu jest codzienna, publiczna weryfikacja. Gdybyśmy nie publikowali szczegółowych tabel z wynikami dla każdego miasta, ten ukryty błąd mógłby pozostać w systemie przez wiele miesięcy. To właśnie dzięki temu, że dane były jawne, zarówno my, jak i Wy mogliśmy zauważyć, że z Brzegiem „coś jest nie tak”.

System, który nie rozlicza się ze swojej pracy, nie jest w stanie znajdować własnych błędów. My wierzymy w transparentność. Pokazujemy nasze wyniki, także te gorsze, ponieważ jest to jedyna droga do budowania wiarygodnej i coraz lepszej prognozy pogody. Dziękujemy za Waszą czujność i zapraszamy do dalszego śledzenia naszych analiz na blogu.