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.
| Pole | Po co jest potrzebne | Najczęstsza pułapka |
|---|---|---|
| Data i godzina rozpoczęcia | Porządkuje dane do testowania i wagowania na świeżość | Sortowanie według kolejki zamiast daty po przełożonych meczach |
| Klub gospodarzy i gości | Dzieli każdą statystykę według boiska | Zmiany nazw i zduplikowana pisownia tworzą dwa kluby |
| Bramki każdej drużyny | Jedyna obowiązkowa zmienna wyjściowa modelu | Zapisywanie bramek z dogrywki lub karnych w meczach pucharowych |
| Rozgrywki | Mecze ligowe i pucharowe zachowują się inaczej | Mieszanie ligi krajowej z meczami europejskimi |
| Strzały i oczekiwane gole (xG), jeśli dostępne | Mniej szumne wejście niż same bramki | Mieszanie danych od dwóch dostawców z różnymi definicjami |
| Kurs, który można było wziąć | Zamienia prognozę w testowalny zakład | Zapisywanie 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ście | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 0 | 6,72 | 7,06 | 3,70 | 1,30 | 0,34 |
| 1 | 11,09 | 11,64 | 6,11 | 2,14 | 0,56 |
| 2 | 9,15 | 9,61 | 5,04 | 1,77 | 0,46 |
| 3 | 5,03 | 5,28 | 2,77 | 0,97 | 0,25 |
| 4 | 2,08 | 2,18 | 1,14 | 0,40 | 0,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
- 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.
- 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.
- 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.
- Podział według rozgrywek. Mecze pucharowe, mecze o pietruszkę i europejskie zachowują się inaczej: modeluj je osobno lub wyklucz.
- 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ót | Co przecieka | Wpływ na wynik |
|---|---|---|
| Wskaźniki zbudowane z całego sezonu | Wynik meczu, który wyceniasz | Mocno schlebia; model pół zna odpowiedź |
| Testowanie na tych samych danych, które posłużyły do wyboru progów | Twój własny hindsight dotyczący reguł | Każdy próg wygląda optymalnie |
| Używanie kursów zamknięcia jako kursu wziętego | Informacje, które pojawiły się po twoim zakładzie | Przeszacowuje przewagę, bo kursy zamknięcia są ostrzejsze |
| Pomijanie meczów z brakującymi danymi | Zazwyczaj mecze przerwane i nietypowe | Usuwa dokładnie te wyniki, które bolą |
| Porządkowanie według kolejki zamiast godziny rozpoczęcia | Przełożone mecze rozegrane później | Niewielki, 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ą.
| Mecz | Model | Rynek | Wynik | Błąd² modelu | Błąd² rynku |
|---|---|---|---|---|---|
| 1 | 55% | 50% | Wygrana | 0,2025 | 0,2500 |
| 2 | 40% | 45% | Przegrana | 0,1600 | 0,2025 |
| 3 | 62% | 58% | Wygrana | 0,1444 | 0,1764 |
| 4 | 30% | 35% | Przegrana | 0,0900 | 0,1225 |
| 5 | 48% | 52% | Wygrana | 0,2704 | 0,2304 |
| 6 | 25% | 22% | Przegrana | 0,0625 | 0,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.