Análise e Exploratória e Machine Learning com BigQuery [Parte II]

Luiz Gabriel Souza
gb.tech
Published in
4 min readJun 2, 2023

Este artigo é uma continuação da análise exploratória realizada nesse (link aqui). Nele, realizamos o tratamento e análise dos dados, necessária para a criação de um modelo de Machine Learning.

Pessoa escrevendo em um caderno
Photo by Tamarcus Brown on Unsplash

Vamos usar as funcionalidades da plataforma BigQuery para criar um modelo de Machine Learning utilizando apenas SQL. No nosso exemplo, iremos usar uma regressão logística para classificar as espécies dos pinguins da nossa tabela, mas é importante lembrar que a ferramenta possui outros tipos de modelos disponíveis [link], incluindo técnicas de Auto Machine Learning, que testam automaticamente vários tipos de modelos e seleciona o que obtiver melhor performance [link].

Treino e Teste

A separação dos dados entre treino e teste é importante pois o modelo pode ser treinado com um conjunto de dados (treino) e utilizar um outro conjunto de dados para validar (teste) a performance do modelo em dados não utilizados na fase de treino. Existem algumas maneiras de dividir os dados entre treino e teste: manualmente ou automaticamente pelo BigQuery. Neste artigo, por estarmos explorando a funcionalidade de machine learning do próprio BigQuery, vamos deixar que ele lide com isso, por meio do argumento DATA_SPLIT_METHOD = “AUTO_SPLIT”.

Criando o modelo

Uma vez parametrizada a função CREATE MODEL, especificando por exemplo o tipo do modelo — MODEL_TYPE=’logistic_reg’ — , método de separação dos dados entre treino e teste — DATA_SPLIT_METHOD = ‘RANDOM’— e qual é a variável alvo — LABELS = [‘species’] — , podemos criar o modelo com a função SQL abaixo, processada diretamente no prompt de execução da ferramenta:

#standardSQL
CREATE OR REPLACE MODEL `my_project.my_dataset.penguins_model`
OPTIONS(
MODEL_TYPE='logistic_reg',
DATA_SPLIT_METHOD = 'RANDOM',
LABELS = ['species']) AS
SELECT
*
FROM
`bigquery-public-data.ml_datasets.penguins`
;

Depois de alguns minutos, o modelo estará pronto, treinado e validado, simples assim. Ao finalizar o processamento, aparecerá algumas opções na tela para realizarmos algumas análises com base nos metadados gerados, ou seja, é hora de analisar os resultados.

Analisando os resultados

Detalhes do modelo

Na aba "Detalhes do modelo", é possível ver algumas informações dos metadados gerados como as bases de treino e teste que foram separada automaticamente e os parâmetros de aprendizado do modelo, como número de iterações, early stop, etc.

Aba Detalhes do Modelo, mostrando que o tipo do modelo é regressão logística, tipo da função perda, link para a base de treino e para a base de teste.
Parâmetros de treino do modelo, com número de iterações reais igual a 8, tipos de regularização L1 e L2 utilizadas, taxa de aprendizagem igual a 0,10 e fração de avaliação de divisão dos dados igual a 20%

Gráficos ou tabela por iteração

Também temos, automaticamente, como observar o desempenho do modelo em cada interação durante o processo de aprendizagem, como a loss-function (“Perda”) e o tempo gasto a cada iteração em segundos.

Imagem com gráficos da função perda, tempo por interação e taxa de aprendizado

Métrica de avaliação de performance

Na aba "Avaliação", podemos observar as métricas de performance do modelo como Precision, Recall, F1, etc., bem como a matriz de confusão dos resultados, para a base de teste. Como a nossa base de dados é pequena e serve apenas como um exemplo da aplicação das funcionalidades da ferramenta, é visível a presença de overfitting do modelo, mas não é o nosso objetivo tratar essa questão neste artigo.

Imagem com métricas agregadas como acurácia, precision, recall, f1, roc-auc, perda.

É possível também obter as mesmas métricas por meio de uma consulta SQL, conforme abaixo.

SELECT
*
FROM
ml.EVALUATE(MODEL `my_project.my_dataset.penguins_model`, (
SELECT
*
FROM
`bigquery-public-data.ml_datasets.penguins`
))
;
Tabela com resultados da métricas precision, recall, accuracy, f1_score, log_loss e roc_auc

Os valores obtidos da interface interativa e da query SQL ficam um pouco diferente pois a primeira utilizado apenas dados de teste, enquanto que a segunda utiliza a base toda no calculo.

Esquema dos dados

Na última aba dos resultados do modelo, temos o esquema dos dados, onde podemos ver mais informações sobre cada variável utilizada no modelo, inclusive a variável alvo.

Imagem com o esquema das variáveis utilizadas no modelo, como nome e tipo da variável.

Explicabilidade do modelo

Para alguns modelos, com a função EXPLAIN_PREDICT, é possível também entender como os pesos de cada variável fazem com que o modelo classifique cada observação:

SELECT * 
FROM ML.EXPLAIN_PREDICT(
MODEL `my_project.my_dataset.penguins_model`,
(
SELECT
*
FROM
`bigquery-public-data.ml_datasets.penguins`
limit 1
)
)
;
Imagem mostrando o exemplo de predição e os pesos de cada variável para a predição.

Aplicando o modelo em dados novos

Uma vez que os resultados do modelo foram validados e analisados, aplicar o modelo para uma base nova, afim de aplicar o aprendizado obtido com os dados de treinamento. Para isso utilizamos a função PREDICT.

#standardSQL
SELECT
*
FROM
ml.PREDICT(MODEL `my_project.my_dataset.penguins_model`, (
SELECT
* EXCEPT(species)
FROM `bigquery-public-data.ml_datasets.penguins`
LIMIT 1
))
;

Conclusões

Este artigo teve como objetivo dar continuidade a análise exploratória realizada no post anterior, mostrando que com o BigQuery é possível criar modelos de machine learning, incluindo análise exploratória dos dados, só utilizando SQL, uma linguagem antiga mas que é muito prática até os dias de hoje, e que continua recebendo novas funcionalidades para facilitar ainda mais o dia a dia dos cientistas de dados.

--

--