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.EVALUATEfunção. - Gerar recomendações de conteúdo para usuários usando o modelo com a
ML.RECOMMENDfunçã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
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- 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ãoserviceusage.services.enable. Saiba como conceder papéis.
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.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Para executar a inferência, você precisa das seguintes permissões:
bigquery.models.getDatabigquery.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
No Google Cloud console, acesse a página BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em Ver ações > Criar conjunto de dados.
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.
Crie um conjunto de dados chamado
bqml_tutorialcom o local de dados definido comoUS.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
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:
No Google Cloud console, acesse a página BigQuery.
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;
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.
No Google Cloud console, acesse a página BigQuery.
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_implicitaparece no painel Explorer. Como a consulta usa uma instruçãoCREATE MODELpara 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:
No Google Cloud console, acesse a página BigQuery.
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
No painel Explorer, expanda o projeto e clique em Conjuntos de dados.
Clique no conjunto de dados
bqml_tutorial. Também é possível usar o recurso de pesquisa ou filtros para encontrar o conjunto de dados.Clique na guia Modelos.
Clique no modelo
mf_implicite depois na guia Treinamento.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:
No Google Cloud console, acesse a página BigQuery.
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:
No Google Cloud console, acesse a página BigQuery.
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:
No Google Cloud console, acesse a página BigQuery.
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`);
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:
Se necessário, abra a página do BigQuery no Google Cloud console.
Na navegação, clique no conjunto de dados bqml_tutorial criado.
Clique em Excluir conjunto de dados no lado direito da janela. Essa ação exclui o conjunto, a tabela e todos os dados.
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:
- No Google Cloud console, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
- Na caixa de diálogo, digite o ID do projeto e clique em Desligar para excluir o projeto.
A seguir
- Tente criar um modelo de fatoração de matrizes com base em feedback explícito.
- Para uma visão geral do BigQuery ML, consulte Introdução ao BigQuery ML.
- Para saber mais sobre machine learning, consulte o Curso intensivo de machine learning.