1. Introdução
Neste codelab, vamos criar um modelo de previsão de pontuação de filme com o modelo personalizado do BigQuery ML usando apenas SQL e implantar o modelo na Vertex AI. Você vai aprender:
- Como criar um conjunto de dados do BigQuery usando o Cloud Shell e carregar dados de um arquivo
- Como usar o BigQuery ML para aprendizado supervisionado e criar um modelo de previsão de regressão multiclasse para a previsão de pontuação de filmes sem muita programação, apenas usando consultas SQL
O que você vai criar
Você vai criar um
- Um conjunto de dados do BigQuery para conter os componentes da tabela e do modelo
- Modelo do BigQuery ML para prever a classificação de filmes usando consultas SQL
- Implantar o modelo no Vertex AI Model Registry
Requisitos
2. Criar seu projeto
- No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
- Confira se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
- Acesse BigQuery para ativar a API. Também é possível abrir a IU da Web do BigQuery diretamente digitando o seguinte URL no navegador: https://console.cloud.google.com/bigquery
3. Ativar o Cloud Shell
- Você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud que vem pré-carregado com bq: no console do Cloud, clique em "Ativar o Cloud Shell" no canto superior direito:

- Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto está configurado com seu ID do projeto. Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list
- Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto.
gcloud config list project
- Se o projeto não estiver definido, use este comando:
gcloud config set project <PROJECT_ID>
Consulte a documentação para ver o uso e os comandos gcloud.
4. Como preparar dados de treinamento
Essa é uma etapa importante em todos os projetos, produtos e apps relacionados a dados, que exige muita experiência no domínio, além da tecnologia, para preparar um conjunto de dados ideal e deixá-lo pronto para seu projeto de ML. Para este codelab, vamos usar o arquivo data que já está preparado.
5. Como criar e carregar o conjunto de dados
Um conjunto de dados do BigQuery é uma coleção de tabelas. Todas as tabelas em um conjunto de dados são armazenadas no mesmo local de dados. Também é possível anexar controles de acesso personalizados para limitar o acesso a um conjunto de dados e às tabelas dele.
- No Cloud Shell, use o comando bq mk para criar um conjunto de dados chamado "movies".
bq mk --location=<<LOCATION>> movies
Defina o local como uma região (asia-south1).
- Verifique se o arquivo de dados (.csv) está pronto. Execute os comandos a seguir no Cloud Shell para clonar o repositório e navegar até o projeto:
git clone <<repository link>>
cd movie-score
- Use o comando bq load para carregar o arquivo CSV em uma tabela do BigQuery. Também é possível fazer upload diretamente da interface do BigQuery:
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
Descrição das opções: "–source_format=CSV" usa o formato de dados CSV ao analisar o arquivo de dados. –skip_leading_rows=1: ignora a primeira linha do arquivo CSV porque ela é uma linha de cabeçalho. "Movies.movies", o primeiro argumento posicional, define em qual tabela os dados devem ser carregados. ./movies.csv, o segundo argumento posicional, define qual arquivo será carregado. Além de arquivos locais, o comando "bq load" pode carregar arquivos do Cloud Storage com URIs gs://my_bucket/path/to/file. Um esquema, que pode ser definido em um arquivo de esquema JSON ou como uma lista separada por vírgulas (usei uma lista separada por vírgulas). Exato! Os dados CSV agora estão carregados na tabela movies.movies.
- Faça a consulta de uma destas três maneiras:
Podemos interagir com o BigQuery de três maneiras. Vamos testar duas delas: a. IU da Web do BigQuery b. O comando bq c. API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
Usei o espaço de trabalho Web SQL do BigQuery para executar consultas. O espaço de trabalho SQL tem esta aparência:

Usando o comando bq:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. Prever a classificação de um filme em uma escala de 1 a 10
O BigQuery ML oferece suporte ao aprendizado supervisionado com o tipo de modelo de regressão logística. É possível usar o tipo de modelo de regressão logística binária para prever se um valor se enquadra em uma das duas categorias ou usar o tipo multiclasse para prever se um valor se enquadra em uma de várias categorias. Isso é conhecido como problema de classificação, porque há a tentativa de classificar os dados em duas ou mais categorias.
Uma observação rápida sobre a escolha do modelo: esta é uma escolha experimental de modelo feita aqui, com base na avaliação dos resultados que executei em alguns modelos inicialmente e, finalmente, segui com a REGRESSÃO LOGÍSTICA para manter a simplicidade e obter resultados mais próximos da classificação real do filme em vários bancos de dados. Isso deve ser considerado apenas como um exemplo de implementação do modelo e NÃO é necessariamente o modelo recomendado para esse caso de uso. Outra maneira de implementar isso é prever o resultado do filme como BOM / RUIM usando esse modelo de regressão logística em vez de prever a pontuação.
Selecionar os dados de treinamento
Já dividimos os dados de filmes (em CSV) em três categorias na tabela usando o campo "data_cat", que tem um dos três valores: TRAIN, TEST e PREDICT. Dividir o conjunto de dados para fins de teste e treinamento é um aspecto importante do modelo. Se precisar de mais informações sobre como entender a divisão de conjuntos de dados, consulte a documentação.
Criar o modelo de regressão logística
Podemos usar a instrução CREATE MODEL com a opção "LOGISTIC_REG" para criar e treinar um modelo de regressão logística.
Execute a consulta abaixo no espaço de trabalho SQL da interface da Web do BigQuery:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Detalhes da consulta:
- A instrução CREATE MODEL treina um modelo usando os dados de treinamento na instrução SELECT.
- A cláusula OPTIONS especifica o tipo de modelo e as opções de treinamento. A opção LOGISTIC_REG especifica um tipo de modelo de regressão logística. Não é preciso especificar um modelo de regressão logística binária ou multiclasse: o BigQuery ML consegue determinar qual deles treinar com base no número de valores exclusivos na coluna de rótulo.
- data_split_method=‘NO_SPLIT' força o BQML a treinar nos dados de acordo com as condições da consulta (data_cat = ‘TRAIN'). Também é melhor usar ‘AUTO_SPLIT' nessa opção para permitir que a estrutura (ou o serviço, nesse caso) randomizar a partição das divisões de treinamento/teste.
- A opção "input_label_cols" especifica qual coluna na instrução SELECT deve ser usada como a coluna de rótulo. Aqui, a coluna de rótulo é "score", então o modelo vai aprender qual dos 10 valores de "score" é mais provável com base nos outros valores presentes em cada linha.
- A opção "auto_class_weights=TRUE" equilibra os rótulos de classe nos dados de treinamento. Por padrão, os dados de treinamento não são ponderados. Se os rótulos nos dados de treinamento estiverem desequilibrados, o modelo poderá aprender a prever a classe mais comum de rótulos com mais intensidade.
- A instrução SELECT consulta a tabela que carregamos com os dados CSV. A cláusula WHERE filtra as linhas na tabela de entrada para que apenas o conjunto de dados TRAIN seja selecionado nesta etapa.
Depois de criado, o seguinte aparece na seção "ESQUEMA" do espaço de trabalho do BigQuery SQL:
Marcadores

Recursos

Avaliar o modelo de regressão logística
Depois de criar o modelo, avalie o desempenho dele usando a função ML.EVALUATE. A função ML.EVALUATE avalia os valores previstos em relação aos dados reais. Veja abaixo a consulta usada para avaliar o modelo:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
A função ML.EVALUATE considera o modelo treinado na etapa anterior e os dados de avaliação retornados por uma subconsulta SELECT. A função retorna uma única linha de estatísticas sobre o modelo.

Como você fez uma regressão logística, os resultados incluem as métricas mostradas na captura de tela acima: precisão, recall, acurácia, pontuação F1, perda de registro, roc_auc, que são muito importantes para avaliar a performance do modelo. Também é possível chamar ML.EVALUATE sem fornecer dados de entrada. ML.EVALUATE recupera as métricas de avaliação derivadas durante o treinamento, que usa o conjunto de dados de avaliação reservado automaticamente.
Principais métricas:
Precisão: qual proporção de identificações positivas estava correta? Precisão = Verdadeiro positivo / (Verdadeiro positivo + Falso positivo) Recall: qual proporção de positivos verdadeiros foi identificada corretamente? Recall = Verdadeiro positivo / (Verdadeiro positivo + Falso negativo) Acurácia: uma métrica para avaliar modelos de classificação. É a fração de previsões que nosso modelo acertou. Acurácia = Número de previsões corretas / Número total de previsões
Prever a classificação de filmes usando ML.PREDICT
A consulta a seguir prevê a pontuação de cada filme na parte PREDICT do conjunto de dados.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
Confira abaixo um trecho dos resultados:

O resultado do modelo mostra a PONTUAÇÃO prevista do filme em uma escala de 1 a 10 (classificação). Talvez você esteja se perguntando por que há várias linhas de previsão para cada filme. Isso acontece porque o modelo retornou os possíveis rótulos previstos e a probabilidade de ocorrência de cada um em ordem decrescente.
Analisar os resultados previstos e o modelo
Além disso, você pode realizar duas etapas de análise importantes como parte dos resultados da previsão:
- Para entender por que seu modelo está gerando esses resultados de previsão, use a função ML.EXPLAIN_PREDICT.
- Para saber quais recursos são os mais importantes para determinar a faixa de renda em geral, use a função ML.GLOBAL_EXPLAIN.
Leia sobre essas etapas em detalhes na documentação.
7. Prever a classificação de filmes usando o BigQuery AutoML
O AutoML é ótimo se você quiser deixar o serviço do BigQuery criar o modelo para você e relaxar até que os resultados sejam gerados. O recurso do AutoML está disponível diretamente no BQML (model_type=AUTOML_CLASSIFIER ou AUTOML_REGRESSOR) e é muito mais fácil de chamar se os dados já estiverem no BigQuery.
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
Depois que o modelo é criado, você pode realizar as etapas para EVALUATE, PREDICT e EXPLAIN_PREDICT, assim como discutimos no modelo BQML personalizado. Leia mais sobre o BigQuery AutoML na documentação.
8. Implantação com um clique de modelos do BQML no Vertex AI Model Registry
Agora é possível conferir todos os seus modelos de ML no Vertex AI Model Registry, facilitando o gerenciamento e a implantação de modelos na sua organização. Isso inclui modelos criados com o BigQuery ML, o AutoML e modelos treinados de forma personalizada. Veja como fazer isso:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Inclua a opção model_registry="vertex_ai" na consulta CREATE MODEL para que o BigQuery ML possa escolher quais modelos registrar explicitamente no Vertex AI Model Registry. Saiba mais sobre isso neste blog.
9. Resumo
Em menos de 30 minutos, nós:
- Configurar o BigQuery como nosso banco de dados para o projeto de análise
- Criou um modelo de previsão personalizado usando apenas SQLs de dados do BigQuery e sem outra programação
- Criou um modelo do BQ Auto ML usando apenas consultas SQL
- Modelo do BQML implantado no Vertex AI Model Registry
10. Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta postagem, siga estas etapas:
- No console do 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.
11. Parabéns
Parabéns! Você criou um modelo de previsão de pontuação de filmes com o BQML personalizado e o AutoML e implantou o modelo no Vertex AI Model Registry. Tudo isso usando apenas SQL.