WM-Vorhersage – Das Finale

2 Kommentare

Die WM-Vorrunde ist vorbei. Heute beginnen die ersten Spiele des Achtelfinales. Höchste Zeit also, neue Vorhersagen abzuliefern. Bei den bisherigen Spielen war unser favorisiertes Random Forest Modell mit knapp 46% Genauigkeit leider nicht so gut, wie wir es uns erhofft hatten. Ein möglicher Grund für das schlechte Abschneiden ist die „Heimspielproblematik“, auf die wir weiter unten noch eingehen werden. Die genauere Analyse heben wir uns aber für einen späteren Blog-Post auf. Unser Ziel war ja ursprünglich, den Weltmeister vorherzusagen. Das sollten wir so schnell wie möglich erledigen – am besten noch bevor der Schiedsrichter das Endspiel abpfeift.

Jeder gegen Jeden

Für die Gruppenphase waren die Begegnungen vorgegeben. Es war leicht, genau diese Begegnungen in unser Modell zu füttern und entsprechende Vorhersagen zu erhalten. Die KO-Runde ist dynamischer. Es steht mittlerweile fest, wer es ins Achtelfinale geschafft hat. Aber niemand weiß, welche Teams tatsächlich im Laufe des Turniers noch gegeneinander antreten werden. Deshalb haben wir einfach eine Liste aller theorethisch möglichen Begegnungen erstellt und diese in unsere Feature-Berechnungs-Maschinerie gesteckt. Die folgende Liste ist ein kleiner Ausschnitt der berechneten Siegwahrscheinlichkeiten:

"b_team_home";"b_team_away";"HOME_WIN";"AWAY_WIN"
"ARG";"ARG";0,5;0,5
"ARG";"BEL";0,446;0,554
"ARG";"BRA";0,436;0,564
"ARG";"CHE";0,44;0,56
"ARG";"CHL";0,456;0,544
"ARG";"COL";0,434;0,566
"ARG";"CRI";0,508;0,492
...

Es ist schwer zu erkennen, wer nun in dieser Liste tatsächlich die Nase vorne hat. Eine Visualisierung erleichtert dies. Dafür erstellen wir zuerst eine 8×8-Matrix. Jeder Eintrag der Matrix entspricht einer Begegnung. In den Zeilen werden die Heimmannschaften abgetragen. In den Spalten die Auswärtsmannschaften. Der Eintrag 56,8% in der Zeile DEU und der Spalte FRA entspricht also der Wahrscheinlichkeit, dass Deutschland im Spiel DEU-FRA siegreich vom Platz geht. Folgendes R-Skript wurde für die Berechnung der Matrix verwendet:

allgame_predictions <- predict(
    model,
    newdata=all_possible_wm_games,
    type="prob",
    na.action=na.fail)
 
teams <- unique(wm2014_all$b_team_home)
# each cell is the probability of the row-team winning against the colum team
winprob_matrix <- matrix(0, nrow=length(teams), ncol=length(teams))
rownames(winprob_matrix) <- teams
colnames(winprob_matrix) <- teams
for(x in teams) {
  for(y in teams) {
    winprob_matrix[x,y] <- allgame_predictions[
      all_possible_wm_games$b_team_home == x & 
      all_possible_wm_games$b_team_away==y,
      "HOME_WIN"]
  }
}

Diese Matrix nehmen wir nun als Grundlage für eine Heatmap. Zuerst werden die Zeilen und Spalten so sortiert, dass die Teams mit der durchschnittlich höchsten Siegwahrscheinlichkeit weiter oben platziert werden. In der Grafik ist eine rote Färbung ein Zeichen dafür, dass ein Sieg der „Zeilenmannschaft“ wahrscheinlicher ist, während eine blaue Färbung ein Zeichen für einen Sieg der „Spaltenmannschaft“ ist. Das Feld in der zweiten Zeile (von unten) und der ersten Spalte (von links) ist leicht rot. Ein Indiz für einen deutschen Sieg im Spiel DEU-FRA.

winprob-heatmap-ko-allgames


Anmerkung: In der Matrix sind die Zeilen von oben nach unten nummeriert. In der Grafik ist die Zeilennummerierung genau umgekehrt. Wenn jemand einen Tipp hat, wie man das mit „levelplot“ anders machen kann, bitte kurz einen Kommentar hinterlassen.

Verflixte Heimspiele

Beim Erstellen der Heatmap ist noch ein interessantes Phänomen aufgefallen. Bei einigen Begegnungen macht es einen großen Unterschied, in welcher Reihenfolge die Teams aufgeschrieben werden. So würde z.B. unser Modell beim Spiel FRA-DEU auf einen Sieg von Frankreich tippen (rotes Kästchen in der ersten Zeile und zweiten Spalte). Würde man das Modell nach einer Vorhersage für das Spiel DEU-FRA fragen, wäre die Antwort eindeutig ein deutscher Sieg (rotes Kästchen in der zweiten Zeile und ersten Spalte). Seltsam, oder?

Nicht wirklich: Für das Training hatten wir unter anderem Daten aus EM- und WM-Qualifikation verwendet. Bei Qualifikationsspielen macht es sehr wohl einen Unterschied, ob das Spiel Deutschland-Frankreich auf deutschem oder französischem Boden stattfindet. Es gibt einen statistischen Vorteil für die Heimmannschaft. Nur bei der WM ist die Lage anders. Die einzige Mannschaft, die dieses Jahr wirklich „zu Hause“ spielt, ist Brasilien. Um das Problem zu lösen, sind mehrere Ansätze denkbar:

Mittelwert bilden
Für die Vorhersage eines Spiels X-Y könnte einfach der Durchschnitt der Wahrscheinlichkeiten für Spiel X-Y und Y-X verwendet werden. Da wir bereits die Wahrscheinlichkeiten für alle möglichen Spiele der KO-Runde in Matrixform haben, lässt sich das mit dem einfachen Kommando (winprobs + (1-t(winprobs)))/2“ erledigen. Nachteil: Ob dieses Modell tatsächlich besser ist, wissen wir nicht. Wir haben es nicht getestet. Es ist reine Vermutung, dass das Modell bessere Vorhersagen für die WM liefert. Da es trotzdem vielversprechend und einfach umzusetzen ist, haben wir für die Vorhersage der KO-Runde diesen Weg gewählt. Eine Heatmap der resultierenden Wahrscheinlichkeiten gibt es in unserem GitHub-Projekt.

Heimvorteil ignorieren
Wir können einfach die Reihenfolge aller Begegnungen in unserem Trainingsdatensatz zufällig wählen. Wenn anschließend die Klassen HOME_WIN und AWAY_WIN gleich groß sind, wird unser Modell auch das Prinzip „Heimvorteil“ nicht mehr lernen können. Nachteil: Es ist nicht von der Hand zu weisen, dass es im Fußball einen Vorteil für die Heimmannschaft gibt. Wenn wir auf dieses Detail verzichten, verlieren wir Informationen und erhalten womöglich ein noch schlechteres Modell.

Neues Feature „Heimvorteil“
Statt den Heimvorteil implizit durch die Reihenfolge der Kontrahenten zu trainieren, können wir ein explizites Feature „Heimvorteil“ einbauen. Das Feature „Heimvorteil“ kann zum Beispiel den Wert -1 haben, wenn die erste Mannschaft zu Hause spielt, den Wert +1, falls die zweite Mannschaft zu Hause spielt, und den Wert 0, falls keine Mannschaft zu Hause spielt. Die Daten können dann vor dem Trainieren des Modells so gemischt werden, dass gleich viele Heimvorteile für die erste und die zweite Mannschaft (also gleich viele +1 und -1) vorkommen. Das ist wahrscheinlich die sauberste und erfolgversprechendste Lösung. Nachteil: Es ist auch die aufwendigste Lösung und wir haben nur wenig Zeit. Schließlich müssen wir bald wieder die deutsche Mannschaft anfeuern 😉

Wer wird denn nun Weltmeister?

Die alles eintscheidende Frage. Um sie zu beantworten, haben wir ein kleines Groovy-Skript zusammengestellt, das die Wahrscheinlichkeiten aus der Jeder-gegen-Jeden-Matrix nimmt und damit alle möglichen Turnierverlaufe durchspielt. Für die Vorhersagen wurde ein Random Forest Modell verwendet, das mit allen Spielen seit 1994 trainiert wurde. Um den Einfluss des „Heimvorteils“ (der bei einer WM nicht relevant ist) zu minimieren, wurde der Einfachheit halber der Mittelwert aus Heimsiegwahrscheinlichkeit und Auswärtssiegwahrscheinlichkeit gebildet. Das Ergebnis ist folgendes:

Achtelfinale
=============
AF1: BRA (52%), CHL (48%)
AF2: COL (50%), URY (50%)
AF3: NLD (57%), MEX (43%)
AF4: GRC (59%), CRI (41%)
AF5: FRA (66%), NGA (34%)
AF6: DEU (66%), DZA (34%)
AF7: CHE (55%), ARG (45%)
AF8: USA (54%), BEL (46%)
 
 
Viertelfinale
=============
VF1 (Sieger AF5 - Sieger AF6): DEU (38%), FRA (35%), DZA (14%), NGA (13%)
VF2 (Sieger AF1 - Sieger AF2): BRA (27%), COL (25%), URY (24%), CHL (24%)
VF3 (Sieger AF7 - Sieger AF8): USA (30%), CHE (26%), BEL (24%), ARG (20%)
VF4 (Sieger AF3 - Sieger AF4): GRC (32%), NLD (30%), MEX (19%), CRI (19%)
 
 
Halbfinale
==========
HF1 (Sieger VF1 - Sieger VF2): 
    DEU (22%), FRA (19%), BRA (14%), URY (12%), 
    COL (12%), CHL (11%), DZA ( 5%), NGA ( 5%)
HF2 (Sieger VF3 - Sieger VF4): 
    GRC (17%), USA (16%), NLD (16%), CHE (13%), 
    BEL (12%), ARG ( 9%), MEX ( 8%), CRI ( 8%)
 
 
Finale
======
Finale: DEU (13%), FRA (11%), USA ( 8%), GRC ( 8%), 
        NLD ( 8%), BRA ( 7%), CHE ( 6%), URY ( 6%), 
        COL ( 6%), BEL ( 6%), CHL ( 6%), ARG ( 4%), 
        MEX ( 3%), CRI ( 3%), DZA ( 2%), NGA ( 2%)

Das sind doch mal gute Nachrichten für den deutschen Fußball. Dann hoffen wir mal, dass unser Modell bei der Vorhersage der KO-Runde besser abschneidet als in der Gruppenphase …


Weitere Artikel der Data Analytics Serie

Teil 1 – Daten sammeln und bereinigen
Teil 2 – Ist Deutschland eine Turniermannschaft?
Teil 3 – Feature Engineering
Teil 4 – Feature Selection
Teil 5 – Logistische Regression und Random Forest
Teil 6 – Die Heimspielproblematik und Vorhersagen für die KO-Runde

Michael Lex ist agiler Softwareentwickler bei codecentric. Neben der täglichen Arbeit mit Java EE oder Spring gilt sein besonderes Interesse dem weiten Feld der Datenanalyse, insbesondere Machine-Learning-Algorithmen.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Artikel von Michael Lex

Konferenzen

Spark Summit Europe 2015

Data Science

Soccer Feature Madness

Kommentare

Kommentieren

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