Previsão de classificação de filmes com o BQML usando SQL

1. Introdução

Neste codelab, vamos criar um modelo de previsão de pontuação de filmes com o modelo personalizado do BigQuery ML usando apenas SQL e implantar o modelo na VertexAI. Você vai aprender a realizar as tarefas a seguir:

  1. Como criar um conjunto de dados do BigQuery usando o Cloud Shell e carregar dados de um arquivo
  2. Como usar o BigQuery ML para aprendizado supervisionado e criar um modelo de previsão de regressão multiclasse para a pontuação do filme sem precisar de muito código, mas 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 do filme usando consultas SQL
  • Implantar o modelo no Vertex AI Model Registry

Requisitos

  • Use um navegador, como o Chrome ou o Firefox.
  • Tenha um projeto do Google Cloud com o faturamento ativado.

2. Criar seu projeto

  1. No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
  2. Confira se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
  3. Acesse o BigQuery para ativar a API. Também é possível abrir a IU da Web do BigQuery digitando o seguinte URL no seu navegador: https://console.cloud.google.com/bigquery

3. Ativar o Cloud Shell

  1. Você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud que vem pré-carregado com bq: no Cloud Console, clique em "Ativar o Cloud Shell" no canto superior direito: 6757b2fb50ddcc2d.png
  2. 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
  1. Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto.
gcloud config list project
  1. 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. Criação e carregamento do 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 suas tabelas.

  1. 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).

  1. Confira se você tem o arquivo de dados (.csv) pronto. Execute os comandos abaixo no Cloud Shell para clonar o repositório e navegar até o projeto:
git clone <<repository link>>

cd movie-score
  1. Use o comando bq load para carregar o arquivo CSV em uma tabela do BigQuery. Você também pode fazer upload diretamente pela 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 no 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 dos 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 são carregados na tabela movies.movies.

  1. Faça a consulta de uma destas três maneiras:

Podemos interagir com o BigQuery de três maneiras, e vamos testar duas delas: a. Interface 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 SQL da Web do BigQuery para executar consultas. O espaço de trabalho SQL tem esta aparência:

109a0b2c7155e9b3.png

Usando o comando bq:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. Previsão da 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.

Observação rápida sobre a escolha do modelo: essa é uma escolha experimental de modelo escolhida aqui, com base na avaliação dos resultados. Inicialmente, encontrei alguns modelos e, por fim, usei a REG LOGÍSTICA para simplificar 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 para implementar o modelo e NÃO é necessariamente o modelo recomendado para este 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 do filme (em CSV) em três categorias na tabela usando o campo "data_cat", que tem um dos três valores: TRAIN, TEST e PREDICT. A divisão do conjunto de dados para fins de teste e treinamento é um aspecto importante do modelo. Se você precisar de mais informações sobre 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 IU 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:

  1. A instrução CREATE MODEL treina um modelo usando os dados de treinamento na instrução SELECT.
  2. A cláusula OPTIONS especifica o tipo de modelo e as opções de treinamento. Aqui, 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ótulos.
  3. data_split_method=‘NO_SPLIT' força o BQML a treinar com os dados de acordo com as condições da consulta (data_cat = ‘TRAIN'). Além disso, é melhor usar "AUTO_SPLIT" nessa opção para permitir que a estrutura (ou serviço, neste caso) gere aleatoriamente a partição de divisões de treinamento/teste.
  4. 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", para que o modelo aprenda qual dos 10 valores de "score" é mais provável com base nos outros valores presentes em cada linha.
  5. 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.
  6. A instrução SELECT consulta a tabela carregada 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, a mensagem abaixo aparece na seção ESQUEMA do espaço de trabalho SQL do BigQuery:

Marcadores

93efd0c1a7883690.png

Recursos

8c539338df1a9652.png

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.

b54b0ebd6514a498.png

Como você realizou 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 e roc_auc, que são muito importantes para avaliar o desempenho 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) Recuperação: qual proporção de positivos reais foi identificada corretamente? Recall = verdadeiro positivo / (verdadeiro positivo + falso negativo) Precisão: uma métrica para avaliar modelos de classificação. É a fração de previsões que nosso modelo realmente acertou. Precisão = número de previsões corretas / número total de previsões

Prever a classificação do filme 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 snippet dos resultados:

1efb91967acc1f0c.png

O resultado do modelo mostra a PONTUAÇÃO prevista do filme em uma escala de 1 a 10 (classificação). Você deve estar se perguntando por que há várias linhas de previsão para cada filme. Isso ocorre porque o modelo retornou os possíveis rótulos previstos e a probabilidade de ocorrência de cada um deles em ordem decrescente.

Analisar os resultados previstos e o modelo

Além disso, você pode fazer duas etapas de análise como parte dos resultados da previsão:

  1. Para entender por que o modelo está gerando esses resultados de previsão, use a função ML.EXPLAIN_PREDICT.
  2. 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 que o serviço do BigQuery crie o modelo para você e relaxe até que os resultados do modelo sejam gerados. O recurso 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 for criado, você poderá 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. Implantar modelos BQML no Vertex AI Model Registry com um clique

Agora você pode conferir todos os seus modelos de ML no Registro de modelos da Vertex AI, facilitando a gestão e a implantação de modelos na sua organização. Isso inclui modelos criados com o BigQuery ML, o AutoML e modelos personalizados. 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 ele quer registrar explicitamente no Vertex AI Model Registry. Saiba mais sobre isso neste blog.

9. Resumo

Em menos de 30 minutos, temos:

  1. Configurar o BigQuery como banco de dados do projeto de análise
  2. Criação de um modelo de previsão personalizado usando apenas SQLs de dados do BigQuery e nenhuma outra codificação
  3. Criação de um modelo de AutoML do BQ usando apenas consultas SQL
  4. Modelo 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:

  1. No console do Google Cloud, acesse a página Gerenciar recursos.
  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
  3. 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 registro de modelos da Vertex AI, tudo isso usando apenas SQL.