Instruções e requisitos de configuração do laboratório
Proteja sua conta e seu progresso. Sempre use uma janela anônima do navegador e suas credenciais para realizar este laboratório.

Prever compras de visitantes com o BigQuery ML

Laboratório 1 hora 10 minutos universal_currency_alt 5 créditos show_chart Introdutório
info Este laboratório pode incorporar ferramentas de IA para ajudar no seu aprendizado.
Este conteúdo ainda não foi otimizado para dispositivos móveis.
Para aproveitar a melhor experiência, acesse nosso site em um computador desktop usando o link enviado a você por e-mail.

Visão geral

O BigQuery ML (BigQuery Machine Learning) é um recurso do BigQuery que permite aos analistas de dados criar, treinar, avaliar e fazer previsões usando modelos de machine learning com um mínimo de programação.

O conjunto de dados de amostra de e-commerce do Google Analytics com milhões de registros da Google Merchandise Store carregados no BigQuery. Neste laboratório, você executará algumas consultas comuns usando esses dados com o objetivo de encontrar informações sobre hábitos de compra dos clientes que sejam relevantes para as empresas.

Objetivos

Neste laboratório, você aprenderá a realizar estas tarefas:

  • Usar o BigQuery para localizar conjuntos de dados públicos
  • Consultar e analisar o conjunto de dados de e-commerce
  • Criar um conjunto de dados de treinamento e avaliação para usar nas previsões em lote
  • Criar um modelo de classificação (regressão logística) no BigQuery ML
  • Avaliar o desempenho do seu modelo de machine learning
  • Prever e classificar a probabilidade de um visitante fazer uma compra

Configurar os ambientes

Configuração do laboratório

Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.

  1. Faça login no Qwiklabs em uma janela anônima.

  2. Confira o tempo de acesso do laboratório (por exemplo, 1:15:00) e finalize todas as atividades nesse prazo.
    Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.

  3. Quando tudo estiver pronto, clique em Começar o laboratório.

  4. Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.

  5. Clique em Abrir Console do Google.

  6. Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
    Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.

  7. Aceite os termos e pule a página de recursos de recuperação.

Abra o BigQuery no Console do Cloud

  1. No Console do Google Cloud, selecione o menu de navegação > BigQuery:

Você vai ver a caixa de mensagem Olá! Este é o BigQuery no Console do Cloud. Ela tem um link para o guia de início rápido e lista as atualizações da interface.

  1. Clique em Concluído.

Acessar o conjunto de dados do curso

No BigQuery, abra o projeto data-to-insights em uma nova guia do navegador para que ele apareça no painel do BigQuery.

As definições de campo para o conjunto de dados de e-commerce data-to-insights estão na página [UA] Esquema do BigQuery Export. Mantenha esse link aberto em outra guia para consulta.

Tarefa 1: analisar os dados de e-commerce

Cenário: sua equipe de analistas de dados exportou para o BigQuery os registros do Google Analytics referentes a um site de e-commerce e criou uma nova tabela com todos os dados brutos de sessão de visitante para você investigar. Use essas informações para responder às perguntas abaixo.

Pergunta: qual porcentagem do total de visitantes fez uma compra no site?

  1. Clique no Editor de consultas.
  2. Adicione esta consulta ao campo "Nova consulta":
#standardSQL WITH visitors AS( SELECT COUNT(DISTINCT fullVisitorId) AS total_visitors FROM `data-to-insights.ecommerce.web_analytics` ), purchasers AS( SELECT COUNT(DISTINCT fullVisitorId) AS total_purchasers FROM `data-to-insights.ecommerce.web_analytics` WHERE totals.transactions IS NOT NULL ) SELECT total_visitors, total_purchasers, total_purchasers / total_visitors AS conversion_rate FROM visitors, purchasers
  1. Clique em Executar.

Resultado: 2,69%

Pergunta: quais são os cinco produtos mais vendidos?

  1. Adicione o código a seguir ao EDITOR de consultas e clique em Executar:
SELECT p.v2ProductName, p.v2ProductCategory, SUM(p.productQuantity) AS units_sold, ROUND(SUM(p.localProductRevenue/1000000),2) AS revenue FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h, UNNEST(h.product) AS p GROUP BY 1, 2 ORDER BY revenue DESC LIMIT 5;

Resultado:

Linha v2ProductName v2ProductCategory units_sold revenue
1 Nest® Learning Thermostat 3rd Gen-USA - Stainless Steel Nest-USA 17651 870976.95
2 Nest® Cam Outdoor Security Camera - USA Nest-USA 16930 684034.55
3 Nest® Cam Indoor Security Camera - USA Nest-USA 14155 548104.47
4 Nest® Protect Smoke + CO White Wired Alarm-USA Nest-USA 6394 178937.6
5 Nest® Protect Smoke + CO White Battery Alarm-USA Nest-USA 6340 178572.4

Pergunta: quantos visitantes fizeram uma compra em acessos posteriores ao site?

  1. Execute a seguinte consulta para descobrir:
# visitantes que realizaram uma compra em acessos posteriores (poderiam também ter comprado no primeiro) WITH all_visitor_stats AS ( SELECT fullvisitorid, # 741,721 unique visitors IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) SELECT COUNT(DISTINCT fullvisitorid) AS total_visitors, will_buy_on_return_visit FROM all_visitor_stats GROUP BY will_buy_on_return_visit

Resultados:

Linha total_visitors will_buy_on_return_visit
1 729848 0
2 11873 1

Pelos resultados, (11.873 / 729.848) = 1,6% do total de visitantes retorna e faz compras no site. Isso inclui o subconjunto de pessoas que fizeram compras na primeira sessão e depois voltaram ao site para comprar mais produtos.

Esse comportamento é muito comum na compra de produtos caros (por exemplo, um carro), em que o cliente precisa pesquisar e comparar informações antes de decidir. No entanto, isso também acontece, em menor escala, na compra de outros produtos anunciados nesse site, como camisetas, acessórios etc.

No mundo do marketing on-line, identificar esses futuros clientes com base nas características da primeira visita que fizeram e promover os produtos para eles aumentará as taxas de conversão e reduzirá a saída para sites concorrentes.

Tarefa 2: selecionar atributos e criar seu conjunto de dados de treinamento

Agora você vai criar um modelo de machine learning no BigQuery para prever se um novo usuário fará compras no site futuramente. Identificar esses usuários valiosos pode ajudar sua equipe de marketing a exibir promoções especiais e campanhas publicitárias para eles.

O Google Analytics captura diversas dimensões e medidas sobre a visita de um usuário ao site de e-commerce. Confira a lista completa de campos no Guia [UA] Esquema do BigQuery Export e exiba o conjunto de dados de demonstração para encontrar atributos úteis que vão ajudar um modelo de machine learning a entender a relação entre os dados da primeira visita de um usuário ao site e a probabilidade de retorno para fazer uma compra.

Sua equipe decide testar se estes dois campos são entradas relevantes para o modelo de classificação:

  • totals.bounces (se o visitante saiu do site imediatamente)
  • totals.timeOnSite (quanto tempo o visitante ficou no site)

O desempenho do machine learning depende dos dados de treinamento que ele recebe. Se não houver informações suficientes para o modelo determinar e aprender a relação entre os atributos da entrada e o rótulo (nesse caso, se o visitante fez uma compra mais tarde), o modelo será impreciso. Treinar um modelo somente com esses dois campos pode ser um começo, e você vai conferir se eles são bons o suficiente para produzir um modelo preciso.

  • No EDITOR de consultas, insira o código a seguir e clique em Executar:
SELECT * EXCEPT(fullVisitorId) FROM # 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) JOIN (SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid) USING (fullVisitorId) ORDER BY time_on_site DESC LIMIT 10;

Resultados:

Linha bounces time_on_site will_buy_on_return_visit
1 0 15047 0
2 0 12136 0
3 0 11201 0
4 0 10046 0
5 0 9974 0
6 0 9564 0
7 0 9520 0
8 0 9275 1
9 0 9138 0
10 0 8872 0

Discussão: will_buy_on_return_visit não é conhecido após a primeira visita. É importante lembrar que você está prevendo um subconjunto de usuários que retornaram ao seu site e fizeram compras. Como não há informações futuras no momento da previsão, você não tem certeza se um novo visitante voltará para fazer compras. Criar um modelo de ML é importante para saber a probabilidade de uma compra futura com base nos dados coletados sobre a primeira sessão.

Pergunta: analisando os resultados dos dados iniciais, você acha que time_on_site e bounces serão bons indicadores da possibilidade de o usuário retornar e fazer compras no site?

Resposta: geralmente, é preciso treinar e avaliar o modelo antes de afirmar isso. No entanto, com base nos 10 maiores valores de time_on_site, somente um cliente voltou para comprar, o que não é muito promissor. Veja como será o desempenho do modelo.

Tarefa 3: criar um conjunto de dados do BigQuery para armazenar modelos

Em seguida, crie um novo conjunto de dados do BigQuery que também vai armazenar seus modelos de ML.

  1. No painel esquerdo, clique no nome do projeto e, em seguida, no ícone Exibir ação (três pontos) e selecione Criar conjunto de dados.

Opção Criar conjunto de dados

  1. Na caixa de diálogo Criar conjunto de dados, siga estas instruções:
  • Em ID do conjunto de dados, insira ecommerce.
  • Mantenha os outros valores padrão.
  1. Clique em Criar conjunto de dados.

Tarefa 4: selecionar um tipo de modelo do BigQuery ML e especificar as opções

Agora que você selecionou os atributos iniciais, já pode criar o primeiro modelo de ML no BigQuery.

Há dois tipos de modelos para escolher:

Modelo Tipo de modelo Tipo de dados de rótulo Exemplo
Previsão linear_reg Valor numérico (normalmente um número inteiro ou ponto flutuante) Prever os valores de vendas para o próximo ano com base nos dados históricos das vendas.
Classificação logistic_reg 0 ou 1 para classificação binária Classificar um e-mail como spam ou não spam de acordo com o contexto.
Observação: vários outros tipos de modelo usados em machine learning, como redes neurais e árvores de decisão, estão disponíveis em bibliotecas como o TensorFlow. No momento em que este artigo foi escrito, o BigQuery ML oferecia suporte aos dois listados acima.

  1. Insira a consulta a seguir para criar um modelo e especificar as opções:
CREATE OR REPLACE MODEL `ecommerce.classification_model` OPTIONS ( model_type='logistic_reg', labels = ['will_buy_on_return_visit'] ) AS # SQL padrão SELECT * EXCEPT(fullVisitorId) FROM # atributos (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' AND '20170430') # treinar com base nos primeiros 9 meses JOIN (SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid) USING (fullVisitorId) ;
  1. Depois, clique em Executar para treinar o modelo.

Aguarde o modelo ser treinado (5 a 10 minutos).

Observação: não inclua todos os dados disponíveis no modelo durante o treinamento, já que você vai precisar de alguns pontos de dados inéditos para fins de avaliação e teste. Adicione uma condição da cláusula WHERE que esteja sendo usada para filtrar e treinar somente os primeiros nove meses de dados da sessão no conjunto de dados de doze meses.

Após treinar o modelo, você verá a mensagem "Essa declaração criou um novo modelo chamado qwiklabs-gcp-xxxxxxxxx:ecommerce.classification_model".

  1. Clique em Ir para o modelo.

Para confirmar que o modelo foi criado, procure classification_model no conjunto de dados de e-commerce.

Em seguida, você avaliará o desempenho do modelo com novos dados de avaliação.

Tarefa 5: avaliar o desempenho do modelo de classificação

Selecionar os critérios de desempenho

Para resolver problemas de classificação no ML, é preciso reduzir a taxa de falso positivo (previsão de compras que não acontecem) e aumentar a taxa de verdadeiro positivo (previsão de compras que acontecem).

É possível conferir essa relação com uma Curva ROC como esta mostrada aqui, em que o objetivo é maximizar a área sob a curva (ou AUC):

Como comparar o diagrama de Curvas ROC

No BigQuery ML, roc_auc é apenas um campo para consulta durante a avaliação do seu modelo de ML treinado.

  • Com o treinamento concluído, execute esta consulta com ML.EVALUATE para avaliar o desempenho do modelo:
SELECT roc_auc, CASE WHEN roc_auc > .9 THEN 'good' WHEN roc_auc > .8 THEN 'fair' WHEN roc_auc > .7 THEN 'not great' ELSE 'poor' END AS model_quality FROM ML.EVALUATE(MODEL ecommerce.classification_model, ( SELECT * EXCEPT(fullVisitorId) FROM # atributos (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 '20170501' AND '20170630') # avaliar com base em 2 meses JOIN (SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid) USING (fullVisitorId) ));

O seguinte resultado será exibido:

Linha roc_auc model_quality
1 0.724588 not great

Depois da avaliação do modelo, o resultado do roc_auc é 0,72, o que indica uma capacidade preditiva não muito boa. Como a meta é deixar a área sob a curva o mais próximo possível de 1, você pode aprimorar o modelo.

Tarefa 6: melhorar o desempenho do modelo com a engenharia de atributos

Como já mencionamos, há muito mais atributos no conjunto de dados que podem ajudar o modelo a entender melhor a relação entre a primeira sessão de um visitante e a probabilidade de compra em uma próxima visita.

Adicione alguns atributos novos e crie um segundo modelo de machine learning chamado classification_model_2:

  • Até onde o cliente foi no processo de finalização da compra na primeira visita
  • A origem do visitante (origem do tráfego: pesquisa orgânica, site de referência etc.)
  • A categoria do dispositivo (smartphone, tablet, computador)
  • As informações geográficas (país)
  1. Para criar esse segundo modelo, execute a consulta abaixo:
CREATE OR REPLACE MODEL `ecommerce.classification_model_2` OPTIONS (model_type='logistic_reg', labels = ['will_buy_on_return_visit']) AS WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # adiciona alguns atributos novos SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # rótulos will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # comportamento no site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # origem do visitante trafficSource.source, trafficSource.medium, channelGrouping, # celular ou desktop device.deviceCategory, # geografia IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # prever apenas para novas visitas AND totals.newVisits = 1 AND date BETWEEN '20160801' AND '20170430' # treinar com 9 meses GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ); Observação: você continua treinando o novo modelo com os dados dos primeiros nove meses. É importante usar o mesmo conjunto de dados de treinamento para ter certeza de que a saída do modelo melhorou porque os recursos de entrada estão mais eficientes, e não porque os dados de treinamento são novos ou diferentes.

Um novo atributo importante adicionado à consulta do conjunto de dados de treinamento é a etapa máxima do processo de finalização da compra que cada visitante alcançou na sessão, registrada no campo hits.eCommerceAction.action_type. Ao procurar esse campo nas definições de campo, você verá o mapeamento "6 = Compra realizada".

Além disso, o conjunto de dados de análise da Web tem campos aninhados e repetidos, como MATRIZES, que precisam ser separados em linhas específicas. Isso é feito com a função UNNEST(), que você pode ver na consulta acima.

Aguarde a conclusão do treinamento do novo modelo (5 a 10 minutos).

  1. Execute a consulta abaixo e avalie se este novo modelo tem poder de previsão melhor.
# SQL padrão SELECT roc_auc, CASE WHEN roc_auc > .9 THEN 'good' WHEN roc_auc > .8 THEN 'fair' WHEN roc_auc > .7 THEN 'not great' ELSE 'poor' END AS model_quality FROM ML.EVALUATE(MODEL ecommerce.classification_model_2, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # adiciona novos atributos SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # rótulos will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # comportamento no site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # origem do visitante trafficSource.source, trafficSource.medium, channelGrouping, # celular ou desktop device.deviceCategory, # geografia IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # prever apenas para novas visitas AND totals.newVisits = 1 AND date BETWEEN '20170501' AND '20170630' # avaliar 2 meses GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ));

(Saída)

Linha roc_auc model_quality
1 0.910382 good

Com o novo modelo, você recebe um roc_auc de 0,91, significativamente melhor do que o primeiro.

Agora que você tem um modelo treinado, é hora de fazer algumas previsões.

Tarefa 7: fazer previsão de quais visitantes novos vão voltar e fazer compras

Você escreverá uma consulta para prever quais novos visitantes voltarão e farão uma compra no site.

  • Execute a consulta de previsão abaixo, que usa o modelo de classificação aprimorado para prever a probabilidade de um visitante novo da Google Merchandise Store fazer uma compra em uma próxima visita:
SELECT * FROM ml.PREDICT(MODEL `ecommerce.classification_model_2`, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) SELECT CONCAT(fullvisitorid, '-',CAST(visitId AS STRING)) AS unique_session_id, # rótulos will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # comportamento no site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # origem do visitante trafficSource.source, trafficSource.medium, channelGrouping, # celular ou desktop device.deviceCategory, # geografia IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE # prever somente para novas visitas totals.newVisits = 1 AND date BETWEEN '20170701' AND '20170801' # testar 1 mês GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ) ORDER BY predicted_will_buy_on_return_visit DESC;

As previsões são feitas no último mês do conjunto de dados, dentro de um grupo de 12 meses.

Agora, seu modelo vai exibir as previsões para as sessões de e-commerce de julho de 2017. Veja que três novos campos foram adicionados:

  • predicted_will_buy_on_return_visit: indica se o modelo entende que o visitante comprará mais tarde (1 = sim)
  • predicted_will_buy_on_return_visit_probs.label: é o classificador binário para sim/não
  • predicted_will_buy_on_return_visit_probs.prob: indica a confiança do modelo na previsão (1 = 100%)

Resultados

  • Entre os primeiros 6% dos visitantes novos (classificados em ordem decrescente de probabilidade prevista), mais de 6% fazem uma compra em uma visita posterior.
  • Esses usuários representam quase 50% de todos os visitantes novos que compram em visitas futuras.
  • No geral, apenas 0,7% dos visitantes novos fazem uma compra em uma próxima visita.
  • Segmentar os primeiros 6% dos visitantes novos aumenta o ROI de marketing nove vezes mais do que segmentar todos eles.

Mais informações

roc_auc é apenas uma das métricas de desempenho disponíveis durante a avaliação do modelo. Acurácia, precisão e recall também estão disponíveis. A métrica de desempenho a ser usada dependerá muito da sua meta ou objetivo geral.

Parabéns!

Você criou um modelo de machine learning usando apenas SQL.

Desafio

Resumo

Nas últimas duas tarefas, você viu o poder da engenharia de atributos funcionando para melhorar o desempenho dos modelos. Mas é possível melhorar ainda mais o desempenho explorando outros tipos de modelo. Para problemas de classificação, o BigQuery ML também é compatível com os seguintes de tipos de modelo:

Tarefa

Embora nosso modelo de classificação linear (regressão logística) tenha apresentado um bom desempenho depois da engenharia de atributos, ele pode ser simples demais para capturar totalmente a relação entre os atributos e o rótulo. Seu desafio agora é criar um classificador XGBoost com o mesmo conjunto de dados e rótulos usados na tarefa 6 para criar o modelo ecommerce.classification_model_2.

Observação: dica: use as opções a seguir para Boosted_Tree_Classifier:
1. L2_reg = 0,1
2. num_parallel_tree = 8
3. max_tree_depth = 10

Consulte a documentação no link acima para ver a sintaxe exata se necessário. O treinamento do modelo pode levar cerca de sete minutos. Se precisar de ajuda para gravar uma consulta, acesse a seção de soluções abaixo.

Solução:

Esta é a solução necessária para criar um classificador XGBoost:

CREATE OR REPLACE MODEL `ecommerce.classification_model_3` OPTIONS (model_type='BOOSTED_TREE_CLASSIFIER' , l2_reg = 0.1, num_parallel_tree = 8, max_tree_depth = 10, labels = ['will_buy_on_return_visit']) AS WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # adiciona novos atributos SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # rótulos will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # comportamento no site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # origem do visitante trafficSource.source, trafficSource.medium, channelGrouping, # celular ou desktop device.deviceCategory, # geografia IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # prever somente para novas visitas AND totals.newVisits = 1 AND date BETWEEN '20160801' AND '20170430' # treinar 9 meses GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country );

Agora vamos avaliar nosso modelo e conferir o desempenho:

# SQL padrão SELECT roc_auc, CASE WHEN roc_auc > .9 THEN 'good' WHEN roc_auc > .8 THEN 'fair' WHEN roc_auc > .7 THEN 'not great' ELSE 'poor' END AS model_quality FROM ML.EVALUATE(MODEL ecommerce.classification_model_3, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # adiciona novos atributos SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # rótulos will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # comportamento no site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # origem do visitante trafficSource.source, trafficSource.medium, channelGrouping, # celular ou desktop device.deviceCategory, # geografia IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # prever apenas para novas visitas AND totals.newVisits = 1 AND date BETWEEN '20170501' AND '20170630' # avaliar 2 meses GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ));

O roc_auc aumentou de cerca de 0,02 para 0,94!

Observação: seus valores exatos serão diferentes devido à aleatoriedade do processo de treinamento.

É uma mudança pequena no roc_auc, mas como 1 é um roc_auc perfeito, quanto mais próximo de 1, mais difícil é aprimorar a métrica.

Este é um ótimo exemplo de como é fácil testar diferentes tipos de modelo no BigQuery ML com diversas opções para conferir o desempenho deles. Você conseguiu usar um tipo de modelo muito mais complexo apenas mudando uma linha do SQL.

As escolhas para essas opções só foram possíveis pela experimentação. Para encontrar o tipo ideal de modelo para seus problemas, é necessário fazer experimentos com diferentes grupos de opções em um processo conhecido como ajuste de hiperparâmetro.

Por fim, vamos gerar previsões com o modelo aprimorado e comparar com os que geramos anteriormente. Ao usar um modelo de classificador de árvore aprimorado, você vai notar uma leve melhora de 0,2 no ROC AUC em comparação com o modelo anterior. A consulta abaixo vai prever quais novos visitantes podem voltar e fazer compras:

SELECT * FROM ml.PREDICT(MODEL `ecommerce.classification_model_3`, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) SELECT CONCAT(fullvisitorid, '-',CAST(visitId AS STRING)) AS unique_session_id, # rótulos will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # comportamento no site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # origem do visitante trafficSource.source, trafficSource.medium, channelGrouping, # celular ou desktop device.deviceCategory, # geografia IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE # prever somente para novas visitas totals.newVisits = 1 AND date BETWEEN '20170701' AND '20170801' # testar 1 mês GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ) ORDER BY predicted_will_buy_on_return_visit DESC;

A saída agora exibe um modelo de classificação que prevê com mais eficácia a probabilidade de um visitante novo da Google Merchandise Store fazer uma compra em uma próxima visita. O resultado acima, comparado com o modelo anterior exibido na tarefa 7, mostra uma confiança mais precisa em relação ao tipo de modelo logistic_regression.

Finalize o laboratório

Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.

Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.

O número de estrelas indica o seguinte:

  • 1 estrela = muito insatisfeito
  • 2 estrelas = insatisfeito
  • 3 estrelas = neutro
  • 4 estrelas = satisfeito
  • 5 estrelas = muito satisfeito

Feche a caixa de diálogo se não quiser enviar feedback.

Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.

Copyright 2026 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.

Antes de começar

  1. Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
  2. Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
  3. No canto superior esquerdo da tela, clique em Começar o laboratório

Usar a navegação anônima

  1. Copie o nome de usuário e a senha fornecidos para o laboratório
  2. Clique em Abrir console no modo anônimo

Fazer login no console

  1. Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
  2. Aceite os termos e pule a página de recursos de recuperação
  3. Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto

Este conteúdo não está disponível no momento

Você vai receber uma notificação por e-mail quando ele estiver disponível

Ótimo!

Vamos entrar em contato por e-mail se ele ficar disponível

Um laboratório por vez

Confirme para encerrar todos os laboratórios atuais e iniciar este

Use a navegação anônima para executar o laboratório

A melhor maneira de executar este laboratório é usando uma janela de navegação anônima ou privada. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.