Primeiros passos no BigQuery ML com a IU da Web

Este tutorial é uma introdução aos usuários ao BigQuery ML usando a IU da Web do BigQuery.

Com o BigQuery ML, é possível criar e executar modelos de machine learning no BigQuery usando consultas do 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.

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

Neste tutorial, você usará:

  • o BigQuery ML para criar um modelo de regressão binária usando a instrução CREATE MODEL;
  • a função ML.EVALUATE para avaliar o modelo de ML;
  • a função ML.PREDICT para fazer previsões usando o modelo de ML.

Custos

Componentes faturáveis do Cloud Platform são usados neste tutorial, como os seguintes:

  • BigQuery
  • BigQuery ML

Para ver mais informações sobre os custos do BigQuery, consulte a página de preços do BigQuery.

Para saber mais sobre os custos do BigQuery ML, veja a página de preços do BigQuery ML.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página de seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu projeto.

  4. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse Ative a API BigQuery.

    Ative a API

Etapa 1: criar conjunto de dados

A primeira etapa é criar um conjunto de dados do BigQuery para armazenar seu modelo de ML. Para criar o conjunto de dados, faça o seguinte:

  1. Acesse a IU da Web do BigQuery no Console do Cloud.

    Acesse a IU da Web do BigQuery

  2. Na seção Recursos do painel de navegação, clique no nome do seu projeto.

  3. No painel de detalhes, à direita, clique em Criar conjunto de dados.

    Criar conjunto de dados

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Para o código do conjunto de dados, insira bqml_tutorial.
    • Para Local dos dados, escolha Estados Unidos (EUA). Atualmente, os conjuntos de dados públicos são armazenados no local multirregional US. Para simplificar, coloque seu conjunto de dados no mesmo local.

      Página Criar conjunto de dados

  5. Mantenha todas as outras configurações padrão e clique em Criar conjunto de dados.

Etapa 2: criar modelo

Em seguida, você cria um modelo de regressão logística usando o conjunto de dados de amostra do Google Analytics para o BigQuery. Com a consulta SQL padrão a seguir você cria o modelo usado para prever se um visitante do site fará uma transação.

#standardSQL
CREATE 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'

Além de criar o modelo, a execução de uma consulta que contém a instrução CREATE MODEL treina o modelo usando os dados recuperados pela instrução SELECT da consulta.

Detalhes da consulta

A cláusula CREATE MODEL é usada para criar e treinar o modelo chamado bqml_tutorial.sample_model.

A cláusula OPTIONS(model_type='logistic_reg') indica que você está criando um modelo de regressão logística. Um modelo de regressão logística divide os dados de entrada em duas classes e determina a probabilidade de que eles estejam em cada uma dessas classes. Normalmente, aquilo que você está tentando detectar (por exemplo, se um e-mail pode ser classificado como spam) é representado por 1 e todo o resto é representado por 0. Se a saída do modelo de regressão logística for 0,9, há uma probabilidade de 90% da entrada ser aquilo que você quer detectar (o e-mail ser um spam, neste exemplo).

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 for NULL, o valor na coluna label será definido como 0. Caso contrário, será definido como 1. Esses valores representam os resultados possíveis. Criar um alias denominado label é uma alternativa à configuração da opção input_label_cols= na instrução CREATE 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 FROMbigquery-public-data.google_analytics_sample.ga_sessions_* — indica que você está consultando o conjunto de dados de amostra do Google Analytics. Esse conjunto de dados está no projeto bigquery-public-data. Você está consultando um grupo de tabelas fragmentadas por data. Isso é representado pelo caractere curinga no 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.

Executar a consulta CREATE MODEL

Para executar a consulta CREATE MODEL para criar e treinar seu modelo:

  1. Na IU da Web do BigQuery, clique em Escrever nova consulta. Se essa opção estiver esmaecida, significa que o Editor de consultas já está aberto.

    Botão Escrever consulta

  2. Digite a consulta SQL padrão abaixo na área de texto Editor de consultas.

    #standardSQL
    CREATE 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'
    
  3. Clique em Executar.

    A consulta leva alguns minutos para ser concluída. Após a conclusão da primeira iteração, seu modelo (sample_model) é exibido no painel de navegação da IU da Web do BigQuery. Como a consulta usa uma instrução CREATE MODEL para criar um modelo, não é possível ver os resultados da consulta.

    É possível observar o modelo conforme ele está sendo treinado visualizando a guia Estatísticas do modelo na IU da Web do BigQuery. Assim que a primeira iteração for concluída, a guia será atualizada. As estatísticas continuam sendo atualizadas conforme cada iteração é concluída.

Etapa 3 (opcional): receber estatísticas de treinamento

Para ver os resultados do treinamento de modelo, é possível usar a função ML.TRAINING_INFO ou visualizar as estatísticas na IU da Web do BigQuery. Neste tutorial, você usará a IU da Web do BigQuery.

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.

Para ver as estatísticas de treinamento do modelo que foram geradas quando você executou a consulta CREATE MODEL:

  1. Na seção Recursos da IU da Web do BigQuery, expanda [PROJECT_ID] > bqml_tutorial e clique em sample_model.

  2. Clique na guia Estatísticas do modelo. Os resultados terão o seguinte formato:

    Saída de ML.TRAINING_INFO

    A coluna Perda de dados de treinamento representa a métrica de perda calculada após a iteração especificada no conjunto de dados de treinamento. Você executou uma regressão logística. Portanto, essa coluna é a Log Perda. A coluna Perda de dados de avaliação é a mesma métrica de perda calculada no conjunto de dados de validação, ou seja, dados do treinamento mantidos para validar o modelo.

    O BigQuery ML divide automaticamente seus dados de entrada em dois conjuntos, um de treinamento e um de validação, com o objetivo de evitar o sobreajuste do modelo. Isso é necessário para que o algoritmo de treinamento não se adapte demais aos dados conhecidos, evitando que ele generalize esses dados para exemplos novos e ainda inéditos.

    Os valores das colunas Perda de dados de treinamento e Perda de dados de avaliação representam valores médios de perda, calculados a partir de todos os exemplos nos seus respectivos conjuntos.

    Para ver mais detalhes sobre a função ML.TRAINING_INFO, consulte a referência de sintaxe do BigQuery ML.

Etapa 4: avaliar o modelo

Depois de criar o modelo, utilize a função ML.EVALUATE para avaliar o desempenho do classificador. A função ML.EVALUATE avalia os valores previstos em relação aos dados reais. Também é possível usar a função ML.ROC_CURVE para métricas específicas de regressão logística.

Neste tutorial, você está usando um modelo de classificação binária que detecta transações. As duas classes são os valores na coluna label: 0 (sem transações) e 1 (transação realizada).

A consulta usada para avaliar o modelo é a seguinte:

#standardSQL
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'))

Detalhes da consulta

A principal instrução SELECT recupera as colunas do modelo.

A cláusula FROM usa a função ML.EVALUATE no modelo: bqml_tutorial.sample_model.

A cláusula FROM e a instrução SELECT aninhada desta consulta são as mesmas da 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.

Executar a consulta ML.EVALUATE

Para executar a consulta ML.EVALUATE que avalia o modelo:

  1. Na IU da Web do BigQuery, clique em Escrever nova consulta.

  2. Digite a consulta SQL padrão abaixo na área de texto Editor de consultas.

    #standardSQL
    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'))
    
  3. Clique em Executar.

  4. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão o seguinte formato:

    +--------------------+---------------------+--------------------+--------------------+---------------------+----------+
    |     precision      |       recall        |      accuracy      |      f1_score      |      log_loss       | roc_auc  |
    +--------------------+---------------------+--------------------+--------------------+---------------------+----------+
    | 0.4451901565995526 | 0.08879964301651048 | 0.9716829479411401 | 0.1480654761904762 | 0.07921781778780206 | 0.970706 |
    +--------------------+---------------------+--------------------+--------------------+---------------------+----------+
    

    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: 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: precisão é a fração das previsões corretas de um modelo de classificação.
    • f1_score: 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: área sob a curva de característica de operação do receptor(ROC, na sigla em inglês).. É 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.

Etapa 5: usar o modelo para prever resultados

Agora que você avaliou seu modelo, a próxima etapa é usá-lo para prever um resultado. Use seu modelo para prever o número de transações feitas pelos visitantes do site em cada país.

A consulta usada para prever o resultado é a seguinte:

#standardSQL
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

Detalhes da consulta

A principal instrução SELECT recupera a coluna country e soma a coluna predicted_label. Essa coluna é 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 mais provável, que, nesse caso, é 0 ou 1.

A função ML.PREDICT é usada para prever resultados usando o modelo: bqml_tutorial.sample_model.

A cláusula FROM e a instrução SELECT aninhada desta consulta são as mesmas da 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.

Executar a consulta ML.PREDICT

Veja como executar a consulta que usa o modelo para prever um resultado:

  1. Na IU da Web do BigQuery, clique em Escrever nova consulta.

  2. Digite a consulta SQL padrão abaixo na área de texto Editor de consultas.

    #standardSQL
    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
    
  3. Clique em Executar.

  4. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão o seguinte formato:

    +----------------+---------------------------+
    |    country     | total_predicted_purchases |
    +----------------+---------------------------+
    | United States  |                       209 |
    | Taiwan         |                         6 |
    | Canada         |                         4 |
    | Turkey         |                         2 |
    | India          |                         2 |
    | Japan          |                         2 |
    | Indonesia      |                         1 |
    | United Kingdom |                         1 |
    | Guyana         |                         1 |
    +----------------+---------------------------+
    

Prever compras por usuário (opcional)

No próximo exemplo, você tentará prever o número de transações que os visitantes do site farão. Essa consulta é idêntica à anterior, exceto pela cláusula GROUP BY. Aqui, a cláusula GROUP BYGROUP BY fullVisitorId — é usada para agrupar os resultados por código de visitante.

Para executar a consulta, faça o seguinte:

  1. Na IU da Web do BigQuery, clique em Escrever nova consulta.

  2. Digite a consulta SQL padrão abaixo na área de texto Editor de consultas.

    #standardSQL
    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
    
  3. Clique em Executar.

  4. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão o seguinte formato:

    +---------------------+---------------------------+
    |    fullVisitorId    | total_predicted_purchases |
    +---------------------+---------------------------+
    | 9417857471295131045 |                         4 |
    | 2158257269735455737 |                         3 |
    | 5073919761051630191 |                         3 |
    | 7104098063250586249 |                         2 |
    | 4668039979320382648 |                         2 |
    | 1280993661204347450 |                         2 |
    | 7701613595320832147 |                         2 |
    | 0376394056092189113 |                         2 |
    | 9097465012770697796 |                         2 |
    | 4419259211147428491 |                         2 |
    +---------------------+---------------------------+
    

Limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform, faça uma das coisas a seguir:

  • Exclua o projeto que você criou.
  • Mantenha o projeto e exclua o conjunto de dados.

Como excluir seu conjunto de dados

A exclusão do seu projeto removerá todos os conjuntos de dados e tabelas no projeto. Caso prefira reutilizá-lo, exclua o conjunto de dados criado neste tutorial:

  1. Se necessário, abra a IU da Web do BigQuery.

    Acesse a IU da Web do BigQuery

  2. No painel de navegação, selecione o conjunto de dados bqml_tutorial criado.

  3. Clique em Excluir conjunto de dados no lado direito da janela. Essa ação exclui o conjunto, a tabela e todos os dados.

    Excluir conjunto de dados

  4. Na caixa de diálogo Excluir conjunto de dados, confirme o comando de exclusão digitando o nome do seu conjunto de dados (bqml_tutorial) e clique em Excluir.

Como excluir o projeto

Para excluir o projeto, faça o seguinte:

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar a página Gerenciar recursos

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir