Introdução ao BigQuery ML

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

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

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

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 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:

b8bd9548a0d89165.png

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:

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, 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:

e639f7a409741dcb.png

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:

2be1d8fa96e10178.png

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