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 filme com o modelo personalizado do BigQuery ML usando apenas SQL e implantar o modelo na Vertex AI. 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 do arquivo
  2. Como usar o BigQuery ML para aprendizado supervisionado a fim de criar um modelo de previsão de regressão multiclasse para a previsão da pontuação de filmes sem muita programação, mas usando apenas 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

  • 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 navegador: https://console.cloud.google.com/bigquery

3. Ativar o Cloud Shell

  1. Você usará o Cloud Shell, um ambiente de linha de comando em execução no Google Cloud que vem pré-carregado com bq. No console do Cloud, 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

Esta é uma etapa importante em todos os projetos, produtos e aplicativos relacionados a dados que requer muita experiência no domínio, além da tecnologia para preparar um conjunto de dados ideal e prepará-lo para seu projeto de ML. Para os fins deste codelab, vamos usar o arquivo de dados 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 dos dados. Você também pode anexar controles de acesso personalizados para limitar o acesso a um conjunto de dados e às tabelas dele.

  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. Verifique se você tem o arquivo de dados (.csv) 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
  1. Use o comando "bq load" para carregar o arquivo CSV em uma tabela do BigQuery (você também pode fazer o 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_leader_rows=1 - ignora a primeira linha do arquivo CSV porque é uma linha de cabeçalho. Filmes.movies – o primeiro argumento posicional — define em qual tabela os dados devem ser carregados. ./movies.csv, o segundo argumento posicional, define qual arquivo carregar. 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! Nossos dados csv agora estão carregados na tabela movie.movies.

  1. Consulte uma das três maneiras:

É possível interagir com o BigQuery de três maneiras. Testaremos 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 BigQuery Web SQL Workspace para executar consultas. O SQL Workspace tem esta aparência:

109a0b2c7155e9b3.png

Use 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 de modelo de regressão multiclasse para prever se um valor se enquadra em uma das várias categorias. Eles são conhecidos como problemas de classificação, porque tentam classificar os dados em duas ou mais categorias.

Uma observação rápida sobre a escolha do modelo: esta é uma escolha experimental de modelo escolhido aqui, com base na avaliação dos resultados que encontrei em alguns modelos inicialmente e, finalmente, usei LOGISTIC REG para manter a simplicidade e obter resultados mais próximos da classificação real do filme a partir de vários bancos de dados. Isso deve ser considerado apenas como uma amostra 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 tenha um destes três valores: TREINAMENTO, TESTE e PREDIÇÃO. 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 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 SQL Workspace 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:

  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 é necessário especificar um modelo de regressão logística binária em vez de um modelo de regressão logística multiclasse. O BigQuery ML pode determinar qual deles treinar com base no número de valores únicos na coluna de rótulos.
  3. data_split_method=‘NO_SPLIT&#39; força o BQML a treinar com os dados de acordo com as condições da consulta (data_cat = "TRAIN"). É recomendável usar "AUTO_SPLIT" nesta opção para permitir que o framework (ou o serviço, neste caso) randomize a partição das divisões de treinamento/teste.
  4. A opção input_label_cols especifica qual coluna da instrução SELECT deve ser usada como a coluna do rótulo. Aqui, a coluna de rótulo é a pontuação, então o modelo vai aprender qual dos 10 valores de pontuação é mais provável com base nos outros valores presentes em cada linha.
  5. O valor "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 com mais intensidade a classe de rótulos mais conhecida
  6. 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 "SCHEMA" do BigQuery SQL Workspace:

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 usa 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ê executou uma regressão logística, os resultados incluem as métricas mostradas na captura de tela acima: precisão, recall, acurácia, f1-score, log_loss e roc_auc, que são realmente essenciais na avaliação do 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.

Resumo das 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 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 conseguiu 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 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 em cada filme. Isso ocorre porque o modelo retornou os possíveis rótulos previstos e a probabilidade de ocorrência de cada um deles na ordem decrescente.

Analisar os resultados previstos e o modelo

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

  1. Para entender por que seu 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 classificação de filmes usando o AutoML do BigQuery

O AutoML é ótimo se você quer deixar o serviço BigQuery criar o modelo para você e relaxar 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;

Após a criação do modelo, siga as etapas para EVALUATE, PREDICT e EXPLAIN_PREDICT, conforme discutimos no modelo BQML personalizado. Leia mais sobre o AutoML no BigQuery na documentação.

8. Um clique para implantar modelos BQML no Vertex AI Model Registry

Agora é possível conferir todos os seus modelos de ML no Vertex AI Model Registry, o que facilita o gerenciamento e a implantação de modelos pela sua organização. Isso inclui modelos criados com BigQuery ML, AutoML e modelos treinados e 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 o model_registry="vertex_ai" na consulta CREATE MODEL para que o BigQuery ML possa escolher quais modelos quer registrar explicitamente no Vertex AI Model Registry. Saiba mais neste blog.

9. Resumo

Em menos de 30 minutos, teremos:

  1. Configurar o BigQuery como nosso banco de dados para o 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 do BQ Auto ML usando apenas consultas SQL
  4. Implantar o modelo BQML 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 filme com o BQML personalizado e o AutoML e implantou o modelo no Vertex AI Model Registry. Tudo isso usando apenas SQL.