Modelos de Predição | Ensemble Learning

“Apes together strong!”

Enzo Cardeal Neves
Turing Talks
8 min readNov 10, 2019

--

Escrito por Enzo Cardeal e Bernardo Coutinho.

Bem-vindos a mais uma edição do Turing Talks! Nessa semana falaremos sobre os métodos de Ensemble Learning, que consiste na união de diversos modelos de predição mais simples para obter um modelo geral mais consistente e menos suscetível a ruídos.

Sem mais delongas, vamos direto à explicação!

O que é Ensemble Learning?

O conceito de Ensemble Learning, também chamado de aprendizado por agrupamento, se baseia na ideia de combinar diversos modelos de predição mais simples (weak learner), treiná-los para uma mesma tarefa, e produzir a partir desses um modelo agrupado mais complexo (strong learner) que é a soma de suas partes.

Esse agrupamento objetiva, ao juntar múltiplos modelos mais fracos, diminuir a suscetibilidade geral deles a bias e a variance, tornando-os mais robustos. Portanto, os métodos de Ensemble devem levar em conta a maneira com a qual eles agrupam os modelos, associando os algoritmos de forma a minimizar suas desvantagens individuais no modelo final.

Geralmente é escolhido apenas um modelo base para ser treinado em sets diferentes e posteriormente é feita a combinação, formando assim um modelo homogêneo. Se o Ensemble final for formado por modelos diferentes dizemos que é um preditor heterogêneo.

Por exemplo, se quisermos criar um modelo Ensemble baseado no agrupamento de diversas árvores de decisão, que são modelos simples de alta variância, precisamos agregá-las de modo a aumentar sua resistência a variações nos dados. Logo, faria sentido treinar as árvores separadamente de forma a adaptar cada uma a partes diferentes da base de dados, assim, o conjunto delas saberia lidar com todas as variações dos dados. Esse é um dos principais pilares das Random Forests, o modelo mais popular de Ensemble.

Existem variados métodos de Ensemble Learning, mas neste texto focaremos principalmente em Bagging, Boosting e Stacking, os tipos mais utilizados em Data Science. Suas principais características são:

· Bagging: geralmente é feito com preditores homogêneos, cada um de forma independente em relação ao outro, de forma paralela. O algoritmo final é então feito a partir de algum tipo de resultado médio do que foi obtido a partir dos modelos bases.

· Boosting: geralmente é feito com preditores homogêneos, que são aplicados de forma sequencial (o posterior depende do antecessor) e depois combinados no modelo final.

· Stacking: geralmente é feito com preditores heterogêneos, treinando-os em paralelo. É então aplicado um modelo no output dos weak learners (podendo incluir ou não as features utilizadas para treiná-los).

Bagging

Antes de entendermos Bagging precisamos primeiro entender o que é Bootstrapping. Essa técnica consiste em subdividir nosso dataset em grupos menores, tomando elementos de forma aleatória e com reposição. Isso nos permite entender melhor o comportamento da média e do desvio padrão dos dados que estão além do dataset. Com isso, é possível fazer as pesquisas de opinião por exemplo.

Aplicamos então o mesmo modelo de predição em cada um dos subgrupos e tomamos a média dos resultados como a predição do nosso modelo final. Essa abordagem gera um preditor com menos overfitting (por outro lado, esse método pode aumentar um pouco a bias).

Infográfico de como Bagging funciona

Como Bagging já foi abordado no Turing Talks #18 não iremos nos estender muito nessa parte.

Boosting

Os métodos de Boosting compõem uma outra categoria de algoritmo de Ensemble Learning, focada principalmente em reduzir a bias dos modelos iniciais. Esse tipo de aprendizado se tornou muito popular no meio da Ciência de Dados nos últimos anos por obter ótimas performances em competições de Machine Learning, devido a sua grande adaptabilidade. Mas qual a teoria por trás desse algoritmo?

Assim como Bagging, os métodos de Boosting se baseiam em treinar diversos modelos mais simples a fim de produzir um modelo final mais robusto. Entretanto, nos algoritmos de Boosting os modelos não são mais treinados de forma independente entre si, mas de forma sequencial, a partir de uma análise dos modelos treinados previamente.

De modo a maximizar o desempenho do preditor final, o Boosting treina iterativamente novos modelos sempre com um enfoque nas observações que os modelos anteriores tiveram mais dificuldade, tornando a predição mais resistente a bias. Em sequência, atualizamos o modelo para priorizar as predições com maior acurácia nas observações da base de teste. A maneira como ocorre esse treinamento e essa atualização é onde diferem os diferentes algoritmos de Boosting.

Como o principal objetivo dos métodos de Boosting é de reduzir a bias dos preditores mais simples, é ideal escolher como base para a agregação um modelo simples com alto bias e baixa variância. Decorrente disso, geralmente escolhemos árvores de decisão de baixa profundidade para compor o preditor final.

Adaboost

Adaptive Boosting, ou simplesmente Adaboost, é um algoritmo consiste em combinar de forma sequencial vários modelos mais fracos, sendo assim o weak learner subsequente leva em consideração as predições do anterior, para formar um preditor mais conciso.

O diferencial desse algorítimo é que as predições mais difíceis (aquelas em que o weak learner da iteração atual mal previu) recebem um peso maior no preditor seguinte, buscando assim uma maior otimização do algoritmo final.

Noutros termos, cada modelo é inicializado com um peso padrão, que define seu poder de decisão no modelo final. A partir disso, conforme vamos treinando esses modelos simples, cada weak learner ganha um peso maior para as observações que ele prevê corretamente, e um peso menor para as observações em que ele possui um alto índice de erro.

Dessa forma, os weak learners com maior precisão terão maior poder de decisão no modelo final, produzindo um Ensemble extremamente robusto.

Infográfico de como Adaboost funciona

Gradient Boosting

O Gradient Boosting é um outro tipo de algoritmo de Boosting, que difere do Adaboost quanto à maneira com a qual os modelos são treinados com relação aos anteriores.

Ao invés de estabelecer pesos para os weak learners, o Gradient Boosting treina novos modelos diretamente no erro dos modelos anteriores. Ou seja, os novos modelos tentam prever o erro dos modelos anteriores em vez de prever independentemente o target. Dessa forma, obtemos a predição final somando a predição de todos os weak learners.

O algoritmo do Gradient Boosting funciona assim: O primeiro modelo faz uma aproximação bem simples da predição, e obtemos os nossos erros residuais:

Predição e Erro do primeiro modelo

Depois, treinamos mais modelos nesses erros residuais, para tentar predizer o erro do primeiro modelo. Dessa forma, quando somamos as predições de cada modelo para obter a predição final, obtemos uma versão mais corrigida da primeira predição:

Soma das predições e erro do modelo final depois de 3 iterações

Repetimos esse processo por várias iterações, obtendo erros residuais cada vez menores.

Fonte: https://medium.com/hackernoon/gradient-boosting-and-xgboost-90862daa6c77

Stacking

Esse modelo é criado a partir das predições de weak learners, que são usadas como features . Essas novas features permitem que nosso modelo final agregue onde nossos modelos iniciais melhor performaram e descredite onde performaram mal.

Como isso é feito?

Na realidade, isso pode ser feito de diversas maneiras então vamos explicar aqui uma forma que será de mais fácil entendimento :)

  1. Separe o set de treino em 10 partes:

2. Um modelo base (decision tree por exemplo) é fitado (treinado) em 9 partes e a predição é feita na parte restante. Isso é feito para cada parte do set de treino.

3. O modelo é então fitado em todo o set de treino.

4. As predições são então feitas no set de teste.

5. Os passos 2 e 4 são repetidos utilizando outro modelo base (KNN por exemplo), gerando outro set de predições tanto no set de teste quanto no set de treino.

6. As predições do set de treino são usadas como features para construir o modelo final (modelo stacking, nesse caso utilizamos logistic regression).

Note que para construir o modelo final você pode também utilizar as outras features do dataset.

Exemplo Prático

Agora que você já sabe a teoria por trás dos métodos de Ensemble Learning, podemos ir direto para a prática! Vamos mostrar como fazer predições com um modelo de Boosting, e um modelo de Bagging.

Mas primeiro, precisamos preparar a nossa área de trabalho! Primeiramente, vamos importar a biblioteca pandas, para poder lidar melhor com nossos dados. Se você não está familiarizado com a biblioteca, recomendamos ler o nosso Turing Talks sobre Bibliotecas de Data Science.

Agora, precisamos de uma base de dados. Para esse exercício, escolhemos o Boston Housing, um dataset bem simples com dados de casas na área de Boston, cujo objetivo é prever o preço de cada uma.

Como essa base requer pouca limpeza de dados, vamos direto à aplicação dos modelos. Se você quiser aprofundar mais em Data Cleaning, recomendamos nosso Turing Talks sobre esse assunto.

Boosting

Para exemplificar Boosting, vamos aplicar um modelo de Gradient Boosting no dataset de Boston, usando a biblioteca do Sci-Kit Learn.

Depois de importar o modelo, precisamos configurá-lo e escolher seus hiperparâmetros. No caso, definimos o número de estimadores, a taxa de aprendizado, e a profundidade de cada árvore de decisão. Os valores ideais para cada parâmetro vão variar bastante dependendo de sua aplicação, então é recomendável ficar mexendo nessas grandezas para ver qual combinação funcionará melhor.

Bagging

Vamos mostrar também um exemplo de como aplicar um modelo de Bagging: o Random Forest. Porém, como já abordamos o tema mais aprofundado em um Turing Talks anterior, não vamos delongar muito na explicação.

Se quiser rodar o notebook você mesmo, disponibilizamos ele no Google Colaboratory!

Conclusão

Nesse post abordamos vários conceitos-chave (bootstrapping, boosting, bagging, stacking e random forest) para se entender Ensemble Learning. Um modelo mais complexo que não tratamos é o XGBoost (eXtreme Gadrient Boosting), que consiste na aplicação do Gradient Boosting juntamente com outras técnicas para fazer o algoritmo aprender de maneira mais eficiente.

Por fim, gostaríamos de salientar que os métodos de Ensemble Learning não são nada engessados, o que permite muitas variações que vão depender de cada problema abordado. Portanto, lembre-se: entenda bem a situação que você está lidando e… abuse de sua criatividade!

Para os amantes de IA que nos acompanharam até aqui, nossos mais profundos agradecimentos! Não se esqueçam de conferir nossas redes: Medium, Facebook, Instagram e LinkedIn.

Até a próxima pessoal!

--

--

Enzo Cardeal Neves
Turing Talks

Graduando em Engenharia da Computação pela Poli-USP