Vorhersage von Filmbewertungen mit BQML und SQL

1. Einführung

In diesem Codelab erstellen wir ein Modell zur Vorhersage der Filmpunktzahl mit einem benutzerdefinierten BigQuery ML-Modell, das nur SQL verwendet, und stellen das Modell in Vertex AI bereit. Informationen in diesem Dokument:

  1. BigQuery-Dataset mit Cloud Shell erstellen und Daten aus einer Datei laden
  2. BigQuery ML für überwachtes Lernen verwenden, um ein Regressionsmodell mit mehreren Klassen für die Vorhersage der Filmpunktzahl zu erstellen, ohne viel Programmierung, sondern nur unter Verwendung von SQL-Abfragen

Inhalt

Sie erstellen ein

  • Ein BigQuery-Dataset, das die Tabellen- und Modellkomponenten enthält
  • BigQuery ML-Modell zur Vorhersage der Filmbewertung mithilfe von SQL-Abfragen
  • Modell in Vertex AI Model Registry bereitstellen

Anforderungen

  • Ein Browser wie Chrome oder Firefox
  • Ein Google Cloud-Projekt mit aktivierter Abrechnung

2. Projekt erstellen

  1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.
  3. Rufen Sie BigQuery auf, um die API zu aktivieren. Sie können die BigQuery-Web-UI auch direkt öffnen, indem Sie die folgende URL in Ihren Browser eingeben: https://console.cloud.google.com/bigquery

3. Cloud Shell aktivieren

  1. Sie verwenden Cloud Shell, eine in Google Cloud ausgeführte Befehlszeilenumgebung mit vorinstalliertem bq: Klicken Sie in der Cloud Console oben rechts auf „Cloud Shell aktivieren“: 6757b2fb50ddcc2d.png
  2. Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre Projekt-ID eingestellt ist. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt
gcloud config list project
  1. Wenn Ihr Projekt noch nicht eingerichtet ist, verwenden Sie den folgenden Befehl, um es festzulegen:
gcloud config set project <PROJECT_ID>

Informationen zu gcloud-Befehlen und deren Verwendung finden Sie in der Dokumentation.

4. Trainingsdaten vorbereiten

Dies ist ein wichtiger Schritt bei allen datenbezogenen Projekten, Produkten und Anwendungen, für die neben der Technologie auch viel Fachkompetenz erforderlich ist, um ein optimales Dataset vorzubereiten und es für Ihr ML-Projekt vorzubereiten. Für dieses Codelab verwenden wir die bereits vorbereitete Datei data.

5. Dataset erstellen und laden

Ein BigQuery-Dataset ist eine Sammlung von Tabellen. Alle Tabellen in einem Dataset werden am selben Datenspeicherort gespeichert. Sie können auch benutzerdefinierte Zugriffssteuerungen hinzufügen, um den Zugriff auf ein Dataset und dessen Tabellen einzuschränken.

  1. Verwenden Sie in Cloud Shell den Befehl bq mk, um ein Dataset namens "movies" zu erstellen.
bq mk --location=<<LOCATION>> movies

Legen Sie als Standort eine Region (asia-south1) fest.

  1. Stellen Sie sicher, dass die Datendatei (.csv) bereit ist. Führen Sie in Cloud Shell die folgenden Befehle aus, um das Repository zu klonen und zum Projekt zu wechseln:
git clone <<repository link>>

cd movie-score
  1. Verwenden Sie den Befehl bq Loading, um Ihre CSV-Datei in eine BigQuery-Tabelle zu laden. Beachten Sie, dass Sie den Upload auch direkt über die BigQuery-Benutzeroberfläche durchführen können:
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string

Optionsbeschreibung: –source_format=CSV – verwendet beim Parsen der Datendatei das CSV-Datenformat. –skip_leading_rows=1 – Überspringt die erste Zeile in der CSV-Datei, da es sich um eine Kopfzeile handelt. Movies.movies – das erste Positionsargument – definiert, in welche Tabelle die Daten geladen werden sollen. ./movies.csv ist das zweite Positionsargument. Es bestimmt, welche Datei geladen werden soll. Zusätzlich zu lokalen Dateien kann der Befehl „bqload“ auch Dateien aus Cloud Storage mit URIs vom Typ „gs://my_bucket/path/to/file“ laden. Ein Schema, das in einer JSON-Schlüsseldatei oder als durch Kommas getrennte Liste definiert werden kann (ich habe eine durch Kommas getrennte Liste verwendet). Hurra! Unsere CSV-Daten werden nun in die Tabelle „Movies.movies“ geladen.

  1. Sie haben drei Möglichkeiten für die Abfrage:

Wir können auf drei Arten mit BigQuery interagieren. Wir werden zwei davon ausprobieren: a. BigQuery-Web-UI b. Den bq-Befehl "c". API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

Ich habe den BigQuery Web SQL Workspace verwendet, um Abfragen auszuführen. Der SQL-Arbeitsbereich sieht so aus:

109a0b2c7155e9b3.png

Mit dem bq-Befehl:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. Vorhersage der Filmbewertung auf einer Skala von 1 bis 10

BigQuery ML unterstützt mit dem Modelltyp logistische Regression überwachtes Lernen. Mit dem Modelltyp für binäre logistische Regression können Sie vorhersagen, ob ein Wert in eine von zwei Kategorien fällt: Alternativ können Sie mit dem Regressionsmodell mit mehreren Klassen vorhersagen, ob ein Wert in eine von mehreren Kategorien fällt. Diese Probleme werden als Klassifizierungsprobleme bezeichnet, da sie versuchen, Daten in zwei oder mehr Kategorien zu unterteilen.

Ein kurzer Hinweis zur Modellauswahl: Dies ist eine experimentelle Modellauswahl, die auf der Auswertung der Ergebnisse basiert, die ich anfangs in einigen Modellen durchgeführt habe. Am Ende habe ich dann LOGISTIC REG verwendet, um es einfach zu halten und Ergebnisse näher an der tatsächlichen Filmbewertung aus verschiedenen Datenbanken zu erhalten. Beachten Sie, dass dies nur als Beispiel für die Implementierung des Modells betrachtet werden sollte und nicht unbedingt das empfohlene Modell für diesen Anwendungsfall ist. Eine weitere Möglichkeit zur Implementierung besteht darin, das Ergebnis des Films mithilfe dieses logistischen Regressionsmodells als GUT / SCHLECHT vorherzusagen, anstatt die Punktzahl vorherzusagen.

Trainingsdaten auswählen

Wir haben die Filmdaten (im CSV-Format) bereits in 3 Kategorien in der Tabelle unter Verwendung des Felds „data_cat“ aufgeteilt. mit einem von drei Werten: TRAINIEREN, TESTEN und PROGNOSEN. Das Aufteilen des Datasets zu Test- und Trainingszwecken ist ein wichtiger Aspekt des Modells. Weitere Informationen zur Dataset-Aufteilung finden Sie in der Dokumentation.

Logistisches Regressionsmodell erstellen

Wir können die Anweisung CREATE MODEL mit der Option LOGISTIC_REG (LOGISTIC_REG) verwenden. ein logistisches Regressionsmodell zu erstellen und zu trainieren.

Führen Sie die folgende Abfrage im SQL-Arbeitsbereich der BigQuery-Web-UI aus:

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

Abfragedetails:

  1. Die CREATE MODEL-Anweisung trainiert ein Modell mithilfe der Trainingsdaten der SELECT-Anweisung
  2. Die OPTIONS-Klausel gibt den Modelltyp und die Trainingsoptionen an. In diesem Fall gibt die Option LOGISTIC_REG einen Typ eines logistischen Regressionsmodells an. Es ist nicht erforderlich, ein binäres logistisches Regressionsmodell gegenüber einem mehrklassigen logistischen Regressionsmodell anzugeben: BigQuery ML kann anhand der Anzahl eindeutiger Werte in der Labelspalte bestimmen, welches Modell trainiert werden soll.
  3. data_split_method=‘NO_SPLIT&#39; BQML zwingt BQML dazu, die Daten gemäß den Abfragebedingungen (data_cat = TRAIN) zu trainieren. Beachten Sie auch, dass es besser ist, den AUTO_SPLIT zu verwenden. in dieser Option, damit das Framework (oder in diesem Fall Dienst) die Partition der Trainings-/Testaufteilungen zufällig anordnen kann
  4. Die Option „input_label_cols“ gibt an, welche Spalte in der SELECT-Anweisung als Labelspalte verwendet werden soll. Hier ist die Label-Spalte „Score“, sodass das Modell anhand der anderen Werte in jeder Zeile lernt, welcher der 10 Score-Werte am wahrscheinlichsten ist
  5. Mit „auto_class_weights=TRUE“ die Klassenlabels in den Trainingsdaten ausgleichen. Standardmäßig sind die Trainingsdaten ungewichtet. Wenn die Labels in den Trainingsdaten unausgewogen sind, lernt das Modell möglicherweise, die beliebteste Labelklasse stärker vorherzusagen.
  6. Die SELECT-Anweisung fragt die Tabelle ab, die wir mit den CSV-Daten geladen haben. Die WHERE-Klausel filtert die Zeilen in der Eingabetabelle, sodass nur das TRAIN-Dataset in diesem Schritt ausgewählt wird.

Nach der Erstellung wird im Abschnitt „SCHEMA“ des BigQuery-SQL-Arbeitsbereichs Folgendes angezeigt:

Labels

93efd0c1a7883690.png

Funktionen

8c539338df1a9652.png

Logistisches Regressionsmodell bewerten

Nachdem Sie das Modell erstellt haben, können Sie die Leistung des Modells mithilfe der Funktion ML.EVALUATE bewerten. Die ML.EVALUATE-Funktion wertet die vorhergesagten Werte gegen die tatsächlichen Daten aus. Die Abfrage zur Bewertung des Modells lautet so:

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

Die ML.EVALUATE-Funktion verwendet das im vorherigen Schritt trainierte Modell und die Evaluationsdaten, die von einer SELECT-Unterabfrage zurückgegeben werden. Die Funktion gibt eine einzelne Zeile mit Statistiken zum Modell zurück.

b54b0ebd6514a498.png

Da Sie eine logistische Regression durchgeführt haben, enthalten die Ergebnisse die Messwerte, die Sie im Screenshot oben sehen: Precision, Recall, Accuracy, f1-score, log_loss, roc_auc, die für die Bewertung der Leistung des Modells sehr wichtig sind. Sie können ML.EVALUATE auch ohne Eingabedaten aufrufen. ML.EVALUATE ruft die während des Trainings abgeleiteten Bewertungsmesswerte ab und verwendet das automatisch reservierte Bewertungs-Dataset.

Die wichtigsten Messwerte auf einen Blick:

Genauigkeit - Welcher Anteil der positiven Identifizierungen war tatsächlich richtig? Precision = Richtig-positiv / (Richtig-positiv + falsch-positiv) Recall – Welcher Anteil der tatsächlich positiven Ergebnisse wurde richtig identifiziert? Trefferquote = Richtig-positiv / (Richtig-positiv + falsch-negativ) Genauigkeit – Ein Messwert zum Bewerten von Klassifizierungsmodellen. Dies ist der Anteil der Vorhersagen, die unser Modell tatsächlich richtig getroffen hat. Genauigkeit = Anzahl der richtigen Vorhersagen ÷ Gesamtzahl der Vorhersagen

Filmbewertung mit ML.PREDICT vorhersagen

Die folgende Abfrage sagt die Punktzahl jedes Films im PROGNOSE-Teil des Datasets voraus.

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

Unten sehen Sie einen Auszug der Ergebnisse:

1efb91967acc1f0c.png

Das Modellergebnis zeigt den vorhergesagten SCORE des Films auf einer Skala von 1 bis 10 (Klassifizierung). Sie fragen sich vielleicht, warum es für jeden Film mehrere Vorhersagezeilen gibt. Das liegt daran, dass das Modell die möglichen vorhergesagten Labels und deren Eintrittswahrscheinlichkeit in absteigender Reihenfolge zurückgegeben hat.

Analysieren Sie die vorhergesagten Ergebnisse und das Modell

Darüber hinaus können Sie zwei großartige Analyseschritte als Teil der Vorhersageergebnisse durchführen:

  1. Mit der ML.EXPLAIN_PREDICT-Funktion können Sie nachvollziehen, warum Ihr Modell diese Vorhersageergebnisse generiert.
  2. Mit der Funktion ML.GLOBAL_EXPLAIN können Sie feststellen, welche Funktionen zur Bestimmung der Einkommensklasse im Allgemeinen am wichtigsten sind.

Ausführliche Informationen zu diesen Schritten finden Sie in der Dokumentation.

7. Filmbewertung mit BigQuery AutoML vorhersagen

AutoML ist ideal, wenn Sie möchten, dass der BigQuery-Dienst das Modell für Sie erstellt und entspannt, bis Ihre Modellergebnisse generiert wurden. Die AUTOML-Funktion ist direkt in BQML verfügbar (model_type=AUTOML_CLASSIFIER oder AUTOML_REGRESSOR) und ist viel einfacher aufzurufen, wenn sich die Daten bereits in BigQuery befinden.

CREATE OR REPLACE MODEL movies.auto_movies
       OPTIONS(model_type='AUTOML_CLASSIFIER',
               input_label_cols=['score'],
               budget_hours=1.0)
AS 
SELECT
  * EXCEPT(id, data_cat)
FROM
  movies.movies_score;

Nachdem das Modell erstellt wurde, können Sie die Schritte zum EVALUATE, PREDICT und EXPLAIN_PREDICT ausführen, wie im benutzerdefinierten BQML-Modell beschrieben. Weitere Informationen zu BigQuery AutoML finden Sie in der Dokumentation.

8. BQML-Modelle mit einem Klick in Vertex AI Model Registry bereitstellen

Sie können jetzt alle Ihre ML-Modelle in Vertex AI Model Registry sehen, sodass Ihre Organisation Modelle einfacher verwalten und bereitstellen kann. Dazu gehören Modelle, die mit BigQuery ML, AutoML und benutzerdefiniert trainierten Modellen erstellt wurden. Gehen Sie dazu folgendermaßen vor:

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
   model_registry='vertex_ai',
  vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

Model_Registry="vertex_ai" hinzufügen in der CREATE MODEL-Abfrage, damit BigQuery ML die Modelle auswählen kann, die explizit in der Vertex AI Model Registry registriert werden sollen. Weitere Informationen dazu findest du in diesem Blog.

9. Zusammenfassung

In weniger als 30 Minuten haben wir:

  1. BigQuery als Datenbank für das Analyseprojekt einrichten
  2. Erstellung eines benutzerdefinierten Vorhersagemodells nur unter Verwendung von BigQuery-Daten-SQLs und ohne weitere Codierung
  3. BQ-Auto-ML-Modell nur mit SQL-Abfragen erstellt
  4. BQML-Modell in Vertex AI Model Registry bereitgestellt

10. Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Beitrag verwendeten Ressourcen in Rechnung gestellt werden:

  1. Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf.
  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf „Löschen“.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie dann auf „Beenden“, um das Projekt zu löschen.

11. Glückwunsch

Glückwunsch! Sie haben erfolgreich ein Modell zur Vorhersage von Filmbewertungen mit benutzerdefiniertem BQML und AutoML erstellt und das Modell in Vertex AI Model Registry bereitgestellt – und das alles nur mit SQL.