Fußballergebnisse vorhersagen

Die Analyse „Wie viele Tore fallen in einem Bundesligaspiel?“ unseres letzten Artikels ermöglicht es uns, ein einfaches Computerprogramm zur Vorhersage von Bundesligaergebnissen zu entwickeln. Das Ergebnis der Analyse, wie viele Tore in einem Bundesligaspiel fallen, war dass die Anzahl der Tore pro Spiel gut durch eine Poissonverteilung mit einem zusätzlichem gerade/ungerade-Effekt genähert werden kann. Die Idee ist nun, Spielergebnisse mit Hilfe eines leicht abgewandelten Poissonprozesses zu simulieren. Wie genau das funktionieren kann, wird in diesem Artikel erklärt.

Das Simulationsmodell

Wir nehmen an, dass die Heimmannschaft \( \lambda_{H} \) Tore pro Spiel erzielt, und die Gastmannschaft \( \lambda_{G} \) Tore pro Spiel erzielt. Am Anfang des Spiels haben beide Mannschaften null Tore. Nun werfen wir für jede der 90 Spielminuten einen dreiseitigen Würfel, welcher mit Wahrscheinlichkeit \( \lambda_{H}/90 \) „Heim“ anzeigt, mit Wahrscheinlichkeit \( \lambda_{G}/90 \) „Gast“ anzeigt und mit restlicher Wahrscheinlichkeit eine Null anzeigt. Landet der Würfel auf der „Heim“-Seite, erhöhen wir die Tore der Heimmannschaft um eins. Landet er auf der „Gast“-Seite, bekommt die Gastmannschaft ein Tor. Wird die Null angezeigt, bekommt keine der beiden Mannschaften ein Tor. In jeder Spielminute kann in unserem Modell nur eine der beiden Mannschaften ein Tor erzielen. Nach 90 Würfelwürfen ist das Spiel vorbei. Wir schreiben uns das Ergebnis auf und starten das Spiel von vorne. Nach einer genügend hohen Anzahl von Durchgängen schauen wir uns an, welches Ergebnis mit welcher Häufigkeit aufgetreten ist. Dies ist dann unsere Vorhersage.

Um den angesprochenen gerade/ungerade-Effekt miteinzubeziehen, führen wir noch eine kleine Variation des oben beschriebenen Prozesses ein. Die Annahme ist, dass bei einer knappen Führung für eine der beiden Mannschaften die hinten liegende Mannschaft das Risiko erhöht, um den Ausgleich zu erzielen. Diese Risikoerhöhung führt dazu, dass die Wahrscheinlichkeit für beide Mannschaften steigt, ein Tor zu erzielen. Ist der Spielstand zu einem Zeitpunkt dagegen ausgeglichen, sind beide Mannschaften mehr auf Sicherheit bedacht und die Wahrscheinlichkeit für ein weiteres Tor reduziert sich leicht. In unserer Spielsimulation berücksichtigen wir dies dadurch, dass wir bei einer Tordifferenz von eins die Parameter \(\lambda_{H}\) und \(\lambda_{G}\) um \(\rho\) erhöhen. Bei einer Tordifferenz von null dagegen um \(\rho\) reduzieren. Ist die Tordifferenz weder null noch eins, werden \(\lambda_{H}\) und \(\lambda_{G}\) nicht geändert. (Dies führt dazu, dass \(\lambda_{H}\) und \(\lambda_{G}\) nicht mehr genau den Mittelwerten der Tore pro Spiel beider Mannschaften entsprechen.).

Vergleich von Simulation und empirischen Ergebnissen

Wir testen nun wie gut unser Simulator echte Spielergebnisse wiedergeben kann. Dazu optimieren wir die drei Parameter \(\lambda_{H}\), \(\lambda_{G}\) und \(\rho\) so, dass die simulierte und die empirische Verteilung möglichst gut übereinstimmen. \(\lambda_{H}\) und \(\lambda_{G}\)
wählen wir dafür nah an den empirischen Werten von 1,67 Heimtoren und 1,19 Auswärtstoren pro Spiel. Da \(\rho\) einen endlichen Wert hat und dies den Mittelwert der Tore pro Spiel leicht verschiebt, müssen \(\lambda_{H}\) und \(\lambda_{G}\) jedoch leicht angepasst werden, so dass der Mittelwert der simulierten und der empirischen Verteilung wieder übereinstimmen. Eine gute Wahl für die Parameter ist \(\lambda_{H}=1,71\), \(\lambda_{G}=1,23\) und \(\rho=0,15\). Die folgende Grafik zeigt den Vergleich der simulierten (1 Million Spiele) Verteilung der Tore pro Spiel und der empirischen Verteilung seit 1988.

sim_vs_empirical

Die Übereinstimmung der empirischen und der simulierten Verteilung ist schon sehr gut. Ein noch genaueres Bild erhalten wir, wenn wir das relative Auftreten einzelner Ergebnisse betrachten. Die untere Grafik zeigt hierfür eine Heatmap für die relativen Häufigkeiten der einzelnen Spielresultate. Links: die empirische Verteilung der Bundesligaergebnisse von 1988 bis heute. Mitte: die Verteilung der simulierten Ergebnisse. Rechts: Die Differenz der beiden Verteilungen. (klicken zum Vergrößern)

results_compare

Wie man sieht, wird auch das Auftreten einzelner Ergebnisse sehr gut durch die Simulation wiedergegeben. Die Abweichungen von der empirischen Verteilung bewegen sich lediglich im Rahmen von plus/minus 0.7%.

Vorhersagen einzelner Fußballspiele

Je unterschiedlicher \(\lambda_{H}\) und \(\lambda_{G}\) relativ zueinander sind, desto größer ist die Wahrscheinlichkeit für eine Mannschaft, das Spiel zu gewinnen. Wie genau der Zusammenhang ist, verdeutlicht folgende Grafik:

stochsim_param

Die Grafik zeigt die Wahrscheinlichkeiten für einen Heimsieg (blau), einen Auswärtssieg (grün) und ein Unentschieden (rot) als Funktion von \(\lambda_{H}\) an, wie sie unser Simulationsmodell vorhersagt, wobei wir hier \(\lambda_{G} = 2,86 – \lambda_{H}\)  und \(\rho=0,15\) gewählt haben. Das heißt es gilt immer \(\lambda_{H} + \lambda_{G}=2,86\), was der durchschnittlichen Anzahl von Toren pro Spiel in der Bundesliga entspricht.

Um nun die Wahrscheinlichkeit für den Ausgang einer Bundesligapartie zu bestimmen, müssen lediglich die Parameter \(\lambda_{H}\), \(\lambda_{G}\) und \(\rho\) an die Partie angepasst werden, welche man vorhersagen möchte. Natürlich gibt es hier eine nahezu unendliche Anzahl von Möglichkeiten, die Parameter zu schätzen. Die Güte der Vorhersage hängt dann stark von einer richtigen Einschätzung ab. Wir präsentieren hier nur eine einfache Möglichkeit. Wir nehmen an, dass \(\rho\) bei jeder Partie in etwa gleich ist und wählen daher \(\rho=0,15\), was sich bei dem Vergleich mit der empirischen Ergebnisverteilung als guter Wert herausgestellt hat. Bleiben also nur noch \(\lambda_{H}\) und \(\lambda_{G}\) zu bestimmen. Das naheliegendste Vorgehen ist es für die Parameterbestimmung vorangegangene Bundesligaspiele der beiden Mannschaft heranzuziehen. Nehmen wir an, wir wollen den Ausgang der Partie Mannschaft A gegen Mannschaft B bestimmen. Mannschaft A hat ein Heimspiel. Wir nehmen die letzten N Heimspiele von Mannschaft A und berechnen die gesamte Anzahl Zahl von Toren und Gegentoren in diesen N Spielen. Dasselbe machen wir für die letzten N Auswärtsspiele von Mannschaft B. Dann berechnen wir \(\lambda_{H}\) und \(\lambda_{G}\) folgendermaßen:

\[\lambda_{H} = \frac{ \text{ Heimtore A + Auswärtsgegentore B} }{2N}+0.04 \\\lambda_{G} = \frac{\text{ Heimgegentore A + Auswärtstore B} }{2N}+0.04\]

Die 0.04 Tore pro Spiel addieren wir pauschal auf die Mittelwerte auf. Dies dient der Anpassung der mittleren Anzahl von Toren pro Spiel, wie es sich beim Vergleich mit der empirischen Verteilung im vorangegangene Abschnitt als nützlich erwiesen hat. Wie viele der vergangenen Spiele für die Berechnung in Betracht gezogen werden, ist einem frei überlassen. Wählt man N eher klein, berücksichtigt man mehr die aktuelle Form einer Mannschaft, wählt man es größer, haben Ausreißer weniger Einfluss und man berücksichtigt stärker die langzeitige Performance der Mannschaften.

Wir haben nun alle nötigen Parameter bestimmt und können eine Vorhersage für den Ausgang der Partie durch unsere Simulation bestimmen. Wie gut die Vorhersagen tatsächlich sind, haben wir anhand der vergangenen Bundesligaspiele seit 1988 getestet. Um die Wahrscheinlichkeiten der Ausgänge einer Partie zu bestimmen, wurden nur Daten verwendet, welche theoretisch schon vor der Partie, deren Ausgang wir vorhersagen möchten, verfügbar waren. Die Vorhersagen können wir dann mit den tatsächlichen Ausgängen der Spiele vergleichen. Wir haben die Vorhersagen für N=4, 6, 8 und 10 getestet, wobei keine saisonübergreifenden Daten verwendet wurden. Das heißt für N=4 wurde beispielsweise die erste Prognose erst getroffen, nachdem die Heim- und Gastmannschaft jeweils bereits 4 Heim- und Auswärtsspiele in derselben Saison bestritten hatten. Um unsere Prognose zu testen, nehmen wir zum Beispiel alle Spiele, für welche die Simulation eine Heimsiegwahrscheinlichkeit von 60% vorhergesagt hat, und überprüfen dann, ob die Heimmannschaft tatsächlich in 60% der Fälle gewonnen hat. Um eine  ausreichende Statistik zu erreichen, haben wir alle Prognosen für Heimsiege, Auswärtssiege und Unentschieden in 5%-Intervalle eingeteilt und diese dann mit dem Auftreten der tatsächlichen Ergebnisse verglichen. Hier ist das Ergebnis (klicken zum Vergrößern):

backtest

Auf der x-Achse sind die von unserem Programm vorhergesagten Wahrscheinlichkeiten aufgetragen, auf der y-Achse die empirischen Wahrscheinlichkeiten. Im Idealfall sollten die Datenpunkte auf der gestrichelten Diagonalen liegen. In Anbetracht der Einfachheit des Modells ist die Korrelation erstaunlich gut. Insbesondere die Wahrcheinlichkeiten für Heim- und Auswärtssiege werden gut wiedergegeben. Die Wahrscheinlichkeit für ein Unentschieden scheint dagegen relativ konstant bei etwas über 20% zu liegen, unabhängig davon wie die vorangegangen Spiele ausgegangen sind. Interessanterweise wird die Prognose besser, je größer N ist, das heißt umso mehr Spiele in die Berechnung von \(\lambda_{H}\) und \(\lambda_{G}\) mit eingeflossen sind. Eigentlich hätten wir erwartet, dass es ein ideales N gibt, welches klein genug ist, um die aktuelle Form der Mannschaft zu erfassen, und groß genug, um nicht zu sehr von Ausreißern beeinflusst zu werden. Die Tatsache, dass N=10 die beste Prognose liefert, kann so interpretiert werden, dass sich die Leistungsfähigkeit der Mannschaften innerhalb einer Saison nicht wesentlich ändert, sondern als konstant angesehen werden kann. Je mehr Spiele in die Berechnung einfließen, desto besser wird diese Leistungsfähigkeit erfasst, auch wenn die Spiele schon relativ lange in der Saison zurückliegen.

Prognose für den nächsten Bundesligaspieltag

Zu guter Letzt geben wir noch die Spieltagsprognose für den nächsten Bundesligaspieltag (12. Spieltag, Saison 2014/15) an, so wie sie unser Programm errechnet. Aufgrund des Ergebnisses der Analyse aus dem letzten Abschnitt haben wir alle bisher gespielten Bundesligapartien in die Berechnung von \(\lambda_{H}\) und \(\lambda_{G}\) miteinfließen lassen und \(\rho=0,15\) gewählt. Hier ist das Ergebnis:

Heim Gast Heimsieg Auswärtssieg Unentschieden
Bayern München TSG Hoffenheim  70% 9% 21%
FC Schalke 04 VfL Wolfsburg  39% 30% 31%
Bor. Mönchengladbach Eintracht Frankfurt  52%  21%  27%
1. FSV Mainz 05 SC Freiburg  47%  20%  33%
Hannover 96 Bayer 04 Leverkusen  44% 25% 31%
SC Paderborn 07 Borussia Dortmund  55% 20% 25%
1. FC Köln Hertha BSC  46% 22% 31%
Hamburger SV Werder Bremen 45% 30% 25%
VfB Stuttgart FC Augsburg  27% 41% 32%

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *