Este tutorial tem a finalidade de apresentar aos analistas de dados o modelo de fatoração de matrizes do BigQuery ML. Com o BigQuery ML, usuários podem criar e executar modelos de machine learning no BigQuery usando consultas SQL. O objetivo é democratizar o uso do machine learning ao permitir que os usuários de SQL criem modelos com as ferramentas que já utilizam, além de acelerar o desenvolvimento ao eliminar a necessidade de movimentar dados.
Neste tutorial, você aprenderá como criar um modelo de fatoração de matrizes a partir de feedback implícito, usando a tabela de amostra GA360_test.ga_sessions_sample
, para fazer recomendações com base em IDs de visitante e de conteúdo.
A tabela ga_sessions_sample
contém informações sobre uma parte dos dados de sessão coletados pelo Google Analytics 360 e enviados ao BigQuery.
Objetivos
Neste tutorial, você usará o seguinte:
- o BigQuery ML para criar um modelo de recomendações implícitas usando
a instrução
CREATE MODEL
; - a função
ML.EVALUATE
para avaliar os modelos de ML; - a função
ML.WEIGHTS
para inspecionar os pesos de fatores latentes gerados durante o treinamento; - a função
ML.RECOMMEND
para produzir recomendações para um usuário.
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.
Etapa 1: criar 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.
Etapa 2: carregar os dados do Analytics 360 no BigQuery
Na maioria das vezes, as classificações nos dados não refletirão valores definidos explicitamente pelo usuário. Nesse tipo de cenário, podemos idealizar um substituto para esses valores como uma classificação implícita e usar um algoritmo diferente para calcular as recomendações. Neste exemplo, será usada uma amostra do conjunto de dados do Analytics 360 com base neste artigo (em inglês).
Abaixo, há uma consulta que pode ser executada para criar um conjunto de dados com classificações implícitas coletadas durante a sessão em que um visitante permaneceu em uma das páginas de cloud-training-demos.GA360_test.ga_sessions_sample
. O objetivo desta consulta é criar um conjunto de dados com três colunas que podemos mapear para outras três colunas: de usuário, de item e de classificação.
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL 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
(Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha
US
. Esta etapa é opcional, porque o local de processamento é detectado automaticamente com base no local do conjunto de dados.Clique em Executar.
Quando a consulta termina de ser executada, (
bqml_tutorial.analytics_session_data
) , aparece no painel de navegação. Como a consulta usa uma instruçãoCREATE TABLE
para criar uma tabela, não serão exibidos os resultados dela.A tabela gerada será parecida com esta:
Observe que esse resultado é específico de como os dados foram exportados para o BigQuery. A consulta para extrair seus próprios dados pode ser diferente.
Etapa 3: criar um modelo de recomendações implícitas
Em seguida, crie um modelo de recomendações implícitas usando a tabela do Google Analytics que foi carregada na etapa anterior. A consulta GoogleSQL padrão a seguir é usada para criar o modelo que será utilizado na previsão de uma classificação de confiança
para cada par de visitorId
e contentId
. Uma classificação é criada com a centralização e o escalonamento pela duração mediana da sessão e a filtragem dos registros em que a duração é 3,33 vezes maior que a mediana como outliers.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` 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
Detalhes da consulta
A cláusula CREATE MODEL
é usada para criar e treinar o modelo chamado bqml_tutorial.my_implicit_mf_model
.
A cláusula OPTIONS(model_type='matrix_factorization', feedback_type='IMPLICIT',
user_col='visitorId', ...)
indica que você está criando um modelo de fatoração de matrizes (em inglês). Como o feedback_type='IMPLICIT'
está especificado, será treinado um modelo de fatoração de matrizes implícita.
Consulte Como criar um modelo de fatoração de matrizes explícita para conferir um exemplo explicado.
A instrução SELECT
dessa consulta usa as colunas a seguir para gerar recomendações.
visitorId
: ID do visitante (INT64)contentId
: o ID do conteúdo (INT64).rating
: a classificação implícita de 0 a 1 calculada paravisitorId
e o respectivocontentId
centralizado e dimensionado (FLOAT64).
A cláusula FROM
(bqml_tutorial.analytics_session_data
) indica que a consulta é feita na tabela analytics_session_data
do conjunto de dados bqml_tutorial
. Esse conjunto de dados estará no seu projeto do BigQuery se você seguir as instruções nas etapas 2 e 8.
Executar a consulta CREATE MODEL
Para executar a consulta CREATE MODEL
para criar e treinar seu modelo:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` 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`
Clique em Executar.
A consulta leva por volta de 12 minutos para ser concluída. Depois disso, seu modelo (
my_implicit_mf_model
) aparece no painel de navegação. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, não é possível acessar os resultados da consulta.
Etapa 4 (opcional): receber estatísticas de treinamento
Para conferir os resultados do treinamento de modelo, use a função
ML.TRAINING_INFO
ou visualize as estatísticas no console do Google Cloud. Neste
tutorial, você usa o console do Google Cloud.
Para criar um modelo, o algoritmo de machine learning examina vários exemplos e tenta encontrar um modelo que minimize a perda (em inglês). Esse processo é chamado de minimização do risco empírico.
Para conferir as estatísticas de treinamento do modelo que foram geradas quando você executou a consulta CREATE MODEL
:
Na seção Recursos do painel de navegação do Console do Google Cloud, expanda [PROJECT_ID] > bqml_tutorial e clique em my_implicit_mf_model.
Clique na guia Treinamento e depois em Tabela. Os resultados terão o seguinte formato:
A coluna Perda de dados de treinamento representa métrica da perda, calculada depois de o modelo ser treinado no conjunto de dados de treinamento. Como você realizou a fatoração de matrizes, essa coluna é o erro quadrático médio. Por padrão, os modelos de fatoração de matrizes não dividem os dados. Portanto, a coluna Perda de dados de avaliação não estará presente, a menos que um conjunto de dados de teste (holdout) seja especificado porque a divisão desses dados pode ter como consequência a perda de todas as classificações de um usuário ou um item. Como resultado, o modelo não terá informações de fatores latentes sobre usuários ou itens ausentes.
Para mais detalhes sobre a função
ML.TRAINING_INFO
, consulte a referência da sintaxe do BigQuery ML.
Etapa 5: avaliar o modelo
Depois de criar o modelo, será necessário avaliar o desempenho do recomendador usando a função ML.EVALUATE
. A função ML.EVALUATE
avalia as classificações previstas em relação às classificações reais.
A consulta usada para avaliar o modelo é esta:
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
Detalhes da consulta
A principal instrução SELECT
recupera as colunas do modelo.
A cláusula FROM
usa a função ML.EVALUATE
no modelo: bqml_tutorial.my_implicit_mf_model
.
Executar a consulta ML.EVALUATE
Para executar a consulta ML.EVALUATE
que avalia o modelo:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
(Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha
US
. Esta etapa é opcional, porque o local de processamento é detectado automaticamente com base no local do conjunto de dados.Clique em Executar.
Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão o seguinte formato:
Como você realizou a fatoração de matrizes implícita, os resultados incluem as colunas a seguir:
mean_average_precision
mean_squared_error
normalized_discounted_cumulative_gain
average_rank
mean_average_precision
,normalized_discounted_cumulative_gain
eaverage_rank
são métricas de classificação que são explicadas em Métricas de fatoração de matrizes implícita
Etapa 6: prever classificações e fazer recomendações
Use o modelo para prever classificações e fazer recomendações
Encontrar todas as confianças de classificação de contentId
para um conjunto de visitorIds
ML.RECOMMEND
não precisa aceitar qualquer argumento além do modelo, mas pode aceitar uma tabela opcional. Se a tabela de entrada tiver apenas uma coluna que corresponda ao nome das colunas de entrada user
ou item
, todas as classificações de itens previstas para cada user
serão exibidas na saída e vice-versa. Se todos
users
ou items
estiverem na tabela de entrada,
a saída terá os mesmos resultados de não transmitir qualquer argumento opcional para ML.RECOMMEND
.
Confira a seguir um exemplo de consulta para buscar todas as confianças de classificação previstas para cinco visitantes.
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5))
Detalhes da consulta
A principal instrução SELECT
recupera as colunas visitorId
, contentId
e predicted_rating_confidence
. Essa última coluna é gerada pela função ML.RECOMMEND
. Quando você usa a função ML.RECOMMEND
, o nome da coluna de saída para modelos de fatoração de matrizes implícita é predicted_rating-column-name_confidence
. Nesse tipo de modelo, predicted_rating_confidence
é a confiança estimada para o par de user
e item
. Esse nível de confiança fica aproximadamente entre 0 e 1. Um nível de confiança maior indica que o user
prefere mais um item
do que outro item
com um nível de confiança menor.
A função ML.RECOMMEND
é empregada na previsão de classificações usando seu modelo: bqml_tutorial.my_implicit_mf_model
.
A instrução SELECT
aninhada dessa consulta seleciona apenas a coluna visitorId
da tabela original usada para treinamento.
A cláusula LIMIT
(LIMIT 5
) filtrará de maneira aleatória cinco visitorId
s para enviar a ML.RECOMMEND
.
Encontrar as classificações de todos os pares de visitorId e contentId
Agora que você avaliou seu modelo, a próxima etapa é usá-lo para conseguir uma confiança de classificação. Use o modelo para prever as confianças de cada combinação de usuário e item na consulta abaixo:
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Detalhes da consulta
A principal instrução SELECT
recupera as colunas visitorId
, contentId
e predicted_rating_confidence
. Essa última coluna é gerada pela função ML.RECOMMEND
. Quando você usa a função ML.RECOMMEND
, o nome da coluna de saída para modelos de fatoração de matrizes implícita é predicted_rating-column-name_confidence
. Nesse tipo de modelo, predicted_rating_confidence
é a confiança estimada para o par de user
e item
. Esse nível de confiança fica aproximadamente entre 0 e 1. Um nível de confiança maior indica que o user
prefere mais um item
do que outro item
com um nível de confiança menor.
A função ML.RECOMMEND
é empregada na previsão de classificações usando seu modelo: bqml_tutorial.my_implicit_mf_model
.
Uma maneira de salvar o resultado na tabela é:
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Se ocorrer um erro Query Exceeded Resource Limits
para ML.RECOMMEND
, tente novamente com um nível de faturamento mais alto. Na ferramenta de linha de comando do BigQuery, é possível definir isso usando --maximum_billing_tier
.
Gerar recomendações
Na consulta a seguir, use ML.RECOMMEND
para gerar os cinco principais contentId
recomendados por visitorId
.
#standardSQL 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
Detalhes da consulta
A instrução SELECT
agrupa os resultados da consulta ML.RECOMMEND
ao usar GROUP BY visitorId
para agregar contentId
e predicted_rating_confidence
em ordem decrescente, mantendo apenas os cinco principais IDs de conteúdo.
Usando a consulta de recomendações anterior, podemos ordenar por classificação prevista e gerar os principais itens previstos para cada usuário. A consulta a seguir une os item_ids
aos movie_ids
encontrados na tabela movielens.movie_titles
, que foi enviada anteriormente, e gera os cinco principais filmes recomendados por usuário.
Executar a consulta ML.RECOMMEND
Para executar a consulta ML.RECOMMEND
que gera os cinco principais IDs de conteúdo recomendados por ID de visitante, faça o seguinte:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Clique em Executar.
Quando a execução da consulta for concluída, (
bqml_tutorial.recommend_content
) aparecerá no painel de navegação do console do Google Cloud. Como a consulta usa uma instruçãoCREATE TABLE
para criar uma tabela, você não verá os resultados dela.Escreva uma nova consulta. Insira a consulta do GoogleSQL a seguir na área de texto do Editor de consultas quando a consulta anterior terminar.
#standardSQL 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
(Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha
US
. Esta etapa é opcional, porque o local de processamento é detectado automaticamente com base no local do conjunto de dados.Clique em Executar.
Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão o seguinte formato:
Limpeza
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
) e 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
- Para saber mais sobre machine learning, consulte o Curso intensivo de machine learning.
- Para uma visão geral do BigQuery ML, consulte Introdução ao BigQuery ML.
- Para saber mais, consulte Como usar o console do Google Cloud.