1. Visão geral
Com o BigQuery ML (BQML), é possível 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 conjunto de dados de amostra 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 custos.
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. crie 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 a 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, os critérios usados para saber se uma transação foi feita são o sistema operacional do dispositivo do visitante, se esse é um dispositivo móvel, qual o país do visitante e qual foi o número de visualizações da página.
Neste 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. Nesse caso, label é o que estamos tentando ajustar. Quando você só tem interesse em uma coluna, essa é uma maneira alternativa de configurar input_label_cols. Também estamos limitando nossos dados de treinamento àqueles coletados entre 1º de agosto de 2016 e 30 de junho de 2017. O objetivo é separar os dados do último mês para a "previsão". Além disso, estamos limitando a 100.000 pontos de dados para economizar tempo. Remova a última linha se não estiver com pressa.
A execução do comando CREATE MODEL cria um job de consulta que será executado de forma assíncrona. Assim, você pode fechar ou atualizar a janela da interface do BigQuery, por exemplo.
Informações do modelo e estatísticas de treinamento [opcional]
Se tiver interesse, é possível receber informações sobre o modelo clicando em sample_model no conjunto de dados bqml_codelab na interface. Em Detalhes, você encontra algumas informações sobre o modelo básico e as opções de treinamento utilizadas na produção desse modelo. Em Estatísticas do treinamento, você vai encontrar uma tabela semelhante a esta:

5. avalie o modelo
Avaliar nosso 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 a consulta acima for usada com um modelo de regressão linear, ela vai retornar as seguintes colunas: mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score, 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, 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.
Você vai notar que as partes SELECT e FROM da consulta são idênticas às que foram usadas no treinamento. A seção WHERE representa a mudança no período, e a 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, classificar os resultados e selecionar os 10 principais países por número de 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;
Essa consulta é muito semelhante à de avaliação demonstrada na seção anterior. Em vez de ml.EVALUATE, usamos ml.PREDICT e encapsulamos a parte da consulta do BQML com comandos SQL padrão. Especificamente, o que interessa a você é o país e o total de compras de cada um deles. Por isso usamos SELECT, GROUP BY e ORDER BY. LIMIT é usado aqui para garantir que só os 10 principais resultados sejam mostrados. Você vai encontrar uma tabela semelhante a esta:

Fazer previsões de compras por usuário
Veja outro exemplo. Desta vez, vamos tentar prever o número de transações feitas por cada visitante, classificar os resultados e selecionar 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. Quer 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, consulte a documentação do BQML.