Criar modelos de machine learning no BigQuery ML
Neste tutorial, mostramos como criar um modelo de regressão logística usando BigQuery ML no console do Google Cloud.
O BigQuery ML permite criar e treinar modelos de machine learning em o BigQuery usando consultas SQL. Isso ajuda a tornar o machine learning acessível porque permite usar ferramentas conhecidas, como o BigQuery SQL Editor e também aumenta a velocidade de desenvolvimento, eliminando a necessidade de mover os dados em um ambiente de machine learning separado.
Neste tutorial, você usa o conjunto de dados de amostra do Google Analytics para BigQuery e cria um modelo que prevê se um visitante do site fará uma transação. Para informações sobre o esquema do conjunto de dados do Analytics, veja o esquema do BigQuery Export na Central de Ajuda do Google Analytics.
Objetivos
Este tutorial mostra como fazer as seguintes tarefas:
- Usar o
Instrução
CREATE MODEL
para criar um modelo de regressão logística binária. - Use a função
ML.EVALUATE
para avaliar o modelo. - Usar o
Função
ML.PREDICT
para fazer previsões usando o modelo.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
- BigQuery
- BigQuery ML
Para mais informações sobre os custos do BigQuery, consulte a página de preços do BigQuery.
Para mais informações sobre os custos do BigQuery ML, consulte os preços do BigQuery ML.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
- O BigQuery é ativado automaticamente em novos projetos.
Para ativar o BigQuery em um projeto preexistente, acesse
Enable the BigQuery API.
Criar um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:
No console do Google Cloud, acesse a página do BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em
Conferir ações > Criar conjunto de dados.Na página Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial
.Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).
Os conjuntos de dados públicos são armazenados na multirregião
US
. Para simplificar, armazene seus conjuntos de dados no mesmo local.Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
Criar um modelo de regressão logística
Criar um modelo de regressão logística usando a amostra do Google Analytics no BigQuery.
SQL
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
CREATE OR REPLACE MODEL `bqml_tutorial.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 '20170630'
A consulta leva alguns minutos para ser concluída. Depois que a primeira iteração for concluída, seu modelo (
sample_model
) aparecerá no painel de navegação. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, não é necessário ver os resultados da consulta.
Detalhes da consulta
A instrução CREATE MODEL
cria o modelo e depois o treina
usando os dados recuperados pela instrução SELECT
da consulta.
A cláusula OPTIONS(model_type='logistic_reg')
cria uma classe logística
de regressão. Um
de regressão logística divide os dados de entrada em duas classes e,
estima a probabilidade de que os dados estejam em uma das classes. O que você é
tentando detectar, por exemplo, se um e-mail é spam, é representada por 1 e
outros valores são representados por 0. A probabilidade de um determinado valor pertencer a
para a classe que você está tentando detectar é indicada por um valor entre 0 e 1.
Por exemplo, se um e-mail recebe uma estimativa de probabilidade de 0,9, há
uma probabilidade de 90% de que o e-mail seja spam.
A instrução SELECT
dessa consulta recupera as colunas abaixo, que são usadas pelo modelo para prever a probabilidade de um cliente concluir uma transação:
totals.transactions
: o número total de transações de comércio eletrônico na sessão. Se o número de transações forNULL
, o valor na colunalabel
será definido como0
. Caso contrário, será definido como1
. Esses valores representam os resultados possíveis. Criar um alias denominadolabel
é uma alternativa à configuração da opçãoinput_label_cols=
na instruçãoCREATE MODEL
;device.operatingSystem
: o sistema operacional do dispositivo do visitante;device.isMobile
: indica se o dispositivo do visitante é um dispositivo móvel;geoNetwork.country
: o país de origem das sessões com base no endereço IP.totals.pageviews
: o número total de visualizações de página na sessão.
A cláusula FROM
: faz com que a consulta treine o modelo usando a
bigquery-public-data.google_analytics_sample.ga_sessions
tabelas de exemplo.
Essas tabelas são fragmentadas por data, então você as agrega usando um caractere curinga no
o nome da tabela: google_analytics_sample.ga_sessions_*
.
A cláusula WHERE
— _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
— limita o número de tabelas verificadas pela consulta. O período verificado vai de 1º de agosto de 2016 até 30 de junho de 2017.
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Visualizar as estatísticas de perda do modelo
O machine learning pode ser definido como criar um modelo capaz de utilizar dados para fazer previsões. O modelo é basicamente uma função que recebe entradas e aplica cálculos a estas entradas para produzir um resultado: uma previsão.
Os algoritmos de aprendizado de máquina funcionam utilizando diversos exemplos em que a previsão já é conhecida (como o histórico de compras de usuários) e ajustando iterativamente vários pesos no modelo de modo que as previsões correspondam aos valores reais. Isso é feito ao minimizar as possibilidades de erro do modelo por meio de uma métrica denominada perda.
A expectativa é que a perda seja reduzida a cada iteração, idealmente até chegar a zero. Uma perda zero significa que o modelo é 100% exato.
Ao treinar o modelo, o BigQuery ML divide automaticamente as inserir dados no conjuntos de treinamento e avaliação, para evitar o overfitting o modelo. Isso é necessário para que o algoritmo de treinamento não se encaixe tão perto dos dados de treinamento que não consegue generalizar para novos exemplos.
Use o console do Google Cloud para conferir como a perda do modelo muda iterações de treinamento do modelo:
No Console do Google Cloud, acesse a página BigQuery.
No painel Explorador, expanda bqml_tutorial > Models e Depois clique em sample_model.
Clique na guia Treinamento e olhe para o gráfico Perda. O gráfico de perda gráfico mostra a mudança na métrica de perda ao longo das iterações no conjunto de dados de treinamento. Se você segurar o cursor sobre o gráfico, vai notar que há linhas para Perda de treinamento e Perda de avaliação. Como você uma regressão logística, o valor da perda de treinamento é calculado como log Perda, usando os dados de treinamento. A perda de avaliação é a log Perda calculada dados de avaliação de recursos. Os dois tipos de perda representam valores médios de perda, em todos os exemplos nos respectivos conjuntos de dados de cada iteração.
Também é possível ver os resultados do treinamento de modelo usando o
Função ML.TRAINING_INFO
.
Avaliar o modelo
Avalie o desempenho do modelo usando a função ML.EVALUATE
. A função ML.EVALUATE
avalia os valores previstos gerados pelo modelo em relação aos dados reais. Para calcular a regressão logística específica
você pode usar o
Função SQL ML.ROC_CURVE
ou o
bigframes.ml.metrics.roc_curve
Função DataFrames do BigQuery.
Neste tutorial, você está usando um modelo de classificação binária que detecta transações. Os valores na coluna label
são as duas classes
gerados pelo modelo: 0
(sem transações) e 1
(transação feita).
SQL
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.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'))
Os resultados vão ter a aparência abaixo:
+--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | precision | recall | accuracy | f1_score | log_loss | roc_auc | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | 0.468503937007874 | 0.11080074487895716 | 0.98534315834767638 | 0.17921686746987953 | 0.04624221101176898 | 0.98174125874125873 | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
Como você executou uma regressão logística, os resultados incluem as seguintes colunas:
precision
: métrica para modelos de classificação. A precisão identifica a frequência de acerto de um modelo ao prever a classe positiva.recall
: uma métrica para modelos de classificação que responde à seguinte pergunta: De todos os rótulos positivos possíveis, quantos identificaram o modelo corretamente?accuracy
: a precisão é a fração das previsões corretas de um modelo de classificação.f1_score
: a medida da precisão do modelo. A pontuação f1 é a média harmônica da precisão e do recall. O melhor valor de uma pontuação f1 é 1. O pior valor é 0.log_loss
: a função de perda usada em uma regressão logística. É a medida de quanto as predições do modelo se distanciam dos rótulos corretos.roc_auc
: a área sob a curva de característica de operação do receptor ROC. É a probabilidade de um classificador ter mais certeza de que um exemplo positivo aleatório seja de fato positivo do que um exemplo negativo aleatório seja positivo. Para mais informações, consulte Classificação no Curso intensivo de machine learning.
Detalhes da consulta
A instrução SELECT
inicial recupera as colunas do modelo.
A cláusula FROM
usa a função ML.EVALUATE
no modelo.
A instrução SELECT
aninhada e a cláusula FROM
são as mesmas que
na consulta CREATE MODEL
.
A cláusula WHERE
— _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
— limita o número de tabelas verificadas pela consulta. O período verificado vai de 1º de julho de 2017 a 1º de agosto de 2017. Esses são os dados usados para avaliar o desempenho preditivo do modelo. Os dados foram coletados no mês imediatamente posterior ao período abrangido pelos dados de treinamento.
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Usar o modelo para prever resultados
Use o modelo para prever o número de transações feitas pelos visitantes do site de cada país.
SQL
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.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
Os resultados vão ter a aparência abaixo:
+----------------+---------------------------+ | country | total_predicted_purchases | +----------------+---------------------------+ | United States | 220 | | Taiwan | 8 | | Canada | 7 | | India | 2 | | Turkey | 2 | | Japan | 2 | | Italy | 1 | | Brazil | 1 | | Singapore | 1 | | Australia | 1 | +----------------+---------------------------+
Detalhes da consulta
A instrução SELECT
inicial recupera a coluna country
e soma os
predicted_label
. Essa coluna predicted_label
é gerada pela função ML.PREDICT
. Ao usar a função ML.PREDICT
, o nome da coluna de saída para o modelo é
predicted_<label_column_name>
. Para modelos de regressão linear, predicted_label
é o valor estimado de label
.
Para modelos de regressão logística, predicted_label
é o rótulo que melhor
descreve o valor dos dados de entrada fornecido, 0
ou 1
.
A função ML.PREDICT
é usada para prever resultados usando o modelo.
A instrução SELECT
aninhada e a cláusula FROM
são as mesmas que
na consulta CREATE MODEL
.
A cláusula WHERE
— _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
— limita o número de tabelas verificadas pela consulta. O período verificado vai de 1º de julho de 2017 a 1º de agosto de 2017. Você está fazendo predições para esses dados. Os dados foram coletados no mês imediatamente posterior ao período abrangido pelos dados de treinamento.
As cláusulas GROUP BY
e ORDER BY
agrupam os resultados por país e os ordenam pela soma das compras previstas em ordem decrescente.
A cláusula LIMIT
é usada aqui para exibir apenas os 10 melhores resultados.
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Faça predições de compras por usuário
Preveja o número de transações que cada visitante do site vai fazer.
SQL
Esta consulta é idêntica à consulta da seção anterior, exceto pelo
cláusula GROUP BY
. Aqui, a cláusula GROUP BY
— GROUP BY fullVisitorId
— é usada para agrupar os resultados por código de visitante.
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.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
Os resultados vão ter a aparência abaixo:
+---------------------+---------------------------+ | fullVisitorId | total_predicted_purchases | +---------------------+---------------------------+ | 9417857471295131045 | 4 | | 112288330928895942 | 2 | | 2158257269735455737 | 2 | | 489038402765684003 | 2 | | 057693500927581077 | 2 | | 2969418676126258798 | 2 | | 5073919761051630191 | 2 | | 7420300501523012460 | 2 | | 0456807427403774085 | 2 | | 2105122376016897629 | 2 | +---------------------+---------------------------+
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.
Você pode excluir o projeto criado ou mantê-lo e excluir o no conjunto de dados.
Excluir o conjunto de dados
A exclusão do seu projeto vai remover todos os conjuntos de dados e tabelas no projeto. Caso prefira reutilizá-lo, exclua o conjunto de dados criado neste tutorial:
No Console do Google Cloud, acesse a página BigQuery.
No painel Explorador, selecione o conjunto de dados bqml_tutorial criado.
Clique em > Excluir.
. AçõesNa caixa de diálogo Excluir conjunto de dados, confirme o comando de exclusão digitando
delete
.Clique em Excluir.
Exclua o projeto
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Para saber mais sobre machine learning, consulte o Curso intensivo de machine learning.
- Para uma visão geral do BigQuery ML, consulte Introdução ao BigQuery ML.
- Para saber mais, consulte Como usar o console do Google Cloud.