Análise e Exploratória e Machine Learning com BigQuery [Parte II]
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.
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.
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.
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.
É 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`
))
;
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.
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
)
)
;
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.