Crea recomendaciones basadas en comentarios implícitos con un modelo de factorización de matrices

En este instructivo, se explica cómo crear un modelo de factorización de matrices y entrenarlo con los datos de la sesión de usuario de Google Analytics 360 en la tabla pública GA360_test.ga_sessions_sample. Luego, usarás el modelo de factorización de matrices para generar recomendaciones de contenido para los usuarios del sitio.

El uso de información indirecta sobre las preferencias de los clientes, como la duración de la sesión del usuario, para entrenar el modelo se denomina entrenamiento con comentarios implícitos. Los modelos de factorización de matrices se entrenan con el algoritmo de mínimos cuadrados ponderados alternos cuando usas comentarios implícitos como datos de entrenamiento.

Objetivos

En este instructivo, se te guiará para completar las siguientes tareas:

  • Crear un modelo de factorización de matrices con la declaración CREATE MODEL.
  • Evaluar el modelo con la ML.EVALUATE función.
  • Generar recomendaciones de contenido para los usuarios con el modelo con la ML.RECOMMEND función.

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud, incluyendo:

  • BigQuery
  • BigQuery ML

Para obtener más información sobre los costos de BigQuery, consulta la página de precios de BigQuery.

Para obtener más información sobre los costos de BigQuery ML, consulta los precios de BigQuery ML.

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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 se habilita automáticamente en proyectos nuevos. Para activar BigQuery en un proyecto existente, dirígete a .

    Habilita la API de BigQuery.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    Habilitar la API

Permisos necesarios

  • Para crear el conjunto de datos, necesitas el permiso de IAM bigquery.datasets.create.

  • Para crear el modelo, necesitas los siguientes permisos:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Para ejecutar inferencias, necesitas los siguientes permisos:

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

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.

Crea un conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA.

Console

  1. En la Google Cloud consola de, ve a la página BigQuery.

    Ir a la página de BigQuery

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haz clic en Ver acciones > Crear conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, ingresa bqml_tutorial.

    • En Tipo de ubicación, selecciona Multirregión y, luego, selecciona EE.UU..

    • Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.

bq

Para crear un conjunto de datos nuevo, usa el bq mk --dataset comando.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos establecida en US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Confirma que se haya creado el conjunto de datos:

    bq ls

API

Llama al datasets.insert método con un recurso de conjunto de datos definido.

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

Prepara los datos de muestra

Transforma los datos de la tabla GA360_test.ga_sessions_sample en una estructura mejor para el entrenamiento de modelos y, luego, escribe estos datos en una tabla de BigQuery. En la siguiente consulta, se calcula la duración de la sesión para cada usuario y cada contenido, que luego puedes usar como comentarios implícitos para inferir la preferencia del usuario por ese contenido.

Sigue estos pasos para crear la tabla de datos de entrenamiento:

  1. En la Google Cloud consola de, ve a la página BigQuery.

    Ir a BigQuery

  2. Crea la tabla de datos de entrenamiento. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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. Visualiza un subconjunto de los datos de entrenamiento. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT * FROM `bqml_tutorial.analytics_session_data` LIMIT 5;

    Los resultados debería ser similar al siguiente:

    +---------------------+-----------+------------------+
    | visitorId           | contentId | session_duration |
    +---------------------+-----------+------------------+
    | 7337153711992174438 | 100074831 | 44652            |
    +---------------------+-----------+------------------+
    | 5190801220865459604 | 100170790 | 121420           |
    +---------------------+-----------+------------------+
    | 2293633612703952721 | 100510126 | 47744            |
    +---------------------+-----------+------------------+
    | 5874973374932455844 | 100510126 | 32109            |
    +---------------------+-----------+------------------+
    | 1173698801255170595 | 100676857 | 10512            |
    +---------------------+-----------+------------------+
    

Crea el modelo

Crea un modelo de factorización de matrices y entrénalo con los datos de la tabla analytics_session_data. El modelo está entrenado para predecir una calificación de confianza para cada par visitorId-contentId. La calificación de confianza se crea con centro y escalamiento según la mediana de duración de la sesión. Los registros en los que la duración de la sesión es más de 3.33 veces la mediana se filtran como valores atípicos.

La siguiente declaración CREATE MODEL usa estas columnas para generar recomendaciones:

  • visitorId: Es el ID de visitante.
  • contentId: Es el ID de contenido.
  • rating: Es la calificación implícita de 0 a 1 calculada para cada par de visitante-contenido, centrada y escalada.
  1. En la Google Cloud consola de, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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;

    La consulta toma unos 10 minutos en completarse, después de lo cual el modelo mf_implicit aparece en el panel Explorador. Debido a que en la consulta se usa una declaración CREATE MODEL para crear un modelo, no se muestran los resultados.

Obtén estadísticas de entrenamiento

De manera opcional, puedes ver las estadísticas de entrenamiento del modelo en la Google Cloud consola.

Para compilar un modelo, los algoritmos de aprendizaje automático crean muchas iteraciones de este con diferentes parámetros y, luego, seleccionan la versión del modelo que minimiza la pérdida. Este proceso se llama minimización del riesgo empírico. Las estadísticas de entrenamiento del modelo te permiten ver la pérdida asociada con cada iteración del modelo.

Sigue estos pasos para ver las estadísticas de entrenamiento del modelo:

  1. En la Google Cloud consola de, ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

    Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.

  3. En el panel Explorador, expande tu proyecto y haz clic en Conjuntos de datos.

  4. Haz clic en el conjunto de datos bqml_tutorial. También puedes usar la función de búsqueda o los filtros para encontrar el conjunto de datos.

  5. Haz clic en la pestaña Modelos.

  6. Haz clic en el modelo mf_implicit y, luego, en la pestaña Entrenamiento.

  7. En la sección Ver como, haz clic en Tabla. Los resultados debería ser similar al siguiente:

    +-----------+--------------------+--------------------+
    | Iteration | Training Data Loss | Duration (seconds) |
    +-----------+--------------------+--------------------+
    |  5        | 0.0027             | 47.27              |
    +-----------+--------------------+--------------------+
    |  4        | 0.0028             | 39.60              |
    +-----------+--------------------+--------------------+
    |  3        | 0.0032             | 55.57              |
    +-----------+--------------------+--------------------+
    |  ...      | ...                | ...                |
    +-----------+--------------------+--------------------+
    

    La columna Pérdida de datos de entrenamiento representa la métrica de pérdida calculada después de que se entrena el modelo. Dado que se trata de un modelo de factorización de matrices, esta columna muestra el error cuadrático medio.

Evalúa el modelo

Evalúa el rendimiento del modelo con la función ML.EVALUATE. La función ML.EVALUATE evalúa las calificaciones de contenido previstas que muestra el modelo con las métricas de evaluación calculadas durante el entrenamiento.

Para evaluar el modelo, sigue estos pasos:

  1. En la Google Cloud consola de, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.mf_implicit`);

    Los resultados debería ser similar al siguiente:

    +------------------------+-----------------------+---------------------------------------+---------------------+
    | mean_average_precision |  mean_squared_error   | normalized_discounted_cumulative_gain |    average_rank     |
    +------------------------+-----------------------+---------------------------------------+---------------------+
    |     0.4434341257478137 | 0.0013381759837648962 |                    0.9433280547112802 | 0.24031636088594222 |
    +------------------------+-----------------------+---------------------------------------+---------------------+
    

    Para obtener más información sobre el resultado de la función ML.EVALUATE, consulta Resultado.

Obtén las calificaciones previstas para un subconjunto de pares de visitante-contenido

Usa ML.RECOMMEND para obtener la calificación prevista de cada contenido para cinco visitantes del sitio.

Para obtener las calificaciones previstas, sigue estos pasos:

  1. En la Google Cloud consola de, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT
      *
    FROM
      ML.RECOMMEND(
        MODEL `bqml_tutorial.mf_implicit`,
        (
          SELECT
            visitorId
          FROM
            `bqml_tutorial.analytics_session_data`
          LIMIT 5
        ));

    Los resultados debería ser similar al siguiente:

    +-------------------------------+---------------------+-----------+
    | predicted_rating_confidence   | visitorId           | contentId |
    +-------------------------------+---------------------+-----------+
    | 0.0033608418060270262         | 7337153711992174438 | 277237933 |
    +-------------------------------+---------------------+-----------+
    | 0.003602395397293956          | 7337153711992174438 | 158246147 |
    +-------------------------------+---------------------+--  -------+
    | 0.0053197670652785356         | 7337153711992174438 | 299389988 |
    +-------------------------------+---------------------+-----------+
    | ...                           | ...                 | ...       |
    +-------------------------------+---------------------+-----------+
    

Genera recomendaciones

Usa las calificaciones previstas para generar los cinco IDs de contenido recomendados más importantes para cada ID de visitante.

Para generar recomendaciones, sigue estos pasos:

  1. En la Google Cloud consola de, ve a la página BigQuery.

    Ir a BigQuery

  2. Escribe las calificaciones previstas en una tabla. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content`
    AS
    SELECT
      *
    FROM
      ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
  3. Selecciona los cinco resultados principales por visitante. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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;

    Los resultados debería ser similar al siguiente:

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

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

  • Puedes borrar el proyecto que creaste.
  • De lo contrario, puedes mantener el proyecto y borrar el conjunto de datos.

Borra tu conjunto de datos

Borrar tu proyecto quita todos sus conjuntos de datos y tablas. Si prefieres volver a usar el proyecto, puedes borrar el conjunto de datos que creaste en este instructivo:

  1. Si es necesario, abre la página de BigQuery en la Google Cloud consola.

    Ir a la página de BigQuery

  2. En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.

  3. Haz clic en Borrar conjunto de datos en el lado derecho de la ventana. Esta acción borra el conjunto de datos, la tabla y todos los datos.

  4. En el cuadro de diálogo Borrar conjunto de datos, escribe el nombre del conjunto de datos (bqml_tutorial) para confirmar el comando de borrado y, luego, haz clic en Borrar.

Borra tu proyecto

Para borrar el proyecto, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que tú quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?