Como prever a propensão do cliente à compra usando o BigQuery ML e o AI Platform

Saiba como criar um sistema para prever a propensão do cliente à compra usando o BigQuery ML e o AI Platform.

É possível usar um sistema de propensão à compra para prever os clientes com maior probabilidade de fazer uma compra, a fim de poder personalizar a comunicação com eles. Use predições on-line para realizar ações em tempo real com base no comportamento do usuário no seu site ou predições em lote para informar comunicações menos urgentes, como e-mails.

Neste tutorial, mostramos como criar um modelo de regressão logística para determinar se um cliente fará uma compra. Esse tipo de modelo é usado porque é bom para avaliar a probabilidade de um resultado. O modelo avalia as métricas que refletem o comportamento do cliente em um site e atribui ao cliente a probabilidade de comprar valor entre 0 e 1 com base nesses dados. Em seguida, o modelo define um rótulo que indica "propenso a comprar" para qualquer cliente com uma probabilidade maior que 0,5.

Neste tutorial, usamos o exemplo do Google Analytics e os conjuntos de dados de comércio eletrônico para treinar o modelo. Esses conjuntos de dados são hospedados publicamente no BigQuery. Esses conjuntos de dados disponibilizam 12 meses (de agosto de 2016 a agosto de 2017) de dados ofuscados do Analytics 360 da Google Merchandise Store, uma loja de comércio eletrônico real que vende produtos da marca do Google.

Para aplicar as lições deste tutorial a um caso de uso de produção, você pode usar seus próprios dados do Analytics 360 ou de um sistema semelhante que fornece acesso a métricas sobre o comportamento do cliente no seu site.

Objetivos

A solução envolve as seguintes etapas:

  • Processe dados de amostra em um formato adequado para o treinamento do modelo.
  • Crie, treine e implante o modelo no BigQuery.
  • Avalie o modelo para entender o desempenho dele.
  • Use o modelo treinado implantado no BigQuery para receber predições em lote.
  • Implante o modelo treinado no AI Platform.
  • Use o modelo treinado implantado no AI Platform para receber predições on-line.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

  • AI Platform
  • BigQuery
  • BigQuery ML
  • Cloud Storage

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative a API AI Platform Training and Prediction.

    Ative a API

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Preparar os dados de amostra

Para treinar o modelo, é necessária uma tabela com as seguintes colunas:

  • fullVisitorId: contém o ID do cliente.
  • bounces: identifica o número de vezes que um visitante clicou em um anúncio social ou de pesquisa e iniciou uma sessão no site, mas saiu sem interagir com outras páginas. Essa coluna é usada como um dos recursos do modelo.
  • time_on_site: identifica o tempo total da sessão do cliente no site, expresso em segundos. Essa coluna é usada como os recursos do modelo.
  • will_buy_on_return_visit: um rótulo que indica a propensão do cliente à compra. O valor 1 indica que o cliente provavelmente comprará. Um valor de 0 indica que o cliente provavelmente não comprará.

Siga estas etapas para criar essa tabela usando dados do conjunto de dados de amostra do Google Analytics:

  1. Abra o conjunto de dados de amostra do Google Analytics no Google Cloud Marketplace e clique em Visualizar conjunto de dados. Isso abre o console do BigQuery com o conjunto de dados de amostra do Google Analytics selecionado.
  2. Na seção Recursos, selecione o projeto em que você está fazendo este tutorial.
  3. Clique em Criar conjunto de dados.

    Mostrar local do botão "Criar conjunto de dados".

  4. Na página Criar conjunto de dados, faça o seguinte:

    1. Em ID do conjunto de dados, digite bqml.
    2. Em Local dos dados, escolha o local mais próximo de você.
    3. Clique em Criar conjunto de dados.
  5. No Editor de consultas, execute a seguinte instrução SQL para criar uma tabela com os dados de treinamento.

    # 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. Execute a seguinte instrução SQL para ver uma amostra da data na tabela bqml.propensity_data resultante:

    SELECT
     *
    FROM
      bqml.propensity_data
    LIMIT
      10;
    

    Os resultados serão semelhantes aos exibidos abaixo:

    Primeiras 10 linhas de dados de treinamento processados.

Criar e treinar o modelo

Crie um modelo que faça previsões sobre a propensão do cliente à compra, com base no comportamento on-line do cliente, como identificado pelos dados bounces e time_on_site.

Execute a instrução SQL CREATE MODEL para criar, treinar e implantar o modelo de regressão 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`;

O treinamento pode levar vários minutos. Após a conclusão do treinamento, o modelo treinado é implantado no BigQuery como bqml.rpm_bqml_model.

Avalie o modelo

Para ter uma ideia do desempenho do modelo, observe a métrica de desempenho AUC: Área sob a curva ROC. O valor de AUC de um modelo pode variar entre 0, indicando que nenhuma previsão estava correta, e 1, indicando que todas as previsões estavam corretas.

Em um tutorial como esse com um modelo não otimizado, provavelmente você terá bons resultados, mas não ótimos. Para um caso de uso de produção, é melhor otimizar o modelo usando ajuste de hiperparâmetro, engenharia de atributos e outras técnicas para atingir uma pontuação de 0,9 ou mais.

Execute a instrução SQL ML.EVALUATE para avaliar o 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`);

Os resultados serão semelhantes aos exibidos abaixo:

Primeiras 10 linhas de dados de treinamento processados.

Usar o modelo treinado para receber previsões em lote

Use previsões em lote para acessar dados de uma campanha de e-mail ou outro cenário sem ser em tempo real.

Execute a instrução SQL ML.PREDICT para conseguir previsões em lote para os dados de amostra na tabela 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
))

Os resultados serão semelhantes aos exibidos abaixo:

Primeiras 10 linhas de dados de treinamento processados.

A instrução ML.PREDICT acima usa o nível threshold padrão de 0,5. O valor threshold determina o limite entre os dois valores do rótulo possíveis. As previsões acima do valor de threshold são rotuladas como positivas. Para um modelo de produção, considere ajustar o valor threshold em conjunto com outras técnicas, como o ajuste de hiperparâmetros para otimizar o modelo.

Usar o modelo treinado para receber previsões on-line

Use previsões on-line para realizar ações em tempo real com base no comportamento do usuário no seu site. Para receber previsões on-line, é preciso exportar o modelo do BigQuery para o Cloud Storage e implantá-lo no AI Platform. Em seguida, é possível enviar solicitações de previsão para o modelo implantado.

Siga estas etapas para exportar e implantar o modelo:

  1. Ativar o Cloud Shell
  2. No Cloud Shell, execute o comando abaixo para criar um bucket do Cloud Storage para armazenar o modelo exportado. Substitua myProject pelo ID do projeto que você está usando para concluir este tutorial.

    gsutil mb 'gs://myProject-bucket'
    
  3. Exporte o modelo para um bucket do Cloud Storage, substituindo myBucket pelo nome do bucket criado na Etapa 2:

     bq extract -m bqml.rpm_bqml_model gs://myBucket/V_1
    
  4. Crie o modelo no AI Platform:

    gcloud ai-platform models create rpm_bqml_model
    
  5. Implante o modelo exportado para o AI Platform, substituindo myBucket pelo nome do bucket criado na Etapa 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. Crie um arquivo input.json contendo dados de exemplo de clientes:

    echo "{\"bounces\": 0, \"time_on_site\": 7363}" > input.json
    
  7. Solicite as previsões:

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

    Esse comando produz um resultado semelhante ao seguinte:

    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']
    

    O modelo retorna 1 para PREDICTED_WILL_BUY_ON_RETURN_VISIT, prevendo que esse cliente de exemplo tem a propensão de comprar, com uma probabilidade de 66%.

    É possível usar o valor da probabilidade de um cliente com uma previsão positiva para decidir se você oferece um cupom ou outro incentivo. Por exemplo, suponha que os clientes com probabilidade acima de 80% têm probabilidade de comprar sem um incentivo. Portanto, use os incentivos para clientes com probabilidades entre 50% e 80%.

Próximas etapas opcionais

Integrar a solução a um sistema de CRM

Se quiser, expanda essa solução integrando as previsões de propensão à compra com os dados do sistema de Gestão de relacionamento com o cliente (CRM, na sigla em inglês), como endereços de e-mail, para facilitar o contato com o cliente. Para ver um exemplo desse tipo de integração, consulte Integração de público da Salesforce Marketing Cloud. Este artigo descreve como integrar o Google Analytics 360 à Salesforce Marketing Cloud e, assim, você pode usar os públicos do Analytics 360 nas campanhas de marketing direto do Salesforce por e-mail e SMS.

Automatizar o fluxo de trabalho com um pipeline

Opcionalmente, automatize a preparação de dados -> criação de modelos e treinamento -> solicitação do fluxo de trabalho de previsões, mostrados neste tutorial criando um pipeline do AI Platform. Use o notebook bqml_kfp_retail_propensity_to_purchase para receber instruções passo a passo sobre como automatizar um fluxo de trabalho de aprendizado de máquina da propensão à compra.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que contém os recursos ou mantenha o projeto, mas exclua apenas esses recursos.

Seja como for, remova esses recursos para que não sejam faturados no futuro. Nas seções a seguir, você verá como excluir esses recursos.

Excluir o projeto

A maneira mais fácil de eliminar o faturamento é excluir o projeto criado para o tutorial.

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir os componentes

Se você não quiser excluir o projeto, use as seguintes seções para excluir os componentes faturáveis deste tutorial.

Excluir o conjunto de dados do BigQuery

  1. Abra o console do BigQuery
  2. Na seção Recursos, expanda o projeto em que você fez este tutorial e selecione o conjunto de dados bqml.
  3. Clique em Excluir conjunto de dados no cabeçalho do painel do conjunto de dados.
  4. Na janela de sobreposição que aparece, digite bqml e clique em Excluir.

Excluir o modelo do AI Platform

  1. Abra a página de modelos do AI Platform
  2. Na lista de modelos, clique em rpm_bqml_model.
  3. Na página Detalhes do modelo, marque a caixa de seleção da versão V_1 (padrão).
  4. Clique em Mais e em Excluir.
  5. Quando a exclusão da versão for concluída, clique em Voltar para retornar à lista de modelos.
  6. Marque a caixa de seleção do modelo rpm_bqml_model.
  7. Clique em Mais e em Excluir.

Excluir o bucket do Cloud Storage

  1. Abra o navegador do Cloud Storage
  2. Marque a caixa de seleção do bucket <myProject>-bucket.
  3. Clique em Excluir.
  4. Na janela de sobreposição exibida, digite DELETE e clique em Confirmar.

A seguir