Empfehlungen basierend auf implizitem Feedback mit einem Matrixfaktorisierungsmodell erstellen

In dieser Anleitung erfahren Sie, wie Sie ein Matrixfaktorisierungsmodell erstellen und mit den Google Analytics 360-Nutzerdaten in der öffentlichen GA360_test.ga_sessions_sample Tabelle trainieren. Anschließend verwenden Sie das Matrixfaktorisierungsmodell, um Empfehlungen für Website-Nutzer zu generieren.

Wenn Sie indirekte Informationen zu den Kundenpräferenzen wie die Sitzungsdauer verwenden, um das Modell zu trainieren, wird dies als Training mit implizitem Feedback bezeichnet. Matrix faktorisierungsmodelle werden mit dem Algorithmus der gewichteten alternierenden kleinsten Quadrate trainiert, wenn Sie implizites Feedback als Trainingsdaten verwenden.

Ziele

In dieser Anleitung werden die folgenden Aufgaben behandelt:

  • Matrixfaktorisierungsmodell mit der Anweisung CREATE MODEL erstellen.
  • Modell mit der ML.EVALUATE Funktion bewerten.
  • Mit dem Modell und der ML.RECOMMEND Funktion Empfehlungen für Inhalte für Nutzer generieren.

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.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben, erstellen Sie eines, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. Google CloudNeukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

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

    Aktivieren Sie die BigQuery API.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen.

    API aktivieren

Erforderliche Berechtigungen

  • Sie benötigen die IAM-Berechtigung bigquery.datasets.create, um das Dataset zu erstellen.

  • Zum Erstellen des Modells benötigen Sie die folgenden Berechtigungen:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:

    • bigquery.models.getData
    • bigquery.jobs.create

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.

Dataset erstellen

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

Console

  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

  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 Multiregional und dann USA aus.

    • Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.

bq

Verwenden Sie den bq mk --dataset Befehl, um ein neues Dataset zu erstellen.

  1. Erstellen Sie ein Dataset mit dem Namen bqml_tutorial und legen Sie den Datenstandort auf US fest.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Prüfen Sie, ob das Dataset erstellt wurde:

    bq ls

API

Rufen Sie die datasets.insert Methode mit einer definierten Dataset-Ressource auf.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Beispieldaten vorbereiten

Transformieren Sie die Daten aus der Tabelle GA360_test.ga_sessions_sample in eine bessere Struktur für das Modelltraining und schreiben Sie diese Daten dann in eine BigQuery-Tabelle. Die folgende Abfrage berechnet die Sitzungsdauer für jeden Nutzer für jeden Inhalt. Diese können Sie dann als implizites Feedback verwenden, um die Präferenz des Nutzers für diesen Inhalt abzuleiten.

So erstellen Sie die Trainingsdatentabelle:

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

    BigQuery aufrufen

  2. Erstellen Sie die Trainingsdatentabelle. Fügen Sie im Abfrageeditor die folgende Abfrage 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;
  3. Rufen Sie eine Teilmenge der Trainingsdaten auf. Fügen Sie im Abfrageeditor die folgende Abfrage 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 trainiert, um eine Konfidenzbewertung für jedes visitorId-contentId-Paar 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 Anweisung CREATE MODEL verwendet diese Spalten, um Empfehlungen zu generieren:

  • visitorId: die Besucher-ID
  • contentId: die Content-ID
  • rating: die implizite Bewertung von 0 bis 1, die für jedes Besucher-Content-Paar berechnet wurde, wobei die Werte zentriert und skaliert werden
  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Fügen Sie im Abfrageeditor die folgende Abfrage 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 Ausführung der Abfrage dauert etwa 10 Minuten. Danach wird das Modell mf_implicit im Bereich Explorer angezeigt. Da die Abfrage eine Anweisung CREATE MODEL verwendet, um ein Modell zu erstellen, werden keine Abfrageergebnisse angezeigt.

Trainingsstatistiken abrufen

Optional können Sie die Trainingsstatistiken des Modells in der Google Cloud Console aufrufen.

Ein Algorithmus für maschinelles Lernen erstellt ein Modell, indem er viele Iterationen von dem Modell mit verschiedenen Parametern erstellt und dann die Version von dem Modell 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:

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

    BigQuery aufrufen

  2. Klicken Sie im linken Bereich auf Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn der linke Bereich nicht angezeigt wird, klicken Sie auf Linken Bereich maximieren , um ihn zu öffnen.

  3. Maximieren Sie im Bereich Explorer Ihr Projekt und klicken Sie auf Datasets.

  4. Klicken Sie auf das Dataset bqml_tutorial. Sie können auch die Suchfunktion oder Filter verwenden, um das Dataset zu finden.

  5. Klicken Sie auf den Tab Modelle.

  6. Klicken Sie auf das Modell mf_implicit und dann auf den Tab Training.

  7. 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, enthält diese Spalte die mittlere quadratische Abweichung.

Modell bewerten

Bewerten Sie die Leistung des Modells mit der Funktion ML.EVALUATE. Die Funktion ML.EVALUATE bewertet die vom Modell zurückgegebenen vorhergesagten Content-Bewertungen anhand der während des Trainings berechneten Bewertungsmesswerte.

So bewerten Sie das Modell:

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

    BigQuery aufrufen

  2. Fügen Sie im Abfrageeditor die folgende Abfrage 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 Funktion ML.EVALUATE finden Sie unter Ausgabe.

Vorhergesagte Bewertungen für eine Teilmenge von Besucher-Content-Paaren abrufen

Verwenden Sie ML.RECOMMEND, um die vorhergesagte Bewertung für jeden Inhalt für fünf Website-Besucher abzurufen.

So rufen Sie vorhergesagte Bewertungen ab:

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

    BigQuery aufrufen

  2. Fügen Sie im Abfrageeditor die folgende Abfrage 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:

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

    BigQuery aufrufen

  2. Schreiben Sie die vorhergesagten Bewertungen in eine Tabelle. Fügen Sie im Abfrageeditor die folgende Abfrage 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`);
  3. Wählen Sie die fünf besten Ergebnisse pro Besucher aus. Fügen Sie im Abfrageeditor die folgende Abfrage 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             |
    +---------------------+-----------------+---------------------------------+
    | ...                 | ...             | ...                             |
    +---------------------+-----------------+---------------------------------+
    

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 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 Google 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 (Herunterfahren), um das Projekt zu löschen.

Nächste Schritte