Jak tworzymy tabele prognozowane?

W tym tekście:
  1. Co chcemy właściwie przewidzieć?
  2. Wykorzystujemy własny ranking Elo
    1. Dlaczego ranking Elo jest przydatny?
  3. Bierzemy prawdziwy terminarz
  4. Zachowujemy wszystkie rzeczywiste wyniki
  5. Pozostałe mecze symulujemy 100 000 razy
  6. Nie przewidujemy jednego wyniku każdego meczu
  7. Czym jest rozkład Poissona?
    1. Przykład działania rozkładu Poissona
  8. Od prawdopodobieństwa do konkretnego wyniku
  9. Dlaczego faworyt nie może zawsze wygrywać?
  10. Niespodzianki są częścią futbolu
  11. 100 000 sezonów zamiast jednego
  12. Prognozowana tabela jest średnią z wielu scenariuszy
  13. Średnia może wyglądać inaczej niż jakikolwiek rzeczywisty sezon
  14. Terminarz może zmienić przewidywaną kolejność
  15. Każdy mecz ma swoje prawdopodobieństwa
  16. Prawdopodobieństwo nie jest gwarancją wyniku
  17. Dlaczego 100 000 symulacji zamiast 1000?
  18. Kolejny przykład: faworyt kontra outsider
  19. Co się stanie, jeśli faworytów będzie bardzo dużo?
  20. Futbol jest probabilistyczny
  21. Najważniejsza zaleta: pokazujemy niepewność
  22. Dlaczego nasza metoda jest lepsza od jednej ręcznie ustalonej prognozy?
  23. Jedna symulacja może wyglądać realistycznie — ale nadal jest tylko jednym scenariuszem
  24. Cały sezon jest ze sobą powiązany
  25. Co właściwie otrzymujemy po 100 000 symulacji?
  26. Przykładowe case study
  27. Nie próbujemy przewidzieć konkretnej niespodzianki
  28. Dlaczego jedna „najbardziej prawdopodobna" tabela może być myląca?
  29. Tabela prognozowana nie zastępuje aktualnej tabeli
  30. Jak czytać prognozowaną tabelę?
  31. Model nie przewiduje przyszłości — model pokazuje prawdopodobne scenariusze
  32. Podsumowanie

Prognozowana tabela ligowa pokazuje, jak może wyglądać końcowa klasyfikacja rozgrywek po rozegraniu wszystkich spotkań. Nie jest to jednak zwykłe typowanie wyników kolejnych meczów, lecz coś znacznie bardziej złożonego.

Zamiast zakładać, że faworyt wygra każde spotkanie, a drużyny o podobnej sile podzielą się punktami, wykorzystujemy model probabilistyczny, który bierze pod uwagę siłę drużyn, rzeczywisty terminarz oraz nieprzewidywalność pojedynczych meczów. Dla każdego nierozgranego spotkania generujemy możliwe wyniki, a następnie cały sezon symulujemy 100 000 razy – każda symulacja może wyglądać inaczej: w jednej faworyt wygrywa, w drugiej remisuje, a w trzeciej niespodziewanie przegrywa. Dopiero po wykonaniu wszystkich symulacji uśredniamy ich rezultaty i otrzymujemy prognozowaną tabelę. To ważne rozróżnienie: nasza tabela nie mówi „tak będzie wyglądała końcowa klasyfikacja", ale raczej „tak wygląda średni obraz ogromnej liczby możliwych scenariuszy pozostałej części sezonu".

Co chcemy właściwie przewidzieć?

W trakcie sezonu znamy część przyszłości, ale nie znamy jej całej. Wiemy, ile punktów każda drużyna zdobyła do tej pory, znamy wyniki rozegranych spotkań i wiemy, jakie mecze pozostały w terminarzu. Nie wiemy natomiast, ile punktów każda drużyna zdobędzie w pozostałych meczach – i to właśnie ten fragment sezonu próbujemy zasymulować.

Jeżeli w lidze znajduje się 20 drużyn, a każda z nich rozegra 38 spotkań, to po 20 kolejkach znamy już wyniki pierwszych 20 meczów każdej drużyny, ale przed nami pozostaje jeszcze 18 spotkań. Nie musimy ponownie przewidywać pierwszych 20 meczów, ponieważ one już się wydarzyły – ich wyniki są rzeczywistością i pozostają niezmienione. Model musi więc odpowiedzieć na konkretne pytanie: co może wydarzyć się w pozostałych spotkaniach i jak wpłynie to na końcową tabelę? Aby na nie odpowiedzieć, wykorzystujemy kilka elementów.

Wykorzystujemy własny ranking Elo

Pierwszym i bardzo ważnym elementem modelu jest nasz własny ranking Elo, który służy do określania względnej siły drużyn. Każdy zespół posiada swoją ocenę, która zmienia się wraz z wynikami kolejnych spotkań, dzięki czemu możemy porównać dwie drużyny jeszcze przed ich meczem. Jeżeli jedna drużyna ma znacznie wyższy ranking Elo od drugiej, model uznaje ją za faworyta; jeżeli różnica jest niewielka, spotkanie jest znacznie bardziej wyrównane.

To bardzo ważne, ponieważ nie chcemy przewidywać przyszłych wyników wyłącznie na podstawie pozycji w aktualnej tabeli. Aktualna tabela mówi nam, ile punktów drużyna zdobyła do tej pory, ale nie musi dokładnie odzwierciedlać jej obecnej siły. Dwie drużyny mogą mieć po 30 punktów, a jedna może być według naszego modelu wyraźnie silniejsza od drugiej. Podobnie drużyna z większą liczbą punktów nie musi być automatycznie faworytem każdego kolejnego spotkania. Ranking Elo pozwala więc stworzyć punkt wyjścia do oceny prawdopodobieństwa wyniku każdego meczu.

Dlaczego ranking Elo jest przydatny?

Futbol jest sportem, w którym wyniki pojedynczych spotkań są bardzo zmienne. Silniejsza drużyna może przegrać ze słabszą, zespół walczący o mistrzostwo może zremisować z drużyną znajdującą się w dolnej części tabeli, a faworyt może mieć po prostu słabszy dzień. Dlatego sama informacja „Drużyna A jest lepsza od Drużyny B" nie wystarcza – potrzebujemy odpowiedzi na pytanie, jak duża jest różnica między tymi drużynami i jak powinna ona wpłynąć na prawdopodobieństwo różnych wyników. Tutaj właśnie przydaje się ranking Elo.

Im większa różnica w sile obu zespołów, tym większe prawdopodobieństwo zwycięstwa silniejszej drużyny. Nie oznacza to jednak, że słabszy zespół otrzymuje zerową szansę – niespodzianka zawsze pozostaje możliwa.

Bierzemy prawdziwy terminarz

Drugim elementem modelu jest rzeczywisty terminarz rozgrywek. To pozornie oczywista rzecz, ale ma ogromne znaczenie dla prognozowanej tabeli. Nie wystarczy wiedzieć, że jedna drużyna jest silniejsza od drugiej – musimy również wiedzieć, z kim każda drużyna zagra w pozostałej części sezonu. Drużyna może mieć wysokie Elo, ale przed nią może znajdować się bardzo trudny terminarz. Inny zespół może mieć nieco niższą ocenę siły, ale w ostatnich kolejkach może grać głównie z przeciwnikami znajdującymi się niżej w rankingu.

W efekcie terminarz może mieć ogromny wpływ na końcową klasyfikację. Dlatego w naszych symulacjach nie tworzymy hipotetycznego zestawu spotkań – wykorzystujemy rzeczywiste mecze znajdujące się w terminarzu. Jeżeli w następnej kolejce drużyna A gra z drużyną B, a drużyna C gra z drużyną D, dokładnie takie mecze są symulowane. Każde spotkanie ma znaczenie, ponieważ wynik jednego meczu wpływa na liczbę punktów dwóch drużyn, a tym samym na ich pozycję w końcowej tabeli.

Zachowujemy wszystkie rzeczywiste wyniki

Prognozowana tabela nie próbuje przewidywać przeszłości. Jeżeli 10 kolejek zostało już rozegranych, znamy wyniki tych spotkań i są one częścią rzeczywistego sezonu. Dlatego w każdej symulacji zaczynamy od aktualnego stanu tabeli. Jeżeli Drużyna A ma 35 punktów, Drużyna B 32 punkty, a Drużyna C 29 punktów, każda z nich rozpoczyna każdą symulację odpowiednio z 35, 32 i 29 punktami. Nie losujemy ponownie wyników rozegranych spotkań – jedynie dodajemy punkty zdobyte w symulowanych meczach, które dopiero się odbędą.

Dzięki temu tabela prognozowana jest połączeniem dwóch elementów: rzeczywistości i prawdopodobnej przyszłości.

Pozostałe mecze symulujemy 100 000 razy

To najważniejsza część całego procesu. Dla każdego pozostałego meczu model określa prawdopodobieństwo różnych wyników, a następnie generuje konkretny wynik spotkania. Cały proces jest następnie wielokrotnie powtarzany.

Dlaczego akurat 100 000 symulacji? Z punktu widzenia samej metody już 10 000 powtórzeń daje miarodajny obraz i pozwala uzyskać stabilne wyniki. Wybraliśmy jednak 100 000 symulacji, ponieważ nasz serwer jest w stanie obsłużyć taką ich liczbę, a większa liczba powtórzeń sprawia, że przypadkowe wahania mają coraz mniejsze znaczenie i wyniki stają się bardziej uśrednione. Ma to znaczenie szczególnie wtedy, gdy różnice między drużynami są niewielkie.

Przy zaledwie 1000 symulacji, po ponownym wygenerowaniu wyników – na przykład po odświeżeniu cache – prognozowana tabela mogłaby wyglądać zauważalnie inaczej. Jedna seria losowań mogłaby sprawić, że dana drużyna zajęłaby 5. miejsce, a w kolejnej znalazłaby się na 6. lub 7. miejscu. Zmiana o jedną czy dwie pozycje nie musi wtedy oznaczać rzeczywistej zmiany prognozy – może być po prostu efektem losowości wynikającej z niewielkiej liczby symulacji.

Przy ponad 10 000 powtórzeń takie przypadkowe odchylenia są znacznie mniejsze, a przy 100 000 symulacji średni rezultat jest jeszcze stabilniejszy. Nie oznacza to oczywiście, że 100 000 symulacji przewidzi przyszłość – oznacza to jedynie, że możemy znacznie dokładniej oszacować wynik naszego modelu probabilistycznego i ograniczyć wpływ przypadku wynikającego z samego procesu losowania.

W praktyce 100 000 symulacji jest więc kompromisem pomiędzy jakością wyniku a możliwościami technicznymi. Nie potrzebujemy miliona czy dziesięciu milionów powtórzeń, aby uzyskać użyteczny rezultat, a jednocześnie 100 000 daje nam znacznie większą stabilność niż niewielka liczba symulacji, którą serwer wykonuje bez problemu.

Każda symulacja jest osobnym możliwym scenariuszem końcówki sezonu. W jednej z nich faworyci mogą wygrać większość swoich spotkań, w innej może dojść do kilku niespodzianek, a w jeszcze innej mogą pojawić się serie remisów albo niespodziewane zwycięstwa drużyn znajdujących się niżej w rankingu. To właśnie jest kluczowa różnica pomiędzy symulacją probabilistyczną a zwykłym typowaniem.

Nie przewidujemy jednego wyniku każdego meczu

Można byłoby stworzyć bardzo prosty model: załóżmy, że drużyna A jest silniejsza od drużyny B, więc wpisujemy wynik 2:0 i przechodzimy do następnego meczu, powtarzając tę samą logikę. Problem polega na tym, że taki model tworzy tylko jeden scenariusz.

Jeżeli w rzeczywistości drużyna A ma 70% szans na zwycięstwo, nie oznacza to, że powinna wygrać w 100% naszych przewidywań – wręcz przeciwnie. Jeżeli chcemy prawidłowo odwzorować prawdopodobieństwo, musimy pozwolić modelowi również na pozostałe możliwości. Drużyna A może wygrać, może zremisować, ale może również przegrać, i wszystkie te możliwości powinny być obecne w symulacji z odpowiednią częstotliwością.

Czym jest rozkład Poissona?

Do generowania wyników spotkań wykorzystujemy rozkład Poissona. Dla osoby niezajmującej się statystyką nazwa może brzmieć skomplikowanie, ale podstawowa idea jest stosunkowo prosta. Rozkład Poissona jest modelem matematycznym pozwalającym opisywać liczbę zdarzeń, które mogą wystąpić w określonym przedziale czasu, gdy znamy oczekiwaną częstotliwość ich występowania. W naszym przypadku takim zdarzeniem jest gol.

Chcemy oszacować, ile goli może zdobyć dana drużyna w meczu. Jeżeli model ocenia, że drużyna powinna zdobyć średnio około 1,8 gola, nie oznacza to, że wpisujemy jej dokładnie 1,8 gola – piłkarze nie mogą przecież zdobyć takiej liczby bramek. Zamiast tego wykorzystujemy rozkład prawdopodobieństwa, który pozwala wygenerować różne możliwe liczby goli: 0, 1, 2, 3, 4, 5..., z których każda ma określone prawdopodobieństwo.

Przykład działania rozkładu Poissona

Wyobraźmy sobie mecz dwóch drużyn, w którym model ocenia, że gospodarze powinni zdobyć średnio około 1,8 gola, a goście 0,9 gola. Nie oznacza to, że przewidywany wynik to 1,8:0,9 – to byłoby oczywiście niemożliwe. Zamiast tego dla każdej drużyny generujemy prawdopodobną liczbę goli.

Może powstać wynik 1:0, ale równie dobrze 1:1, 2:0, 2:1, 0:0 czy 3:1. Może pojawić się również wynik znacznie bardziej niespodziewany. Właśnie dlatego rozkład Poissona dobrze pasuje do modelowania liczby goli w piłce nożnej – pozwala przejść od wartości oczekiwanej do całego rozkładu możliwych wyników.

Od prawdopodobieństwa do konkretnego wyniku

To rozróżnienie jest bardzo ważne. Model nie mówi: „Drużyna A wygra 2:0". Model mówi raczej: „Biorąc pod uwagę siłę obu drużyn, istnieje określone prawdopodobieństwo różnych wyników tego spotkania". Dzięki temu pojedyncza symulacja może wygenerować jeden konkretny wynik, na przykład 2:0, w następnej symulacji może być 1:1, w kolejnej 2:1, a w następnej 0:1.

Każdy z tych wyników może być możliwy, choć oczywiście nie każdy z taką samą częstotliwością. Po wykonaniu 100 000 symulacji zaczynamy widzieć statystyczny obraz całego rozkładu wyników.

Dlaczego faworyt nie może zawsze wygrywać?

To jeden z najważniejszych elementów naszej metodologii. Wyobraźmy sobie spotkanie zdecydowanego faworyta z bardzo słabym przeciwnikiem. Patrząc wyłącznie na siłę obu drużyn, można powiedzieć: „Faworyt jest dużo lepszy, dopiszmy mu trzy punkty". Ale to nie jest realistyczny sposób modelowania sezonu – nawet bardzo silne drużyny tracą punkty ze słabszymi przeciwnikami.

Jeżeli model ocenia, że faworyt ma 70% szans na zwycięstwo, to pozostałe 30% nie może po prostu zniknąć. W uproszczeniu możemy wyobrazić sobie 10 takich spotkań: 7 razy wygrywa faworyt, 2 razy pada remis, a 1 raz wygrywa underdog. Oczywiście w rzeczywistym modelu nie wykonujemy tylko dziesięciu prób i nie zakładamy sztywno takiego rozkładu – to jedynie przykład pokazujący ideę. Przy 100 000 symulacji podobne prawdopodobieństwa są odzwierciedlane w ogromnej liczbie różnych scenariuszy, dlatego w jednej konkretnej symulacji faworyt może przegrać. I to jest prawidłowe zachowanie modelu, a nie jego błąd.

Niespodzianki są częścią futbolu

Gdybyśmy zakładali, że każda drużyna zawsze osiąga wynik zgodny z jej rankingiem, prognozowana tabela byłaby bardzo przewidywalna – najsilniejsze zespoły zawsze zdobywałyby trzy punkty ze słabszymi, a drużyny o podobnej sile zawsze remisowałyby ze sobą. Futbol jest jednak bardziej skomplikowany.

Mecz jest pojedynczym wydarzeniem. Jeden błąd obrońcy, niewykorzystany rzut karny, czerwona kartka, świetny występ bramkarza czy przypadkowy gol mogą całkowicie zmienić wynik. Nie próbujemy przewidzieć, która konkretna niespodzianka wydarzy się w rzeczywistości – nie da się tego zrobić z dużą pewnością. Zamiast tego uwzględniamy fakt, że niespodzianki są statystycznie możliwe. To fundamentalna różnica.

100 000 sezonów zamiast jednego

Wyobraźmy sobie, że przed nami pozostało 10 kolejek. Możemy stworzyć jedną prognozę: faworyt wygrywa z ostatnią drużyną, drugi faworyt również wygrywa, dwa podobne zespoły remisują, a gospodarz wygrywa kolejne spotkanie. Otrzymujemy jeden zestaw wyników i jedną końcową tabelę – ale skąd wiemy, że właśnie taki scenariusz jest właściwy? Nie wiemy.

Dlatego zamiast wybierać jeden scenariusz, tworzymy 100 000 różnych scenariuszy. W jednym sezonie symulowanym faworyt zdobywa trzy punkty, w drugim remisuje, w trzecim przegrywa, a w jeszcze innym może wygrać kilka spotkań z rzędu. Każdy taki scenariusz wpływa na końcową tabelę, a po 100 000 powtórzeń możemy zobaczyć, jak wygląda średni rezultat całego zbioru możliwych scenariuszy.

Prognozowana tabela jest średnią z wielu scenariuszy

To prowadzi do najważniejszego wniosku: prognozowana tabela nie jest jedną prognozą przyszłości – jest uśrednionym obrazem 100 000 symulowanych sezonów. Jeżeli drużyna ma średnio 67 punktów w naszych symulacjach, nie oznacza to, że według modelu na pewno zakończy sezon z dokładnie 67 punktami. W jednej symulacji może mieć 61 punktów, w innej 64, w kolejnej 70, a jeszcze w innej 75.

Po uśrednieniu wszystkich scenariuszy może otrzymać właśnie około 67 punktów, dlatego liczby w przewidywanej tabeli należy interpretować jako wartości oczekiwane, a nie gwarantowane wyniki.

Średnia może wyglądać inaczej niż jakikolwiek rzeczywisty sezon

To również ważna cecha symulacji. Załóżmy, że dana drużyna w 100 000 symulacji kończy sezon z różną liczbą punktów, co może wyglądać przykładowo tak:

  • 60 punktów — 10% symulacji,
  • 65 punktów — 20%,
  • 70 punktów — 30%,
  • 75 punktów — 25%,
  • 80 punktów — 15%.

Średnia może wynieść około 70 punktów, ale nie oznacza to, że model przewiduje dokładnie 70 punktów jako najbardziej prawdopodobny wynik. 70 punktów jest średnią wszystkich scenariuszy.

Terminarz może zmienić przewidywaną kolejność

Ranking Elo nie jest jedynym czynnikiem – dwie drużyny mogą mieć podobną siłę, ale różny terminarz. Załóżmy, że Drużyna A ma bardzo trudne mecze z trzema najsilniejszymi rywalami, podczas gdy Drużyna B ma w tym samym czasie mecze głównie z zespołami ze środka i dołu tabeli. Nawet jeżeli A i B mają podobne Elo, ich przewidywane zdobycze punktowe mogą się znacząco różnić. To jeden z powodów, dla których prognozowana tabela może być interesująca nawet wtedy, gdy aktualna tabela wydaje się już dość jednoznaczna.

Aktualna tabela mówi, co wydarzyło się do tej pory. Prognozowana tabela uwzględnia również to, co dopiero może się wydarzyć.

Każdy mecz ma swoje prawdopodobieństwa

Symulacja całego sezonu pozwala również pokazać informacje dotyczące pojedynczych spotkań. Przy każdym meczu w terminarzu prezentujemy procentowe szanse na poszczególne wyniki, na przykład:

  • zwycięstwo gospodarzy — 55%,
  • remis — 25%,
  • zwycięstwo gości — 20%.

Taki zapis jest znacznie bardziej informacyjny niż samo wskazanie jednego faworyta. Jeżeli napiszemy „Drużyna A jest faworytem", nie wiemy, jak dużym – 55% i 90% oznaczają zupełnie inną sytuację. W obu przypadkach Drużyna A jest faworytem, ale w pierwszym meczu niespodzianka jest stosunkowo prawdopodobna, natomiast w drugim zdecydowanie mniej.

Prawdopodobieństwo nie jest gwarancją wyniku

Warto również pamiętać, że 70% nie oznacza „ten zespół na pewno wygra" – oznacza jedynie, że w modelowanych warunkach zwycięstwo tej drużyny jest oczekiwane częściej niż pozostałe wyniki. Jeżeli drużyna ma 70% szans na wygraną, nadal istnieje 30% szans na inny rezultat, i to właśnie te pozostałe 30% sprawia, że symulacje są interesujące.

W pojedynczym meczu wydarzyć może się praktycznie wszystko. Dopiero duża liczba symulacji pozwala zobaczyć, jak często poszczególne scenariusze powinny występować.

Dlaczego 100 000 symulacji zamiast 1000?

Liczba powtórzeń ma znaczenie przede wszystkim dla stabilności wyniku. Przy 1000 symulacji model nadal może dostarczyć interesujących informacji, jednak problem polega na tym, że losowość pojedynczych wyników może mieć stosunkowo duży wpływ na końcową średnią. Jeżeli po wygaśnięciu cache uruchomimy symulację ponownie, generator losowy może stworzyć nieco inny zestaw wyników.

W efekcie prognozowana tabela może zmienić się o jedną albo dwie pozycje, szczególnie w przypadku drużyn, które znajdują się bardzo blisko siebie. Nie oznacza to, że model nagle uznał jedną drużynę za znacznie silniejszą – może to być wyłącznie efekt losowości przy zbyt małej liczbie powtórzeń.

Przy 10 000 symulacji wynik staje się już znacznie bardziej stabilny i można uznać taką liczbę za wystarczająco dużą, aby uzyskać miarodajny obraz. My idziemy jednak dalej i wykonujemy 100 000 symulacji, ponieważ nasza infrastruktura jest w stanie je obsłużyć, a większa liczba powtórzeń oznacza, że poszczególne przypadkowe wyniki mają coraz mniejszy wpływ na średnią. Innymi słowy, im więcej symulacji, tym bardziej uśredniony i stabilny staje się rezultat.

Nie oznacza to jednak, że różnica pomiędzy 100 000 a 1 000 000 symulacji będzie równie duża jak różnica pomiędzy 1000 a 100 000 – wraz ze wzrostem liczby powtórzeń korzyść z kolejnych symulacji maleje. Dlatego 100 000 jest dla nas rozsądnym punktem, który zapewnia bardzo dużą stabilność bez niepotrzebnego obciążania infrastruktury.

Kolejny przykład: faworyt kontra outsider

Załóżmy, że zespół znajdujący się na pierwszym miejscu gra z drużyną walczącą o utrzymanie. Ranking Elo wyraźnie wskazuje lidera jako faworyta, a model może wyliczyć na przykład:

  • 75% — zwycięstwo lidera,
  • 15% — remis,
  • 10% — zwycięstwo outsidera.

W pojedynczej prognozie ktoś prawdopodobnie wpisałby po prostu trzy punkty dla lidera. My tego nie robimy. W naszych symulacjach około 75% takich scenariuszy będzie prowadziło do zwycięstwa lidera, ale pozostałe scenariusze również są możliwe – w części symulacji padnie remis, a w części outsider wygra. Dzięki temu końcowa tabela prognozowana nie zakłada idealnego świata, w którym każdy faworyt zawsze wykorzystuje swoją przewagę.

Co się stanie, jeśli faworytów będzie bardzo dużo?

Wyobraźmy sobie, że lider ma 10 pozostałych meczów i w każdym jest zdecydowanym faworytem. Można pomyśleć: „Skoro jest faworytem w każdym meczu, prawdopodobnie wygra wszystkie". To jednak nie jest właściwy sposób interpretacji prawdopodobieństwa.

Jeżeli każdy mecz ma wysokie, ale nie stuprocentowe prawdopodobieństwo zwycięstwa, prawdopodobieństwo wygrania wszystkich spotkań jest niższe niż prawdopodobieństwo wygrania pojedynczego meczu. Wystarczy jedna niespodzianka, aby liczba zdobytych punktów była niższa – symulacje uwzględniają ten efekt automatycznie. Dlatego 10 pojedynczych „faworytów" nie oznacza automatycznie 30 punktów.

Futbol jest probabilistyczny

Nie istnieje model, który zna przyszłe wyniki meczów – możemy natomiast próbować oszacować prawdopodobieństwa. To właśnie robimy: ranking Elo dostarcza informacji o sile drużyn, terminarz mówi nam, z kim będą grały, model wyników pozwala określić prawdopodobne rezultaty spotkań, a rozkład Poissona pozwala wygenerować możliwe liczby goli.

Następnie 100 000 symulacji pozwala połączyć te elementy w ogromną liczbę możliwych wersji końcówki sezonu, a uśrednienie wyników pozwala stworzyć prognozowaną tabelę.

Najważniejsza zaleta: pokazujemy niepewność

Zwykła tabela prognozowana może sprawiać wrażenie, że przyszłość jest znana, na przykład:

  1. Drużyna A — 82 pkt
  2. Drużyna B — 76 pkt
  3. Drużyna C — 71 pkt

Taki zapis wygląda jak konkretna prognoza. Nasza metoda ma inną interpretację: jeżeli Drużyna A ma średnio 82 punkty, nie oznacza to, że model uważa 82 punkty za gwarantowany rezultat. To średnia z wielu możliwych przyszłości.

Ta różnica jest bardzo ważna, ponieważ pozwala zachować informację o niepewności. W sporcie niepewność nie jest błędem modelu – jest częścią rzeczywistości, którą model powinien uwzględniać.

Dlaczego nasza metoda jest lepsza od jednej ręcznie ustalonej prognozy?

Najprostsza metoda wyglądałaby tak: znajdź faworyta, daj mu zwycięstwo, w wyrównanym meczu wpisz remis, powtórz dla wszystkich spotkań i policz punkty. To jest szybkie i łatwe, ale jednocześnie bardzo mocno upraszcza rzeczywistość.

Nasza metoda robi coś innego. Określamy siłę drużyn za pomocą własnego rankingu Elo, pobieramy rzeczywisty terminarz, zachowujemy wszystkie dotychczas rozegrane wyniki, dla każdego pozostałego meczu określamy prawdopodobieństwo różnych wyników, generujemy możliwe wyniki z wykorzystaniem rozkładu Poissona, symulujemy pozostałą część sezonu 100 000 razy, a następnie uśredniamy rezultaty wszystkich symulacji. Dzięki temu nie musimy decydować, które konkretnie mecze zakończą się niespodzianką – model sam uwzględnia możliwość różnych scenariuszy.

Jedna symulacja może wyglądać realistycznie — ale nadal jest tylko jednym scenariuszem

To ważne nawet wtedy, gdy jedna prognoza wygląda bardzo rozsądnie. Możemy stworzyć tabelę, w której najlepsi wygrywają większość spotkań, słabsze zespoły tracą punkty, a mecze wyrównanych drużyn kończą się remisami – taka tabela może wyglądać bardzo realistycznie. Problem w tym, że jest tylko jednym z wielu możliwych scenariuszy, a nie wiemy, dlaczego akurat ten scenariusz miałby być właściwy.

Symulacja 100 000 razy pozwala zamiast tego zobaczyć, co dzieje się, gdy dopuścimy wszystkie rozsądne możliwości wynikające z przyjętych prawdopodobieństw.

Cały sezon jest ze sobą powiązany

W prognozowanej tabeli nie analizujemy każdego meczu w oderwaniu od pozostałych. Wynik jednego spotkania wpływa na końcową liczbę punktów jednej drużyny, ale jednocześnie odbiera możliwość zdobycia punktów jej przeciwnikowi. Jeżeli faworyt przegra z outsiderem, sytuacja zmienia się dla obu zespołów; jeżeli dwa zespoły walczące o europejskie puchary zremisują, oba tracą możliwość zdobycia trzech punktów.

Dlatego symulujemy całe pozostałe rozgrywki, a nie tylko niezależne pojedyncze mecze – każda wygenerowana wersja sezonu prowadzi do własnej końcowej tabeli.

Co właściwie otrzymujemy po 100 000 symulacji?

Po wykonaniu wszystkich symulacji możemy dla każdej drużyny obliczyć między innymi średnią liczbę punktów, średnią pozycję w tabeli czy prawdopodobieństwo zajęcia określonych pozycji. Najważniejszym elementem prezentowanym użytkownikowi jest jednak prognozowana tabela, czyli uśredniony rezultat wszystkich przeprowadzonych symulacji.

To pozwala spojrzeć na sezon z zupełnie innej perspektywy. Nie pytamy tylko: „Kto jest pierwszy teraz?" – możemy również zapytać: „Jak wygląda przewidywany obraz całego sezonu po uwzględnieniu wszystkich pozostałych meczów?"

Przykładowe case study

Wyobraźmy sobie ligę, w której lider ma 50 punktów, a druga drużyna 47. Na pierwszy rzut oka lider jest w bardzo dobrej sytuacji. Załóżmy jednak, że liderowi pozostały mecze z trzema bardzo silnymi zespołami, podczas gdy jego rywal ma znacznie łatwiejszy terminarz.

Jeżeli przygotowalibyśmy prostą prognozę, moglibyśmy powiedzieć: „Lider ma trzy punkty przewagi, więc prawdopodobnie utrzyma pierwsze miejsce". Symulacja może jednak pokazać zupełnie inny obraz: w części scenariuszy lider utrzymuje przewagę, w części traci punkty w trudnych meczach, a w części drugi zespół wykorzystuje łatwiejszy terminarz i wyprzedza lidera.

Średnia z 100 000 symulacji może pokazać, że różnica pomiędzy obiema drużynami na koniec sezonu jest niewielka. Aktualna tabela i przewidywana tabela odpowiadają więc na dwa różne pytania.

Nie próbujemy przewidzieć konkretnej niespodzianki

To jedna z najważniejszych rzeczy, które warto zrozumieć. Jeżeli model przewiduje, że faworyt ma 70% szans na zwycięstwo, nie wiemy, w którym konkretnie meczu wydarzy się pozostałe 30%. Nie możemy powiedzieć: „Właśnie ten mecz będzie niespodzianką" – model mówi jedynie, że w dużej liczbie podobnych scenariuszy niespodzianki powinny pojawiać się z określoną częstotliwością.

To właśnie dlatego duża liczba symulacji jest tak ważna. Nie próbujemy zgadnąć jednej konkretnej przyszłości. Próbujemy opisać zbiór wielu możliwych przyszłości.

Dlaczego jedna „najbardziej prawdopodobna" tabela może być myląca?

Załóżmy, że ktoś przygotowuje prognozę końcowej tabeli i musi przypisać każdej drużynie konkretne wyniki. W każdym meczu wybiera najbardziej prawdopodobny rezultat: jeżeli gospodarze mają 45% szans na wygraną, 30% na remis i 25% na porażkę, wpisuje zwycięstwo; jeżeli w kolejnym meczu goście mają 45%, remis 35%, a gospodarze 20%, wpisuje zwycięstwo gości – i tak dalej. Na końcu otrzymujemy jedną tabelę.

Problem polega na tym, że najbardziej prawdopodobny wynik każdego pojedynczego meczu nie musi tworzyć najbardziej reprezentatywnego obrazu całego sezonu. Wybierając zawsze jeden wynik, ignorujemy pozostałe prawdopodobne scenariusze. Symulacja pozwala tego uniknąć.

Tabela prognozowana nie zastępuje aktualnej tabeli

Warto również podkreślić, że przewidywana tabela nie ma zastępować oficjalnej klasyfikacji. Aktualna tabela pokazuje rzeczywisty stan rozgrywek, natomiast prognozowana tabela odpowiada na inne pytanie: jak może wyglądać końcowy stan rozgrywek po uwzględnieniu pozostałych spotkań i ich prawdopodobnych wyników? Obie informacje są więc wartościowe, ale z różnych powodów – aktualna tabela opisuje teraźniejszość, a prognozowana tabela próbuje opisać możliwą przyszłość.

Jak czytać prognozowaną tabelę?

Najlepiej nie traktować jej jako listy pewnych pozycji. Jeżeli drużyna znajduje się na pierwszym miejscu z dużą przewidywaną liczbą punktów, oznacza to, że w naszych symulacjach często osiągała bardzo dobre rezultaty.

Jeżeli dwie drużyny mają bardzo podobną przewidywaną liczbę punktów, ich końcowe pozycje mogą być znacznie bardziej niepewne. Różnica dwóch punktów w średniej nie musi oznaczać, że jedna drużyna „na pewno" zakończy sezon wyżej – może natomiast wskazywać, że obie drużyny znajdują się w bardzo podobnej sytuacji i wynik sezonu zależy od wielu możliwych scenariuszy.

Model nie przewiduje przyszłości — model pokazuje prawdopodobne scenariusze

To chyba najlepszy sposób na podsumowanie całej metodologii. Nie wiemy, co wydarzy się w pozostałych meczach. Nie wie tego również żaden algorytm.

Możemy jednak wykorzystać dostępne informacje, aby stworzyć model prawdopodobieństwa. Nasz ranking Elo dostarcza informacji o sile drużyn, rzeczywisty terminarz pokazuje, jakie mecze zostały do rozegrania, dotychczasowe wyniki określają aktualny stan tabeli, rozkład Poissona pozwala generować prawdopodobne liczby goli, a 100 000 symulacji pozwala przełożyć te założenia na ogromną liczbę możliwych wersji końcówki sezonu. Prognozowana tabela jest następnie uśrednionym obrazem tych wszystkich scenariuszy.

Podsumowanie

Nasza prognozowana tabela powstaje w kilku etapach. Najpierw wykorzystujemy własny ranking Elo, aby określić względną siłę drużyn, a następnie korzystamy z prawdziwego terminarza, dzięki czemu każda symulacja rozgrywa dokładnie te mecze, które rzeczywiście pozostały w sezonie.

Zachowujemy wszystkie rzeczywiste wyniki i rozpoczynamy symulacje od aktualnego stanu tabeli, a pozostałe spotkania symulujemy 100 000 razy, wykorzystując model oparty na rozkładzie Poissona. Rozkład ten pozwala modelować liczbę goli zdobywanych przez drużyny, dzięki czemu nie ograniczamy się do jednego z góry ustalonego wyniku.

W każdej symulacji mogą wydarzyć się niespodzianki – faworyt może wygrać, może zremisować, ale może również przegrać. Jeżeli ma 70% szans na zwycięstwo, nie oznacza to, że wygrywa w każdej symulacji, a pozostałe 30% prawdopodobieństwa również musi znaleźć odzwierciedlenie w wynikach. Dzięki temu nie próbujemy przewidzieć, która konkretna niespodzianka wydarzy się w rzeczywistości – zamiast tego uwzględniamy możliwość wystąpienia wielu różnych niespodzianek w całym sezonie.

Po wykonaniu 100 000 symulacji otrzymujemy 100 000 różnych końcowych tabel. Prognozowana tabela jest ich uśrednionym obrazem. Dodatkowo przy każdym nierozgranym spotkaniu pokazujemy procentowe szanse na zwycięstwo gospodarzy, remis i zwycięstwo gości, dzięki czemu można zobaczyć, jak model ocenia każde pojedyncze spotkanie.

To sprawia, że nasza metoda różni się od prostego typowania. Nie zakładamy, że wszyscy faworyci wygrają wszystkie swoje mecze, ani że każdy wyrównany mecz zakończy się remisem. Nie wybieramy jednego scenariusza i nie przedstawiamy go jako przyszłości. Zamiast tego symulujemy 100 000 możliwych wersji sezonu i sprawdzamy, jak wygląda ich wspólny, uśredniony obraz.

Właśnie dlatego prognozowana tabela jest przede wszystkim narzędziem do analizy prawdopodobnych scenariuszy, a nie obietnicą tego, co wydarzy się na boisku.