Usa BigQuery ML para hacer recomendaciones a partir de datos de estadísticas de Google


En este instructivo, se presenta a los analistas de datos el modelo de factorización de matrices en BigQuery ML. BigQuery ML permite a los usuarios crear y ejecutar modelos de aprendizaje automático en BigQuery mediante consultas de SQL. El objetivo es democratizar el aprendizaje automático. Para lograrlo, se habilita a los profesionales de SQL a que compilen modelos mediante sus herramientas existentes y se quita la necesidad de trasladar datos con el fin de aumentar la velocidad de desarrollo.

En este instructivo, aprenderás a crear un modelo de factorización de matrices a partir de comentarios implícitos mediante la tabla de muestra GA360_test.ga_sessions_sample para hacer recomendaciones en función de un ID de visitante y un ID de contenido.

La tabla ga_sessions_sample contiene información sobre una parte de datos de sesión que recopiló Google Analytics 360 y que se enviaron a BigQuery.

Objetivos

En este instructivo usarás lo siguiente:

  • BigQuery ML: Para crear un modelo de recomendaciones implícitas mediante la declaración CREATE MODEL
  • La función ML.EVALUATE: Para evaluar los modelos de AA
  • La función ML.WEIGHTS: Para inspeccionar los pesos de los factores latentes generados durante el entrenamiento
  • La función ML.RECOMMEND: A fin de generar recomendaciones para los usuarios

Costos

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

  • 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. 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 se habilita automáticamente en proyectos nuevos. Para activar BigQuery en un proyecto existente, ve a

    Enable the BigQuery API.

    Enable the API

Paso uno: Crea tu conjunto de datos

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

  1. En la consola de Google Cloud, ve a la página de 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.

    Crea un 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, EE.UU. (varias regiones en Estados Unidos).

      Los conjuntos de datos públicos se almacenan en la multirregión US. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.

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

      Página Crear un conjunto de datos

Paso dos: Carga los datos de Load Analytics 360 en BigQuery

La mayoría de las veces, las calificaciones de los datos no reflejan un valor que el usuario establece de forma explícita. En estas situaciones, podemos diseñar un proxy para estos valores como una calificación implícita y usar un algoritmo diferente a fin de calcular las recomendaciones. En este ejemplo, veremos un conjunto de datos de muestra de Analytics 360. Este ejemplo se basa en el siguiente artículo.

La siguiente es una consulta que se ejecutará para crear un conjunto de datos con calificaciones implícitas a partir de lo que duró la sesión de un visitante en una página de cloud-training-demos.GA360_test.ga_sessions_sample. El objetivo de esta consulta es crear un conjunto de datos con tres columnas que se puedan asignar a una columna de usuarios, una de elementos y una de calificaciones.

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.

    #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. De modo opcional, para configurar la ubicación de procesamiento, haga clic en Más > Configuración de la consulta (More > Query Settings). En Processing location (Ubicación de procesamiento), elige US. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática en función de la ubicación del conjunto de datos.

    Configuración de consulta.

  4. Haz clic en Ejecutar.

    Cuando la consulta termine de ejecutarse, aparecerá (bqml_tutorial.analytics_session_data) en el panel de navegación. Debido a que en la consulta se usa una declaración CREATE TABLE para crear una tabla, no verás los resultados.

  5. La tabla creada debería verse de la siguiente manera:

    Resultados de la consulta

    Ten en cuenta que este resultado es específico de la forma en que se exportaron los datos a BigQuery. La consulta para extraer tus propios datos puede diferir.

Paso tres: Crea el modelo de recomendaciones implícitas

A continuación, crea un modelo de recomendaciones implícitas mediante la tabla de Google Analytics que se cargó en el paso anterior. La siguiente consulta de GoogleSQL se usa con el fin de crear el modelo que se empleará para predecir una calificación de confianza de cada par visitorId contentId. Las calificaciones se crean con centro y escalamiento según la mediana de duración de la sesión, y se filtran los registros en los que la duración de la sesión es más de 3.33 veces la mediana como valores atípicos.

#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

Detalles de la consulta

La cláusula CREATE MODEL se usa para crear y entrenar el modelo llamado bqml_tutorial.my_implicit_mf_model.

La cláusula OPTIONS(model_type='matrix_factorization', feedback_type='IMPLICIT', user_col='visitorId', ...) indica que estás creando un modelo de factorización de matrices. Debido a que se especifica feedback_type='IMPLICIT', se entrenará un modelo de factorización de matrices explícita. En Crea un modelo de factorización de matrices explícita, se explica con un ejemplo cómo crear este tipo de modelo.

La declaración SELECT de esta consulta usa las siguientes columnas para generar recomendaciones.

  • visitorId: El ID de visitante (INT64)
  • contentId: El ID de contenido (INT64)
  • rating: La calificación implícita de 0 a 1 calculada para visitorId, y su respectivo contentId centrado y escalado (FLOAT64)

La cláusula FROM (bqml_tutorial.analytics_session_data) indica que consultas la tabla analytics_session_data en el conjunto de datos bqml_tutorial. Si se siguieron las instrucciones de los pasos dos y ocho, este conjunto de datos se encuentra en el proyecto de BigQuery.

Ejecuta la consulta CREATE MODEL

A fin de ejecutar la consulta CREATE MODEL para crear y entrenar tu modelo, sigue estos pasos:

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.

    #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. Haz clic en Ejecutar.

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

Paso cuatro (opcional): Obtén estadísticas de entrenamiento

Para ver los resultados del entrenamiento de modelos, puedes usar la función ML.TRAINING_INFO o puedes ver las estadísticas en la consola de Google Cloud En este instructivo, usarás la consola de Google Cloud.

Para compilar un modelo, los algoritmos de aprendizaje automático examinan muchos ejemplos y buscan un modelo que minimice la pérdida. Este proceso se llama minimización del riesgo empírico.

Para ver las estadísticas de entrenamiento de modelos que se generaron cuando ejecutaste la consulta CREATE MODEL, sigue estos pasos:

  1. En el panel de navegación de la consola de Google Cloud, en la sección Recursos, expande [PROJECT_ID] > bqml_tutorial y, luego, haz clic en my_implicit_mf_model.

  2. Haga clic en la pestaña Entrenamiento y, luego, en Tabla. Los resultados deberían verse como estos:

    Resultado de ML.TRAINING_INFO

    La columna Training Data Loss (Pérdida de datos de entrenamiento) representa la métrica de pérdida calculada después de que se entrena el modelo en el conjunto de datos de entrenamiento. Dado que realizaste la factorización de matrices, esta columna es el error cuadrático medio. De forma predeterminada, los modelos de factorización de matrices no dividirán los datos, por lo que la columna Pérdida de datos de evaluación no estará presente, a menos que se especifique un conjunto de datos de exclusión, ya que dividir los datos implica la posibilidad de perder todas las calificaciones de un usuario o un elemento. Como resultado, el modelo no tendrá información de factores latentes sobre usuarios o elementos faltantes.

    Para obtener más detalles sobre la función ML.TRAINING_INFO, consulta la referencia de la sintaxis de BigQuery ML.

Paso cinco: Evalúa el modelo

Después de crear el modelo, evalúa el rendimiento del recomendador mediante la función ML.EVALUATE. La función ML.EVALUATE evalúa las calificaciones previstas en comparación con las reales.

La consulta que se usa para evaluar el modelo es la siguiente:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)

Detalles de la consulta

La primera sentencia SELECT recupera las columnas de tu modelo.

La cláusula FROM usa la función ML.EVALUATE en el modelo bqml_tutorial.my_implicit_mf_model.

Ejecuta la consulta ML.EVALUATE

Para ejecutar la consulta ML.EVALUATE que evalúa el modelo, sigue estos pasos:

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
  3. De modo opcional, para configurar la ubicación de procesamiento, haga clic en Más > Configuración de la consulta (More > Query Settings). En Processing location (Ubicación de procesamiento), elige US. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática en función de la ubicación del conjunto de datos.

    Configuración de consulta.

  4. Haz clic en Ejecutar.

  5. Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse así:

    Resultado de ML.EVALUATE

    Debido a que realizaste una factorización de matrices implícita, los resultados incluyen las siguientes columnas:

    • mean_average_precision
    • mean_squared_error
    • normalized_discounted_cumulative_gain
    • average_rank

    mean_average_precision, normalized_discounted_cumulative_gain y average_rank son métricas de clasificación que se explican en Métricas de factorización de matrices implícita.

Paso seis: Predice calificaciones y haz recomendaciones

Usa tu modelo para predecir calificaciones y hacer recomendaciones.

Busca todas las calificaciones de confianza de contentId para un conjunto de visitorIds

ML.RECOMMEND no necesita tomar ningún argumento adicional además del modelo, pero puede incluir una tabla opcional. Si la tabla de entrada solo tiene una columna que coincide con el nombre de la columna de entrada user o item, se generarán todas las calificaciones de elementos previstas para cada user y viceversa. Ten en cuenta que si todos los users o items están en la tabla de entrada, se muestran los mismos resultados que si no pasas ningún argumento opcional a ML.RECOMMEND.

El siguiente es un ejemplo de una consulta que se usa a fin de recuperar todas las calificaciones de confianza previstas para 5 visitantes.

#standardSQL
SELECT
  *
FROM
  ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`,
    (
    SELECT
      visitorId
    FROM
      `bqml_tutorial.analytics_session_data`
    LIMIT 5))

Detalles de la consulta

La declaración SELECT superior recupera las columnas visitorId, contentId y predicted_rating_confidence. La función ML.RECOMMEND genera la última columna mencionada. Cuando usas la función ML.RECOMMEND, el nombre de la columna de resultado de los modelos de factorización de matrices implícita es predicted_rating-column-name_confidence. En los modelos de factorización de matrices implícita, predicted_rating_confidence es la confianza estimada para el par user/item. Este valor de confianza se encuentra entre 0 y 1; la confianza más alta indica que el user prefiere item más que un item con un valor de confianza más bajo.

La función ML.RECOMMEND se usa para predecir calificaciones mediante el modelo bqml_tutorial.my_implicit_mf_model.

La declaración SELECT anidada de esta consulta solo selecciona la columna visitorId de la tabla original que se usó para el entrenamiento.

La cláusula LIMIT (LIMIT 5) filtrará de forma aleatoria 5 visitorId para enviarlos a ML.RECOMMEND.

Busca las calificaciones para todos los pares de visitorId y contentId

Ahora que ya evaluaste el modelo, el siguiente paso es usarlo para obtener una confianza de calificación. Usa el modelo para predecir las confianzas de las combinaciones de usuario y elemento de la siguiente consulta:

#standardSQL
SELECT
  *
FROM
  ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)

Detalles de la consulta

La declaración SELECT superior recupera las columnas visitorId, contentId y predicted_rating_confidence. La función ML.RECOMMEND genera la última columna mencionada. Cuando usas la función ML.RECOMMEND, el nombre de la columna de resultado de los modelos de factorización de matrices implícita es predicted_rating-column-name_confidence. En los modelos de factorización de matrices implícita, predicted_rating_confidence es la confianza estimada para el par user/item. Este valor de confianza se encuentra entre 0 y 1; la confianza más alta indica que el user prefiere item más que un item con un valor de confianza más bajo.

La función ML.RECOMMEND se usa para predecir calificaciones mediante el modelo bqml_tutorial.my_implicit_mf_model.

Una forma de guardarlo es la siguiente:

#standardSQL
CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content`
OPTIONS() AS
SELECT
  *
FROM
  ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)

Si se produce un error Query Exceeded Resource Limits con ML.RECOMMEND, vuelve a intentarlo con un nivel de facturación superior. En la herramienta de línea de comandos de BigQuery, esto se puede configurar mediante --maximum_billing_tier.

Genera recomendaciones

En la siguiente consulta, se usa ML.RECOMMEND para mostrar los 5 contentId más recomendados por visitorId.

#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

Detalles de la consulta

La declaración SELECT agrega los resultados de la consulta ML.RECOMMEND mediante GROUP BY visitorId para agregar contentId y predicted_rating_confidence en orden descendente y solo mantiene los 5 ID de contenido principales.

Mediante la consulta de recomendaciones anterior, podemos establecer un orden según la calificación prevista y mostrar los elementos previstos más importantes para cada usuario. Con la siguiente consulta, se unen los item_ids con los movie_ids que se encuentran en la tabla movielens.movie_titles subida antes y muestra las 5 películas más recomendadas por usuario.

Ejecuta la consulta ML.RECOMMEND

Para ejecutar la consulta ML.RECOMMEND que muestra los 5 ID de contenido más recomendados por ID de visitante, haz lo siguiente:

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.

    #standardSQL
    CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content`
    OPTIONS() AS
    SELECT
     *
    FROM
     ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
  3. Haz clic en Ejecutar.

    Cuando la consulta termine de ejecutarse, aparecerá (bqml_tutorial.recommend_content) en el panel de navegación de la consola de Google Cloud. Debido a que en la consulta se usa una sentencia CREATE TABLE para crear una tabla, no verás los resultados.

  4. Redacta otra consulta nueva. Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas una vez que la consulta anterior termine de ejecutarse.

    #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. De modo opcional, para configurar la ubicación de procesamiento, haga clic en Más > Configuración de la consulta (More > Query Settings). En Processing location (Ubicación de procesamiento), elige US. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática en función de la ubicación del conjunto de datos.

    Configuración de consulta.

  6. Haz clic en Ejecutar.

  7. Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse así:

    Resultado de ML.RECOMMEND

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 consola de Google Cloud.

    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, ingresa el nombre del conjunto de datos (bqml_tutorial) y, luego, haz clic en Borrar para confirmar el comando de borrado.

Borra tu proyecto

Para borrar el proyecto, haz lo siguiente:

  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.

Próximos pasos