Jenseits des Spielfelds: Die Kraft des maschinellen Lernens nutzen, um NBA-Spielerstatistiken vorherzusagen | von Sanay Nesargi | Juni 2023

0
26


Ich struggle schon immer ein großer Sportfan und -enthusiast, habe mich in Aktivitäten wie Fantasy-Soccer und Basketball vertieft und sogar ein Gelegenheitsspiel mit Freunden genossen. Während es für die meisten Menschen schon befriedigend ist, einfach nur Sport zu treiben, hat es für mich schon immer etwas Faszinierendes, die Leistung eines Spielers anhand von Zahlen zu quantifizieren. Statistiken wie Field-Rating, +/-, Punkte, Rebounds und Assists können Ihnen tatsächlich einen Einblick in das Spiel eines Spielers geben, ohne ihn überhaupt zu beobachten. Während professionelle Buchhalter und Wettseiten ihre eigenen Methoden haben, um Spielerstatistiken vorherzusagen, wollte ich sehen, ob ich einer Maschine beibringen könnte, das Gleiche zu tun.

Der erste Schritt zur Lösung dieses Issues bestand darin, ein Flussdiagramm zu erstellen, das beschreibt, wie das Endprodukt aussehen soll (Abb. 1). Dies ist ein wesentlicher Schritt, da er das Drawback in weniger schwierige Teilprobleme aufteilt, die bei der Nachverfolgung hilfreich sein können Fortschritt im Laufe der Zeit.

(Abb. 1) Flussdiagramm für das Projekt

Das erste Drawback, das ich lösen wollte, betraf den Kern des Projekts, das Modell des maschinellen Lernens. Im Idealfall würde dieses Modell verschiedene Statistiken über einen bestimmten Spieler berücksichtigen und die gewünschte Ausgabe erzeugen. Der Einfachheit halber handelt es sich bei den Ergebnissen um vorhergesagte Punkte, Rebounds und Assists für den jeweiligen Spieler, der gegen ein bestimmtes Workforce antritt. Für diejenigen, die mit maschinellem Lernen nicht vertraut sind: Das Ziel besteht im Wesentlichen darin, eine Blackbox zu erstellen und ihr einige Eingaben zu geben, damit sie unter Verwendung der gegebenen Eingaben unterschiedliche Ausgaben erzeugt. Eine Visualisierung des Modells für dieses Projekt ist unten zu sehen.

(Abb. 2) Modellvisualisierung

Obwohl dies eine ziemlich starke Vereinfachung ist, fasst sie doch zusammen, was das Ziel dieses Unterproblems struggle. Aber bevor wir all das ausgefallene maschinelle Lernen durchführen können, benötigen wir zunächst Daten zum Trainieren, und die Beschaffung dieser Daten struggle die eigentliche Herausforderung dieses Projekts. Es ist eine grobe Untertreibung, wenn ich Ihnen sage, dass die Arbeit mit der NBA-Statistik-API mühsam ist. Die Anforderungszeiten, Zeitüberschreitungen und Schwankungen machten die Arbeit äußerst schwierig und sind der Hauptgrund dafür, dass dieses Projekt so lange gedauert hat. Zum Glück haben sich einige andere brillante Entwickler die Zeit genommen, einen großartigen Wrapper für die NBA-Statistik-API für Python namens nba_api zu erstellen (geben Sie ihm einen Stern, wenn Sie Zeit haben). Dieses Paket zu finden struggle lebensrettend, aber es löste nicht alle Probleme, wie ich bald herausfinden sollte.

Ausgestattet mit einer gesunden Portion Motivation und einer überraschend guten Dokumentation erstellte ich den Kern des Projekts, die APIData-Klasse. Diese Klasse enthielt Methoden, um alle Trainingsdaten, die ich benötigte, von der NBA-Statistik-API zu erhalten (mithilfe von nba_api). Diese Klasse enthielt umfangreiches Caching (zur Bekämpfung von Zeitüberschreitungen), Datenformatierung (mithilfe von Pandas) und viel Fehlerbehandlung. Dieser Aufwand hat sich am Ende gelohnt und der Code dafür ist im CourtSightML Github-Repository unter dem Namen APIData.py.

Mit der APIData-Klasse und anderen Dienstprogrammen konnte ich genügend Spielertrainingsdaten sammeln, um ein Tensorflow LTSM-Modell auf der Grundlage der gesammelten Daten zu trainieren. Für diejenigen, die sich fragen: Ich habe mich für LTSM entschieden, weil es deutlich besser abschneidet als die sequentiellen Modelle, die ich zuvor ausprobiert habe, und sich bei einer Vielzahl von Vorhersageaufgaben, die Datenströme beinhalten, als intestine bewährt hat. Sie können mehr über LTSM-Modelle erfahren Hier. Den Code hierfür finden Sie im main.py Datei des CourtSightML-Repositorys. Genug vom Code, lassen Sie mich erklären, wie das Modell funktioniert. Wie bereits erläutert, verfügen alle Modelle über Eingaben. Die Eingaben für dieses Modell sind die folgenden und gehen von einem bestimmten Spieler, einer bestimmten Saison und einem bestimmten Gegner aus.

opponent def rating
opponent def rating vs main pos
opponent def rating vs secondary pos (if relevant)
opponent def rating vs third pos (if relevant)
avg. ppg in season
avg. rpg in season
avg. apg in season
avg. ppg in previous 5 seasons
avg. rpg in previous 5 seasons
avg. apg in previous 5 seasons
avg. ppg in previous 5 seasons vs opp
avg. rpg in previous 5 seasons vs opp
avg. apg in previous 5 seasons vs opp
avg. ppg in season vs opp
avg. rpg in season vs opp
avg. apg in season vs opp

Nachdem nun die Eingaben festgelegt waren, mussten die Trainingsdaten gesammelt werden. Der Weg, dies zu erreichen, bestand darin, das Spielprotokoll eines einzelnen Spielers für die letzten fünf Saisons zu nehmen und eine zufällige Stichprobe daraus auszuwählen. Dann ermitteln wir für jedes Spiel in der Zufallsstichprobe die Eingaben für dieses Spiel und speichern sie dann zusammen mit den tatsächlichen Spielerstatistiken dieses Spiels als Trainingsdaten für diesen Spieler. Die Hoffnung besteht darin, dass das Modell bei genügend Spielen und Gegnern aus der gesamten Karriere eines Spielers Tendenzen gegenüber bestimmten Groups erkennen kann. Nachdem der Trainingsdatensatz für einen Spieler erstellt wurde, struggle das Coaching des Modells mithilfe einiger Array-Manipulationen mit Numpy und Tensorflow recht einfach. Nach Abschluss des Trainings wurde das Modell im Verzeichnis fashions/ des Projekts unter dem Namen des angegebenen Spielers gespeichert.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here