Inhaltsverzeichnis
Einleitung

In dieser Folge geht es um den Spielsimulator, der in jeder unserer Folgen Prognosen der Spielergebnisse über die anstehenden Spielwoche macht. Diese kommunizieren wir zweimal in Form einer 2min-Warning. Im Grunde genommen ist dies eine Monte-Carlo-Simulation, in der wir zwei Teams gegeneinander antreten lassen und die Spielzüge durchsimulieren. Dies wird mehrere tausend male wiederholt und das Team, welches am häufigsten gewonnen hat, prognostizieren wir als Gewinner.

Datenquelle(n)

Um die Spiele zu simulieren, benötigen wir Daten. Wir benutzen dafür die play-by-plays, die wiedergeben, welche Spielzüge in einem Spiel durchgeführt wurden. Zu vergleichen ist das mit den Tickermeldungen, die in Textform ausgeben, wie das Spiel verläuft / verlaufen ist.

Ein Beispiel zum ersten Drive vom Super Bowl Spiel KAN @ TAM:

  • Harrison Butker kicks off 68 yards, returned by Jaydon Mickens for 26 yards (tackle by Dorian O'Daniel)
  • Tom Brady pass complete short left to Chris Godwin for 1 yard (tackle by Bashaud Breeland)
  • Leonard Fournette right tackle for 3 yards (tackle by Chris Jones)
  • Tom Brady pass incomplete short left intended for Chris Godwin
  • Bradley Pinion punts 40 yards downed by Kevin Minter

Auszug eines play-by-plays vom letzten Super Bowl aus einem Ticker:

Quarter   Time   Down   ToGo   Location   Detail  
2   1:52   2   11   TAM 19   Patrick Mahomes pass complete short left to Travis Kelce for 5 yards (tackle by Lavonte David)  

Diese müssen nun maschinenlesbar gemacht. Das erzielen wir, indem wir diese Texte in eine tabellare Form bringen und die Spalten mit weiteren Informationen anreichern. Das vorherige Beispiel würden dann wie folgt aussehen:

game_id   id   quarter   time   duration   abs_location   location   zone_class   down   togo   offense   defense  
202102070tam   85   2   112000   42   81   TAM 19   20-01   2   11   KAN   TAM  
game_id   id   active_player   offense_points   defense_points   detail  
202102070tam   85   MahoPa00   3   14   MahoPa00 pass complete short left to for 5 yards (tackle by DaviLa00)  
game_id   id   pass_from   direction   pass_to   yards   tackled_by_0   touchdown   nr_penalties  
202102070tam   85   MahoPa00   short left   KelcTr00   5.0   DaviLa00   false   0  

Dies wird dann für jedes play-by-play jedes Spiels gemacht (bis 1999 zurück sind es mehr als eine Mio. play-by-plays). Nun können wir erleichtert Auswertungen machen, ohne auf den Rohtext zu achten (Computermodelle arbeiten in der Regel besser mit Daten in tabellarischer Form). Für den Simulator brauchen wir bis dato jedoch nicht alle Spalten und einige andere in einer anderen Darstellung. Deshalb überführen wir diesen Datensatz nun in eine neue Form, die wie folgt aussieht:

Auszug aus der Tabelle complete passes, da wo KAN in der Offense war:

id   abs_time   duration   zone_class   down   togo_bucket   offense   defense   points_diff   yards_gained  
1425   224   42   20-01   2   3   KAN   TAM   -11   5  

Die Yards wurden extrahiert, die Spielzeit wurde in absoluten Sekunden umgerechnet, sowie die Location und ToGos wurden in entsprechende Kategorien gesteckt.


Erklärungen der Spalten:
  • abs_time: Insgesamt verstrichene Zeit
  • duration: Gibt an, wie viele Sekunden bei diesem Spielzug verstrichen sind
  • duration: Dauer des Spielzugs
  • zone_class: Klasse der Zone nach Kirwan
  • togo_bucket: Togos aufgeteilt in 3 Kategorien (Kategorie 1 <= 3, Kategorie 2 <= 10, ansonsten Kategorie 3)
  • points_diff: Punkteunterschied zwischen der Offense und der Defense
  • yards_gained: Yards, die durch diesen Spielzug erreicht wurden

Weitere Tabellen, die für den Simulator benötigt werden:

  • Kickoffs
  • Penalties
  • Rushes
  • Complete Passes
  • Incomplete Passes
  • Interceptions
  • Punts
  • Sacks
  • PAT
  • 2PC
  • Field Goals
Definition eines Zustandes

Folgende Variablen machen einen Zustand aus. Der Simulator ist immer eindeutig durch einen solchen Zustand beschrieben. Abhängig davon, in welchem Zustand er sich befindet, werden Entscheidungen getroffen, wie beispielweise welcher Spielzug als nächstes dran ist, wie viele Yards wurden erreicht und wie viel Zeit ist dabei verstrichen ist.


Variable   Mögliche Werte   Beispiel  
Besucher Team   Bel. NFL Team   TAM  
Heim Team   Bel. NFL Team   KAN  
Besucher Punkte   Ganze Zahlen   13  
Heim Punkte   Ganze Zahlen   6  
Offense   Heim / Besucher   KAN  
Defense   Heim / Besucher   TAM  
Yard-Linie   Ganze Zahlen
i.d.R. zwischen 0 und 100 (immer absolut)  
65  
Quarter   1-5 (5: OT)   1  
Übrige Zeit   0-900 Sekunden   659  
Down   1-4   1  
ToGo   Pos. Zahlen
i.d.R. zwischen 0 und 10  
10  
Vorgehensweise
  1. Wähle zwei Teams aus (z.B. KAN vs. TAM)
  2. Lese Team-Kompositions-Datei (gibt an zu welcher Gewichtung Teams aus vorherigen Jahren mit einbezogen werden. Nützlich wenn MVPs, Coaches, etc. wechseln bzw. aufhören)
  3. Lade alle play-by-play Tabellen jeweils für Offense & Defense
  4. Trainiere Defense-Estimators (Verteilungen werden verschoben, je nachdem wie gut/schlecht die Defense war)
  5. Starte Simulationsschleife mehrere tausend Male:

    1. Ziehe Werte aus den Tabellen basierend auf den Team-Kompositions-Gewichtungen
    2. Lasse die zwei Teams solange gegeneinander antreten, bis die Game-Clock abgelaufen ist:

      • Der Spielzustand wird stets aktualisiert und gefilterte Werte werden aus den entsprechenden Tabellen geladen
      • Aus diesen gefilterten Werten wird ein Estimator trainiert, der die Verteilung möglichst genau abschätzen kann
      • Dieser Estimator erzeugt nun neue Werte, wobei häufig auftretende Werte auch dort häufiger auftreten (es können aber auch neue Werte erzeugt werden, die nicht im ursprünglichen Datensatz vorhanden waren, vgl. ARC C - Statistische Momente & Monte-Carlo-Simulation)
      • Es wird auch aus Verteilungen der verstrichenen Zeit eines jeden Spielzugs gezogen, um die Game-Clock dementsprechend anzupassen
  6. Werte alle Spielergebnisse aus und bestimme die Gewinnwahrscheinlichkeiten, vgl. Einleitung
Game Graph

Der Game Graph bildet die Spielregeln ab, nachdem der Simulator arbeitet. Dieser bestimmt, was alles in einem gegebenem Zustand passieren kann und in welchen neuen Zustand gewechselt werden kann. Nach einem Touchdown gibt es beispielsweise nur zwei Pfade, die eintreten können. Es kann entweder ein Point-After-Touchdown (PAT) oder eine Two-Point-Conversion eintreten (2PC). Der Simulator würde in diesem Fall eines von den beiden wählen (gezogen aus einer Verteilung) und anschließend überprüfen, ob dieses erfolgreich war (auch aus einer Verteilung gezogen).

Stark vereinfachte Darstellung des Game Graphs
Stark vereinfachte Darstellung des Game Graphs

Interpretation der Ergebnisse

Die Gewinnwahrscheinlichkeiten besagen, wie häufig das entsprechende Team gewonnen hat. Letzte Woche haben wir beispielsweise vorhergesagt, dass die Patriots mit 69% gegenüber den Jets gewinnen werden. In der Simulation haben die Patriots dementsprechend 6,900 mal von 10.000 Spielen gewonnen. Wenn das Ergebnis Nahe der 50% liegt, dann kann es entweder bedeuten, dass unser Simulator nicht genug bzw. nicht die relevanten Daten hat, um eine eindeutige Aussage treffen zu können oder, dass das Spiel eher zu einem Unentschieden tendiert.

Limitierungen & ToDos
  • Penalties werden nur allgemein betrachtet
  • Was (noch) nicht betrachtet wird:

    • Personnel-Aufstellung
    • Bewegungsdaten
    • Kneels
    • Spikes
    • Challenges
    • Aborted Snaps
    • Timeouts
  • Ausführliche Tests / weitere Plausibilitätschecks
Spieltagssimulationen
Week 2 - Auswertung der Spieltagssimulation

Es folgen die Auswertungen von bis zu Week 2:


Week   Simulator   Vegas Line  
1   44% (7/16)   44% (7/16)  
2   69% (11/16)   69% (11/16)  
     
Gesamt   56%   56%  

Die Genauigkeit ist sowohl bei der Vegas Line als auch beim Simulator gestiegen. Dies liegt daran, dass Spieldaten von Woche 1 bei beiden Verfahren berücksichtigt worden sind.

Week 3 - Spieltagssimulation

Hier sind nun die Prognosen für kommende Woche. Denkt daran, dass sich dieser Simulator noch im Arbeitsstadium befindet und ggf. Prognosen macht, die absolut für die Tonne sind!

Ergebnisse der Spieltagssimulation, Teil 1
Ergebnisse der Spieltagssimulation, Teil 1

Ergebnisse der Spieltagssimulation, Teil 2
Ergebnisse der Spieltagssimulation, Teil 2

Hinweis, die Simulation wurde ohne die play-by-plays vom letzten Spiel Packers @ Lions durchgeführt, da die Daten unvollständig waren. Insbesondere bedeutet das für Packers @ 49ers und Ravens @ Lions, dass diese Spiele keine Daten von Spielwoche 2 beinhalten.