Introdução ao BigQuery ML

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

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. 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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

  1. 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.

select-bq_0.png

Role o menu até a parte inferior e clique em BigQuery:

select-bq.png

O console do BigQuery será aberto em uma nova guia do navegador como esta:

8b0218390329e8cf.png

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.

4f51bf57291a59db.png

Em seguida, dê o nome bqml_codelab ao conjunto de dados e clique em OK.

63e32478a5652fbc.png

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:

b8bd9548a0d89165.png

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:

1c7779f6028730cc.png

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:

e639f7a409741dcb.png

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:

2be1d8fa96e10178.png

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