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 aprendizado de máquina, 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 Google Analytics, veja o esquema do BigQuery Export na Central de Ajuda do Google Analytics.

Objetivos

Neste tutorial, você usará:

  • o ML do BigQuery para criar um modelo de regressão logística 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 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. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. O BigQuery é ativado automaticamente nos novos projetos. Para ativar o BigQuery em um projeto existente, acesse Ativar BigQuery API.

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

    Acessar a interface 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:

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

      Criar página de 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 denominado bqml_tutorial.sample_model.

A cláusula OPTIONS(model_type='logistic_reg') indica a criação de um modelo de regressão logística (em inglês). 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% de a 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: 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. A criação de um alias denominado label é uma alternativa à configuração da opção input_label_cols= na instrução CREATE MODEL.
  • device.operatingSystem: sistema operacional do dispositivo do visitante.
  • device.isMobile: indica se o visitante está usando um dispositivo móvel.
  • geoNetwork.country: país de origem das sessões, com base no endereço IP.
  • totals.pageviews: número total de visualizações de página durante a sessão.

A cláusula FROM - bigquery-public-data.google_analytics_sample.ga_sessions_* - indica que você está consultando o conjunto de dados de amostra do Google Analytics. Este 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, faça o seguinte:

  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. Insira a seguinte consulta SQL padrão na área de texto do 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. Depois que a primeira iteração for concluída, seu modelo (sample_model) será 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, você não verá os resultados dela.

    Observe o modelo enquanto ele está sendo treinado, visualizando a guia Estatísticas do modelo, na IU da Web do BigQuery. A guia será atualizada assim que a primeira iteração for concluída. 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, use a função ML.TRAINING_INFO ou visualize as estatísticas na IU da Web do BigQuery, que é utilizada neste tutorial.

O aprendizado de máquina 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 de modelo geradas quando você executou a consulta CREATE MODEL, faça o seguinte:

  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 a aparência abaixo:

    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 perda do registro. 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 mais detalhes sobre a função ML.TRAINING_INFO, consulte a referência de sintaxe do BigQuery ML.

Etapa 4: avaliar o modelo

Após criar o modelo, avalie o desempenho do classificador usando a função ML.EVALUATE. 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 de 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 dessa 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, faça o seguinte:

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

  2. Insira a seguinte consulta SQL padrão na área de texto do 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 a aparência abaixo:

    +--------------------+---------------------+--------------------+--------------------+---------------------+----------+
    |     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: uma 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: "Dentre todos os possíveis rótulos positivos, quantos foram identificados corretamente pelo modelo?"
    • accuracy: fração de predições corretas de um modelo de classificação.
    • f1_score: uma 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: 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 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".

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 do country e soma a coluna predicted_label. Esta coluna é gerada pela função ML.PREDICT. Quando você utiliza a função ML.PREDICT, o nome da coluna de saída para o modelo é predicted_<label_column_name>. Em modelos de regressão linear, predicted_label é o valor estimado para o label. Para modelos de regressão logística, predicted_label é o rótulo mais provável, que, neste 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 dessa 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 ORDER BY e GROUP 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. Insira a seguinte consulta SQL padrão na área de texto do 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 a aparência abaixo:

    +----------------+---------------------------+
    |    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 à consulta anterior, exceto pela cláusula GROUP BY. Aqui, a cláusula GROUP BY - GROUP 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. Insira a seguinte consulta SQL padrão na área de texto do 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 a aparência abaixo:

    +---------------------+---------------------------+
    |    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 interface web do BigQuery.

    Acessar 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 a exclusão digitando o nome do conjunto de dados (bqml_tutorial) e clicando em Excluir.

Como excluir o projeto

Para excluir o projeto:

  1. No Console do GCP, acesse a página Projetos.

    Acessar a página Projetos

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

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…