arrow_back

NCAA-Spielergebnisse mit Machine Learning von Google vorhersagen

Anmelden Teilnehmen
Testen und teilen Sie Ihr Wissen mit unserer Community.
done
Sie erhalten Zugriff auf über 700 praxisorientierte Labs, Skill-Logos und Kurse

NCAA-Spielergebnisse mit Machine Learning von Google vorhersagen

Lab 1 Stunde 15 Minuten universal_currency_alt 5 Guthabenpunkte show_chart Mittelstufe
info Dieses Lab kann KI-Tools enthalten, die den Lernprozess unterstützen.
Testen und teilen Sie Ihr Wissen mit unserer Community.
done
Sie erhalten Zugriff auf über 700 praxisorientierte Labs, Skill-Logos und Kurse

GSP461

Logo: Google Cloud-Labs zum selbstbestimmten Lernen

Übersicht

BigQuery ist eine vollständig verwaltete, automatisierte und kostengünstige Analysedatenbank von Google. Mit dem Tool können Sie mehrere Terabyte an Daten abfragen, müssen dabei keine Infrastruktur verwalten und benötigen auch keinen Datenbankadministrator. BigQuery basiert auf SQL und die Abrechnung erfolgt nach dem „Pay as you go“-Modell. Mithilfe von BigQuery können Sie sich auf die Datenanalyse konzentrieren und wichtige Informationen erhalten.

Mit BigQuery ML können Datenanalysten ihr SQL-Wissen nutzen, um ML-Modelle (Machine Learning) schnell genau dort zu erstellen, wo sich ihre Daten in BigQuery befinden.

In BigQuery ist ein Dataset für Basketballspiele, ‑teams und ‑spieler der NCAA öffentlich verfügbar. Die Daten umfassen Spielberichte und Ergebnistabellen aller Begegnungen seit 2009 sowie die Endergebnisse seit 1996. Für einige Teams liegen zusätzliche Daten zu Siegen und Niederlagen vor, die bis zur Saison 1994/95 zurückreichen.

In diesem Lab erstellen Sie mithilfe von BigQuery ML einen Prototypen, den Sie trainieren und evaluieren und mit dem Sie anschließend vorhersagen, welches Team bei welchem Spiel des NCAA-Basketballturniers „Sieger“ und welches „Verlierer“ sein wird.

Aufgaben

Aufgaben in diesem Lab:

  • Mit BigQuery auf das öffentlich zugängliche Dataset der NCAA zugreifen
  • Das Dataset der NCAA untersuchen, um mehr über das Schema und den Umfang der verfügbaren Daten zu erfahren
  • Die vorhandenen Daten aufbereiten und in Features und Labels transformieren
  • Das Dataset in Teilmengen für Training und Evaluation aufteilen
  • Mit BigQuery ML Modelle basierend auf dem Dataset zum NCAA-Turnierbaum erstellen
  • Mit dem erstellten Modell die Gewinner für Ihren NCAA-Turnierbaum vorhersagen

Vorbereitung

Dies ist ein Lab für Fortgeschrittene. Für dieses Lab sollten Sie bereits Erfahrung mit der Programmiersprache SQL und ihren Keywords haben. Kenntnisse im Umgang mit BigQuery werden außerdem empfohlen. Wenn Sie Ihr Wissen in diesen Bereichen auffrischen möchten, sollten Sie mindestens eines der folgenden Labs durcharbeiten, bevor Sie mit diesem beginnen:

Einrichtung und Anforderungen

Vor dem Klick auf „Start Lab“ (Lab starten)

Lesen Sie diese Anleitung. Labs sind zeitlich begrenzt und können nicht pausiert werden. Der Timer beginnt zu laufen, wenn Sie auf Lab starten klicken, und zeigt Ihnen, wie lange die Ressourcen für das Lab verfügbar sind.

In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung selbst durchführen – nicht in einer Simulations- oder Demo-Umgebung. Dazu erhalten Sie neue, temporäre Anmeldedaten, mit denen Sie für die Dauer des Labs auf Google Cloud zugreifen können.

Für dieses Lab benötigen Sie Folgendes:

  • Einen Standardbrowser (empfohlen wird Chrome)
Hinweis: Nutzen Sie den privaten oder Inkognitomodus, um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.
  • Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Hinweis: Wenn Sie über ein persönliches Google Cloud-Konto oder -Projekt verfügen, verwenden Sie es nicht für dieses Lab. So werden zusätzliche Kosten für Ihr Konto vermieden.

Lab starten und bei der Google Cloud Console anmelden

  1. Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Pop-up-Fenster geöffnet, in dem Sie Ihre Zahlungsmethode auswählen können. Auf der linken Seite befindet sich der Bereich Details zum Lab mit diesen Informationen:

    • Schaltfläche Google Cloud Console öffnen
    • Restzeit
    • Temporäre Anmeldedaten für das Lab
    • Ggf. weitere Informationen für dieses Lab
  2. Klicken Sie auf Google Cloud Console öffnen (oder klicken Sie mit der rechten Maustaste und wählen Sie Link in Inkognitofenster öffnen aus, wenn Sie Chrome verwenden).

    Im Lab werden Ressourcen aktiviert. Anschließend wird ein weiterer Tab mit der Seite Anmelden geöffnet.

    Tipp: Ordnen Sie die Tabs nebeneinander in separaten Fenstern an.

    Hinweis: Wird das Dialogfeld Konto auswählen angezeigt, klicken Sie auf Anderes Konto verwenden.
  3. Kopieren Sie bei Bedarf den folgenden Nutzernamen und fügen Sie ihn in das Dialogfeld Anmelden ein.

    {{{user_0.username | "Username"}}}

    Sie finden den Nutzernamen auch im Bereich Details zum Lab.

  4. Klicken Sie auf Weiter.

  5. Kopieren Sie das folgende Passwort und fügen Sie es in das Dialogfeld Willkommen ein.

    {{{user_0.password | "Password"}}}

    Sie finden das Passwort auch im Bereich Details zum Lab.

  6. Klicken Sie auf Weiter.

    Wichtig: Sie müssen die für das Lab bereitgestellten Anmeldedaten verwenden. Nutzen Sie nicht die Anmeldedaten Ihres Google Cloud-Kontos. Hinweis: Wenn Sie Ihr eigenes Google Cloud-Konto für dieses Lab nutzen, können zusätzliche Kosten anfallen.
  7. Klicken Sie sich durch die nachfolgenden Seiten:

    • Akzeptieren Sie die Nutzungsbedingungen.
    • Fügen Sie keine Wiederherstellungsoptionen oder Zwei-Faktor-Authentifizierung hinzu (da dies nur ein temporäres Konto ist).
    • Melden Sie sich nicht für kostenlose Testversionen an.

Nach wenigen Augenblicken wird die Google Cloud Console in diesem Tab geöffnet.

Hinweis: Wenn Sie sich eine Liste der Google Cloud-Produkte und ‑Dienste ansehen möchten, klicken Sie oben links auf das Navigationsmenü. Symbol für Navigationsmenü

Die BigQuery Console öffnen

  1. Klicken Sie in der Google Cloud Console im Navigationsmenü auf BigQuery.

Zuerst wird das Fenster Willkommen bei BigQuery in der Cloud Console geöffnet, das neben allgemeinen Informationen auch einen Link zur Kurzanleitung und zu den Versionshinweisen enthält.

  1. Klicken Sie auf Fertig.

Die BigQuery Console wird geöffnet.

Aufgabe 1: Die BigQuery Console öffnen

  1. Wählen Sie in der Cloud Console das Navigationsmenü und dann BigQuery aus.

  2. Klicken Sie auf FERTIG, um zur Beta-Benutzeroberfläche zu gelangen. Achten Sie darauf, dass die Projekt-ID im Explorer-Tab festgelegt ist. Dies sollte etwa so aussehen:

Explorer-Tab mit ausgewähltem Projekt

Wenn Sie auf den Knoten „Erweitern“ neben Ihrem Projekt klicken, werden dort keine Datenbanken oder Tabellen angezeigt. Das liegt daran, dass Sie Ihrem Projekt noch keine hinzugefügt haben.

Glücklicherweise sind in BigQuery zahlreiche öffentliche Datasets verfügbar, mit denen Sie arbeiten können. Im Folgenden erfahren Sie mehr über das NCAA-Dataset und finden heraus, wie Sie es in Ihr BigQuery-Projekt aufnehmen.

Aufgabe 2: NCAA March Madness

Die National Collegiate Athletic Association (NCAA) veranstaltet in den USA jährlich zwei große Basketballturniere für Herren‑ und Damenmannschaften amerikanischer Colleges. Am NCAA-Turnier der Herren im März nehmen 68 Teams teil. Die Spiele werden nach dem K.-o.-System ausgetragen und am Ende geht daraus ein Team als March Madness-Gesamtsieger hervor.

Die NCAA stellt öffentlich ein Dataset bereit, das die Statistiken zu allen Basketballspielen, den aktiven Spielerinnen und Spielern der Saison sowie den Abschlussturnieren enthält. Die Daten umfassen Spielberichte und Ergebnistabellen aller Begegnungen seit 2009 sowie die Endergebnisse seit 1996. Für einige Teams liegen zusätzliche Daten zu Siegen und Niederlagen vor, die bis zur Saison 1994/95 zurückreichen.

Aufgabe 3: Das öffentliche NCAA-Dataset in BigQuery suchen

  1. Achten Sie darauf, dass Sie den nächsten Schritt in der BigQuery Console ausführen. Klicken Sie im Explorer-Tab auf die Schaltfläche + HINZUFÜGEN und wählen Sie Öffentliche Datasets aus.

  2. Geben Sie in der Suchleiste NCAA Basketball ein und drücken Sie die Eingabetaste. Wählen Sie das einzige angezeigte Ergebnis aus und klicken Sie auf DATASET ANSEHEN:

Suchergebnisse für „NCAA Basketball“ mit hervorgehobener Schaltfläche DATASET ANSEHEN

Dadurch wird ein neuer Tab in BigQuery geöffnet und das Dataset in diesem geladen. Sie können entweder weiter in diesem Tab arbeiten oder ihn schließen und Ihre BigQuery Console in dem anderen Tab aktualisieren, sodass Ihr öffentliches Dataset dort angezeigt wird.

Hinweis: Wenn „ncaa_basketball“ nicht angezeigt wird, klicken Sie auf + HINZUFÜGEN > Projekt nach Name markieren. Geben Sie bigquery-public-data als Projektnamen ein und klicken Sie auf MARKIEREN.
  1. Erweitern Sie das Dataset bigquery-public-data > ncaa_basketball, um die zugehörigen Tabellen einzublenden:

ncaa_basketball-Dataset mit mehreren Tabellen

Sie sollten zehn Tabellen in dem Dataset sehen.

  1. Klicken Sie auf mbb_historical_tournament_games und anschließend auf VORSCHAU, um Beispiele für Datenzeilen zu sehen.

  2. Mit einem Klick auf DETAILS werden Metadaten zur Tabelle angezeigt.

Die Seite sollte in etwa so aussehen:

Detailseite mit Tabs: Tabelleninformationen wie Tabellen-ID, Tabellengröße und langfristige Speichergröße

Aufgabe 4: Mit einer Abfrage verfügbare Saisons und Spiele ermitteln

Nun werden Sie eine einfache SQL-Abfrage schreiben, mit der Sie ermitteln, wie viele Saisons und Spiele in der Tabelle mbb_historical_tournament_games für Analysezwecke verfügbar sind.

  1. Kopieren Sie folgenden Befehl im Abfrageeditor oberhalb des Abschnitts der Tabellendetails und fügen Sie ihn in dieses Feld ein:
SELECT season, COUNT(*) as games_per_tournament FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` GROUP BY season ORDER BY season # default is Ascending (low to high)
  1. Klicken Sie auf AUSFÜHREN. Die Ausgabe sollte anschließend ungefähr so aussehen:

Abfrageergebnisse: Tabelle mit Spielen pro Turnier

  1. Scrollen Sie durch die Ausgabe und beachten Sie besonders die Anzahl der Saisons sowie der pro Saison absolvierten Spiele. Sie brauchen diese Informationen, um die folgenden Fragen zu beantworten. Unten rechts neben den Pfeilen zum Umblättern sehen Sie außerdem, wie viele Zeilen zurückgegeben wurden.

Klicken Sie auf Fortschritt prüfen. Mit einer Abfrage verfügbare Saisons und Spiele ermitteln

Testen Sie Ihr Wissen

Mit den folgenden Multiple-Choice-Fragen können Sie Ihr bisher erworbenes Wissen testen und festigen. Beantworten Sie die Fragen so gut Sie können.

Aufgabe 5: ML-Features und ‑Labels verstehen

Ziel dieses Labs ist es, den Sieger eines vorgegebenen NCAA-Basketballspiels der Herren mithilfe von Informationen zu vergangenen Spielen vorherzusagen. Beim Machine Learning wird jede Spalte mit Daten, die uns bei der Ermittlung des Ergebnisses (Sieger oder Verlierer eines Turnierspiels) helfen, als Feature bezeichnet.

Die Datenspalte, für die Sie eine Vorhersage treffen möchten, wird Label genannt. ML-Modelle „lernen“ die Verknüpfungen zwischen den Features, um das Ergebnis eines Labels vorherzusagen.

Ihr Dataset historischer Daten könnte beispielsweise folgende Features enthalten:

  • Saison
  • Name des Teams
  • Name des gegnerischen Teams
  • Gesetzte Position (Rang) des Teams
  • Gesetzte Position (Rang) des gegnerischen Teams

Das Label, für das Sie versuchen werden, eine Vorhersage zu treffen, ist das Spielergebnis, also die Angabe, ob das Team siegt oder verliert.

Testen Sie Ihr Wissen

Mit den folgenden Multiple-Choice-Fragen können Sie Ihr bisher erworbenes Wissen testen und festigen. Beantworten Sie die Fragen so gut Sie können.

Aufgabe 6: Ein ML-Dataset mit Label erstellen

Für die Erstellung eines ML-Modells sind viele hochwertige Trainingsdaten notwendig. Glücklicherweise stellt unser NCAA-Dataset eine mehr als ausreichende Grundlage für ein effektives Modell dar.

  1. Wechseln Sie wieder zur BigQuery-Konsole. Dort sollte noch das Ergebnis der Abfrage zu sehen sein, die Sie vorhin ausgeführt haben.

  2. Klicken Sie im Menü links auf die Tabelle mbb_historical_tournament_games. Sobald sie geladen wurde, klicken Sie auf VORSCHAU. Die Seite sollte in etwa so aussehen:

Tabelle „mbb_historical_tournament_games“ auf der Vorschauseite mit Tabs

Testen Sie Ihr Wissen

Mit den folgenden Multiple-Choice-Fragen können Sie Ihr bisher erworbenes Wissen testen und festigen. Beantworten Sie die Fragen so gut Sie können.

  1. Bei der Untersuchung des Datasets werden Sie feststellen, dass eine der Zeilen über Spalten für win_market und lose_market verfügt. Sie müssen das Ergebnis eines Spiels in einen Eintrag pro Team aufteilen, damit Sie jede Zeile mit dem Label „Sieger“ bzw. „Verlierer“ versehen können.

  2. Kopieren Sie die folgende Abfrage und fügen Sie sie in den Abfrageeditor ein. Klicken Sie dann auf AUSFÜHREN:

# create a row for the winning team SELECT # features season, # ex: 2015 season has March 2016 tournament games round, # sweet 16 days_from_epoch, # how old is the game game_date, day, # Friday 'win' AS label, # our label win_seed AS seed, # ranking win_market AS market, win_name AS name, win_alias AS alias, win_school_ncaa AS school_ncaa, # win_pts AS points, lose_seed AS opponent_seed, # ranking lose_market AS opponent_market, lose_name AS opponent_name, lose_alias AS opponent_alias, lose_school_ncaa AS opponent_school_ncaa # lose_pts AS opponent_points FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` UNION ALL # create a separate row for the losing team SELECT # features season, round, days_from_epoch, game_date, day, 'loss' AS label, # our label lose_seed AS seed, # ranking lose_market AS market, lose_name AS name, lose_alias AS alias, lose_school_ncaa AS school_ncaa, # lose_pts AS points, win_seed AS opponent_seed, # ranking win_market AS opponent_market, win_name AS opponent_name, win_alias AS opponent_alias, win_school_ncaa AS opponent_school_ncaa # win_pts AS opponent_points FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games`

Sie sollten folgende Ausgabe erhalten:

Seite der Abfrageergebnisse mit Tabs: mehrere Datenzeilen für Spaltenüberschriften wie „season“, „round“ und „game_date“

Klicken Sie auf Fortschritt prüfen. Ein ML-Dataset mit Label erstellen

Sie wissen nun, welche Features des Ergebnisses verfügbar sind. Beantworten Sie die folgende Frage, um Ihre Kenntnisse über das Dataset zu testen und zu festigen.

Aufgabe 7: Ein ML-Modell für die Vorhersage des Siegers basierend auf der gesetzten Position und dem Namen des Teams erstellen

Wir haben uns die Daten näher angesehen. Nun können wir mit dem Training eines ML-Modells beginnen.

  • Beantworten Sie die folgende Frage so gut Sie können, um sich mit diesem Abschnitt vertraut zu machen.

Einen Modelltyp wählen

Für das vorliegende Problem werden Sie ein Klassifizierungsmodell erstellen. Da Sie zwei Klassen – Sieg oder Niederlage – verwenden, wird das Modell auch als Binärklassifizierungsmodell bezeichnet. Ein Team kann ein Spiel entweder gewinnen oder verlieren.

Wenn Sie möchten, können Sie im Anschluss an dieses Lab die Gesamtpunktzahl eines Teams mit einem Prognosemodell voraussagen, das ist aber nicht Schwerpunkt des Labs.

Ein Blick auf das Label (die Spalte) der Daten, für die Sie eine Vorhersage treffen, verrät Ihnen, ob es sich um eine Prognose oder um eine Klassifizierung handelt:

  • Sind die Werte der Spalte numerisch (z. B. verkaufte Einheiten oder in einem Spiel erzielte Punkte), treffen Sie eine Prognose.
  • Wenn hingegen ein Stringwert vorliegt (die Zeile gehört entweder zu dieser oder jener Klasse), führen Sie eine Klassifizierung durch.
  • Bei mehr als zwei Klassen (z. B. Sieg, Niederlage und Unentschieden) sprechen wir von einem Klassifizierungsmodell mit mehreren Klassen.

Unser Klassifizierungsmodell für Machine Learning greift auf ein weit verbreitetes Statistikmodell namens Logistische Regression zurück.

Wir benötigen ein Modell, das die Wahrscheinlichkeit jedes möglichen Label-Werts berechnet, in unserem Fall also die eines Sieges bzw. einer Niederlage. Die logistische Regression ist eine gute Grundlage für diesen Zweck. Keine Sorge, das ML-Modell übernimmt während des Modelltrainings sämtliche Rechen- und Optimierungsvorgänge für Sie – dafür sind Computer schließlich da!

Hinweis: Für Klassifizierungsaufgaben gibt es viele andere ML-Modelle mit unterschiedlicher Komplexität. Bei Google wird beispielsweise häufig Deep Learning in Verbindung mit neuronalen Netzwerken verwendet.

Ein ML-Modell mit BigQuery ML erstellen

Um unser Klassifizierungsmodell in BigQuery zu erstellen, müssen wir einfach die SQL-Anweisung CREATE MODEL schreiben und einige Optionen angeben.

Bevor wir mit dem Modell beginnen können, benötigen wir in unserem Projekt zuerst einen Speicherort dafür.

  1. Klicken Sie im Explorer-Tab auf das Symbol Aktionen ansehen neben der Projekt-ID und wählen Sie Dataset erstellen aus.

Explorer-Tab mit der Menüoption „Dataset erstellen“

  1. Daraufhin wird das Dialogfeld „Dataset erstellen“ geöffnet. Legen Sie Ihre Dataset-ID auf bracketology fest und klicken Sie auf DATASET ERSTELLEN.

Dialogfeld „Dataset erstellen“

  1. Führen Sie nun den folgenden Befehl im Abfrageeditor aus:
CREATE OR REPLACE MODEL `bracketology.ncaa_model` OPTIONS ( model_type='logistic_reg') AS # create a row for the winning team SELECT # features season, 'win' AS label, # our label win_seed AS seed, # ranking win_school_ncaa AS school_ncaa, lose_seed AS opponent_seed, # ranking lose_school_ncaa AS opponent_school_ncaa FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` WHERE season <= 2017 UNION ALL # create a separate row for the losing team SELECT # features season, 'loss' AS label, # our label lose_seed AS seed, # ranking lose_school_ncaa AS school_ncaa, win_seed AS opponent_seed, # ranking win_school_ncaa AS opponent_school_ncaa FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` # now we split our dataset with a WHERE clause so we can train on a subset of data and then evaluate and test the model's performance against a reserved subset so the model doesn't memorize or overfit to the training data. # tournament season information from 1985 - 2017 # here we'll train on 1985 - 2017 and predict for 2018 WHERE season <= 2017

Wie Sie sehen, werden nur wenige Zeilen SQL-Code benötigt, um das Modell zu erstellen. Besonders wichtig ist, dass Sie für unsere Klassifizierungsaufgabe den Modelltyp „logistic_reg“ wählen.

Hinweis: Eine Liste aller verfügbaren Modelloptionen und ‑einstellungen finden Sie im Dokumentationsleitfaden von BigQuery ML. In unserem Fall haben wir bereits ein Feld namens „Label“. Mithilfe der Modelloption „inpt_label_cols“ vermeiden wir eine Kennzeichnung unserer Label-Spalte.

Das Training des Modells dauert ungefähr drei bis fünf Minuten. Nach Abschluss des Jobs sollten Sie folgende Ausgabe erhalten:

Abfrageergebnisse mit Ergebnisnachricht

  1. Klicken Sie rechts neben der Console auf die Schaltfläche Zum Modell.

Klicken Sie auf Fortschritt prüfen. ML-Modell erstellen

Details zum Modelltraining anzeigen

  • Sie sehen nun die Modelldetails. Scrollen Sie nach unten zum Abschnitt Trainingsoptionen und sehen Sie sich die Iterationen an, die das Modell für das Training durchgeführt hat.

Wenn Sie Erfahrung mit Machine Learning haben, können Sie alle hier aufgeführten Hyperparameter (die Optionen, die vor der Ausführung des Modells eingestellt werden) anpassen. Legen Sie dazu deren Wert in der OPTIONEN-Anweisung fest.

Wenn dies Ihr Einstieg in Machine Learning ist und Sie keine Anpassungen vornehmen, werden von BigQuery ML intelligente Standardwerte für jede nicht eingestellte Option festgelegt.

Weitere Informationen finden Sie in der Liste für BigQuery ML-Modelloptionen.

Statistiken zum Modelltraining anzeigen

ML-Modelle „lernen“ die Verknüpfungen zwischen bekannten Features und unbekannten Labels. Wie Sie sich vielleicht schon gedacht haben, sind einige Features wie „Gesetzte Position“ oder „Name der Ausbildungsstätte“ für die Ermittlung eines Sieges oder einer Niederlage nützlicher als andere Datenspalten (Features) wie z. B. der Wochentag, an dem das Spiel stattfindet.

ML-Modelle beginnen ihr Training ohne ein solches intuitives Wissen und gewichten jedes Feature in der Regel nach zufälligen Kriterien.

Während des Trainings optimiert das Modell den Vorgang, mit dem es die bestmögliche Gewichtung für jedes Feature findet. Das Modell versucht, den Trainingsdatenverlust und den Evaluationsdatenverlust mit jedem Lauf weiter zu minimieren.

Sollten Sie jemals feststellen, dass der finale Evaluationsdatenverlust deutlich höher als der Trainingsdatenverlust ist, liegt entweder eine Überanpassung des Modells vor oder das Modell merkt sich einfach alle Ihre Trainingsdaten, anstatt generalisierbare Zusammenhänge zu erlernen.

Sie können sehen, wie viele Trainingsläufe das Modell ausführt. Klicken Sie dazu auf den Tab TRAINING und wählen Sie unter „Ansicht“ die Option Tabelle aus.

In unserem Fall hat das Modell drei Trainingsläufe in ungefähr 20 Sekunden abgeschlossen. Ihr Modell wird sehr wahrscheinlich davon abweichen.

Tabelle zur Modellstatistik mit vier Datenzeilen unter den Spaltenüberschriften „Ausführung“, „Trainingsdatenverlust“, „Evaluationsdatenverlust“, „Lernrate“ und „Abschlusszeit (Sekunden)“

Über die Features gewonnene Erkenntnisse des Modells anzeigen

Nach dem Training können Sie die Gewichtungen untersuchen, um zu sehen, welche Features für das Modell am nützlichsten waren.

  • Führen Sie den folgenden Befehl im Abfrageeditor aus:
SELECT category, weight FROM UNNEST(( SELECT category_weights FROM ML.WEIGHTS(MODEL `bracketology.ncaa_model`) WHERE processed_input = 'seed')) # try other features like 'school_ncaa' ORDER BY weight DESC

Ihre Ausgabe sollte in etwa so aussehen:

Seite „Abfrageergebnisse“: 10 Datenzeilen unter den Spaltenüberschriften für Zeile, Kategorie und Gewichtung in der Tabelle der Ergebnisse

Wenn die gesetzte Position eines Teams entweder sehr niedrig (1, 2, 3) oder sehr hoch (14, 15, 16) ist, weist das Modell diesem Feature zur Ermittlung des Ergebnisses (Sieg oder Niederlage) eine besonders hohe Gewichtung (maximal 1,0) zu. Das ist auch intuitiv betrachtet sinnvoll, da von Teams, die auf niedrige Positionen gesetzt wurden, zu erwarten ist, dass sie gut abschneiden.

Der größte Vorteil von Machine Learning besteht darin, dass wir keine zahlreichen hartcodierten IF THEN-Anweisungen schreiben mussten, mit denen wir dem Modell vermitteln: IF (wenn) die gesetzte Position 1 ist, THEN (dann) liegt die Siegchance des Teams um 80 % höher. Machine Learning benötigt keine hartcodierten Regeln oder hartcodierte Logik, sondern lernt diese Zusammenhänge selbst. Weitere Informationen finden Sie in der Dokumentation zur Gewichtung der BQML-Syntax.

Aufgabe 8: Modellleistung evaluieren

Um die Leistung des Modells zu evaluieren, können Sie ein trainiertes Modell mit einem simplen ML.EVALUATE-Befehl testen.

  • Führen Sie den folgenden Befehl im Abfrageeditor aus:
SELECT * FROM ML.EVALUATE(MODEL `bracketology.ncaa_model`)

Die Ausgabe sollte ungefähr so aussehen:

Abfrageergebnisse: Ergebnisse der ML-Evaluierung

Der Wert wird zu ungefähr 69 % korrekt sein. Dieses Ergebnis ist zwar besser als ein Münzwurf, lässt sich aber noch optimieren.

Hinweis: Bei Klassifizierungsmodellen ist die Accuracy des Modells nicht der einzige ausschlaggebende Messwert der Ausgabe.

Da Sie eine logistische Regression durchgeführt haben, können Sie die Leistung Ihres Modells hinsichtlich der folgenden Messwerte testen (je weiter sich das Ergebnis dem Wert 1,0 annähert, desto besser):

  • Precision: Messwert für Klassifizierungsmodelle. Gibt präzise die Häufigkeit an, mit der ein Modell die positive Klasse richtig vorhergesagt hat.
  • Recall: Messwert für Klassifikationsmodelle, der die folgende Frage beantwortet: Wie viele der möglichen positiven Labels konnte das Modell richtig identifizieren?
  • Accuracy: Anteil der Vorhersagen, die ein Klassifizierungsmodell richtig getroffen hat.
  • f1_score: Wert für die Accuracy des Modells. Der F1-Wert ist der harmonische Mittelwert von Precision und Recall. 1 ist der beste und 0 der schlechteste f1-Wert.
  • log_loss: Die in einer logistischen Regression verwendete Verlustfunktion. Gibt an, wie weit die Vorhersagen des Modells und die richtigen Labels auseinanderliegen.
  • roc_auc: Die Fläche unter der ROC-Kurve. Gibt die Wahrscheinlichkeit an, dass ein Klassifikator mit höherer Konfidenz davon ausgeht, dass ein zufällig ausgewähltes positives Beispiel tatsächlich positiv ist, als dass ein zufällig ausgewähltes negatives Beispiel positiv ist.
  • Aufgabe 9: Vorhersagen erstellen

    Nachdem Sie nun ein Modell mit Verlaufsdaten aller Saisons bis einschließlich der Saison 2017 (also allen Daten, die Ihnen zur Verfügung standen) trainiert haben, ist es an der Zeit, Vorhersagen für die Saison 2018 zu treffen. Ihr Data Science-Team hat Ihnen soeben die Ergebnisse des 2018er Turniers in einer separaten Tabelle bereitgestellt. Sie waren nicht Teil Ihres ursprünglichen Datasets.

    Um eine Vorhersage zu treffen, müssen Sie lediglich ML.PREDICT auf einem trainierten Modell aufrufen und das Dataset durchlaufen lassen, für das die Vorhersage getroffen werden soll.

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    CREATE OR REPLACE TABLE `bracketology.predictions` AS ( SELECT * FROM ML.PREDICT(MODEL `bracketology.ncaa_model`, # predicting for 2018 tournament games (2017 season) (SELECT * FROM `data-to-insights.ncaa.2018_tournament_results`) ) )

    Die Ausgabe sollte ungefähr so aussehen:

    Seite „Abfrageergebnisse“ mit Bestätigungsnachricht, dass eine neue Tabelle erstellt wurde

    Klicken Sie auf Fortschritt prüfen. Modellleistung evaluieren und Tabelle erstellen

    Hinweis: Sie speichern Ihre Vorhersage in einer Tabelle, damit Sie später Statistiken abfragen können, ohne die obige Abfrage nochmals ausführen zu müssen.

    Ihnen werden nun das ursprüngliche Dataset sowie die drei neuen Spalten angezeigt:

    • Vorhergesagtes Label
    • Optionen für das vorhergesagte Label
    • Wahrscheinlichkeit für das vorhergesagte Label

    Da Sie die Ergebnisse des 2018er March Madness-Turniers bereits kennen, prüfen wir nun, wie gut das Modell sie vorhersagen konnte. (Tipp: Wenn Sie Vorhersagen für das diesjährige March Madness-Turnier treffen möchten, übergeben Sie einfach ein Dataset mit den gesetzten Positionen und Teamnamen der Saison 2019. Logischerweise ist die Label-Spalte in diesem Fall leer, da die Spiele des betreffenden Turniers noch nicht stattgefunden haben. Dafür treffen Sie schließlich die Vorhersage.)

    Aufgabe 10: Wie viele Vorhersagen unseres Modells für das 2018er NCAA-Turnier waren korrekt?

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    SELECT * FROM `bracketology.predictions` WHERE predicted_label <> label

    Die Ausgabe sollte ungefähr so aussehen:

    Bildschirm „Abfrageergebnisse“: Ausgabe für Vorhersagen

    Bei 134 Vorhersagen (67 Turnierspielen) lag unser Modell 38-mal falsch. Insgesamt lag die Trefferquote für die 2018er Turnierpaarungen bei 70 %.

    Aufgabe 11: Modelle sind leider nicht allwissend…

    Es gibt so viele weitere Faktoren, die zu den knappen Siegen und Überraschungserfolgen bei einem March Madness-Turnier führen, und diese kann ein Modell kaum vorhersagen.

    Suchen wir nach dem laut Modell größten Überraschungserfolg des 2017er Turniers. Wir sehen uns an, in welchen Fällen das Modell mit seiner Vorhersage, dass ein Ergebnis mit einer Wahrscheinlichkeit von 80 % oder höher eintritt, FALSCH lag.

    1. Führen Sie den folgenden Befehl im Abfrageeditor aus:
    SELECT model.label AS predicted_label, model.prob AS confidence, predictions.label AS correct_label, game_date, round, seed, school_ncaa, points, opponent_seed, opponent_school_ncaa, opponent_points FROM `bracketology.predictions` AS predictions, UNNEST(predicted_label_probs) AS model WHERE model.prob > .8 AND predicted_label <> predictions.label

    Das Ergebnis sollte in etwa so aussehen:

    Bildschirm „Abfrageergebnisse“ mit Ausgabe für Sieg-/Verlustvorhersage

    Vorhersage: Das Modell sagt voraus, dass Virginia (gesetzt auf Position 1) gegen die UMBC (gesetzt auf Position 16) mit 87%iger Wahrscheinlichkeit gewinnen wird. Klingt doch ganz vernünftig, oder?

    Sehen Sie sich das Video „16-seed UMBC pulls off a miracle upset over 1-seed Virginia“ an, um zu sehen, was wirklich passiert ist!

    Ryan Odom, Trainer des UMBC-Teams, sagte nach dem Spiel: „Unglaublich, mir fehlen die Worte.“ Weitere Informationen finden Sie im Artikel 2018 UMBC vs. Virginia men's basketball game.

    Zusammenfassung

    • Sie haben ein ML-Modell erstellt, um Spielergebnisse vorherzusagen.
    • Sie haben die Leistung des Modells evaluiert und mit der gesetzten Position und den Teamnamen als primäre Features eine Accuracy von 69 % erhalten.
    • Sie haben die Ergebnisse des 2018er Turniers vorhergesagt.
    • Sie haben die Statistiken der Ergebnisse analysiert.

    Unsere nächste Aufgabe besteht darin, ein besseres Modell zu erstellen, das die gesetzte Position und die Teamnamen NICHT als Features verwendet.

    Aufgabe 12: Nützliche Features für ML-Modelle

    Im zweiten Teil dieses Labs erstellen Sie ein zweites ML-Modell mithilfe von neu bereitgestellten und detaillierten Features.

    Da Sie sich nun mit der Erstellung von ML-Modellen mithilfe von BigQuery ML ganz gut auskennen, hat Ihr Data Science-Team Ihnen ein neues Dataset mit Spielberichten bereitgestellt. Dieses enthält neue Teammesswerte, aus denen Ihr Modell Erkenntnisse ziehen kann. Dazu gehören:

    • die Punkteverwertung über einen bestimmten Zeitraum basierend auf der Analyse der bisherigen Spiele
    • der Ballbesitz über einen bestimmten Zeitraum

    Ein neues ML-Dataset mithilfe dieser auf Fähigkeiten basierenden Features erstellen

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    # create training dataset: # create a row for the winning team CREATE OR REPLACE TABLE `bracketology.training_new_features` AS WITH outcomes AS ( SELECT # features season, # 1994 'win' AS label, # our label win_seed AS seed, # ranking # this time without seed even win_school_ncaa AS school_ncaa, lose_seed AS opponent_seed, # ranking lose_school_ncaa AS opponent_school_ncaa FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` t WHERE season >= 2014 UNION ALL # create a separate row for the losing team SELECT # features season, # 1994 'loss' AS label, # our label lose_seed AS seed, # ranking lose_school_ncaa AS school_ncaa, win_seed AS opponent_seed, # ranking win_school_ncaa AS opponent_school_ncaa FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` t WHERE season >= 2014 UNION ALL # add in 2018 tournament game results not part of the public dataset: SELECT season, label, seed, school_ncaa, opponent_seed, opponent_school_ncaa FROM `data-to-insights.ncaa.2018_tournament_results` ) SELECT o.season, label, # our team seed, school_ncaa, # new pace metrics (basketball possession) team.pace_rank, team.poss_40min, team.pace_rating, # new efficiency metrics (scoring over time) team.efficiency_rank, team.pts_100poss, team.efficiency_rating, # opposing team opponent_seed, opponent_school_ncaa, # new pace metrics (basketball possession) opp.pace_rank AS opp_pace_rank, opp.poss_40min AS opp_poss_40min, opp.pace_rating AS opp_pace_rating, # new efficiency metrics (scoring over time) opp.efficiency_rank AS opp_efficiency_rank, opp.pts_100poss AS opp_pts_100poss, opp.efficiency_rating AS opp_efficiency_rating, # a little feature engineering (take the difference in stats) # new pace metrics (basketball possession) opp.pace_rank - team.pace_rank AS pace_rank_diff, opp.poss_40min - team.poss_40min AS pace_stat_diff, opp.pace_rating - team.pace_rating AS pace_rating_diff, # new efficiency metrics (scoring over time) opp.efficiency_rank - team.efficiency_rank AS eff_rank_diff, opp.pts_100poss - team.pts_100poss AS eff_stat_diff, opp.efficiency_rating - team.efficiency_rating AS eff_rating_diff FROM outcomes AS o LEFT JOIN `data-to-insights.ncaa.feature_engineering` AS team ON o.school_ncaa = team.team AND o.season = team.season LEFT JOIN `data-to-insights.ncaa.feature_engineering` AS opp ON o.opponent_school_ncaa = opp.team AND o.season = opp.season

    Die Ausgabe sollte ungefähr so aussehen:

    Abfrageergebnisse mit Bestätigung, dass die Tabelle ersetzt wurde

    Klicken Sie auf Fortschritt prüfen. Nützliche Features für ML-Modelle verwenden

    Aufgabe 13: Vorschau der neuen Features ansehen

    • Klicken Sie rechts neben der Konsole auf die Schaltfläche Weiter zur Tabelle. Klicken Sie auf den Tab Vorschau.

    Ihre Tabelle sollte ungefähr so aussehen:

    Vorschau der Tabelle „training_new_features“

    Es spielt keine Rolle, wenn Ihre Ausgabe nicht mit dem Screenshot oben übereinstimmt.

    Aufgabe 14: Ausgewählte Messwerte interpretieren

    • Hier erfahren Sie mehr über einige wichtige Labels, die uns beim Treffen von Vorhersagen helfen.

    opp_efficiency_rank

    Punkteverwertung des Gegners: Welchen Rang nimmt unser Gegner unter allen Teams bei der Punkteverwertung (Punkte pro 100 Ballbesitzphasen) für einen bestimmten Zeitabschnitt ein? Je niedriger der Wert, desto besser.

    opp_pace_rank

    Ballbesitz des Gegners: Welchen Rang nimmt unser Gegner unter allen Teams beim Ballbesitz (Anzahl der Ballbesitzphasen innerhalb von 40 Minuten) ein? Je niedriger der Wert, desto besser.

    Sie verfügen nun über aussagekräftige Features, die Ihnen Aufschluss über die Punkteverwertung und den Ballbesitz eines Teams geben und mit denen Sie Ihr zweites Modell trainieren können.

    Um Ihr Modell daran zu hindern, sich „Teams, die in der Vergangenheit gut waren“ zu merken, schließen Sie Namen und gesetzte Position des Teams in diesem neuen Modell aus und beschränken Sie sich lediglich auf die Messwerte.

    Aufgabe 15: Das neue Modell trainieren

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    CREATE OR REPLACE MODEL `bracketology.ncaa_model_updated` OPTIONS ( model_type='logistic_reg') AS SELECT # this time, don't train the model on school name or seed season, label, # our pace poss_40min, pace_rank, pace_rating, # opponent pace opp_poss_40min, opp_pace_rank, opp_pace_rating, # difference in pace pace_rank_diff, pace_stat_diff, pace_rating_diff, # our efficiency pts_100poss, efficiency_rank, efficiency_rating, # opponent efficiency opp_pts_100poss, opp_efficiency_rank, opp_efficiency_rating, # difference in efficiency eff_rank_diff, eff_stat_diff, eff_rating_diff FROM `bracketology.training_new_features` # here we'll train on 2014 - 2017 and predict on 2018 WHERE season BETWEEN 2014 AND 2017 # between in SQL is inclusive of end points

    Die Ausgabe, die Sie anschließend erhalten, sollte in etwa so aussehen:

    Abfrageergebnisse mit Bestätigung, dass ein neues Modell erstellt wurde

    Aufgabe 16: Die Leistung des neuen Modells evaluieren

    • Führen Sie den folgenden Befehl im Abfrageeditor aus, um die Leistung Ihres Modells zu evaluieren:
    SELECT * FROM ML.EVALUATE(MODEL `bracketology.ncaa_model_updated`)

    Ihre Ausgabe sollte ungefähr so aussehen:

    Seite „Abfrageergebnisse“ mit Tabs sowie Tabelle mit Statistiken zum neuen Modell

    Sehr gut. Sie haben ein neues Modell mit anderen Features trainiert und die Accuracy auf rund 75 % verbessert. Das entspricht einem Anstieg von 5 % gegenüber dem ersten Modell.

    Dies ist eine der wichtigsten Erkenntnisse beim Machine Learning: Ein Dataset mit hochwertigen Features kann einen großen Einfluss auf die Accuracy Ihres Modells haben.

    Klicken Sie auf Fortschritt prüfen. Neues Modell trainieren und bewerten

    Aufgabe 17: Gelernte Ergebnisse des Modells untersuchen

    • Welche Features hat das Modell bei der Ermittlung des Spielergebnisses am stärksten gewichtet? Finden Sie es heraus, indem Sie den folgenden Befehl im Abfrageeditor ausführen:
    SELECT * FROM ML.WEIGHTS(MODEL `bracketology.ncaa_model_updated`) ORDER BY ABS(weight) DESC

    Die Ausgabe sollte so aussehen:

    Seite „Abfrageergebnisse“ mit Tabs sowie Tabelle mit Untersuchungen der Gewichtungen zum neuen Modell

    Die absoluten Werte der Gewichtungen sind so angeordnet, dass die Features, die sich am stärksten auf das Spielergebnis auswirken, zuerst aufgeführt werden.

    Wie Sie in den Ergebnissen sehen können, sind die drei wichtigsten Features pace_stat_diff, eff_stat_diff und eff_rating_diff. Sehen wir sie uns einmal genauer an.

    pace_stat_diff

    Der Unterschied zwischen den beiden Teams in Bezug auf Ballbesitzphasen/40 Minuten. Laut dem Modell hat dieses Feature die größte Aussagekraft in Bezug auf das Spielergebnis.

    eff_stat_diff

    Der Unterschied zwischen den beiden Teams in Bezug auf die Nettopunkte/100 Ballbesitzphasen.

    eff_rating_diff

    Der Unterschied zwischen den beiden Teams in Bezug auf die normalisierte Bewertung der Punkteverwertung.

    Was wurde von dem Modell für die Vorhersagen nicht besonders stark gewichtet? Die Saison. In der obigen Ausgabe mit den gelisteten Gewichtungen nimmt sie den letzten Platz ein. Für das Modell ist die Saison (2013, 2014, 2015) nicht sonderlich nützlich zur Vorhersage eines Spielergebnisses. Das Jahr „2014“ war für die Teams ein Jahr wie jedes andere.

    Eine interessante Erkenntnis ist, dass das Modell den Ballbesitz eines Teams, also das Maß dafür, wie gut das Team den Ball kontrollieren konnte, stärker gewichtete als die Punkteverwertung.

    Aufgabe 18: Zeit für die nächste Vorhersage

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    CREATE OR REPLACE TABLE `bracketology.ncaa_2018_predictions` AS # let's add back our other data columns for context SELECT * FROM ML.PREDICT(MODEL `bracketology.ncaa_model_updated`, ( SELECT * # include all columns now (the model has already been trained) FROM `bracketology.training_new_features` WHERE season = 2018 ))

    Die Ausgabe sollte in etwa so aussehen:

    Abfrageergebnisse mit Bestätigung, dass eine neue Vorhersagetabelle erstellt wurde

    Klicken Sie auf Fortschritt prüfen. Abfrage zum Erstellen von ncaa_2018_predictions ausführen

    Aufgabe 19: Vorhersageanalyse

    Da Sie die korrekten Spielergebnisse kennen, können Sie mit dem neuen Test-Dataset sehen, wo Ihr Modell eine falsche Vorhersage getroffen hat.

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    SELECT * FROM `bracketology.ncaa_2018_predictions` WHERE predicted_label <> label

    Seite „Abfrageergebnisse“ mit Tabs sowie Tabelle zu Vorhersaganalysen

    Die Anzahl der von der Abfrage zurückgegebenen Einträge zeigt, dass das Modell bei 48 Paarungen (24 Spielen) falsch lag. Das ergibt bei der Gesamtanzahl aller Paarungen in dem 2018er Turnier eine Accuracy von 64 %. 2018 muss wohl ein ziemlich ungewöhnliches Jahr gewesen sein. Sehen wir uns doch einmal die Überraschungserfolge an.

    Aufgabe 20: Bei welchen Spielen gab es im März 2018 Überraschungserfolge?

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    SELECT CONCAT(school_ncaa, " was predicted to ",IF(predicted_label="loss","lose","win")," ",CAST(ROUND(p.prob,2)*100 AS STRING), "% but ", IF(n.label="loss","lost","won")) AS narrative, predicted_label, # what the model thought n.label, # what actually happened ROUND(p.prob,2) AS probability, season, # us seed, school_ncaa, pace_rank, efficiency_rank, # them opponent_seed, opponent_school_ncaa, opp_pace_rank, opp_efficiency_rank FROM `bracketology.ncaa_2018_predictions` AS n, UNNEST(predicted_label_probs) AS p WHERE predicted_label <> n.label # model got it wrong AND p.prob > .75 # by more than 75% confidence ORDER BY prob DESC

    Ihre Ausgabe sollte ungefähr so aussehen:

    Bildschirm „Abfrageergebnisse“ mit Tabelle zu Überraschungserfolgen für neues Modell

    Der größte Überraschungserfolg wurde auch von unserem vorherigen Modell gefunden: UMBC besiegte Virginia. 2018 war insgesamt ein Jahr der großen Überraschungen. Lesen Sie mehr darüber im Artikel Has This Been the “Maddest” March?. Wird 2019 genau so spannend sein?

    Aufgabe 21: Leistung der Modelle vergleichen

    Wie sieht es mit den Ergebnissen aus, bei denen das naive Modell (das die gesetzten Positionen verglichen hat) falsch, das fortschrittlichere Modell hingegen richtig lag?

    • Führen Sie den folgenden Befehl im Abfrageeditor aus:
    SELECT CONCAT(opponent_school_ncaa, " (", opponent_seed, ") was ",CAST(ROUND(ROUND(p.prob,2)*100,2) AS STRING),"% predicted to upset ", school_ncaa, " (", seed, ") and did!") AS narrative, predicted_label, # what the model thought n.label, # what actually happened ROUND(p.prob,2) AS probability, season, # us seed, school_ncaa, pace_rank, efficiency_rank, # them opponent_seed, opponent_school_ncaa, opp_pace_rank, opp_efficiency_rank, (CAST(opponent_seed AS INT64) - CAST(seed AS INT64)) AS seed_diff FROM `bracketology.ncaa_2018_predictions` AS n, UNNEST(predicted_label_probs) AS p WHERE predicted_label = 'loss' AND predicted_label = n.label # model got it right AND p.prob >= .55 # by 55%+ confidence AND (CAST(opponent_seed AS INT64) - CAST(seed AS INT64)) > 2 # seed difference magnitude ORDER BY (CAST(opponent_seed AS INT64) - CAST(seed AS INT64)) DESC

    Ihre Ausgabe sollte ungefähr so aussehen:

    Bildschirm „Abfrageergebnisse“ mit Tabelle für neues Modell

    Das Modell sagte einen Überraschungssieg der Florida State University (09) über die Xavier University (01) voraus – und so kam es auch.

    Der Überraschungssieg wurde von dem neuen Modell korrekt vorhergesagt (obwohl die gesetzte Position einen anderen Schluss zuließ) und die Grundlage dafür waren die neuen, auf Fähigkeiten basierenden Features wie Ballbesitz und Punkteverwertung. Sehen Sie sich die Highlights des Spiels auf YouTube an.

    Aufgabe 22: Vorhersage für das March Madness-Turnier 2019 treffen

    Da wir die Teams und die gesetzten Positionen für März 2019 kennen, treffen wir nun eine Vorhersage zu den Ergebnissen zukünftiger Spiele.

    Daten von 2019 untersuchen

    • Mit der folgenden Abfrage finden Sie die Teams, die auf die besten Positionen gesetzt wurden:
    SELECT * FROM `data-to-insights.ncaa.2019_tournament_seeds` WHERE seed = 1

    Ihre Ausgabe sollte ungefähr so aussehen:

    Bildschirm „Abfrageergebnisse“ mit Ergebnistabelle zu den führenden gesetzten Positionen für 2019

    Matrix aller möglichen Spiele erstellen

    Da wir nicht wissen, welche Teams im Verlauf des Turniers aufeinandertreffen, lassen wir einfach alle Teams gegeneinander antreten.

    CROSS JOIN ist eine einfache Methode, um mit SQL ein einzelnes Team gegen jedes andere Team in einer Tabelle antreten zu lassen.

    • Führen Sie die folgende Abfrage aus, um alle möglichen Teampaarungen des Turniers zu erhalten:
    SELECT NULL AS label, team.school_ncaa AS team_school_ncaa, team.seed AS team_seed, opp.school_ncaa AS opp_school_ncaa, opp.seed AS opp_seed FROM `data-to-insights.ncaa.2019_tournament_seeds` AS team CROSS JOIN `data-to-insights.ncaa.2019_tournament_seeds` AS opp # teams cannot play against themselves :) WHERE team.school_ncaa <> opp.school_ncaa

    Fügen Sie die 2018er Teamstatistiken (Ballbesitz, Punkteverwertung) hinzu:

    CREATE OR REPLACE TABLE `bracketology.ncaa_2019_tournament` AS WITH team_seeds_all_possible_games AS ( SELECT NULL AS label, team.school_ncaa AS school_ncaa, team.seed AS seed, opp.school_ncaa AS opponent_school_ncaa, opp.seed AS opponent_seed FROM `data-to-insights.ncaa.2019_tournament_seeds` AS team CROSS JOIN `data-to-insights.ncaa.2019_tournament_seeds` AS opp # teams cannot play against themselves :) WHERE team.school_ncaa <> opp.school_ncaa ) , add_in_2018_season_stats AS ( SELECT team_seeds_all_possible_games.*, # bring in features from the 2018 regular season for each team (SELECT AS STRUCT * FROM `data-to-insights.ncaa.feature_engineering` WHERE school_ncaa = team AND season = 2018) AS team, (SELECT AS STRUCT * FROM `data-to-insights.ncaa.feature_engineering` WHERE opponent_school_ncaa = team AND season = 2018) AS opp FROM team_seeds_all_possible_games ) # Preparing 2019 data for prediction SELECT label, 2019 AS season, # 2018-2019 tournament season # our team seed, school_ncaa, # new pace metrics (basketball possession) team.pace_rank, team.poss_40min, team.pace_rating, # new efficiency metrics (scoring over time) team.efficiency_rank, team.pts_100poss, team.efficiency_rating, # opposing team opponent_seed, opponent_school_ncaa, # new pace metrics (basketball possession) opp.pace_rank AS opp_pace_rank, opp.poss_40min AS opp_poss_40min, opp.pace_rating AS opp_pace_rating, # new efficiency metrics (scoring over time) opp.efficiency_rank AS opp_efficiency_rank, opp.pts_100poss AS opp_pts_100poss, opp.efficiency_rating AS opp_efficiency_rating, # a little feature engineering (take the difference in stats) # new pace metrics (basketball possession) opp.pace_rank - team.pace_rank AS pace_rank_diff, opp.poss_40min - team.poss_40min AS pace_stat_diff, opp.pace_rating - team.pace_rating AS pace_rating_diff, # new efficiency metrics (scoring over time) opp.efficiency_rank - team.efficiency_rank AS eff_rank_diff, opp.pts_100poss - team.pts_100poss AS eff_stat_diff, opp.efficiency_rating - team.efficiency_rating AS eff_rating_diff FROM add_in_2018_season_stats

    Vorhersagen treffen

    CREATE OR REPLACE TABLE `bracketology.ncaa_2019_tournament_predictions` AS SELECT * FROM # let's predicted using the newer model ML.PREDICT(MODEL `bracketology.ncaa_model_updated`, ( # let's predict on March 2019 tournament games: SELECT * FROM `bracketology.ncaa_2019_tournament` ))

    Klicken Sie auf Fortschritt prüfen. Abfragen zum Erstellen der Tabellen „ncaa_2019_tournament“ und „ncaa_2019_tournament_predictions“ ausführen

    Rufen Sie Ihre Vorhersagen ab:

    SELECT p.label AS prediction, ROUND(p.prob,3) AS confidence, school_ncaa, seed, opponent_school_ncaa, opponent_seed FROM `bracketology.ncaa_2019_tournament_predictions`, UNNEST(predicted_label_probs) AS p WHERE p.prob >= .5 AND school_ncaa = 'Duke' ORDER BY seed, opponent_seed

    Bildschirm „Abfrageergebnisse“: Tabelle mit Vorhersagen für Duke

    • Hier haben wir die Ergebnisse des Modells so gefiltert, dass alle möglichen Spiele der Duke University angezeigt werden. Scrollen Sie, um das Spiel Duke gegen North Dakota State zu finden.

    Ergebnis: Duke (1) wird North Dakota State (16) mit einer Wahrscheinlichkeit von 88,5 % am 22.3.2019 schlagen.

    Experimentieren Sie ein wenig, indem Sie den Filter school_ncaa so ändern, dass die Ergebnisse der Spiele in Ihrem Turnierbaum vorhergesagt werden. Notieren Sie sich, welche Wahrscheinlichkeiten das Modell für seine Vorhersagen angibt – und dann gute Unterhaltung bei den Spielen.

    Das wars! Sie haben das Lab erfolgreich abgeschlossen.

    Sie haben mithilfe von BigQuery die Sieger des NCAA-Basketballturniers der Herren vorhergesagt.

    Weitere Informationen

    Google Cloud-Schulungen und -Zertifizierungen

    In unseren Schulungen erfahren Sie alles zum optimalen Einsatz unserer Google Cloud-Technologien und können sich entsprechend zertifizieren lassen. Unsere Kurse vermitteln technische Fähigkeiten und Best Practices, damit Sie möglichst schnell mit Google Cloud loslegen und Ihr Wissen fortlaufend erweitern können. Wir bieten On-Demand-, Präsenz- und virtuelle Schulungen für Anfänger wie Fortgeschrittene an, die Sie individuell in Ihrem eigenen Zeitplan absolvieren können. Mit unseren Zertifizierungen weisen Sie nach, dass Sie Experte im Bereich Google Cloud-Technologien sind.

    Anleitung zuletzt am 19. März 2024 aktualisiert

    Lab zuletzt am 19. März 2024 getestet

    © 2024 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.

    Diese Inhalte sind derzeit nicht verfügbar

    Bei Verfügbarkeit des Labs benachrichtigen wir Sie per E-Mail

    Sehr gut!

    Bei Verfügbarkeit kontaktieren wir Sie per E-Mail