Neste tutorial, você vai aprender a criar um
modelo de fatoração de matrizes
e treiná-lo com os dados de sessão do usuário do Google Analytics 360 na
tabela pública GA360_test.ga_sessions_sample. 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 alternados ponderados quando você usa feedback implícito como dados de treinamento.
Objetivos
Este tutorial vai orientar você nas tarefas a seguir:
- Como criar um modelo de fatoração de matrizes usando a instrução
CREATE MODEL. - Avalie o modelo usando a
função
ML.EVALUATE. - Gerar recomendações de conteúdo para usuários usando o modelo com a
função
ML.RECOMMEND.
Custos
Neste tutorial, usamos 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
-
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, acesse
Ative a API BigQuery, se ainda não estiver ativada.
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). 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 no BigQuery, consulte Introdução ao IAM.
Criar um conjunto de dados
Para criar um conjunto de dados do BigQuery, selecione uma das seguintes opções:
Console
No console do Google Cloud , 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 Explorer, expanda o projeto e clique em Conjuntos de dados.
Na página Conjuntos de dados, clique em Criar conjunto de dados.
No painel Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial.Em Local dos dados, selecione EUA.
Não altere as outras configurações padrão.
Clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, use o
comando bq mk --dataset.
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 método datasets.insert 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, em seguida, 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 usada 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 console do Google Cloud , acesse a página BigQuery.
Criar a tabela de dados de treinamento. No editor de consultas, cole a consulta abaixo 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;
Acessar um subconjunto dos dados de treinamento. No editor de consultas, cole a consulta abaixo 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 com os dados na tabela analytics_session_data. O modelo é treinado para prever uma classificação de confiança para cada par de visitorId e 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 é 3,33 vezes maior que a mediana são filtrados
como outliers.
A instrução CREATE MODEL a seguir usa essas colunas para gerar
recomendações:
visitorId: o ID do visitante.contentId: o ID do conteúdo.rating: a classificação implícita de 0 a 1 calculada para cada par de visitante-conteúdo, centralizada e dimensionada.
No console do Google Cloud , 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, você não verá os resultados dela.
Ver estatísticas de treinamento
Se quiser, confira as estatísticas de treinamento do modelo no console doGoogle Cloud .
Um algoritmo de machine learning cria um modelo gerando várias iterações dele com parâmetros diferentes e, em seguida, selecionando a versão que minimiza a perda. Esse processo é chamado de minimização do risco empírico. As estatísticas de treinamento do modelo permitem ver a perda associada a cada iteração do modelo.
Siga estas etapas para conferir as estatísticas de treinamento do modelo:
No console do Google Cloud , 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 os filtros para encontrar o conjunto de dados.Clique na guia Modelos.
Clique no modelo
mf_implicite, em seguida, na guia Treinamento.Na seção Visualizar como, clique em Tabela. Os resultados devem 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 depois que o modelo é treinado. Como esse é um modelo de fatoração de matrizes, essa coluna mostra o erro quadrático médio.
Avaliar o modelo
Avalie o desempenho 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 console do Google Cloud , 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 de visitante-conteúdo
Use o 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 console do Google Cloud , 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 Content IDs recomendados para cada ID de visitante.
Siga estas etapas para gerar recomendações:
No console do Google Cloud , acesse a página BigQuery.
Gravar 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 console doGoogle Cloud .
Na navegação, clique no conjunto de dados bqml_tutorial criado.
Clique em Excluir conjunto de dados no lado direito da janela. Esta ação exclui o conjunto de dados, 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 console Google Cloud , 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 Encerrar para excluí-lo.
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.