Mit BigQuery ML Empfehlungen anhand von Google Analytics-Daten abgeben

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.

Lernziele

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 von BigQuery ML erhalten Sie auf der Seite BigQuery ML – Preise.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  5. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  6. BigQuery ist in neuen Projekten automatisch aktiviert. Zum Aktivieren von BigQuery in einem vorhandenen Projekt wechseln Sie zu Aktivieren Sie die BigQuery API.

    Aktivieren Sie die API

    .

Schritt 1: Dataset erstellen

Im ersten Schritt erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern. So erstellen Sie ein Dataset:

  1. Rufen Sie in der Cloud Console die BigQuery-Seite auf.

    Zur Seite "BigQuery"

  2. Klicken Sie im Abschnitt Ressourcen auf Ihren Projektnamen.

  3. Klicken Sie im Detailbereich auf Dataset erstellen.

    Dataset erstellen

  4. Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:

    • Geben Sie unter Dataset-ID bqml_tutorial ein.
    • Wählen Sie unter Speicherort der Daten die Option USA aus. Derzeit sind die öffentlichen Datasets am multiregionalen Standort US gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Speicherort ablegen.

      Seite "Create dataset" (Dataset erstellen)

  5. Übernehmen Sie alle anderen Standardeinstellungen und klicken Sie auf Dataset erstellen.

Schritt 2: Google 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 Google 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.

  1. Klicken Sie in der Cloud Console auf die Schaltfläche Neue Abfrage erstellen.

  2. Geben Sie in den Textbereich im Abfrageeditor die folgende Standard-SQL-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
    
  3. (Optional) Klicken Sie auf Mehr > 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.

    Abfrageeinstellungen

  4. 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 eine CREATE TABLE-Anweisung verwendet, werden die Abfrageergebnisse nicht ausgegeben.

  5. Die erstellte Tabelle sollte in etwa so aussehen:

    Abfrageergebnisse

    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 Standard-SQL-Abfrage erstellt ein solches Modell, mit dem eine Konfidenzbewertung für jedes visitorId/contentId-Paar vorhergesagt wird.

#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

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 die visitorId und die jeweilige contentId 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:

  1. Klicken Sie in der Cloud Console auf die Schaltfläche Neue Abfrage erstellen.

  2. Geben Sie in den Textbereich im Abfrageeditor die folgende Standard-SQL-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
    
  3. 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 eine CREATE MODEL-Anweisung zum Erstellen eines Modells verwendet, werden keine Abfrageergebnisse ausgegeben.

(Optional) Schritt 4: Trainingsstatistiken abrufen

Mit der Funktion ML.TRAINING_INFO können Sie die Ergebnisse des Modelltrainings abrufen. Alternativ lassen sich die Statistiken auch in der Cloud Console abrufen. In dieser Anleitung verwenden Sie die 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:

  1. Maximieren Sie im Navigationsbereich der Cloud Console im Abschnitt Ressourcen den Bereich [PROJECT_ID] > bqml_tutorial und klicken Sie dann auf my_explicit_mf_model.

  2. Klicken Sie auf den Tab Training und dann auf Tabelle. Das Ergebnis sollte in etwa so aussehen:

    Ausgabe von ML.TRAINING_INFO

    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:

  1. Klicken Sie in der Cloud Console auf die Schaltfläche Neue Abfrage erstellen.

  2. Geben Sie in den Textbereich im Abfrageeditor die folgende Standard-SQL-Abfrage ein.

    #standardSQL
    SELECT
     *
    FROM
     ML.EVALUATE(MODEL bqml_tutorial.my_implicit_mf_model)
    
  3. (Optional) Klicken Sie auf Mehr > 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.

    Abfrageeinstellungen

  4. Klicken Sie auf Ausführen.

  5. Sobald die Abfrage abgeschlossen ist, klicken Sie unterhalb des Textbereichs der Abfrage auf den Tab Ergebnisse. Die Ergebnisse sollten in etwa so aussehen:

    Ausgabe von ML.EVALUATE

    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 und average_rank sind Bewertungsmesswerte, die unter Messwerte zur impliziten Matrixfaktorisierung erläutert werden.

Schritt 6: Anhand des 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 visitorIds 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 contentIds 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:

  1. Klicken Sie in der Cloud Console auf die Schaltfläche Neue Abfrage erstellen.

  2. Geben Sie in den Textbereich im Abfrageeditor die folgende Standard-SQL-Abfrage ein.

    #standardSQL
    CREATE OR REPLACE TABLE bqml_tutorial.recommend_content
    OPTIONS() AS
    SELECT
     *
    FROM
     ML.RECOMMEND(MODEL bqml_tutorial.my_implicit_mf_model)
    
  3. Klicken Sie auf Ausführen.

    Wenn die Abfrage abgeschlossen ist, wird (bqml_tutorial.recommend_content) im Navigationsbereich der Cloud Console angezeigt. Da die Abfrage zum Erstellen einer Tabelle eine CREATE TABLE-Anweisung verwendet, werden die Abfrageergebnisse nicht ausgegeben.

  4. Erstellen Sie eine weitere neue Abfrage. Geben Sie die folgende Standard-SQL-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
    
  5. (Optional) Klicken Sie auf Mehr > 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.

    Abfrageeinstellungen

  6. Klicken Sie auf Ausführen.

  7. Sobald die Abfrage abgeschlossen ist, klicken Sie unterhalb des Textbereichs der Abfrage auf den Tab Ergebnisse. Die Ergebnisse sollten in etwa so aussehen:

    Ausgabe von ML.RECOMMEND

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.

Datasets 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:

  1. Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Cloud Console auf.

    Zur Seite "BigQuery"

  2. Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.

  3. Klicken Sie rechts im Fenster auf Dataset löschen. Dadurch werden das Dataset, die Tabelle und alle Daten gelöscht.

  4. Bestätigen Sie im Dialogfeld Dataset löschen den Löschbefehl. Geben Sie dazu den Namen des Datasets (bqml_tutorial) ein und klicken Sie auf Löschen.

Projekt löschen

So löschen Sie das Projekt:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte