PyCaret 2.x — A biblioteca de aprendizagem de máquinas para quem tem prazo
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:
- Conhecer a PyCaret
- Instalar PyCaret
- Processar dados usando as funções da biblioteca
- Treinar e comparar modelos
- Ajuste de hiperparâmetros
- Avaliar métricas de ajuste do modelo
- 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/testeimport 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
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’)
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.
5. Avaliar e salvar modelo selecionado
Os parâmetros do modelo com melhor desempenho estão descritos abaixo:
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')
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)
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.