1. Einführung
In diesem Codelab erstellen wir ein Modell zur Vorhersage von Filmbewertungen mit einem benutzerdefinierten BigQuery ML-Modell und verwenden dabei nur SQL. Das Modell wird dann in Vertex AI bereitgestellt. Informationen in diesem Dokument:
- BigQuery-Dataset mit Cloud Shell erstellen und Daten aus einer Datei laden
- Mit BigQuery ML für beaufsichtigtes Lernen ein Modell für die mehrstufige Regressionsvorhersage für die Filmbewertung erstellen, ohne viel zu programmieren, sondern nur mit SQL-Abfragen
Umfang
Sie erstellen eine
- Ein BigQuery-Dataset, das die Tabellen- und Modellkomponenten enthält
- BigQuery ML-Modell zur Vorhersage der Filmbewertung mit SQL-Abfragen
- Modell in Vertex AI Model Registry bereitstellen
Anforderungen
2. Projekt erstellen
- Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
- Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
- 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
- Sie verwenden Cloud Shell, eine Befehlszeilen-Umgebung, die in Google Cloud ausgeführt wird und bq vorinstalliert hat: Klicken Sie in der Cloud Console rechts oben auf „Cloud Shell aktivieren“:
- Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und das Projekt bereits auf Ihre Projekt-ID festgelegt ist. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
- 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
- Wenn Ihr Projekt nicht festgelegt ist, verwenden Sie den folgenden Befehl, um es festzulegen:
gcloud config set project <PROJECT_ID>
Weitere Informationen zu gcloud-Befehlen und deren Verwendung finden Sie in der Dokumentation.
4. Trainingsdaten vorbereiten
Dies ist ein wichtiger Schritt bei allen datengestützten Projekten, Produkten und Apps, der neben der Technologie auch viel Fachwissen erfordert, um einen optimalen Datensatz 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 Speicherort gespeichert. Sie können auch benutzerdefinierte Zugriffssteuerungen anhängen, um den Zugriff auf einen Datensatz und seine Tabellen einzuschränken.
- Erstellen Sie in Cloud Shell mit dem Befehl bq mk ein Dataset namens „movies“.
bq mk --location=<<LOCATION>> movies
Legen Sie für Standort eine Region (z. B. asia-south1) fest.
- Achten Sie darauf, dass Sie die Datendatei (CSV) bereit haben. 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
- Laden Sie die CSV-Datei mit dem Befehl „bq load“ in eine BigQuery-Tabelle. Sie können sie auch direkt über die BigQuery-Benutzeroberfläche 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
Optionen – Beschreibung: –source_format=CSV: Beim Parsen der Datendatei wird das CSV-Datenformat verwendet. –skip_leading_rows=1: Die erste Zeile in der CSV-Datei wird übersprungen, da es sich um eine Kopfzeile handelt. „Movies.movies“ ist das erste Positionsargument und definiert, in welche Tabelle die Daten geladen werden sollen. Mit ./movies.csv wird im zweiten Positionsargument festgelegt, welche Datei geladen werden soll. Mit dem Befehl „bq load“ können nicht nur lokale Dateien, sondern auch Dateien aus Cloud Storage mit URIs vom Typ „gs://my_bucket/path/to/file“ 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 werden jetzt in die Tabelle „movies.movies“ geladen.
- Es gibt drei Möglichkeiten, eine Suchanfrage zu stellen:
Wir können auf drei Arten mit BigQuery interagieren. Wir werden zwei davon ausprobieren: a. BigQuery-Web-UI b. Der Befehl „bq“ API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
Ich habe den BigQuery Web SQL-Arbeitsbereich zum Ausführen von Abfragen verwendet. Der SQL-Arbeitsbereich sieht so aus:
Mit dem Befehl „bq“:
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.
Hinweis zur Modellauswahl: Bei der Modellauswahl handelt es sich um einen Test. Ich habe mir zuerst einige Modelle angesehen und mich dann für LOGISTIC REG entschieden, um es einfach zu halten und Ergebnisse zu erhalten, die der tatsächlichen Filmbewertung aus mehreren Datenbanken näher kommen. Hinweis: Dies ist nur ein Beispiel für die Implementierung des Modells und NICHT unbedingt das empfohlene Modell für diesen Anwendungsfall. Eine andere Möglichkeit besteht darin, mit diesem logistischen Regressionsmodell das Ergebnis des Films als GUT / SCHLECHT vorherzusagen, anstatt die Bewertung vorherzusagen.
Trainingsdaten auswählen
Wir haben die Filmdaten (in CSV) bereits in der Tabelle in drei Kategorien unterteilt. Dazu haben wir das Feld „data_cat“ verwendet, das einen der drei Werte „TRAIN“, „TEST“ und „PREDICT“ hat. Das Aufteilen des Datensatzes zu Test- und Trainingszwecken ist ein wichtiger Aspekt des Modells. Weitere Informationen zur Aufteilung 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 SQL-Arbeitsbereich in der 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';
Suchanfragedetails:
- Mit der CREATE MODEL-Anweisung wird ein Modell mit den Trainingsdaten in der SELECT-Anweisung trainiert.
- Mit der OPTIONS-Klausel werden der Modelltyp und die Trainingsoptionen angegeben. 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.
- Mit der Option „data_split_method=NO_SPLIT“ wird BQML gezwungen, die Daten gemäß den Abfragebedingungen (data_cat = TRAIN) zu trainieren. Es ist jedoch besser, in dieser Option „AUTO_SPLIT“ zu verwenden, damit das Framework (oder in diesem Fall der Dienst) die Partitionierung der Trainings-/Testaufteilungen zufällig ausführen kann.
- Mit der Option „input_label_cols“ wird angegeben, welche Spalte in der SELECT-Anweisung als Labelspalte verwendet werden soll. Hier ist die Labelspalte „Punktzahl“, sodass das Modell anhand der anderen in jeder Zeile vorhandenen Werte lernt, welcher der 10 Werte von „Punktzahl“ am wahrscheinlichsten ist.
- 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 die Vorhersage der beliebtesten Labelklasse unter Umständen zu intensiv.
- Die SELECT-Anweisung fragt die Tabelle ab, die wir mit den CSV-Daten geladen haben. Die WHERE-Klausel filtert die Zeilen in der Eingabetabelle so, dass in diesem Schritt nur das TRAIN-Dataset ausgewählt wird.
Nach dem Erstellen wird im Bereich „SCHEMA“ des BigQuery SQL-Arbeitsbereichs Folgendes angezeigt:
Labels
Funktionen
Logistisches Regressionsmodell bewerten
Nach dem Erstellen des 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 Bewertungsdaten, die von einer SELECT-Unterabfrage zurückgegeben werden. Die Funktion gibt eine einzelne Zeile mit Statistiken zum Modell zurück.
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“ und „roc_auc“. Diese sind für die Bewertung der Modellleistung entscheidend. Sie können ML.EVALUATE auch ohne Eingabedaten aufrufen. Mit ML.EVALUATE werden die während des Trainings abgeleiteten Bewertungsmesswerte abgerufen, die das automatisch reservierte Bewertungs-Dataset verwenden.
Wichtige Messwerte auf einen Blick:
Genauigkeit: Welcher Anteil der positiven Ergebnisse war tatsächlich richtig? Precision = True Positive ÷ (True Positive + False Positive) Recall – welcher Anteil der tatsächlich positiven Ergebnisse wurde korrekt erkannt? Recall = Richtig positive Ergebnisse ÷ (Richtig positive Ergebnisse + Falsch negative Ergebnisse) Genauigkeit: Messwert zur Bewertung von Klassifizierungsmodellen. 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
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'
)
)
Unten sehen Sie ein Beispiel für die Ergebnisse:
Das Modellergebnis zeigt die vorhergesagte BEWERTUNG des Films auf einer Skala von 1 bis 10 (Klassifizierung). Sie fragen sich vielleicht, warum für jeden Film mehrere Zeilen mit Vorhersagen vorhanden sind. Das liegt daran, dass das Modell die möglichen vorhergesagten Labels und die Wahrscheinlichkeit ihres Auftretens in absteigender Reihenfolge zurückgegeben hat.
Vorhergesagte Ergebnisse und das Modell analysieren
Außerdem können Sie im Rahmen der Vorhersageergebnisse zwei wichtige Analyseschritte ausführen:
- Mit der Funktion ML.EXPLAIN_PREDICT können Sie ermitteln, warum Ihr Modell diese Vorhersageergebnisse generiert.
- 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 eignet sich hervorragend, wenn Sie das Modell vom BigQuery-Dienst erstellen lassen und sich zurücklehnen möchten, bis die Modellergebnisse generiert werden. Die AUTOML-Funktion ist direkt in BQML verfügbar (model_type=AUTOML_CLASSIFIER oder AUTOML_REGRESSOR) und kann viel einfacher aufgerufen werden, 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 für EVALUATE, PREDICT und EXPLAIN_PREDICT ausführen, wie im Abschnitt zum benutzerdefinierten BQML-Modell beschrieben. Weitere Informationen zu BigQuery AutoML finden Sie in der Dokumentation.
8. BQML-Modelle mit nur einem Klick in der Vertex AI Model Registry bereitstellen
Sie können jetzt alle Ihre ML-Modelle in der Vertex AI Model Registry aufrufen. So können Sie Modelle in Ihrem Unternehmen einfacher verwalten und bereitstellen. 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 die Option „model_registry="vertex_ai"“ in die CREATE MODEL-Abfrage ein, damit BigQuery ML auswählen kann, welche Modelle explizit in der Vertex AI-Modell-Registry registriert werden sollen. Weitere Informationen dazu finden Sie in diesem Blogpost.
9. Zusammenfassung
In weniger als 30 Minuten haben wir:
- BigQuery als Datenbank für das Analyseprojekt einrichten
- Benutzerdefiniertes Prognosemodell nur mit BigQuery-Daten-SQLs und ohne andere Programmierung erstellt
- BQ Auto ML-Modell nur mit SQL-Abfragen erstellt
- 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:
- Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf „Löschen“.
- 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 mit BQML Custom und AutoML ein Modell für die Filmbewertung erstellt und in der Vertex AI Model Registry bereitgestellt – und das alles nur mit SQL.