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 la página de precios de BigQuery ML.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. BigQuery se habilita de forma automática en proyectos nuevos. Para activar BigQuery en un proyecto existente, ve a Habilita la API BigQuery.

    Habilita la API

Paso uno: Crea el conjunto de datos

El primer paso es crear un conjunto de datos de BigQuery donde se almacenará tu modelo de AA. Para crear el conjunto de datos, haz lo siguiente:

  1. En Cloud Console, ve a la IU web de BigQuery.

    Ir a la IU web de BigQuery

  2. En la sección Recursos, haz clic en el nombre del proyecto.

  3. En el panel de detalles, haz clic en Create dataset (Crear conjunto de datos).

    Crea un conjunto de datos.

  4. En la página Crear conjunto de datos, sigue estos pasos:

    • En Dataset ID (ID del conjunto de datos), ingresa bqml_tutorial.
    • En Data location (Ubicación de los datos), elige United States (US) (Estados Unidos [EE.UU.]). En la actualidad, los conjuntos de datos públicos se almacenan en la ubicación multirregión US. Para que sea más simple, debes colocar el conjunto de datos en la misma ubicación.

      Página Crear un conjunto de datos.

  5. Usa los valores predeterminados para el resto de la configuración y haz clic en Crear conjunto de datos.

Paso dos: Carga los datos de Google 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 Google 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 IU web de BigQuery, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    CREATE OR REPLACE TABLE
     bqml_training.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. Para configurar la ubicación de procesamiento, haz clic en More > Query settings (Más > Configuración de consulta) (opcional). 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 Run (Ejecutar).

    Cuando la consulta termine de ejecutarse, bqml_training.analytics_session_data aparecerá en el panel de navegación de la IU web de BigQuery. 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 SQL estándar se usa con el fin de crear el modelo que se empleará para predecir una calificación de confianza de cada par visitorId contentId.

#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

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 IU web de BigQuery, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de SQL estándar 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 alrededor de 12 minutos en completarse; luego, el modelo (my_implicit_mf_model) aparece en el panel de navegación de la IU web de BigQuery. Debido a que en la consulta se usa una declaración CREATE MODEL para crear un modelo, no se muestran los resultados.

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

Para ver los resultados del entrenamiento de modelos, puedes usar la función ML.TRAINING_INFO o puedes ver las estadísticas en la IU web de BigQuery. En este instructivo, se usa la IU web de BigQuery.

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 la IU web de BigQuery, en la sección Recursos, expande [PROJECT_ID] > bqml_tutorial y, luego, haz clic en my_implicit_mf_model.

  2. Haz clic en la pestaña Training (Entrenamiento) y, luego, en Table (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 declaración 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 IU web de BigQuery, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.EVALUATE(MODEL bqml_tutorial.my_implicit_mf_model)
    
  3. Para configurar la ubicación de procesamiento, haz clic en More > Query settings (Más > Configuración de consulta) (opcional). 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: Usa el 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 IU web de BigQuery, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de SQL estándar 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, bqml_training.recommend_content aparecerá en el panel de navegación de la IU web de BigQuery. Debido a que en la consulta se usa una declaración CREATE TABLE para crear una tabla, no verás los resultados.

  4. Redacta otra consulta nueva. Ingresa la siguiente consulta de SQL estándar en el área de texto del editor de consultas una vez que la consulta anterior haya terminado 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. Para configurar la ubicación de procesamiento, haz clic en More > Query settings (Más > Configuración de consulta) (opcional). 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

Realiza una limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

  • 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 IU web de BigQuery.

    Ir a la IU web 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. En Cloud Console, ve a la página Administrar recursos.

    Ir a la página Administrar recursos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el cuadro de diálogo, escribe el ID del proyecto y haz clic en Cerrar para borrar el proyecto.

Próximos pasos