Vorhersage von Filmbewertungen mit BQML und SQL

1. Einführung

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

  1. BigQuery-Dataset mit Cloud Shell erstellen und Daten aus einer Datei laden
  2. BigQuery ML für überwachtes Lernen verwenden, um ein Modell für die Regression mit mehreren Klassen zur Vorhersage von Filmbewertungen zu erstellen, ohne viel Code schreiben zu müssen, sondern nur mit SQL-Abfragen

Das lernen Sie

Sie erstellen

  • ein BigQuery-Dataset, das die Tabellen- und Modellkomponenten enthält
  • ein BigQuery ML-Modell zur Vorhersage der Filmbewertung mit SQL-Abfragen
  • das 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 der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Informationen zum Prüfen, ob die Abrechnung für ein Projekt aktiviert ist Informationen zum 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 Befehlszeilenumgebung, die in Google Cloud ausgeführt wird und in der bq bereits vorinstalliert ist. Klicken Sie in der Cloud Console rechts oben auf „Cloud Shell aktivieren“: 6757b2fb50ddcc2d.png
  2. Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie bereits authentifiziert sind und für das Projekt schon Ihre Projekt-ID eingestellt ist. Führen Sie in der Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
  1. Führen Sie in der 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 nicht festgelegt ist, verwenden Sie den folgenden Befehl, um es festzulegen:
gcloud config set project <PROJECT_ID>

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

4. Trainingsdaten vorbereiten

Dies ist ein wichtiger Schritt in allen datenbezogenen Projekten, Produkten und Apps. Neben der Technologie zur Vorbereitung eines optimalen Datasets und zur Vorbereitung auf Ihr ML-Projekt ist viel Fachwissen erforderlich. Für dieses Codelab verwenden wir die bereits vorbereitete Datendatei.

5. Dataset erstellen und laden

Ein BigQuery-Dataset ist eine Sammlung von Tabellen. Alle Tabellen in einem Dataset werden am selben Daten Speicherort gespeichert. Sie können auch benutzerdefinierte Zugriffssteuerungen anhängen, um den Zugriff auf ein Dataset und seine Tabellen einzuschränken.

  1. Erstellen Sie in Cloud Shell mit dem Befehl bq mk ein Dataset mit dem Namen „movies“.
bq mk --location=<<LOCATION>> movies

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

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

cd movie-score
  1. Verwenden Sie den Befehl „bq load“, um die CSV-Datei in eine BigQuery-Tabelle zu laden. Sie können sie auch direkt über die BigQuery-UI hochladen:
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

Optionenbeschreibung: –source_format=CSV verwendet das CSV-Datenformat beim Parsen der Datendatei. –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 – das zweite Positionsargument – definiert, welche Datei geladen werden soll. Neben lokalen Dateien können mit dem Befehl „bq load“ auch Dateien aus Cloud Storage mit gs://my_bucket/path/to/file-URIs geladen werden. Ein Schema, das in einer JSON-Schemadatei oder als durch Kommas getrennte Liste definiert werden kann (ich habe eine durch Kommas getrennte Liste verwendet). Hurra! Unsere CSV-Daten wurden jetzt in die Tabelle „movies.movies“ geladen.

  1. Abfrage auf eine der drei folgenden Arten ausführen:

Es gibt drei Möglichkeiten zur Interaktion mit BigQuery. Wir probieren zwei davon aus: a. BigQuery Web UI b. Der Befehl „bq“ c. API

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

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

109a0b2c7155e9b3.png

Befehl „bq“ verwenden:

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

6. Filmbewertung auf einer Skala von 1 bis 10 vorhersagen

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. Außerdem können Sie den Modelltyp für die Regression mit mehreren Klassen verwenden, um vorherzusagen, ob ein Wert in eine von mehreren Kategorien fällt. Bei diesen Klassifizierungsproblemen wird also versucht, Daten zwei oder mehr Kategorien zuzuordnen.

Ein kurzer Hinweis zur Modellauswahl: Dies ist eine experimentelle Modellauswahl, die hier auf der Grundlage der Bewertung der Ergebnisse getroffen wurde. Ich habe zunächst einige Modelle ausprobiert und mich schließlich für die logistische Regression entschieden, um es einfach zu halten und Ergebnisse zu erhalten, die näher an der tatsächlichen Filmbewertung aus mehreren Datenbanken liegen. Dies sollte nur als Beispiel für die Implementierung des Modells betrachtet werden und ist NICHT unbedingt das empfohlene Modell für diesen Anwendungsfall. Eine andere Möglichkeit zur Implementierung besteht darin, das Ergebnis des Films als GUT / SCHLECHT vorherzusagen, anstatt die Bewertung mit diesem logistischen Regressionsmodell vorherzusagen.

Trainingsdaten auswählen

Wir haben die Filmdaten (in CSV) bereits in der Tabelle mit dem Feld „data_cat“ in drei Kategorien unterteilt, das einen von drei Werten hat: TRAIN, TEST und PREDICT. Das Aufteilen des Datasets für Test- und Trainingszwecke ist ein wichtiger Aspekt des Modells. Weitere Informationen zum Aufteilen von Datasets finden Sie in der Dokumentation.

Logistisches Regressionsmodell erstellen

Mit der Anweisung CREATE MODEL und der Option „LOGISTIC_REG“ können wir ein logistisches Regressionsmodell erstellen und trainieren.

Führen Sie die folgende Abfrage im BigQuery-Web-UI-SQL-Arbeitsbereich 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 Anweisung CREATE MODEL trainiert ein Modell auf der Grundlage der Trainingsdaten in der Anweisung SELECT.
  2. Die Klausel OPTIONS gibt den Modelltyp und die Trainingsoptionen an. In diesem Fall gibt die Option LOGISTIC_REG als Typ ein logistisches Regressionsmodell an. Sie müssen nicht angeben, ob ein binäres logistisches Regressionsmodell oder ein logistisches Regressionsmodell mit mehreren Klassen vorliegt: BigQuery ML kann anhand der Anzahl der eindeutigen Werte in der Labelspalte bestimmen, welches davon trainiert werden soll.
  3. data_split_method=‘NO_SPLIT' zwingt BQML, die Daten gemäß den Abfragebedingungen zu trainieren (data_cat = ‘TRAIN'). Es ist jedoch besser, in dieser Option „AUTO_SPLIT“ zu verwenden, damit das Framework (oder der Dienst in diesem Fall) die Aufteilung der Trainings-/Testaufteilungen zufällig vornehmen kann.
  4. Die Option input_label_cols gibt an, welche Spalte in der Anweisung SELECT als Labelspalte verwendet werden soll. Hier ist die Labelspalte „score“, sodass das Modell anhand der anderen in jeder Zeile vorhandenen Werte lernt, welcher der zehn Werte von „score“ am wahrscheinlichsten ist.
  5. Mit der Option „auto_class_weights=TRUE“ werden die Klassenlabels in den Trainingsdaten gewichtet. Standardmäßig sind die Trainingsdaten ungewichtet. Wenn die Labels in den Trainingsdaten nicht ausgewogen sind, lernt das Modell unter Umständen, bei der Vorhersage die häufigste Labelklasse zu stark einzubeziehen.
  6. Die Anweisung SELECT fragt die Tabelle ab, die wir mit den CSV-Daten geladen haben. Die Klausel WHERE filtert die Zeilen in der Eingabetabelle, sodass in diesem Schritt nur das Dataset TRAIN 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

Nach dem Erstellen Ihres Modells bewerten Sie die Leistung des Modells mithilfe der Funktion ML.EVALUATE. Die Funktion ML.EVALUATE wertet die vorhergesagten Werte gegenüber den 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 Funktion ML.EVALUATE verwendet das im vorherigen Schritt trainierte Modell und die von der Unterabfrage SELECT zurückgegebenen Bewertungsdaten. 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: Genauigkeit, Trefferquote, Accuracy, F1-Score, Log-Loss und ROC-AUC. Diese sind sehr wichtig für die Bewertung der Leistung des Modells. Sie können ML.EVALUATE auch ohne Eingabedaten aufrufen. ML.EVALUATE ruft die während des Trainings abgeleiteten Bewertungsmesswerte ab, die das automatisch reservierte Bewertungs-Dataset verwenden.

Wichtige Messwerte auf einen Blick:

Genauigkeit: Welcher Anteil der positiven Identifikationen war tatsächlich richtig? Genauigkeit = Richtig positive Ergebnisse / (Richtig positive Ergebnisse + Falsch positive Ergebnisse) Trefferquote: Welcher Anteil der tatsächlich positiven Ergebnisse wurde richtig identifiziert? Trefferquote = Richtig positive Ergebnisse / (Richtig positive Ergebnisse + Falsch negative Ergebnisse) Accuracy: Ein Messwert zur Bewertung von Klassifizierungsmodellen. Er gibt den Anteil der Vorhersagen an, die unser Modell tatsächlich richtig getroffen hat. Accuracy = Anzahl der richtigen Vorhersagen / Gesamtzahl der Vorhersagen

Filmbewertung mit ML.PREDICT vorhersagen

Mit der folgenden Abfrage wird die Bewertung jedes Films im PREDICT-Teil des Datasets vorhergesagt.

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

Hier ist ein Snippet der Ergebnisse:

1efb91967acc1f0c.png

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

Vorhergesagte Ergebnisse und das Modell analysieren

Außerdem können Sie im Rahmen der Vorhersageergebnisse zwei weitere Analyseschritte ausführen:

  1. Mit der Funktion ML.EXPLAIN_PREDICT können Sie ermitteln, warum Ihr Modell diese Vorhersageergebnisse generiert.
  2. Mit der Funktion ML.GLOBAL_EXPLAIN können Sie ermitteln, welche Features im Allgemeinen zur Ermittlung der Einkommensklasse am wichtigsten sind.

Weitere Informationen zu diesen Schritten finden Sie in der Dokumentation.

7. Filmbewertung mit BigQuery AutoML vorhersagen

AutoML ist ideal, wenn Sie das Modell vom BigQuery-Dienst erstellen lassen und sich entspannen möchten, bis die Modellergebnisse generiert werden. Die AutoML-Funktion ist direkt in BQML verfügbar (model_type=AUTOML_CLASSIFIER oder AutoML_REGRESSOR) und 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 Bewerten, Vorhersagen und Erklären der Vorhersageergebnisse ausführen, wie wir es beim benutzerdefinierten BQML-Modell besprochen haben. 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, was die Verwaltung und Bereitstellung von Modellen für Ihre Organisation erleichtert. Dazu gehören Modelle, die mit BigQuery ML, AutoML und benutzerdefinierten 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';

Fügen Sie der Abfrage CREATE MODEL die Option model_registry="vertex_ai" hinzu, damit BigQuery ML auswählen kann, welche Modelle explizit in Vertex AI Model Registry registriert werden sollen. Weitere Informationen finden Sie in diesem Blog.

9. Zusammenfassung

In weniger als 30 Minuten haben wir Folgendes getan:

  1. BigQuery als Datenbank für das Analyseprojekt eingerichtet
  2. Benutzerdefiniertes Vorhersagemodell nur mit BigQuery-SQL-Abfragen und ohne anderen Code erstellt
  3. BQ-AutoML-Modell nur mit SQL-Abfragen erstellt
  4. BQML-Modell in Vertex AI Model Registry bereitgestellt

10. Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Beitrag verwendeten Ressourcen in Rechnung gestellt werden:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
  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 auf „Beenden“, um das Projekt zu löschen.

11. Glückwunsch

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