Este tutorial ensina como 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 GA360_test.ga_sessions_sample
pública. Em seguida, você usa 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 vai orientar você nas seguintes tarefas:
- Criação de 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, 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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure 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.
-
Make sure 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
Enable the BigQuery API.
Permissões exigidas
- Para criar o conjunto de dados, é preciso ter a permissão de IAM
bigquery.datasets.create
. Para criar o recurso de conexão, você precisa das seguintes permissões:
bigquery.connections.create
bigquery.connections.get
Para criar o modelo, você precisa das seguintes permissões:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
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 no BigQuery, consulte Introdução ao IAM.
Criar um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:
No console do Google Cloud, acesse a página do BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em
Conferir 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 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.
Preparar os dados de amostra
Transforme os dados da tabela GA360_test.ga_sessions_sample
em uma estrutura melhor para treinamento de modelo e grave esses dados em uma tabela do BigQuery. A consulta a seguir calcula a duração da sessão para cada usuário e 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 Console do Google Cloud, acesse a página BigQuery.
Crie a tabela de dados de treinamento. No Editor de consultas, cole a consulta a seguir 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 consulta a seguir 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 centralização e escalonamento pela duração mediana da sessão. Os registros em que a
duração da sessão é mais de 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 e conteúdo, centralizada e dimensionada.
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir 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çãoCREATE MODEL
para criar um modelo, não é possível ver os resultados da consulta.
Ver estatísticas de treinamento
Também é possível conferir as estatísticas de treinamento do modelo no console do Google Cloud.
Um algoritmo de aprendizado de máquina cria um modelo com muitas iterações usando parâmetros diferentes e, em seguida, seleciona a versão do modelo que minimiza a perda. Esse processo é chamado de minimização do risco empírico. As estatísticas de treinamento do modelo permitem que você veja 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 Explorer, expanda o projeto, o conjunto de dados
bqml_tutorial
e a pasta Models.Clique no modelo
mf_implicit
e 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 este é 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 a seguir 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 Modelos de fatoração de matrizes.
Receber as classificações previstas para um subconjunto de pares de visitante e 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 Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir 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 Console do Google Cloud, acesse a página BigQuery.
Grave as classificações previstas em uma tabela. No Editor de consultas, cole a consulta a seguir 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 a seguir 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 do Google Cloud.
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Tente criar um modelo de fatoração de matrizes com base em feedback explícito.
- Para uma visão geral sobre ML do BigQuery, consulte Introdução ao ML do BigQuery.
- Para saber mais sobre machine learning, consulte o Curso intensivo de machine learning.