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.
Faça login no Qwiklabs em uma janela anônima.
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.
Quando tudo estiver pronto, clique em Começar o laboratório.
Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.
Clique em Abrir Console do Google.
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.
Aceite os termos e pule a página de recursos de recuperação.
Abra o BigQuery no Console do Cloud
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.
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?
Clique no Editor de consultas.
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
Clique em Executar.
Resultado: 2,69%
Pergunta: quais são os cinco produtos mais vendidos?
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;
Pergunta: quantos visitantes fizeram uma compra em acessos posteriores ao site?
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.
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.
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.
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.
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)
;
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".
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):
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)
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).
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:
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.
Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
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.
No canto superior esquerdo da tela, clique em Começar o laboratório
Usar a navegação anônima
Copie o nome de usuário e a senha fornecidos para o laboratório
Clique em Abrir console no modo anônimo
Fazer login no console
Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
Aceite os termos e pule a página de recursos de recuperação
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.
Quer criar modelos de ML usando apenas SQL? Aprenda a fazer usando o BigQuery ML neste conjunto de dados de e-commerce do Google Analytics.
Duração:
Configuração: 0 minutos
·
Tempo de acesso: 80 minutos
·
Tempo para conclusão: 70 minutos