PyCaret 2.x — A biblioteca de aprendizagem de máquinas para quem tem prazo

Henrique Gomide, Ph.D.
Ensina.AI
Published in
5 min readJul 27, 2020

Sobrando projetos de aprendizagem de máquinas, mas faltando tempo para desenvolver suas análises? Este post é para você. Neste post, iremos ver uma breve apresentação sobre a biblioteca PyCaret de aprendizagem de máquinas (i.e., Machine Learning). Nossos objetivos são:

  1. Conhecer a PyCaret
  2. Instalar PyCaret
  3. Processar dados usando as funções da biblioteca
  4. Treinar e comparar modelos
  5. Ajuste de hiperparâmetros
  6. Avaliar métricas de ajuste do modelo
  7. Conclusões

Você pode acompanhar este post neste Colab do Google.

1. PyCaret, o que é?

PyCaret: menos código, mais produtividade. Na versão 2.x, você poderá usar sua GPU para treinar seus modelos. Alguns cenários de aplicação:

  • Desenvolver PoC (Proof of concepts)
  • Gerar modelos iniciais para prototipar aplicações de aprendizagem de máquinas
  • Integrar modelos de aprendizagem de máquinas em Dashboards feitas no PowerBI

Embora, você precise de muito menos código para gerar resultados, você ainda precisa conhecer bem aprendizagem de máquinas. E só há um caminho para conhecimento: estudo. Há outras desvantagens: a documentação está incompleta e a filosofia é ‘batteries-included’ (i.e., Django). Isto significa que você muitas vezes instalará bibliotecas desnecessárias.

Neste post, trabalharemos num problema de regressão de aprendizagem supervisionada. PyCaret tem módulos para problemas de aprendizagem não supervisionada como Análise de Agrupamentos, Regras de Associação e Processamento da Linguagem Natural.

Banco de dados

Para nosso tutorial, focaremos num problema de regressão da base ‘insurance’. Nesta base, existem dados simulados de beneficiários (usuários de plano de saúde) bem como seus gastos com plano de saúde num dado intervalo de tempo. Os seguintes atributos estão presentes no banco de dados:

  • Idade em anos: age
  • Sexo: sex
  • Índice de Massa Corporal: bmi
  • Número de crianças vinculadas ao plano de saúde: children
  • Se é fumante: smoker
  • Região dos Estados Unidos: region
  • Sinistro (gastos) em unidade monetária: charges.

Iremos tentar criar modelos preditivos para prever o atributo ‘charges’. Mãos à obra.

2. Como instalar PyCaret?

O processo de instalação é ridiculamente simples. No Google Colab:

!pip install pycaret # Instalar PyCaret no Colab

Caso faça na sua máquina, recomendo fortemente a criação de um ambiente virtual para tal. Caso você use anaconda, jupyter lab ou outra coisa, veja a documentação. No momento deste tutorial, a versão do Python suportada é a 3.6.

3. Processar dados usando as funções

Vamos importar as bibliotecas para o tutorial.

# Carregar bibliotecas
import numpy as np # Numpy
import pandas as pd # Pandas
from sklearn.model_selection import train_test_split # Scikit separar treino/teste
import pycaret # Pycaret
from pycaret.regression import * # Pycaret para Regressão
from pycaret.utils import enable_colab # Para executar gráficos no Colab

Antes de processar os dados, precisamos abrir o arquivo com ‘pandas’.

URL = 'https://raw.githubusercontent.com/zetta-health/exp-curso-python-saude/master/data/insurance.csv'
df = pd.read_csv(URL)
df.shape

Temos 7 atributos (colunas) com 1338 amostras (pessoas). Vamos usar a famosa ‘train_test_split’ do sklearn para separar bancos de treino e teste.

train, test = train_test_split(df, test_size=0.2,
random_state=42)

Depois, hora de configurar o PyCaret antes de iniciarmos o treinamento de diversos modelos. Para isso, usaremos a função ‘setup’, precisaremos de apenas três argumentos, embora seja possível fazer muitas outras coisas (veja documentação). Voltando ao nosso caso, usaremos nosso banco de dados ‘train’, definiremos a variável de interesse (target’), charges e o tamanho dos splits entre banco de treino e teste.

reg = setup(data = train,           # Banco de dados
target = 'charges', # Desfecho que estamos tentando prever
train_size = 0.7) # Proporção do banco de treino
Imagem do Setup do Pycaret

Ao executar a função, Pycaret tenta prever quais os tipos das variáveis. Caso algo esteja fora da expectativa, você pode arrumar. No nosso exemplo, vamos seguir adiante. Embora o número de crianças seja uma variável numérica, não é um atributo muito relacionado.

4. Treinar e comparar modelos

Antes de treinar o modelo, vamos inspecionar a função “compare_models”.

compare_models(blacklist = None, fold = 10,  round = 4,  sort = ‘R2’, turbo = True)

A função efetua validação cruzada com 10 folds de diversos modelos. Como nosso problema é do tipo de regressão, ela ordenará a saída do modelo em ordem decrescente do coeficiente de determinação — R². Lindo, não? É só executar a célula agora para efetuar o treinamento. A documentação completa está disponível aqui.

# Treinar modelos
compare_models()

E o algoritmo com melhor desempenho foi o Gradient Boosting (gbr). Fantástico o fato do Pycaret ter executado 22 algoritmos de aprendizagem de máquinas em poucos minutos.

Você pode selecionar o modelo, usando:

gbr = create_model(‘gbr’)
Avaliação da performance em cada fold usado para validação do modelo.

Podemos também fazer buscas de hiperparâmetros. Para isso, você precisa apenas digitar.

tuned_gbr = tune_model('gbr')
print(gbr)

No nosso caso, o modelo inicial apresentou resultados superiores aos da busca por hiperâmetros da biblioteca.

Busca de hiperâmetros apresentou resultados piores que o modelo inicial. :-(

5. Avaliar e salvar modelo selecionado

Os parâmetros do modelo com melhor desempenho estão descritos abaixo:

Parâmetros do modelo com melhores indicadores de ajuste durante a validação.

6. Avaliar métricas de ajuste do modelo

Vamos começar com a comparação entre os valores previstos pelo modelo e os reais da base de teste.

# Comparar predições e resultados do banco de teste
plot_model(gbr plot='error')

Podemos também ver os resíduos:

# Comparar os resíduos
plot_model(gbr, plot='residuals')

Para terminar, vamos inspecionar quais variáveis foram mais importantes para nosso modelo final:

plot_model(gbr, 'feature')
Importância dos atributos para o modelo de Gradient Boosting

Fumar é a variável que mais influencia nos gastos, seguido do índice de massa corporal e idade. Estamos quase terminando. Vamos agora usar nosso modelo para prever novos casos.

predict_model(gbr, data=test)
Pycaret: prever novos casos predict_model.

Fácil, não? Para finalizar, podemos criar um modelo usando todas as amostras disponíveis e depois, salvar para colocar em produção.

# Finalize model
gbr_final = finalize_model(gbr)

Salvar o modelo e pronto.

save_model(gbr, 'snf_saved_04072020')

7. Conclusões

PyCaret é realmente uma ferramenta incrível para rápida prototipagem para analistas que sabem o que estão fazendo.

No entanto, possui diversas limitações. Neste banco de dados, por exemplo, não foi possível calcular os valores Shapley do modelo final devido a um erro da biblioteca. Neste caso, seria necessário fazer as estimativas usando as bibliotecas tradicionais. Outro ponto negativo, é a indisponibilidade de trabalhar com dados desbalanceados, problema comum enfrentando pelos cientistas de dados.

--

--

Henrique Gomide, Ph.D.
Ensina.AI

Machine Learning Engineer. Trying to make sense of the world through Philosophy and Science.