Usar o BigQuery ML para fazer recomendações a partir dos dados do Google Analytics


Este tutorial tem a finalidade de apresentar aos analistas de dados o modelo de fatoração de matrizes do BigQuery ML. Com o BigQuery ML, usuários podem criar e executar modelos de machine learning no BigQuery usando consultas SQL. O objetivo é democratizar o uso do machine learning ao permitir que os usuários de SQL criem modelos com as ferramentas que já utilizam, além de acelerar o desenvolvimento ao eliminar a necessidade de movimentar dados.

Neste tutorial, você aprenderá como criar um modelo de fatoração de matrizes a partir de feedback implícito, usando a tabela de amostra GA360_test.ga_sessions_sample, para fazer recomendações com base em IDs de visitante e de conteúdo.

A tabela ga_sessions_sample contém informações sobre uma parte dos dados de sessão coletados pelo Google Analytics 360 e enviados ao BigQuery.

Objetivos

Neste tutorial, você usará o seguinte:

  • o BigQuery ML para criar um modelo de recomendações implícitas usando a instrução CREATE MODEL;
  • a função ML.EVALUATE para avaliar os modelos de ML;
  • a função ML.WEIGHTS para inspecionar os pesos de fatores latentes gerados durante o treinamento;
  • a função ML.RECOMMEND para produzir recomendações para um usuário.

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.

Para mais informações sobre os custos do BigQuery ML, consulte os preços do BigQuery ML.

Antes de começar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse

    Enable the BigQuery API.

    Enable the API

Etapa 1: criar conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:

  1. No console do Google Cloud, acesse a página do BigQuery.

    Acesse a página do BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Conferir ações > 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.

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

      Página Criar conjunto de dados.

Etapa 2: carregar os dados do Analytics 360 no BigQuery

Na maioria das vezes, as classificações nos dados não refletirão valores definidos explicitamente pelo usuário. Nesse tipo de cenário, podemos idealizar um substituto para esses valores como uma classificação implícita e usar um algoritmo diferente para calcular as recomendações. Neste exemplo, será usada uma amostra do conjunto de dados do Analytics 360 com base neste artigo (em inglês).

Abaixo, há uma consulta que pode ser executada para criar um conjunto de dados com classificações implícitas coletadas durante a sessão em que um visitante permaneceu em uma das páginas de cloud-training-demos.GA360_test.ga_sessions_sample. O objetivo desta consulta é criar um conjunto de dados com três colunas que podemos mapear para outras três colunas: de usuário, de item e de classificação.

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    CREATE OR REPLACE TABLE
     bqml_tutorial.analytics_session_data AS
    WITH
     visitor_page_content AS (
     SELECT
       fullVisitorID,
       (
       SELECT
         MAX(
         IF
           (index=10,
             value,
             NULL))
       FROM
         UNNEST(hits.customDimensions)) AS latestContentId,
       (LEAD(hits.time, 1)
         OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time)
                 AS session_duration
     FROM
       `cloud-training-demos.GA360_test.ga_sessions_sample`,
       UNNEST(hits) AS hits
     WHERE
       # only include hits on pages
       hits.type = "PAGE"
     GROUP BY
       fullVisitorId,
       latestContentId,
       hits.time )
     # aggregate web stats
    SELECT
     fullVisitorID AS visitorId,
     latestContentId AS contentId,
     SUM(session_duration) AS session_duration
    FROM
     visitor_page_content
    WHERE
     latestContentId IS NOT NULL
    GROUP BY
     fullVisitorID,
     latestContentId
    HAVING
     session_duration > 0
    ORDER BY
     latestContentId
  3. (Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha US. Esta etapa é opcional, porque o local de processamento é detectado automaticamente com base no local do conjunto de dados.

    Configurações de consulta.

  4. Clique em Executar.

    Quando a consulta termina de ser executada, (bqml_tutorial.analytics_session_data) , aparece no painel de navegação. Como a consulta usa uma instrução CREATE TABLE para criar uma tabela, não serão exibidos os resultados dela.

  5. A tabela gerada será parecida com esta:

    Resultados da consulta.

    Observe que esse resultado é específico de como os dados foram exportados para o BigQuery. A consulta para extrair seus próprios dados pode ser diferente.

Etapa 3: criar um modelo de recomendações implícitas

Em seguida, crie um modelo de recomendações implícitas usando a tabela do Google Analytics que foi carregada na etapa anterior. A consulta GoogleSQL padrão a seguir é usada para criar o modelo que será utilizado na previsão de uma classificação de confiança para cada par de visitorId e contentId. Uma classificação é criada com a centralização e o escalonamento pela duração mediana da sessão e a filtragem dos registros em que a duração é 3,33 vezes maior que a mediana como outliers.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model`
OPTIONS
  (model_type='matrix_factorization',
   feedback_type='implicit',
   user_col='visitorId',
   item_col='contentId',
   rating_col='rating',
   l2_reg=30,
   num_factors=15) AS
SELECT
  visitorId,
  contentId,
  0.3 * (1 + (session_duration - 57937) / 57937) AS rating
FROM `bqml_tutorial.analytics_session_data`
WHERE 0.3 * (1 + (session_duration - 57937) / 57937) < 1

Detalhes da consulta

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

A cláusula OPTIONS(model_type='matrix_factorization', feedback_type='IMPLICIT', user_col='visitorId', ...) indica que você está criando um modelo de fatoração de matrizes (em inglês). Como o feedback_type='IMPLICIT' está especificado, será treinado um modelo de fatoração de matrizes implícita. Consulte Como criar um modelo de fatoração de matrizes explícita para conferir um exemplo explicado.

A instrução SELECT dessa consulta usa as colunas a seguir para gerar recomendações.

  • visitorId: ID do visitante (INT64)
  • contentId: o ID do conteúdo (INT64).
  • rating: a classificação implícita de 0 a 1 calculada para visitorId e o respectivo contentId centralizado e dimensionado (FLOAT64).

A cláusula FROM (bqml_tutorial.analytics_session_data) indica que a consulta é feita na tabela analytics_session_data do conjunto de dados bqml_tutorial. Esse conjunto de dados estará no seu projeto do BigQuery se você seguir as instruções nas etapas 2 e 8.

Executar a consulta CREATE MODEL

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

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model`
    OPTIONS
     (model_type='matrix_factorization',
      feedback_type='implicit',
      user_col='visitorId',
      item_col='contentId',
      rating_col='rating',
      l2_reg=30,
      num_factors=15) AS
    SELECT
     visitorId,
     contentId,
     0.3 * (1 + (session_duration - 57937) / 57937) AS rating
    FROM `bqml_tutorial.analytics_session_data`
  3. Clique em Executar.

    A consulta leva por volta de 12 minutos para ser concluída. Depois disso, seu modelo (my_implicit_mf_model) aparece no painel de navegação. Como a consulta usa uma instrução CREATE MODEL para criar um modelo, não é possível acessar os resultados da consulta.

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

Para conferir os resultados do treinamento de modelo, use a função ML.TRAINING_INFO ou visualize as estatísticas no console do Google Cloud. Neste tutorial, você usa o console do Google Cloud.

Para criar um modelo, o algoritmo de machine learning examina vários exemplos e tenta encontrar um modelo que minimize a perda (em inglês). Esse processo é chamado de minimização do risco empírico.

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

  1. Na seção Recursos do painel de navegação do Console do Google Cloud, expanda [PROJECT_ID] > bqml_tutorial e clique em my_implicit_mf_model.

  2. Clique na guia Treinamento e depois em Tabela. Os resultados terão o seguinte formato:

    Saída de ML.TRAINING_INFO.

    A coluna Perda de dados de treinamento representa métrica da perda, calculada depois de o modelo ser treinado no conjunto de dados de treinamento. Como você realizou a fatoração de matrizes, essa coluna é o erro quadrático médio. Por padrão, os modelos de fatoração de matrizes não dividem os dados. Portanto, a coluna Perda de dados de avaliação não estará presente, a menos que um conjunto de dados de teste (holdout) seja especificado porque a divisão desses dados pode ter como consequência a perda de todas as classificações de um usuário ou um item. Como resultado, o modelo não terá informações de fatores latentes sobre usuários ou itens ausentes.

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

Etapa 5: avaliar o modelo

Depois de criar o modelo, será necessário avaliar o desempenho do recomendador usando a função ML.EVALUATE. A função ML.EVALUATE avalia as classificações previstas em relação às classificações reais.

A consulta usada para avaliar o modelo é esta:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)

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

Executar a consulta ML.EVALUATE

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

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
  3. (Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha US. Esta etapa é opcional, porque o local de processamento é detectado automaticamente com base no local do conjunto de dados.

    Configurações de consulta.

  4. Clique em Executar.

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

    Saída de ML.EVALUATE.

    Como você realizou a fatoração de matrizes implícita, os resultados incluem as colunas a seguir:

    • mean_average_precision
    • mean_squared_error
    • normalized_discounted_cumulative_gain
    • average_rank

    mean_average_precision, normalized_discounted_cumulative_gain e average_rank são métricas de classificação que são explicadas em Métricas de fatoração de matrizes implícita

Etapa 6: prever classificações e fazer recomendações

Use o modelo para prever classificações e fazer recomendações

Encontrar todas as confianças de classificação de contentId para um conjunto de visitorIds

ML.RECOMMEND não precisa aceitar qualquer argumento além do modelo, mas pode aceitar uma tabela opcional. Se a tabela de entrada tiver apenas uma coluna que corresponda ao nome das colunas de entrada user ou item, todas as classificações de itens previstas para cada user serão exibidas na saída e vice-versa. Se todos users ou items estiverem na tabela de entrada, a saída terá os mesmos resultados de não transmitir qualquer argumento opcional para ML.RECOMMEND.

Confira a seguir um exemplo de consulta para buscar todas as confianças de classificação previstas para cinco visitantes.

#standardSQL
SELECT
  *
FROM
  ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`,
    (
    SELECT
      visitorId
    FROM
      `bqml_tutorial.analytics_session_data`
    LIMIT 5))

Detalhes da consulta

A principal instrução SELECT recupera as colunas visitorId, contentId e predicted_rating_confidence. Essa última coluna é gerada pela função ML.RECOMMEND. Quando você usa a função ML.RECOMMEND, o nome da coluna de saída para modelos de fatoração de matrizes implícita é predicted_rating-column-name_confidence. Nesse tipo de modelo, predicted_rating_confidence é a confiança estimada para o par de user e item. Esse nível de confiança fica aproximadamente entre 0 e 1. Um nível de confiança maior indica que o user prefere mais um item do que outro item com um nível de confiança menor.

A função ML.RECOMMEND é empregada na previsão de classificações usando seu modelo: bqml_tutorial.my_implicit_mf_model.

A instrução SELECT aninhada dessa consulta seleciona apenas a coluna visitorId da tabela original usada para treinamento.

A cláusula LIMIT (LIMIT 5) filtrará de maneira aleatória cinco visitorIds para enviar a ML.RECOMMEND.

Encontrar as classificações de todos os pares de visitorId e contentId

Agora que você avaliou seu modelo, a próxima etapa é usá-lo para conseguir uma confiança de classificação. Use o modelo para prever as confianças de cada combinação de usuário e item na consulta abaixo:

#standardSQL
SELECT
  *
FROM
  ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)

Detalhes da consulta

A principal instrução SELECT recupera as colunas visitorId, contentId e predicted_rating_confidence. Essa última coluna é gerada pela função ML.RECOMMEND. Quando você usa a função ML.RECOMMEND, o nome da coluna de saída para modelos de fatoração de matrizes implícita é predicted_rating-column-name_confidence. Nesse tipo de modelo, predicted_rating_confidence é a confiança estimada para o par de user e item. Esse nível de confiança fica aproximadamente entre 0 e 1. Um nível de confiança maior indica que o user prefere mais um item do que outro item com um nível de confiança menor.

A função ML.RECOMMEND é empregada na previsão de classificações usando seu modelo: bqml_tutorial.my_implicit_mf_model.

Uma maneira de salvar o resultado na tabela é:

#standardSQL
CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content`
OPTIONS() AS
SELECT
  *
FROM
  ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)

Se ocorrer um erro Query Exceeded Resource Limits para ML.RECOMMEND, tente novamente com um nível de faturamento mais alto. Na ferramenta de linha de comando do BigQuery, é possível definir isso usando --maximum_billing_tier.

Gerar recomendações

Na consulta a seguir, use ML.RECOMMEND para gerar os cinco principais contentId recomendados por visitorId.

#standardSQL
SELECT
  visitorId,
  ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence)
    ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec
FROM
  `bqml_tutorial.recommend_content`
GROUP BY
  visitorId

Detalhes da consulta

A instrução SELECT agrupa os resultados da consulta ML.RECOMMEND ao usar GROUP BY visitorId para agregar contentId e predicted_rating_confidence em ordem decrescente, mantendo apenas os cinco principais IDs de conteúdo.

Usando a consulta de recomendações anterior, podemos ordenar por classificação prevista e gerar os principais itens previstos para cada usuário. A consulta a seguir une os item_ids aos movie_ids encontrados na tabela movielens.movie_titles, que foi enviada anteriormente, e gera os cinco principais filmes recomendados por usuário.

Executar a consulta ML.RECOMMEND

Para executar a consulta ML.RECOMMEND que gera os cinco principais IDs de conteúdo recomendados por ID de visitante, faça o seguinte:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content`
    OPTIONS() AS
    SELECT
     *
    FROM
     ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
  3. Clique em Executar.

    Quando a execução da consulta for concluída, (bqml_tutorial.recommend_content) aparecerá no painel de navegação do console do Google Cloud. Como a consulta usa uma instrução CREATE TABLE para criar uma tabela, você não verá os resultados dela.

  4. Escreva uma nova consulta. Insira a consulta do GoogleSQL a seguir na área de texto do Editor de consultas quando a consulta anterior terminar.

    #standardSQL
    SELECT
     visitorId,
     ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence)
       ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec
    FROM
     `bqml_tutorial.recommend_content`
    GROUP BY
     visitorId
  5. (Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha US. Esta etapa é opcional, porque o local de processamento é detectado automaticamente com base no local do conjunto de dados.

    Configurações de consulta.

  6. Clique em Executar.

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

    Saída de ML.RECOMMEND.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

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

Excluir o 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 página do BigQuery no console do Google Cloud.

    Acesse a página do BigQuery

  2. Na navegação, clique no 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.

  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.

Excluir o projeto

Para excluir o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

A seguir