Criar recomendações com base no feedback implícito usando um modelo de fatoração de matrizes

Este tutorial ensina como criar um modelo de fatoração de matrizes e treiná-lo nos dados de sessão do usuário do Google Analytics 360 na tabela pública GA360_test.ga_sessions_sample table. Em seguida, use o modelo de fatoração de matrizes para gerar recomendações de conteúdo para os usuários do site.

O uso de informações indiretas de preferência do cliente, como a duração da sessão do usuário, para treinar o modelo é chamado de treinamento com feedback implícito. Os modelos de fatoração de matrizes são treinados usando o algoritmo de mínimos quadrados ponderados alternados (em inglês) quando você usa feedback implícito como dados de treinamento.

Objetivos

Este tutorial orienta você na conclusão das seguintes tarefas:

  • Criar um modelo de fatoração de matrizes usando a instrução CREATE MODEL.
  • Avaliar o modelo usando a ML.EVALUATE função.
  • Gerar recomendações de conteúdo para usuários usando o modelo com a ML.RECOMMEND função.

Custos

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

  • 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. Faça login na sua Google Cloud conta do. Se você não conhece o Google Cloud, crie uma conta para avaliar a performance dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify 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, clique no botão abaixo.

    Ative a API BigQuery.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    Ativar a API

Permissões exigidas

  • Para criar o conjunto de dados, é preciso ter a permissão de IAM bigquery.datasets.create.

  • Para criar o modelo, você precisa das seguintes permissões:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Para executar a inferência, você precisa das seguintes permissões:

    • bigquery.models.getData
    • bigquery.jobs.create

Para mais informações sobre os papéis e as permissões do IAM em BigQuery, consulte Introdução ao IAM.

crie um conjunto de dados

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

Console

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

    Acessar a página do BigQuery

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

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

    • Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.

bq

Para criar um novo conjunto de dados, use o bq mk --dataset comando.

  1. Crie um conjunto de dados chamado bqml_tutorial com o local de dados definido como US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Confirme se o conjunto de dados foi criado:

    bq ls

API

Chame o datasets.insert método com um recurso de conjunto de dados definido.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Preparar os dados de amostra

Transforme os dados da tabela GA360_test.ga_sessions_sample em uma estrutura melhor para o treinamento de modelo e grave esses dados em uma tabela do BigQuery. A consulta a seguir calcula a duração da sessão de cada usuário para cada conteúdo, que pode ser usado como feedback implícito para inferir a preferência do usuário por esse conteúdo.

Siga estas etapas para criar a tabela de dados de treinamento:

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

    Acessar o BigQuery

  2. Crie a tabela de dados de treinamento. No editor de consultas, cole a seguinte consulta e clique em Executar:

    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. Confira um subconjunto dos dados de treinamento. No editor de consultas, cole a seguinte consulta e clique em Executar:

    SELECT * FROM `bqml_tutorial.analytics_session_data` LIMIT 5;

    A resposta deve ficar assim:

    +---------------------+-----------+------------------+
    | visitorId           | contentId | session_duration |
    +---------------------+-----------+------------------+
    | 7337153711992174438 | 100074831 | 44652            |
    +---------------------+-----------+------------------+
    | 5190801220865459604 | 100170790 | 121420           |
    +---------------------+-----------+------------------+
    | 2293633612703952721 | 100510126 | 47744            |
    +---------------------+-----------+------------------+
    | 5874973374932455844 | 100510126 | 32109            |
    +---------------------+-----------+------------------+
    | 1173698801255170595 | 100676857 | 10512            |
    +---------------------+-----------+------------------+
    

Criar o modelo

Crie um modelo de fatoração de matrizes e treine-o nos dados da tabela analytics_session_data. O modelo é treinado para prever uma classificação de confiança para cada par visitorId-contentId. A classificação de confiança é criada com a centralização e o escalonamento pela duração mediana da sessão. Os registros em que a duração da sessão é mais de 3,33 vezes a mediana são filtrados como outliers.

A instrução CREATE MODEL a seguir usa essas colunas para gerar recomendações:

  • visitorId: ID do visitante.
  • contentId: ID do conteúdo.
  • rating: a classificação implícita de 0 a 1 calculada para cada par visitante-conteúdo, centralizada e dimensionada.
  1. No Google Cloud console, acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    CREATE OR REPLACE MODEL `bqml_tutorial.mf_implicit`
      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;

    A consulta leva cerca de 10 minutos para ser concluída. Depois disso, o modelo mf_implicit aparece no painel Explorer. Como a consulta usa uma instrução CREATE MODEL para criar um modelo, não é necessário ver os resultados da consulta.

Ver estatísticas de treinamento

Opcionalmente, você pode conferir as estatísticas de treinamento do modelo no Google Cloud console.

Um algoritmo de machine learning cria um modelo criando muitas iterações de o modelo usando parâmetros diferentes e, em seguida, selecionando a versão de o modelo que minimiza perda. Esse processo é chamado de minimização do risco empírico. As estatísticas de treinamento do modelo permitem que você confira a perda associada a cada iteração do modelo.

Siga estas etapas para conferir as estatísticas de treinamento do modelo:

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

    Acessar o BigQuery

  2. No painel à esquerda, clique em Explorer:

    Botão destacado para o painel &quot;Explorer&quot;.

    Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.

  3. No painel Explorer, expanda o projeto e clique em Conjuntos de dados.

  4. Clique no conjunto de dados bqml_tutorial. Também é possível usar o recurso de pesquisa ou filtros para encontrar o conjunto de dados.

  5. Clique na guia Modelos.

  6. Clique no modelo mf_implicit e depois na guia Treinamento.

  7. Na seção Visualizar como, clique em Tabela. A resposta deve ficar assim:

    +-----------+--------------------+--------------------+
    | Iteration | Training Data Loss | Duration (seconds) |
    +-----------+--------------------+--------------------+
    |  5        | 0.0027             | 47.27              |
    +-----------+--------------------+--------------------+
    |  4        | 0.0028             | 39.60              |
    +-----------+--------------------+--------------------+
    |  3        | 0.0032             | 55.57              |
    +-----------+--------------------+--------------------+
    |  ...      | ...                | ...                |
    +-----------+--------------------+--------------------+
    

    A coluna Perda de dados de treinamento representa a métrica de perda calculada após o treinamento do modelo. Como esse é um modelo de fatoração de matrizes, essa coluna mostra o erro quadrático médio.

Avaliar o modelo

Avalie a performance do modelo usando a função ML.EVALUATE. A função ML.EVALUATE avalia as classificações de conteúdo previstas retornadas pelo modelo em relação às métricas de avaliação calculadas durante o treinamento.

Siga estas etapas para avaliar o modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.mf_implicit`);

    A resposta deve ficar assim:

    +------------------------+-----------------------+---------------------------------------+---------------------+
    | mean_average_precision |  mean_squared_error   | normalized_discounted_cumulative_gain |    average_rank     |
    +------------------------+-----------------------+---------------------------------------+---------------------+
    |     0.4434341257478137 | 0.0013381759837648962 |                    0.9433280547112802 | 0.24031636088594222 |
    +------------------------+-----------------------+---------------------------------------+---------------------+
    

    Para mais informações sobre a saída da função ML.EVALUATE, consulte Saída.

Receber as classificações previstas para um subconjunto de pares visitante-conteúdo

Use ML.RECOMMEND para receber a classificação prevista de cada conteúdo para cinco visitantes do site.

Siga estas etapas para receber as classificações previstas:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.RECOMMEND(
        MODEL `bqml_tutorial.mf_implicit`,
        (
          SELECT
            visitorId
          FROM
            `bqml_tutorial.analytics_session_data`
          LIMIT 5
        ));

    A resposta deve ficar assim:

    +-------------------------------+---------------------+-----------+
    | predicted_rating_confidence   | visitorId           | contentId |
    +-------------------------------+---------------------+-----------+
    | 0.0033608418060270262         | 7337153711992174438 | 277237933 |
    +-------------------------------+---------------------+-----------+
    | 0.003602395397293956          | 7337153711992174438 | 158246147 |
    +-------------------------------+---------------------+--  -------+
    | 0.0053197670652785356         | 7337153711992174438 | 299389988 |
    +-------------------------------+---------------------+-----------+
    | ...                           | ...                 | ...       |
    +-------------------------------+---------------------+-----------+
    

Gerar recomendações

Use as classificações previstas para gerar os cinco principais IDs de conteúdo recomendados para cada ID de visitante.

Siga estas etapas para gerar recomendações:

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

    Acessar o BigQuery

  2. Grave as classificações previstas em uma tabela. No editor de consultas, cole a consulta abaixo e clique em Executar:

    CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content`
    AS
    SELECT
      *
    FROM
      ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
  3. Selecione os cinco principais resultados por visitante. No editor de consultas, cole a consulta abaixo e clique em Executar:

    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;

    A resposta deve ficar assim:

    +---------------------+-----------------+---------------------------------+
    | visitorId           | rec:contentId   | rec:predicted_rating_confidence |
    +---------------------+-----------------+-------------------------  ------+
    | 867526255058981688  | 299804319       | 0.88170525357178664             |
    |                     | 299935287       | 0.54699439944935124             |
    |                     | 299410466       | 0.53424780863188659             |
    |                     | 299826767       | 0.46949603950374219             |
    |                     | 299809748       | 0.3379991197434149              |
    +---------------------+-----------------+---------------------------------+
    | 2434264018925667659 | 299824032       | 1.3903516407308065              |
    |                     | 299410466       | 0.9921995618196483              |
    |                     | 299903877       | 0.92333625294129218             |
    |                     | 299816215       | 0.91856701667757279             |
    |                     | 299852437       | 0.86973661454890561             |
    +---------------------+-----------------+---------------------------------+
    | ...                 | ...             | ...                             |
    +---------------------+-----------------+---------------------------------+
    

Limpar

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 Google Cloud console.

    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). Em seguida, clique em Excluir.

Excluir o projeto

Para excluir o projeto:

  1. No Google Cloud console, acesse a página Gerenciar recursos.

    Acessar "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 Desligar para excluir o projeto.

A seguir