In dieser Anleitung erfahren Sie, wie Sie ein Matrixfaktorisierungsmodell erstellen und mit den Google Analytics 360-Nutzer-Sitzungsdaten in der öffentlichen Tabelle GA360_test.ga_sessions_sample
trainieren. Anschließend verwenden Sie das Matrixfaktorisierungsmodell, um Inhaltsempfehlungen für Websitebesucher zu generieren.
Die Verwendung indirekter Informationen zu Kundenpräferenzen, z. B. die Dauer von Nutzersitzungen, zum Trainieren des Modells wird als Training mit implizitem Feedback bezeichnet. Matrixfaktorisierungsmodelle werden mit dem Algorithmus der gewichteten alternierenden kleinsten Quadrate trainiert, wenn Sie implizites Feedback als Trainingsdaten verwenden.
Dataset erstellen
Erstellen Sie ein BigQuery-Dataset zum Speichern Ihres ML-Modells.
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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.
Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
bq
Wenn Sie ein neues Dataset erstellen möchten, verwenden Sie den Befehl bq mk
mit dem Flag --location
. Eine vollständige Liste der möglichen Parameter finden Sie in der bq mk --dataset
-Befehlsreferenz.
Erstellen Sie ein Dataset mit dem Namen
bqml_tutorial
, wobei der Datenspeicherort aufUS
und die Beschreibung aufBigQuery ML tutorial dataset
festgelegt ist:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anstelle des Flags
--dataset
verwendet der Befehl die verkürzte Form-d
. Wenn Sie-d
und--dataset
auslassen, wird standardmäßig ein Dataset erstellt.Prüfen Sie, ob das Dataset erstellt wurde:
bq ls
API
Rufen Sie die Methode datasets.insert
mit einer definierten Dataset-Ressource auf.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Beispieldaten vorbereiten
Die Daten aus der Tabelle GA360_test.ga_sessions_sample
werden in eine bessere Struktur für das Modelltraining umgewandelt und dann in eine BigQuery-Tabelle geschrieben. Mit der folgenden Abfrage wird die Sitzungsdauer für jeden Nutzer für jeden Inhalt berechnet. Diese Daten können Sie dann als implizites Feedback verwenden, um die Präferenz des Nutzers für diesen Inhalt abzuleiten.
So erstellen Sie die Tabelle mit Trainingsdaten:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Erstellen Sie die Trainingsdatentabelle. Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
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;
Teilmengen der Trainingsdaten ansehen Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM `bqml_tutorial.analytics_session_data` LIMIT 5;
Die Antwort sollte in etwa so aussehen:
+---------------------+-----------+------------------+ | visitorId | contentId | session_duration | +---------------------+-----------+------------------+ | 7337153711992174438 | 100074831 | 44652 | +---------------------+-----------+------------------+ | 5190801220865459604 | 100170790 | 121420 | +---------------------+-----------+------------------+ | 2293633612703952721 | 100510126 | 47744 | +---------------------+-----------+------------------+ | 5874973374932455844 | 100510126 | 32109 | +---------------------+-----------+------------------+ | 1173698801255170595 | 100676857 | 10512 | +---------------------+-----------+------------------+
Modell erstellen
Erstellen Sie ein Matrixfaktorisierungsmodell und trainieren Sie es mit den Daten in der Tabelle analytics_session_data
. Das Modell wird darauf trainiert, für jedes visitorId
-contentId
-Paar eine Konfidenzeinstufung vorherzusagen. Die Konfidenzbewertung wird mit Zentrierung und Skalierung nach dem Medianwert für die Sitzungsdauer erstellt. Datensätze, bei denen die Sitzungsdauer mehr als das 3,33-fache des Medianwerts beträgt, werden als Ausreißer herausgefiltert.
Die folgende CREATE MODEL
-Anweisung verwendet diese Spalten, um Empfehlungen zu generieren:
visitorId
: Die Besucher-ID.contentId
: die Content-IDrating
: die implizite Bewertung von 0 bis 1, die für jedes Besucher-Inhalts-Paar berechnet wurde, wobei die Werte zentriert und skaliert werden
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
CREATE OR REPLACE MODEL `bqml_tutorial.mf_implicit` 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;
Die Abfrage dauert etwa 10 Minuten. Danach wird das Modell
mf_implicit
im Bereich Explorer angezeigt. Da die Abfrage eineCREATE MODEL
-Anweisung zum Erstellen eines Modells verwendet, werden keine Abfrageergebnisse ausgegeben.
Trainingsstatistiken abrufen
Optional können Sie die Trainingsstatistiken des Modells in derGoogle Cloud Console ansehen.
Ein Algorithmus für maschinelles Lernen erstellt ein Modell, indem er viele Iterationen des Modells mit unterschiedlichen Parametern erstellt und dann die Version des Modells auswählt, die den Verlust minimiert. Dieser Vorgang wird als empirische Risikominimierung bezeichnet. Anhand der Trainingsstatistiken des Modells können Sie den Verlust sehen, der mit jeder Iteration des Modells verbunden ist.
So rufen Sie die Trainingsstatistiken des Modells auf:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Klicken Sie im linken Bereich auf
Explorer:Wenn Sie den linken Bereich nicht sehen, klicken Sie auf
Linken Bereich maximieren, um ihn zu öffnen.Maximieren Sie im Bereich Explorer Ihr Projekt und klicken Sie auf Datasets (Datasets).
Klicken Sie auf das Dataset
bqml_tutorial
. Sie können auch die Suchfunktion oder Filter verwenden, um das Dataset zu finden.Klicken Sie auf den Tab Modelle.
Klicken Sie auf das
mf_implicit
-Modell und dann auf den Tab Training.Klicken Sie im Bereich Anzeigen als auf Tabelle. Die Antwort sollte in etwa so aussehen:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 5 | 0.0027 | 47.27 | +-----------+--------------------+--------------------+ | 4 | 0.0028 | 39.60 | +-----------+--------------------+--------------------+ | 3 | 0.0032 | 55.57 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
Die Spalte Trainingsdatenverlust enthält den Verlustmesswert, der berechnet wird, nachdem das Modell trainiert wurde. Da es sich um ein Matrixfaktorisierungsmodell handelt, wird in dieser Spalte die mittlere quadratische Abweichung angezeigt.
Modell bewerten
Bewerten Sie die Leistung des Modells mit der Funktion ML.EVALUATE
.
Die Funktion ML.EVALUATE
vergleicht die vom Modell zurückgegebenen vorhergesagten Altersfreigaben für Inhalte mit den während des Trainings berechneten Bewertungsmesswerten.
So bewerten Sie das Modell:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.mf_implicit`);
Die Antwort sollte in etwa so aussehen:
+------------------------+-----------------------+---------------------------------------+---------------------+ | mean_average_precision | mean_squared_error | normalized_discounted_cumulative_gain | average_rank | +------------------------+-----------------------+---------------------------------------+---------------------+ | 0.4434341257478137 | 0.0013381759837648962 | 0.9433280547112802 | 0.24031636088594222 | +------------------------+-----------------------+---------------------------------------+---------------------+
Weitere Informationen zur Ausgabe der
ML.EVALUATE
-Funktion finden Sie unter Ausgabe.
Vorhersagen für eine Teilmenge von Besucher-Inhalts-Paaren abrufen
Verwenden Sie ML.RECOMMEND
, um die vorhergesagte Bewertung für die einzelnen Inhalte für fünf Websitebesucher zu erhalten.
So rufen Sie die vorhergesagten Altersfreigaben ab:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.RECOMMEND( MODEL `bqml_tutorial.mf_implicit`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5 ));
Die Antwort sollte in etwa so aussehen:
+-------------------------------+---------------------+-----------+ | predicted_rating_confidence | visitorId | contentId | +-------------------------------+---------------------+-----------+ | 0.0033608418060270262 | 7337153711992174438 | 277237933 | +-------------------------------+---------------------+-----------+ | 0.003602395397293956 | 7337153711992174438 | 158246147 | +-------------------------------+---------------------+-- -------+ | 0.0053197670652785356 | 7337153711992174438 | 299389988 | +-------------------------------+---------------------+-----------+ | ... | ... | ... | +-------------------------------+---------------------+-----------+
Empfehlungen generieren
Verwenden Sie die vorhergesagten Bewertungen, um die fünf am häufigsten empfohlenen Content-IDs für jede Besucher-ID zu generieren.
So generieren Sie Empfehlungen:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Schreiben Sie die vorhergesagten Bewertungen in eine Tabelle. Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
Wählen Sie die fünf besten Ergebnisse pro Besucher aus. Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
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;
Die Antwort sollte in etwa so aussehen:
+---------------------+-----------------+---------------------------------+ | visitorId | rec:contentId | rec:predicted_rating_confidence | +---------------------+-----------------+------------------------- ------+ | 867526255058981688 | 299804319 | 0.88170525357178664 | | | 299935287 | 0.54699439944935124 | | | 299410466 | 0.53424780863188659 | | | 299826767 | 0.46949603950374219 | | | 299809748 | 0.3379991197434149 | +---------------------+-----------------+---------------------------------+ | 2434264018925667659 | 299824032 | 1.3903516407308065 | | | 299410466 | 0.9921995618196483 | | | 299903877 | 0.92333625294129218 | | | 299816215 | 0.91856701667757279 | | | 299852437 | 0.86973661454890561 | +---------------------+-----------------+---------------------------------+ | ... | ... | ... | +---------------------+-----------------+---------------------------------+