PolskieTypy
Analiza

Zbuduj własny model przewidywania wyników piłkarskich

Autor: Łukasz Michalak
Zbuduj własny model przewidywania wyników piłkarskich

Dane, których potrzebujesz, model Poissona krok po kroku – od siatki wyników po korekty, testowanie kroczące bez podglądu w przyszłość oraz arytmetyka, która mówi, kiedy model nie jest wart spędzonych godzin.

Model przewidywania wyników piłkarskich to procedura, która zamienia historię meczów na prawdopodobieństwo każdego rezultatu, a z tej siatki – na kurs dla każdego rynku w ofercie. Podstawą jest jeden rozkład i dwie liczby na mecz: ile bramek spodziewamy się po każdej drużynie. Reszta to higiena danych, korekty i testowanie – i właśnie tam większość domowych modeli po cichu zawodzi.

Krótko.
  • Potrzebujesz wyników meczów z datami i miejscem, a nie średnich sezonowych. Minimum to dwanaście meczów domowych i dwanaście wyjazdowych na klub.
  • Model bazowy to Poisson: dwie wartości oczekiwanych goli tworzą siatkę wyników, a 1X2, sumy bramek i obie drużyny strzelą to sumy komórek w tej siatce.
  • W przykładowym meczu siatka daje 51,4% gospodarzy, 24,5% remisu i 24,1% gości – kursy fair odpowiednio 1,95, 4,08 i 4,14.
  • Testuj krocząco albo wcale: każda wartość obliczona z całego sezonu zawiera wynik meczu, który wyceniasz.
  • Punktem odniesienia nie jest zysk, ale rynek: jeśli twoje prawdopodobieństwa nie są lepsze od tych z kuponu, żaden system stawkowania ich nie uratuje.

Co model musi przebić

Porównanie to nie twój model a rzeczywistość, ale twój model a kurs. Trójdrożny kupon zwykle sumuje się do około 105%, więc marża wynosi mniej więcej pięć punktów rozłożonych na wyniki – obliczenia znajdziesz w przewodniku po marży bukmacherskiej.

To wyznacza granicę. Aby warto było obstawiać, twoje prawdopodobieństwo musi przebić rynkowe o więcej niż marża na danej stronie. Bycie mniej więcej tak dobrym jak kupon to naprawdę spore osiągnięcie, ale i tak systematycznie traci się pieniądze.

Dane, których naprawdę potrzebujesz

Zacznij od jak najmniejszej tabeli wspierającej model: każda dodatkowa kolumna to kolejna rzecz do utrzymania w czystości.

PolePo co jest potrzebneNajczęstsza pułapka
Data i godzina rozpoczęciaPorządkuje dane do testowania i wagowania na świeżośćSortowanie według kolejki zamiast daty po przełożonych meczach
Klub gospodarzy i gościDzieli każdą statystykę według boiskaZmiany nazw i zduplikowana pisownia tworzą dwa kluby
Bramki każdej drużynyJedyna obowiązkowa zmienna wyjściowa modeluZapisywanie bramek z dogrywki lub karnych w meczach pucharowych
RozgrywkiMecze ligowe i pucharowe zachowują się inaczejMieszanie ligi krajowej z meczami europejskimi
Strzały i oczekiwane gole (xG), jeśli dostępneMniej szumne wejście niż same bramkiMieszanie danych od dwóch dostawców z różnymi definicjami
Kurs, który można było wziąćZamienia prognozę w testowalny zakładZapisywanie dzisiejszego kursu i udawanie, że był dostępny wtedy

Dwa sezony jednej ligi wystarczą do budowy, a jeden więcej do testów. Bramki są szumne – drużyna może grać dobrze i przegrać 0-1 – dlatego dane oparte na szansach pomagają, gdy podstawowa wersja już działa: zobacz wyjaśnienie oczekiwanych goli oraz szerszą listę statystyk przewidujących wyniki.

Model podstawowy w trzech krokach

Krok pierwszy – poziom ligi. Załóżmy, że w lidze rozegrano 240 meczów, w których padło 612 bramek: 2,55 na mecz. Gospodarze zdobyli 336 z nich, goście 276, więc linia bazowa gospodarzy to 336 ÷ 240 = 1,40, a gości 276 ÷ 240 = 1,15. Te dwie liczby zawierają już przewagę własnego boiska – mierzoną, a nie zakładaną.

Krok drugi – cztery wskaźniki. Dla gospodarzy podziel bramki zdobyte u siebie przez 1,40, a bramki stracone u siebie przez 1,15. Dla gości podziel bramki zdobyte na wyjeździe przez 1,15, a bramki stracone na wyjeździe przez 1,40. Wynik 1,00 oznacza dokładnie średnią w danej kategorii.

Krok trzeci – dwie wartości oczekiwanych goli. Mnożymy, nigdy nie dodajemy. Powiedzmy, że gospodarze mają w ataku u siebie 1,30, a goście w obronie na wyjeździe 0,91; wtedy wartość dla gospodarzy to 1,40 × 1,30 × 0,91 = 1,65. Jeśli goście mają atak na wyjeździe 1,05, a gospodarze obronę u siebie 0,87, to wartość dla gości wynosi 1,15 × 1,05 × 0,87 = 1,05.

Siatka wyników i co z niej wynika

Liczby bramek podlegają rozkładowi Poissona na tyle dokładnie, by wyceniać: szansa na dokładnie k bramek, gdy oczekiwana liczba to μ, wynosi e−μ × μk ÷ k silnia – wzór opisany w przewodniku po liniach bramkowych. Dla μ = 1,65 szanse gospodarzy na 0, 1, 2, 3 i 4 bramki to odpowiednio 19,2%, 31,7%, 26,1%, 14,4% i 5,9%. Dla μ = 1,05 szanse gości to 35,0%, 36,7%, 19,3%, 6,8% i 1,8%.

Pomnóż każdą wartość gospodarzy przez każdą wartość gości, a otrzymasz siatkę. Wartości są w procentach; wiersze to bramki gospodarzy, kolumny to bramki gości.

Gosp. / Goście01234
06,727,063,701,300,34
111,0911,646,112,140,56
29,159,615,041,770,46
35,035,282,770,970,25
42,082,181,140,400,11

Te dwadzieścia pięć komórek pokrywa 96,9% wyników, więc obliczenia należy prowadzić do ośmiu–dziesięciu bramek, a potem zsumować. Każdy rynek to suma komórek: poniżej przekątnej – wygrana gospodarzy, na przekątnej – remis, powyżej – wygrana gości.

Dodanie całej siatki daje 51,4% gospodarzy, 24,5% remisu i 24,1% gości. Kursy fair to odwrotności: 1 ÷ 0,514 = 1,95, 1 ÷ 0,245 = 4,08, 1 ÷ 0,241 = 4,14. Ta sama siatka mówi, że obie drużyny strzelą w 52,5% przypadków (kurs fair 1,90), a trzy lub więcej bramek padnie w 50,6% (kurs fair 1,97) – jedno obliczenie wycenia cały mecz.

Przykład. Na kuponie widzisz 1,85 / 3,60 / 4,40. Zamiana tych kursów na prawdopodobieństwa daje 54,1% + 27,8% + 22,7% = 104,6%, więc książka ma 4,6% marży – metodę opisujemy w zamianie kursów na prawdopodobieństwo. Wobec twojej siatki kurs na gospodarzy jest zbyt niski: 0,514 × 1,85 − 1 = −4,9%, więc odpuszczasz. Kurs na gości jest opłacalny: 0,241 × 4,40 − 1 = +6,0%, co przy stawce 20 zł daje 1,20 zł wartości oczekiwanej. Przy czterdziestu takich zakładach po 20 zł – łącznie 800 zł postawionych – to około 48 zł, które wpłyną w bardzo nierównomiernej sekwencji.

Korekty, które warto dodać, w kolejności

  1. Wagowanie na świeżość. Mecz z października nie powinien ważyć tyle, co marcowy. Każdemu meczowi przypisz wagę malejącą – sensownym początkiem jest połowa wagi co około trzydzieści meczów – zamiast sztywnej granicy ostatnich dziesięciu.
  2. Kurczenie dla małych próbek. Awansowany klub z sześcioma meczami nie powinien mieć wskaźnika ataku 1,60. Przy k meczach i stałej 10 weź k ÷ (k + 10) surowego wskaźnika, a resztę ze średniej ligowej.
  3. Korekta małych wyników. Niezależny Poisson nieco zaniża 0-0 i 1-1, a zawyża 1-0 i 0-1, ponieważ w rzeczywistym meczu obie liczby bramek nie są niezależne. Przesunięcie tych czterech komórek to standardowe pierwsze udoskonalenie.
  4. Podział według rozgrywek. Mecze pucharowe, mecze o pietruszkę i europejskie zachowują się inaczej: modeluj je osobno lub wyklucz.
  5. Ręczne modyfikacje, oszczędnie. Potwierdzony brak podstawowego napastnika lub bramkarza zasługuje na korektę. Dwie modyfikacje na mecz to model z asystentem; dziesięć to osoba zgadująca przy użyciu większej liczby kroków.

Testowanie bez błędu wyprzedzenia

Błąd wyprzedzenia to każda informacja w teście, której nie miałbyś w momencie obstawiania. Jest cichy, zawsze schlebia i dlatego większość domowych modeli wygląda świetnie na historii, a przynosi straty na żywo.

SkrótCo przeciekaWpływ na wynik
Wskaźniki zbudowane z całego sezonuWynik meczu, który wyceniaszMocno schlebia; model pół zna odpowiedź
Testowanie na tych samych danych, które posłużyły do wyboru progówTwój własny hindsight dotyczący regułKażdy próg wygląda optymalnie
Używanie kursów zamknięcia jako kursu wziętegoInformacje, które pojawiły się po twoim zakładziePrzeszacowuje przewagę, bo kursy zamknięcia są ostrzejsze
Pomijanie meczów z brakującymi danymiZazwyczaj mecze przerwane i nietypoweUsuwa dokładnie te wyniki, które bolą
Porządkowanie według kolejki zamiast godziny rozpoczęciaPrzełożone mecze rozegrane późniejNiewielki, ale systematyczny i zawsze na twoją korzyść

Rozwiązaniem jest testowanie kroczące. Posortuj każdy mecz według czasu rozpoczęcia; dla każdego meczu zbuduj wskaźniki na podstawie meczów, które zakończyły się przed nim, wyceń go, zapisz zakład, który reguła by postawiła, oraz kurs dostępny wtedy – i idź dalej. Zachowaj jeden sezon nietknięty do czasu, aż model będzie gotowy, a pierwszy wynik z niego traktuj jako prawdziwy.

Ważne. Policz każdy zakład, który generuje reguła, także te, które sam byś sobie wybił z głowy. Test, który po cichu pomija mecze, to nie test modelu, ale test twojej pamięci – ta sama dyscyplina dotyczy logu twoich prawdziwych zakładów – zobacz śledzenie zakładów.

Kalibracja: czy procenty są uczciwe?

Zysk to powolna i szumna miara modelu. Dokładność jest szybsza: weź prawdopodobieństwo, które podałeś, odejmij 1, jeśli zdarzenie zaszło, lub 0, jeśli nie, i podnieś różnicę do kwadratu. Im niższa wartość, tym lepiej, a twoją średnią można bezpośrednio porównać z rynkową.

MeczModelRynekWynikBłąd² modeluBłąd² rynku
155%50%Wygrana0,20250,2500
240%45%Przegrana0,16000,2025
362%58%Wygrana0,14440,1764
430%35%Przegrana0,09000,1225
548%52%Wygrana0,27040,2304
625%22%Przegrana0,06250,0484

Model ma łącznie 0,9298 dla sześciu meczów, średnia 0,155; rynek ma 1,0302, średnia 0,172. Na tej garstce model jest dokładniejszy – a sześć meczów niczego nie rozstrzyga, i o to chodzi. Jak długo naprawdę trzeba czekać na werdykt, obliczono w artykule wariacja i wielkość próby.

Przeprowadź tę samą miarę również w podziale na przedziały. Jeśli wszystko, co oceniasz na 60%, wygrywa w około 60% przypadków, model jest skalibrowany; jeśli pewny przedział systematycznie nie dosięga celu, wskaźniki są rozciągane.

Kiedy model nie jest wart budowania

Policz godziny uczciwie: czterdzieści na zbudowanie pierwszej wersji, potem dwie–trzy tygodniowo na aktualizację danych. Załóżmy, że generuje dwadzieścia kwalifikujących się zakładów tygodniowo po 20 zł z rzeczywistą przewagą 3%. To 20 × 20 zł = 400 zł obrotu i 12 zł tygodniowo wartości oczekiwanej – mniej więcej 4 zł na godzinę utrzymania, i to przed pierwszym przegranym miesiącem.

Trzy rzeczy pogarszają tę sytuację: rynki, których nie umiesz modelować, gdzie twoje dane są cieńsze niż operatora; ligi pod dużą profesjonalną uwagą, gdzie kurs już zawiera to, co wie twoja siatka; oraz sam sukces, bo konto, które systematycznie przebija kurs, dostaje obcięte stawki – zobacz ograniczone konta.

Model warto budować, jeśli chcesz mieć liczbę do polemiki zamiast przeczucia i akceptujesz, że jego głównym produktem są odmowy. Jeśli potrzebujesz wyniku bez utrzymania, analiza strukturalna pojedynczego meczu da ci większość korzyści – zobacz jak analizować mecz oraz ligi na stronie turniejów.

FAQ

Czy muszę umieć programować, żeby to zbudować?

Nie do wersji opisanej powyżej. Arkusz kalkulacyjny z jednym wierszem na mecz, czterema wskaźnikami na klub i siatką 25 komórek zrobi wszystko, co opisano. Kod staje się niezbędny przy testowaniu kroczącym na wielu sezonach, bo ręczne odbudowywanie wskaźników przed każdym meczem jest niepraktyczne.

Dlaczego model tak często nie zgadza się z rynkiem?

Zwykle dlatego, że brakuje mu informacji, a nie że znajduje wartość. Nieobecności, zmiana trenera, neutralny stadion i rotacja przed pucharem – to wszystko jest w kursie, a nic z tego nie ma w siatce. Traktuj dużą różnicę jako sygnał do sprawdzenia danych wejściowych i odpuszczaj, gdy nie potrafisz wyjaśnić jej źródła.

Czy powinienem używać oczekiwanych goli (xG) zamiast rzeczywistych bramek?

Tak, gdy podstawowa wersja już działa. Bramki to mała próbka szumnego procesu, a jakość okazji stabilizuje się szybciej, więc wskaźniki zbudowane na xG mniej reagują na jeden dziwny wynik. Uruchom obie wersje na sezon i porównaj ich błędy kwadratowe przed zmianą.

Ile historii powinny używać wskaźniki?

Mniej więcej półtora sezonu z wagami malejącymi, a nie sztywne okno. Zbyt krótkie – jeden wynik 4-0 przepisuje wskaźnik; zbyt długie – opisujesz skład, który już nie istnieje. Kurcz w kierunku średniej ligowej, gdy mniej niż osiem meczów na danym boisku wspiera daną wartość.

Ten artykuł ma charakter wyłącznie informacyjny i nie zachęca do hazardu. Zakłady wiążą się z ryzykiem utraty pieniędzy – nigdy nie stawiaj więcej, niż możesz stracić. 18+. Jeśli hazard przestaje być rozrywką, przeczytaj nasz przewodnik odpowiedzialnej gry i poszukaj pomocy.
ŁM
Łukasz Michalak
Ekspert piłkarski od EFL Cup, Mistrzostw Świata i Eredivisie

Łukasz Michalak od ponad dziesięciu lat śledzi rozgrywki takie jak EFL Cup, Mistrzostwa Świata, Pierwsza Liga (Pari), Copa Sudamericana oraz Eredivisie. W swoich analizach koncentruje się na formie drużyn, składach, statystykach uderzeń, decyzjach trenerskich oraz kalendarzu meczów. Jego podejście do prognoz opiera się na systematycznym badaniu danych i trendów, co pozwala na obiektywną ocenę szans rywali.

Wszystkie teksty autora →