Primeiros passos no BigQuery ML para analistas de dados

Neste tutorial, apresentamos o BigQuery ML aos analistas de dados. Com ele, os usuários criam e executam 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 ferramentas atuais deles e agilizem o desenvolvimento, já que não precisam 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 BigQuery ML 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

Este tutorial usa componentes faturáveis do Cloud Platform, incluindo:

  • Google BigQuery
  • BigQuery ML

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

Para mais informações sobre custos do BigQuery ML, consulte a seção Preços do BigQuery ML na página de preços.

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

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado para o projeto.

    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

Público-alvo

Este é um tutorial introdutório destinado a analistas de dados.

Um analista de dados usa o SQL padrão do BigQuery para analisar tendências de dados que informam estratégias e operações comerciais. Isso inclui o uso do BigQuery ML para treinar e avaliar modelos de ML, além de realizar análises preditivas.

Os analistas de dados usam uma série de ferramentas baseadas principalmente na IU, incluindo:

  • a IU da Web do BigQuery no Console do GCP;
  • planilhas;
  • software estatístico, como o RStudio;
  • ferramentas de visualização, como o Cloud Datalab e o Data Studio.

Para ver uma versão deste tutorial para cientistas de dados baseada em Jupyter, acesse Primeiros passos no BigQuery ML para cientistas de dados.

Etapa 1: criar o 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 no Console do GCP.

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

    • No campo 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 multirregião 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 chamado bqml_tutorial.sample_model.

A cláusula OPTIONS(model_type='logistic_reg') indica que está sendo criado 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% 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.

  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. 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. Neste tutorial, você usa a IU da Web do BigQuery.

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 IU da Web do BigQuery, vá até a seção Recursos, 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 da 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 para 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. 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. 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 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: "Entre todos os possíveis rótulos positivos, quantos o modelo identificou corretamente?"
    • accuracy: é a fração de previsõ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: a função de perda usada em uma regressão logística. É a medida de até que ponto as previsões do modelo são dos rótulos corretos.
    • roc_auc: a área sob a curva ROC. É a probabilidade de um classificador ter mais certeza de que um exemplo positivo escolhido aleatoriamente é de fato positivo, em relação a um exemplo negativo também escolhido aleatoriamente de ser 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 previsõ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. 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 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. 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 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 cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform:

  • exclua o projeto que você criou; ou
  • 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. Caso necessário, abra a IU da Web.

    Acesse a IU da Web

  2. Na 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 conjunto (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 um e clique em Excluir projeto.
  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…

Precisa de ajuda? Acesse nossa página de suporte.