Este tutorial ensina 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 GA360_test.ga_sessions_sample
pública. Em seguida, use o modelo de fatoração de matrizes para gerar recomendações de conteúdo
para os usuários do site.
Usar 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 quando você usa o feedback implícito como dados de treinamento.
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar seu modelo de ML.
Console
No console do Google Cloud , 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 EUA (várias regiões nos Estados Unidos).
Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, utilize o
comando bq mk
com a sinalização --location
. Para obter uma lista completa de parâmetros, consulte a
referência
comando bq mk --dataset
.
Crie um conjunto de dados chamado
bqml_tutorial
com o local dos dados definido comoUS
e uma descrição deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Em vez de usar a flag
--dataset
, o comando usa o atalho-d
. Se você omitir-d
e--dataset
, o comando vai criar um conjunto de dados por padrão.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" } }
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
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 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.
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;
Veja 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 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 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 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 visitante-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 dela.
Ver estatísticas de treinamento
Se quiser, confira as estatísticas de treinamento do modelo no console Google Cloud .
Para criar um modelo, um algoritmo de machine learning cria várias iterações dele usando parâmetros diferentes e seleciona 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 que você veja a perda associada a cada iteração.
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
. Você também pode usar o recurso de pesquisa ou filtros para encontrar o conjunto de dados.Clique na guia Modelos.
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 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 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 Saída.
Receber as classificações previstas para um subconjunto de pares 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 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 | +---------------------+-----------------+---------------------------------+ | ... | ... | ... | +---------------------+-----------------+---------------------------------+