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.

  • Seite
  • 1
  • 2

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

Weitere Inhalte zu Data Science

Kommentare

Kommentieren

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