Predice la propensión de compra de los clientes mediante BigQuery ML y AI Platform

Aprende a crear un sistema para predecir la propensión del cliente a comprar mediante BigQuery ML y AI Platform.

Puedes usar un sistema de propensión a la compra para predecir cuáles son los clientes que tienen más probabilidades de realizar una compra, de modo que puedas personalizar las comunicaciones con ellos. Usa predicciones en línea para realizar acciones en tiempo real según el comportamiento de los usuarios en tu sitio web o realizar predicciones por lotes a fin de informar comunicaciones menos urgentes, como el correo electrónico.

En este instructivo, se muestra cómo crear un modelo de regresión logística para determinar si un cliente realizará una compra. Este tipo de modelo se usa debido a que es útil para evaluar la probabilidad de un resultado. El modelo evalúa las métricas que reflejan el comportamiento de los clientes en un sitio web y le asigna al cliente un valor de probabilidad de compra entre 0 y 1 según los datos. Luego, el modelo establece una etiqueta que indica que todos los clientes con una probabilidad mayor a 0.5 son “propensos a comprar”.

En este instructivo, se utilizan los conjuntos de datos de muestra de Google Analytics y del comercio electrónico para entrenar el modelo. Estos conjuntos de datos se alojan de forma pública en BigQuery. Los conjuntos de datos proporcionan 12 meses (de agosto de 2016 a agosto de 2017) de datos ofuscados de Analytics 360 provenientes de Google Merchandise Store, una tienda real de comercio electrónico que vende productos de la marca Google.

Para aplicar las lecciones de este instructivo a un caso de uso de producción, puedes usar tus propios datos de Analytics 360 o de un sistema similar que te otorgue acceso a métricas sobre el comportamiento de los clientes en tu sitio web.

Objetivos

La solución implica los siguientes pasos:

  • Procesar los datos de muestra en un formato adecuado para el entrenamiento del modelo
  • Crear, entrenar y, luego, implementar el modelo en BigQuery
  • Evaluar el modelo para comprender su rendimiento
  • Usar el modelo entrenado que se implementó en BigQuery para obtener predicciones por lotes
  • Implementar el modelo entrenado en AI Platform
  • Usar el modelo entrenado implementado en AI Platform para obtener predicciones en línea

Costos

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

  • AI Platform
  • BigQuery
  • BigQuery ML
  • Cloud Storage

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud sean aptos para obtener una prueba gratuita.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. 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. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita la API AI Platform Training and Prediction.

    Habilita la API

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Prepara los datos de muestra

Para entrenar el modelo, necesitarás una tabla que incluya las siguientes columnas:

  • fullVisitorId: Contiene el ID de cliente.
  • bounces: Identifica la cantidad de veces en que un visitante hizo clic en una búsqueda o en un anuncio de medios sociales, y comenzó una sesión en el sitio web, pero abandonó la página sin interactuar con ninguna otra. Esta columna se usa como uno de los atributos del modelo.
  • time_on_site: Identifica el tiempo total de la sesión del cliente en el sitio web, expresado en segundos. Esta columna se usa como los atributos del modelo.
  • will_buy_on_return_visit: Es una etiqueta que indica la propensión del cliente a comprar. Un valor de 1 indica que es probable que el cliente compre, un valor de 0 indica que no es probable que el cliente compre.

Sigue estos pasos para crear la tabla con los datos del conjunto de datos de muestra de Google Analytics:

  1. Abre el conjunto de datos de muestra de Google Analytics en Google Cloud Marketplace y haz clic en Ver conjunto de datos (View Dataset). Esto abre la consola de BigQuery con el conjunto de datos de muestra de Google Analytics seleccionado.
  2. En la sección Recursos (Resources), selecciona el proyecto en el que completaste este instructivo.
  3. Haz clic en Crear conjunto de datos.

    Muestra la ubicación del botón Crear conjunto de datos

  4. En la página Crear conjunto de datos:

    1. En ID del conjunto de datos (Dataset ID), ingresa bqml.
    2. En Ubicación de los datos (Data location), elige la ubicación más cercana a ti.
    3. Haz clic en Crear conjunto de datos.
  5. En el Editor de consultas, ejecuta la siguiente instrucción de SQL para crear una tabla que contenga los datos de entrenamiento.

    # select initial features and label to feed into your model
    CREATE OR REPLACE TABLE bqml.propensity_data AS
      SELECT
        fullVisitorId,
        bounces,
        time_on_site,
        will_buy_on_return_visit
      FROM (
            # select features
            SELECT
              fullVisitorId,
              IFNULL(totals.bounces, 0) AS bounces,
              IFNULL(totals.timeOnSite, 0) AS time_on_site
            FROM
              `data-to-insights.ecommerce.web_analytics`
            WHERE
              totals.newVisits = 1
            AND date BETWEEN '20160801' # train on first 9 months of data
            AND '20170430'
           )
      JOIN (
            SELECT
              fullvisitorid,
              IF (
                  COUNTIF (
                           totals.transactions > 0
                           AND totals.newVisits IS NULL
                          ) > 0,
                  1,
                  0
                 ) AS will_buy_on_return_visit
            FROM
              `bigquery-public-data.google_analytics_sample.*`
            GROUP BY
              fullvisitorid
           )
      USING (fullVisitorId)
      ORDER BY time_on_site DESC;
    
  6. Ejecuta la siguiente instrucción de SQL para ver una muestra de la fecha en la tabla bqml.propensity_data resultante:

    SELECT
     *
    FROM
      bqml.propensity_data
    LIMIT
      10;
    

    Deberías ver resultados similares a los siguientes:

    Primeras 10 filas de datos de entrenamiento procesados

Crea y entrena el modelo

Crea un modelo que realice predicciones sobre la propensión del cliente a comprar según su comportamiento en línea, de acuerdo con lo identificado por los datos de bounces y time_on_site.

Ejecuta la instrucción de SQL CREATE MODEL para crear, entrenar y, luego, implementar el modelo de regresión logística:

CREATE OR REPLACE MODEL `bqml.rpm_bqml_model`
OPTIONS(MODEL_TYPE = 'logistic_reg',
        labels = [ 'will_buy_on_return_visit' ]
        )
AS
SELECT * EXCEPT (fullVisitorId)
FROM `bqml.propensity_data`;

El entrenamiento puede tardar varios minutos. Una vez finalizado el entrenamiento, el modelo entrenado se implementa en BigQuery como bqml.rpm_bqml_model.

Evalúa el modelo

Para tener una idea del rendimiento del modelo, observa su métrica de rendimiento AUC: Área bajo la curva ROC. El valor del AUC de un modelo puede variar entre 0 (no hay predicciones correctas) y 1 (todas las predicciones fueron correctas).

En un instructivo como este con un modelo no optimizado, es probable que obtengas resultados positivos, pero no excelentes. Para un caso de uso de producción, debes optimizar el modelo mediante el ajuste de hiperparámetros, la ingeniería de atributos y otras técnicas para lograr una puntuación de 0.9 o superior.

Ejecuta la instrucción de SQL ML.EVALUATE para evaluar el modelo:

SELECT
  roc_auc,
  # evaluating the auc value based on the scale at http://gim.unmc.edu/dxtests/roc3.htm
  CASE WHEN roc_auc >.9 THEN 'excellent' WHEN roc_auc >.8 THEN 'good'
  WHEN roc_auc >.7 THEN 'fair' WHEN roc_auc >.6 THEN 'poor' ELSE 'fail' END
  AS modelquality
FROM ML.EVALUATE(MODEL `bqml.rpm_bqml_model`);

Deberías ver resultados similares a los siguientes:

Primeras 10 filas de datos de entrenamiento procesados

Usa el modelo entrenado para obtener predicciones por lotes

Usa las predicciones por lotes para obtener datos de una campaña de correo electrónico o alguna otra situación que no ocurra en tiempo real.

Ejecuta la instrucción de SQL ML.PREDICT a fin de obtener predicciones por lotes para los datos de muestra en la tabla bqml.propensity_data:

# predict the inputs (rows) from the input table
SELECT
  fullVisitorId,
  predicted_will_buy_on_return_visit
FROM ML.PREDICT(MODEL bqml.rpm_bqml_model,
(
   SELECT
   fullVisitorId,
   bounces,
   time_on_site
   from bqml.propensity_data
))

Deberías ver resultados similares a los siguientes:

Primeras 10 filas de datos de entrenamiento procesados

La instrucción ML.PREDICT anterior usa el nivel threshold predeterminado de 0.5. El valor threshold determina el corte entre los dos valores de etiqueta posibles, y las predicciones sobre el valor threshold se etiquetan como positivas. En el caso de un modelo de producción, considera ajustar el valor threshold junto con otras técnicas, como el ajuste de hiperparámetros para optimizar el modelo.

Usa el modelo entrenado para obtener predicciones en línea

Utiliza las predicciones en línea para realizar acciones en tiempo real en función del comportamiento de los usuarios en tu sitio web. Para obtenerlas, debes exportar el modelo de BigQuery a Cloud Storage y, luego, implementarlo en AI Platform. Luego, puedes enviar solicitudes de predicción al modelo que se implementó.

Sigue estos pasos para exportar y, luego, implementar el modelo:

  1. Activa Cloud Shell.
  2. En Cloud Shell, ejecuta el siguiente comando con el fin de crear un bucket de Cloud Storage para almacenar el modelo exportado. Reemplaza myProject por el ID del proyecto que estás usando para completar este instructivo.

    gsutil mb 'gs://myProject-bucket'
    
  3. Exporta el modelo a un bucket de Cloud Storage. Para ello, reemplaza myBucket con el nombre del bucket que creaste en el paso 2:

     bq extract -m bqml.rpm_bqml_model gs://myBucket/V_1
    
  4. Crea el modelo en AI Platform:

    gcloud ai-platform models create rpm_bqml_model
    
  5. Implementa el modelo exportado en AI Platform y reemplaza myBucket por el nombre del bucket que creaste en el paso 2:

    gcloud ai-platform versions create --model=rpm_bqml_model V_1 --framework=tensorflow --python-version=3.7 --runtime-version=1.15 --origin=gs://myBucket/V_1/ --staging-bucket=gs://myBucket
    
  6. Crea un archivo input.json que contenga datos de cliente de ejemplo:

    echo "{\"bounces\": 0, \"time_on_site\": 7363}" > input.json
    
  7. Solicita las predicciones:

    gcloud ai-platform predict --model rpm_bqml_model --version V_1 --json-instances input.json
    

    Este comando produce un resultado similar al siguiente:

    PREDICTED_WILL_BUY_ON_RETURN_VISIT  WILL_BUY_ON_RETURN_VISIT_PROBS            WILL_BUY_ON_RETURN_VISIT_VALUES
    ['1']                               [0.661069205638202, 0.33893079436179796]  ['1', '0']
    

    El modelo muestra 1 para PREDICTED_WILL_BUY_ON_RETURN_VISIT, lo que predice que este cliente de ejemplo es propenso a comprar, con una probabilidad del 66%.

    Puedes usar el valor de probabilidad de un cliente con una predicción positiva para decidir si le das un cupón o cualquier otro incentivo. Por ejemplo, podrías suponer que los clientes con una probabilidad superior al 80% van a comprar sin necesidad de darles un incentivo, por lo que recomendamos que te enfoques en los clientes con probabilidades entre el 50% y el 80%.

Próximos pasos (opcionales)

Integra la solución con un sistema de CRM

Puedes optar por expandir esta solución si integras las predicciones de propensión a comprar con sistemas de datos de administración de relaciones con clientes (CRM), como las direcciones de correo electrónico, a fin de facilitar la comunicación con los clientes. Para ver un ejemplo de este tipo de integración, consulta la página integración de públicos de Salesforce Marketing Cloud. En este artículo, se describe cómo integrar Google Analytics 360 en Salesforce Marketing Cloud para que puedas usar los públicos de Analytics 360 en campañas de marketing directo por correo electrónico y SMS de Salesforce.

Automatiza el flujo de trabajo con una canalización

De manera opcional, puedes automatizar los flujos de trabajo de preparación de datos, creación y entrenamiento de modelos y solicitud de predicciones que se muestran en este instructivo mediante la creación de una canalización de AI Platform. Usa el notebook bqml_kfp_retail_ppensity_to_purchase para obtener instrucciones paso a paso sobre cómo automatizar un flujo de trabajo de aprendizaje automático sobre la propensión a la compra.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto, pero borra solo esos recursos.

De cualquier manera, debes quitar esos recursos para que no se te cobre por ellos en el futuro. En las siguientes secciones, se describe cómo borrar estos recursos.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

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

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que 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.

Borra los componentes

Si no deseas borrar el proyecto, usa las siguientes secciones para borrar los componentes facturables de este instructivo.

Borra el conjunto de datos de BigQuery

  1. Abre la consola de BigQuery
  2. En la sección Recursos, expande el proyecto en el que estás completando este instructivo y selecciona el conjunto de datos bqml.
  3. Haz clic en Borrar conjunto de datos en el encabezado del panel del conjunto de datos.
  4. En la ventana de superposición que aparece, escribe bqml y, a continuación, haz clic en Borrar.

Borra el modelo de AI Platform

  1. Abre la página Modelos de AI Platform.
  2. En la lista de modelos, haz clic en rpm_bqml_model.
  3. En la página Detalles del modelo, selecciona la casilla de verificación para la versión V_1 (predeterminada).
  4. Haz clic en Más y, luego, en Borrar.
  5. Cuando se termine de borrar la versión, haz clic en Atrás para volver a la lista de modelos.
  6. Selecciona la casilla de verificación para el modelo rpm_bqml_model.
  7. Haz clic en Más y, luego, en Borrar.

Borra el bucket de Cloud Storage

  1. Abre el navegador de Cloud Storage.
  2. Selecciona la casilla de verificación del bucket <miproyecto>-bucket.
  3. Haz clic en Borrar.
  4. En la ventana de superposición que aparece, escribe DELETE y, luego, haz clic en Confirmar.

¿Qué sigue?