1. Visão geral
Com o BigQuery ML (BQML), os usuários podem criar e executar modelos de machine learning no BigQuery usando consultas SQL. O objetivo é democratizar o machine learning, de modo que os especialistas em SQL criem modelos usando as respectivas ferramentas e aumentem a velocidade de desenvolvimento ao eliminar a necessidade de movimentar os dados.
O que você vai criar
Você vai usar o exemplo de conjunto de dados do Analytics 360 para criar um modelo que prevê se um visitante vai fazer uma transação.
O que você vai aprender
Como criar, avaliar e usar modelos de machine learning no BigQuery
Pré-requisitos
- Um navegador, como o Chrome ou o Firefox
- Conhecimento básico de SQL ou BigQuery
- Documentação do BQML
2. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID
.
- Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$300 de avaliação sem custo financeiro.
Abra o BigQuery no Console do Cloud
No Google Developer Console, clique no ícone Menu no canto superior esquerdo da tela.
Role o menu até a parte inferior e clique em BigQuery:
O console do BigQuery será aberto em uma nova guia do navegador como esta:
Ainda não há nenhuma informação aqui, mas há vários conjuntos de dados públicos no BigQuery para você explorar.
3. Criar um conjunto de dados
Para criar um conjunto de dados, clique na seta ao lado do nome do projeto e selecione Criar novo conjunto de dados.
Em seguida, dê o nome bqml_codelab ao conjunto de dados e clique em OK.
4. Criar um modelo
Regressão logística para o Analytics 360
Agora, vamos para nossa tarefa. Veja como criar um modelo para prever se um visitante vai fazer uma transação.
#standardSQL CREATE OR REPLACE MODEL `bqml_codelab.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170631' LIMIT 100000;
Aqui, usamos o sistema operacional do dispositivo do visitante, seja ele um dispositivo móvel, o país do visitante e o número de visualizações de página, como critérios para determinar se uma transação foi feita.
Nesse caso, "codelab" é o nome do conjunto de dados e “sample_model” é o nome do nosso modelo. O tipo de modelo especificado é o de regressão logística binária. Neste caso, label
é o que estamos tentando encaixar. Se você só tiver interesse em uma coluna, essa é uma maneira alternativa de definir input_label_cols
. Também limitamos os dados de treinamento àqueles coletados entre 1o de agosto de 2016 e 31 de junho de 2017. O objetivo é armazenar os dados do último mês para a "previsão". Além disso, limitamos 100.000 pontos de dados para economizar tempo. Se não estiver com pressa, remova a última linha.
A execução do comando CREATE MODEL cria um job de consulta que será executado de forma assíncrona. Assim, é possível fechar ou atualizar a janela da interface do BigQuery, por exemplo.
[Opcional] Informações do modelo e estatísticas de treinamento
Se tiver interesse, clique em sample_model no conjunto de dados bqml_codelab na interface para saber mais sobre o modelo. Em Detalhes, você encontra algumas informações básicas sobre o modelo e as opções de treinamento usadas na produção dele. Em Estatísticas do treinamento, você verá uma tabela semelhante a esta:
5. Avalie o modelo
Avaliar o modelo
#standardSQL SELECT * FROM ml.EVALUATE(MODEL `bqml_codelab.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));
Se for usada com um modelo de regressão linear, a consulta acima retornará as seguintes colunas: mean_absolute_error
, mean_squared_error
, mean_squared_log_error
, median_absolute_error
, r2_score
e explained_variance
. Se for usada com um modelo de regressão logística, a consulta acima vai retornar as seguintes colunas: precision
, recall
, accuracy
, f1_score
, log_loss
e roc_auc
. Consulte o glossário de machine learning ou faça uma pesquisa no Google para entender como cada uma dessas métricas é calculada e o que elas significam.
Concretamente, você vai perceber que as partes SELECT
e FROM
da consulta são idênticas às que foram usadas no treinamento. A parte WHERE
reflete a mudança no período, e a parte FROM
mostra que estamos chamando ml.EVALUATE
. Você vai encontrar uma tabela semelhante a esta:
6. Use o modelo
Fazer previsões de compras por país
Aqui, tentamos prever o número de transações feitas por visitantes de cada país, classificaremos os resultados e selecionaremos os 10 principais países por compras.
#standardSQL SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10;
Observe que essa consulta é muito semelhante à consulta de avaliação que demonstramos na seção anterior. Em vez de ml.EVALUATE
, usamos ml.PREDICT
aqui e unimos a parte do BQML da consulta com comandos SQL padrão. Concretamente, estamos interessados no país e na soma das compras de cada país, então é isso que nós SELECT
, GROUP BY
e ORDER BY
. A LIMIT
é usada aqui para garantir que receberemos apenas os 10 resultados principais. Você vai encontrar uma tabela semelhante a esta:
Fazer previsões de compras por usuário
Veja outro exemplo. Desta vez, tentamos prever o número de transações feitas por cada visitante, classificaremos os resultados e selecionaremos os 10 principais visitantes por número de transações.
#standardSQL SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10;
Você vai encontrar uma tabela semelhante a esta:
7. Parabéns!
Você concluiu este codelab. Procurando um desafio? Tente criar um modelo de regressão linear com o BQML.
O que vimos
- Criação de um modelo de regressão logística binária
- Avaliação do modelo
- Uso do modelo para fazer predições
Próximas etapas
- Para mais informações sobre o BQML, consulte a documentação.