Model selection com AutoML

Testei mais de 10 modelos ao mesmo tempo com essa biblioteca

Letícia Gerola
Joguei os Dados
Published in
3 min readMay 27, 2022

--

Quando ouço a palavra automatização relacionada à ciência de dados, confesso que fico desconfiada. Otimizar e automatizar a parte matemático-estatística sempre parece uma boa ideia, mas como automatizar uma interpretação baseada em conceitos de negócio? Em entendimento do problema? Dois passos pra traz parecem necessários quando ouço esse tipo de promessa.

Foi com muito entusiasmo e uma bolsa cheia de ressalvas que testei uma das ferramentas de AutoML disponíveis no mercado: o TPOT, um verdadeiro assistente de ciência de dados. TPOT é uma ferramenta de aprendizado de máquina automatizado em Python, cujo foco é otimizar pipelines de Machine Learning utilizando programação genética(!).

Meu desafio era um problema de classificação, por isso importei o TPOT Classifier, mas tem a opção de regressores também. A ideia dessa lib é que, ao passar seu dataset de treino e teste e setar alguns parâmetros de comparação (como por exemplo, qual métrica de avaliação você quer utilizar) o próprio pacote testa mais de 10 modelos diferentes &gera um dataframe com a performance de cada um. Em seguida, é só exportar seu ‘best_model’ em um arquivo .py, também gerado automaticamente pelo TPOT. Incrível né?

Implmentando o TPOT no seu pipeline

Antes de tudo, é preciso splitar seu dataset já limpo e tratado em treino e teste, setando sua coluna de ‘id’ como index para que o TPOT possa identificar corretamente as colunas.

X_treino = X_treino.set_index('id')
X_teste = X_teste.set_index('id')
y_treino = y_treino.set_index('id')
y_teste = y_teste.set_index('id')

Feito isso, importamos o TPOTClassifier, que pode ser chamado após instalar localmente a bilbioteca no seu notebook via !pip install. Primeiro, criamos nosso classificador dentro da variável ‘tpot’ preenchendo os parâmetros necessários. Nesse caso, por exemplo, setei como tempo máximo de teste 120 minutos e métrica de avaliação a ROC_AUC.

from tpot import TPOTClassifier
import numpy as np
tpot = TPOTClassifier(verbosity=3, n_jobs=-1, max_time_mins=120, scoring='roc_auc', random_state=0, cv=6, generations=None, population_size=100, early_stop=True, log_file='tpot_classifier.txt')

Em seguida, fitamos nossos dados de treino no tpot e chamamos a função ‘score’ em cima dos nossos dados de teste, printando os resultados obtidos pra que possamos avaliá-los:

tpot.fit(X_treino, y_treino.values.reshape(-1,))print(tpot.score(X_teste,y_teste.values.reshape(-1,)))

Para uma melhor visualização dos resultados, o código abaixo vai colocar seus resultados em formato de dataframe, formatar as colunas e transpor a visualização

resultado = pd.DataFrame(tpot.evaluated_individuals_)
resultado.columns = list(map(lambda x: x[0], resultado.columns.str.split('(')))
resultado.T

O resultado final se parece com o print abaixo: os nomes dos modelos são o index, as colunas são os parâmetros que setamos para teste do modelo e a última coluna é a performance do modelo em si. Nesse exemplo, o modelo ExtraTreeClassifier foi o que melhor performou nos meus dados de teste, retornando uma curva roc de 0.85. Para exportar o modelo de melhor perfomance automaticamente em um arquivo py, basta executar a linha tpot.export(best_model.py)

Foi uma experiência muito interessante trabalhar com o TPOT. Vale ressaltar que os parâmetros setados para teste e avaliação dos modelos são extremamente importantes e vão definir o sucesso da sua seleção! Para entender exatamente o que cada um deles significa, confira a documentação oficial. Existem outras ferramentas de AutoML por aí, além das disponibilizadas dentro das próprias clouds! Vou compartilhando minhas percepções conforme for testando :)

--

--

Letícia Gerola
Joguei os Dados

Cientista de dados e jornalista. Autora do blog de Data Science ‘Joguei os Dados’.