Diese Anleitung bietet eine Einführung zum Matrixfaktorisierungsmodell in BigQuery ML für Datenanalysten. Mit BigQuery ML haben Nutzer die Möglichkeit, mit SQL-Abfragen Modelle für maschinelles Lernen in BigQuery zu erstellen und auszuführen. Da SQL-Experten mithilfe von BigQuery ML Modelle unter Verwendung vorhandener Tools erstellen und schneller entwickeln können, ohne dabei Daten bewegen zu müssen, wird das maschinelle Lernen demokratisiert.
In dieser Anleitung wird gezeigt, wie Sie mithilfe der Beispieltabelle GA360_test.ga_sessions_sample
ein Matrixfaktorisierungsmodell mit implizitem Feedback erstellen, um mit einer Besucher-ID und einer Content-ID Empfehlungen abzugeben.
Die Tabelle ga_sessions_sample
enthält Informationen zu einem Teil der Sitzungsdaten, die von Google Analytics 360 erfasst und an BigQuery gesendet werden.
Ziele
In dieser Anleitung verwenden Sie Folgendes:
- BigQuery ML zum Erstellen eines impliziten Empfehlungsmodells mit der
CREATE MODEL
-Anweisung - Die
ML.EVALUATE
-Funktion zum Bewerten des ML-Modells - Die
ML.WEIGHTS
-Funktion zum Prüfen der während des Trainings generierten Gewichtung latenter Faktoren - Die
ML.RECOMMEND
-Funktion zum Erstellen von Empfehlungen für einen Nutzer
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:
- BigQuery
- BigQuery ML
Weitere Informationen zu den Kosten von BigQuery finden Sie auf der Seite BigQuery-Preise.
Weitere Informationen zu den Kosten für BigQuery ML finden Sie unter BigQuery ML-Preise.
Vorbereitung
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery ist in neuen Projekten automatisch aktiviert.
Zum Aktivieren von BigQuery in einem vorhandenen Projekt wechseln Sie zu
Enable the BigQuery API.
.
Schritt 1: Dataset erstellen
Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
Klicken Sie auf
Aktionen ansehen > Dataset erstellen.Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
bqml_tutorial
ein.Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.
Die öffentlichen Datasets sind am multiregionalen Standort
US
gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Standort speichern.Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
Schritt 2: Analytics 360-Daten in BigQuery laden
In den meisten Fällen spiegeln die Bewertungen in Ihren Daten keinen Wert wider, den ein Nutzer explizit festgelegt hat. In diesen Szenarien können wir für diese Werte eine implizite Ersatzbewertung festlegen und einen anderen Algorithmus zur Berechnung von Empfehlungen anwenden. Hier verwenden wir ein Beispiel für ein Analytics 360-Dataset. Dieses Beispiel beruht auf diesem Artikel.
Mit der folgenden Abfrage wird ein Dataset mit impliziten Bewertungen auf Basis der Zeitdauer erstellt, die ein Besucher auf einer Seite aus dem Beispiel cloud-training-demos.GA360_test.ga_sessions_sample
bei einer Sitzung verbracht hat. Im Rahmen dieser Abfrage soll ein Dataset mit drei Spalten erstellt werden, die einer Nutzerspalte, einer Artikelspalte und einer Bewertungsspalte zugeordnet werden.
Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.
Geben Sie im Textfeld des Abfrageeditors die folgende GoogleSQL-Abfrage ein.
#standardSQL CREATE OR REPLACE TABLE bqml_tutorial.analytics_session_data AS WITH visitor_page_content AS ( SELECT fullVisitorID, ( SELECT MAX( IF (index=10, value, NULL)) FROM UNNEST(hits.customDimensions)) AS latestContentId, (LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time) AS session_duration FROM `cloud-training-demos.GA360_test.ga_sessions_sample`, UNNEST(hits) AS hits WHERE # only include hits on pages hits.type = "PAGE" GROUP BY fullVisitorId, latestContentId, hits.time ) # aggregate web stats SELECT fullVisitorID AS visitorId, latestContentId AS contentId, SUM(session_duration) AS session_duration FROM visitor_page_content WHERE latestContentId IS NOT NULL GROUP BY fullVisitorID, latestContentId HAVING session_duration > 0 ORDER BY latestContentId
(Optional) Klicken Sie auf More (Mehr) > Query settings (Abfrageeinstellungen), um den Verarbeitungsstandort festzulegen. Wählen Sie als Verarbeitungsstandort
US
aus. Dieser Schritt ist optional, da der Verarbeitungsstandort anhand des Standorts des Datasets automatisch erkannt wird.Klicken Sie auf Ausführen.
Wenn die Abfrage abgeschlossen ist, wird im Navigationsbereich
bqml_tutorial.analytics_session_data
angezeigt. Da die Abfrage zum Erstellen einer Tabelle eineCREATE TABLE
-Anweisung verwendet, werden die Abfrageergebnisse nicht ausgegeben.Die erstellte Tabelle sollte in etwa so aussehen:
Beachten Sie, dass dieses Ergebnis spezifisch für das Exportieren der Daten nach BigQuery ist. Die Abfrage zum Extrahieren Ihrer eigenen Daten kann anders aussehen.
Schritt 3: Implizites Empfehlungsmodell erstellen
Als Nächstes legen Sie mithilfe der Google Analytics-Tabelle, die im vorherigen Schritt geladen wurde, ein implizites Empfehlungsmodell an. Die folgende Google-SQL-Abfrage erstellt ein solches Modell, mit dem eine Konfidenzbewertung für jedes visitorId
/contentId
-Paar vorhergesagt wird. Eine Bewertung wird mit Zentrierung und Skalierung nach der Mediansitzungsdauer erstellt und die Datensätze, bei denen die Sitzungsdauer mehr als das 3,33-fache des Medianwerts beträgt, werden als Ausreißer gefiltert.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` OPTIONS (model_type='matrix_factorization', feedback_type='implicit', user_col='visitorId', item_col='contentId', rating_col='rating', l2_reg=30, num_factors=15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data` WHERE 0.3 * (1 + (session_duration - 57937) / 57937) < 1
Abfragedetails
Das Modell bqml_tutorial.my_implicit_mf_model
wird mit der Klausel CREATE MODEL
erstellt und trainiert.
Die Klausel OPTIONS(model_type='matrix_factorization', feedback_type='IMPLICIT',
user_col='visitorId', ...)
gibt an, dass ein Matrixfaktorisierungsmodell angelegt wird. Da feedback_type='IMPLICIT'
festgelegt ist, wird ein implizites Matrixfaktorisierungsmodell trainiert.
Ein Beispiel für das Erstellen eines expliziten Matrixfaktorisierungsmodells finden Sie unter Explizites Matrixfaktorisierungsmodell erstellen.
Die SELECT
-Anweisung dieser Abfrage generiert Empfehlungen anhand der folgenden Spalten:
visitorId
: die Besucher-ID (INT64)contentId
: die Content-ID (INT64)rating
: die implizite Bewertung von 0 bis 1, die für dievisitorId
und die jeweiligecontentId
berechnet wurde, wobei die Werte zentriert und skaliert werden (FLOAT64)
Die FROM
-Klausel – bqml_tutorial.analytics_session_data
– gibt an, dass Sie die Tabelle analytics_session_data
im Dataset bqml_tutorial
abfragen. Dieses Dataset befindet sich in Ihrem BigQuery-Projekt, wenn Sie die Schritte 2 und 8 der Anleitung ausgeführt haben.
Abfrage CREATE MODEL
ausführen
So führen Sie die Abfrage CREATE MODEL
zum Erstellen und Trainieren des Modells aus:
Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.
Geben Sie im Textfeld des Abfrageeditors die folgende GoogleSQL-Abfrage ein.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` OPTIONS (model_type='matrix_factorization', feedback_type='implicit', user_col='visitorId', item_col='contentId', rating_col='rating', l2_reg=30, num_factors=15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data`
Klicken Sie auf Ausführen.
Die Abfrage dauert etwa 12 Minuten. Danach wird das Modell (
my_implicit_mf_model
) im Navigationsbereich angezeigt. Da die Abfrage eineCREATE MODEL
-Anweisung zum Erstellen eines Modells verwendet, werden keine Abfrageergebnisse ausgegeben.
Schritt 4 (optional): Trainingsstatistiken abrufen
Mit der Funktion ML.TRAINING_INFO
können Sie die Ergebnisse des Modelltrainings abrufen. Alternativ lassen sich die Statistiken auch in der Google Cloud Console abrufen. In dieser Anleitung verwenden Sie die Google Cloud Console.
Ein Algorithmus für maschinelles Lernen erstellt ein Modell durch Analyse vieler Beispiele. Ziel ist es, ein Modell zu finden, das den Verlust so weit wie möglich minimiert. Dieser Vorgang wird als empirische Risikominimierung bezeichnet.
So können Sie die Statistiken zum Modelltraining ansehen, die beim Ausführen der CREATE MODEL
-Abfrage erzeugt wurden:
Maximieren Sie im Navigationsbereich der Google Cloud Console im Abschnitt Ressourcen den Bereich [PROJECT_ID] > bqml_tutorial und klicken Sie dann auf my_explicit_mf_model.
Klicken Sie auf den Tab Training und dann auf Tabelle. Das Ergebnis sollte in etwa so aussehen:
Die Spalte Trainingsdatenverlust enthält den Verlustmesswert, der berechnet wird, nachdem das Modell mit dem Trainings-Dataset trainiert wurde. Da Sie die Matrixfaktorisierung ausgeführt haben, enthält diese Spalte die mittlere quadratische Abweichung. Standardmäßig werden die Daten bei Matrixfaktorisierungsmodellen nicht aufgeteilt, sodass die Spalte Evaluationsdatenverlust nur dann vorhanden ist, wenn ein Holdout-Dataset angegeben wird. Dies liegt daran, dass durch Aufteilung der Daten alle Bewertungen eines Nutzers oder Artikels verloren gehen können. Daher enthält das Modell keine Informationen zu latenten Faktoren über fehlende Nutzer oder Artikel.
Weitere Informationen zur Funktion
ML.TRAINING_INFO
finden Sie in der Syntaxreferenz zu BigQuery ML.
Schritt 5: Modell bewerten
Nachdem Sie das Modell erstellt haben, können Sie mit der Funktion ML.EVALUATE
die Leistung des Recommenders bewerten. Die ML.EVALUATE
-Funktion bewertet die vorhergesagten Bewertungen gegenüber den tatsächlichen Bewertungen.
Zur Bewertung des Modells wird folgende Abfrage verwendet:
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
Abfragedetails
Die oberste SELECT
-Anweisung ruft die Spalten aus dem Modell ab.
In der FROM
-Klausel wird die Funktion ML.EVALUATE
für das Modell bqml_tutorial.my_implicit_mf_model
verwendet.
Abfrage ML.EVALUATE
ausführen
So führen Sie die ML.EVALUATE
-Abfrage zur Bewertung des Modells aus:
Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.
Geben Sie im Textfeld des Abfrageeditors die folgende GoogleSQL-Abfrage ein.
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
(Optional) Klicken Sie auf More (Mehr) > Query settings (Abfrageeinstellungen), um den Verarbeitungsstandort festzulegen. Wählen Sie als Verarbeitungsstandort
US
aus. Dieser Schritt ist optional, da der Verarbeitungsstandort anhand des Standorts des Datasets automatisch erkannt wird.Klicken Sie auf Ausführen.
Sobald die Abfrage abgeschlossen ist, klicken Sie unterhalb des Textbereichs der Abfrage auf den Tab Ergebnisse. Die Ergebnisse sollten in etwa so aussehen:
Da Sie eine implizite Matrixfaktorisierung ausgeführt haben, enthalten die Ergebnisse die folgenden Spalten:
mean_average_precision
mean_squared_error
normalized_discounted_cumulative_gain
average_rank
mean_average_precision
,normalized_discounted_cumulative_gain
undaverage_rank
sind Bewertungsmesswerte, die unter Messwerte zur impliziten Matrixfaktorisierung erläutert werden.
Schritt 6: Bewertungen vorhersagen und Empfehlungen abgeben
Anhand Ihres Modells Bewertungen vorhersagen und Empfehlungen abgeben
Alle Konfidenzwerte zu contentId
-Bewertungen für eine Reihe von visitorIds
ermitteln
Für ML.RECOMMEND
sind neben dem Modell keine weiteren Argumente erforderlich. Es kann aber optional eine Tabelle verwendet werden. Wenn die Eingabetabelle nur eine Spalte enthält, die mit dem Namen der Eingabespalte für den user
oder item
übereinstimmt, werden alle vorhergesagten Artikelbewertungen für jeden user
ausgegeben (und umgekehrt). Wenn sich alle users
oder alle items
in der Eingabetabelle befinden, werden die gleichen Ergebnisse wie ohne optionales Argument für ML.RECOMMEND
ausgegeben.
Das folgende Beispiel zeigt eine Abfrage zum Abrufen aller vorhergesagten Bewertungskonfidenzwerte für fünf Besucher.
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5))
Abfragedetails
Die obere SELECT
-Anweisung ruft die Spalten visitorId
, contentId
und predicted_rating_confidence
ab. Die letzte Spalte wird von der ML.RECOMMEND
-Funktion generiert. Wenn Sie die ML.RECOMMEND
-Funktion verwenden, lautet der Name der Ausgabespalte für implizite Matrixfaktorisierungsmodelle predicted_rating-column-name_confidence
. Bei impliziten Matrixfaktorisierungsmodellen ist predicted_rating_confidence
der geschätzte Konfidenzwert für das user
/item
-Paar. Dieser Konfidenzwert liegt ungefähr zwischen 0 und 1, wobei ein höherer Konfidenzwert angibt, dass der user
den item
mehr bevorzugt als einen item
mit einem niedrigeren Konfidenzwert.
Mit der ML.RECOMMEND
-Funktion werden Bewertungen anhand des Modells bqml_tutorial.my_implicit_mf_model
vorhergesagt.
Die verschachtelte SELECT
-Anweisung dieser Abfrage wählt nur die Spalte visitorId
aus der ursprünglichen Tabelle aus, die für das Training verwendet wird.
Die LIMIT
-Klausel – LIMIT 5
– filtert nach dem Zufallsprinzip fünf visitorId
s aus, die an ML.RECOMMEND
gesendet werden sollen.
Bewertungen für alle visitorId/contentId-Paare suchen
Nachdem Sie nun Ihr Modell bewertet haben, rufen Sie damit im nächsten Schritt eine aussagekräftige Bewertung ab. Sie verwenden Ihr Modell, um die Konfidenzwerte jeder Nutzer/Artikel-Kombination in der folgenden Abfrage vorherzusagen:
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Abfragedetails
Die obere SELECT
-Anweisung ruft die Spalten visitorId
, contentId
und predicted_rating_confidence
ab. Die letzte Spalte wird von der ML.RECOMMEND
-Funktion generiert. Wenn Sie die ML.RECOMMEND
-Funktion verwenden, lautet der Name der Ausgabespalte für implizite Matrixfaktorisierungsmodelle predicted_rating-column-name_confidence
. Bei impliziten Matrixfaktorisierungsmodellen ist predicted_rating_confidence
der geschätzte Konfidenzwert für das user
/item
-Paar. Dieser Konfidenzwert liegt ungefähr zwischen 0 und 1, wobei ein höherer Konfidenzwert angibt, dass der user
den item
mehr bevorzugt als einen item
mit einem niedrigeren Konfidenzwert.
Mit der ML.RECOMMEND
-Funktion werden Bewertungen anhand des Modells bqml_tutorial.my_implicit_mf_model
vorhergesagt.
Sie können beispielsweise so das Ergebnis in der Tabelle speichern:
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Wenn der Fehler Query Exceeded Resource Limits
für ML.RECOMMEND
auftritt, versuchen Sie es mit einer höheren Abrechnungsstufe. Diese kann im BigQuery-Befehlszeilentool mit --maximum_billing_tier
festgelegt werden.
Empfehlungen generieren
Mit der folgenden Abfrage werden mithilfe von ML.RECOMMEND
die fünf am häufigsten empfohlenen contentId
s pro visitorId
ausgegeben:
#standardSQL SELECT visitorId, ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId
Abfragedetails
Die SELECT
-Anweisung aggregiert die Ergebnisse der ML.RECOMMEND
-Abfrage. Dazu führt sie mithilfe von GROUP BY visitorId
die contentId
und die predicted_rating_confidence
in absteigender Reihenfolge zusammen und behält nur die ersten fünf Content-IDs bei.
Mit der vorherigen Empfehlungsabfrage können wir nach der vorhergesagten Bewertung sortieren und die am häufigsten vorhergesagten Artikel für jeden Nutzer ausgeben. Die folgende Abfrage verknüpft item_ids
mit movie_ids
aus der zuvor hochgeladenen Tabelle movielens.movie_titles
und gibt die fünf am häufigsten empfohlenen Filme pro Nutzer aus.
Abfrage ML.RECOMMEND
ausführen
So führen Sie die ML.RECOMMEND
-Abfrage aus, die die fünf am häufigsten empfohlenen Content-IDs pro Besucher-ID ausgibt:
Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.
Geben Sie im Textfeld des Abfrageeditors die folgende GoogleSQL-Abfrage ein.
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Klicken Sie auf Ausführen.
Wenn die Abfrage abgeschlossen ist, wird (
bqml_tutorial.recommend_content
) im Navigationsbereich der Google Cloud Console angezeigt. Da die Abfrage zum Erstellen einer Tabelle eineCREATE TABLE
-Anweisung verwendet, werden die Abfrageergebnisse nicht ausgegeben.Erstellen Sie eine weitere neue Abfrage. Geben Sie die folgende GoogleSQL-Abfrage in den Textbereich des Abfrageeditors ein, sobald die vorherige Abfrage ausgeführt wurde.
#standardSQL SELECT visitorId, ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId
(Optional) Klicken Sie auf More (Mehr) > Query settings (Abfrageeinstellungen), um den Verarbeitungsstandort festzulegen. Wählen Sie als Verarbeitungsstandort
US
aus. Dieser Schritt ist optional, da der Verarbeitungsstandort anhand des Standorts des Datasets automatisch erkannt wird.Klicken Sie auf Ausführen.
Sobald die Abfrage abgeschlossen ist, klicken Sie unterhalb des Textbereichs der Abfrage auf den Tab Ergebnisse. Die Ergebnisse sollten in etwa so aussehen:
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
- Sie können das von Ihnen erstellte Projekt löschen.
- Sie können das Projekt aber auch behalten und das Dataset löschen.
Dataset löschen
Wenn Sie Ihr Projekt löschen, werden alle Datasets und Tabellen entfernt. Wenn Sie das Projekt wieder verwenden möchten, können Sie das in dieser Anleitung erstellte Dataset löschen:
Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Google Cloud Console auf.
Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.
Klicken Sie rechts im Fenster auf Delete dataset (Dataset löschen). Dadurch werden das Dataset, die Tabelle und alle Daten gelöscht.
Bestätigen Sie im Dialogfeld Delete dataset (Dataset löschen) den Löschbefehl. Geben Sie dazu den Namen des Datasets (
bqml_tutorial
) ein und klicken Sie auf Delete (Löschen).
Projekt löschen
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Nächste Schritte
- Weitere Informationen über das maschinelle Lernen im Machine Learning Crash Course lesen
- Eine Übersicht über BigQuery ML finden Sie unter Einführung in BigQuery ML.
- Weitere Informationen zur Google Cloud Console finden Sie unter Google Cloud Console verwenden.