Este tutorial ensina como criar um modelo de fatoração de matrizes e treiná-lo com os dados de sessão de usuários 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, 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
- 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 doGoogle Cloud .
Um algoritmo de aprendizado de máquina cria um modelo com muitas iterações do modelo 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.