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.

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the BigQuery API.

    Enable the API

    .

Schritt 1: Dataset erstellen

Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.

    Zur Seite „BigQuery“

  2. Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.

  3. Klicken Sie auf Aktionen ansehen > 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 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.

      Seite "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.

  1. Klicken Sie in der Google Cloud Console auf Neue Abfrage erstellen.

  2. 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
  3. (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.

    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 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 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 Google Cloud Console auf Neue Abfrage erstellen.

  2. 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`
  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.

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:

  1. 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.

  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 Google Cloud Console auf Neue Abfrage erstellen.

  2. Geben Sie im Textfeld des Abfrageeditors die folgende GoogleSQL-Abfrage ein.

    #standardSQL
    SELECT
     *
    FROM
     ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
  3. (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.

    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: 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 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 Google Cloud Console auf Neue Abfrage erstellen.

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

  4. 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
  5. (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.

    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.

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:

  1. Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Google 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 Delete dataset (Dataset löschen). Dadurch werden das Dataset, die Tabelle und alle Daten gelöscht.

  4. 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:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Nächste Schritte