Considero ensemble um tópico avançado em machine learning. Já li muitos depoimentos de pessoas dizendo que ganharam competições do Kaggle usando este tipo de técnica. Então vamos à nossa missão de desmitificar e mostrar a aplicação de ensemble!

Conheço uma forma muito genérica, porém válida, de explicar o que é ensemble. Imagine um problema de classificação binária, por exemplo, um classificador que prevê se o cliente vai ou não sair da empresa até o final do ano. As duas respostas possíveis são: Cliente não vai sair da empresa ou cliente vai sair da empresa.

Agora imagine que você já construiu um modelo para resolver este problema, talvez um modelo de árvore de decisão, que tal? A previsão do seu modelo baseado em árvore de decisão é que o cliente José da Silva, infelizmente, vai sair da empresa até o final do ano.

Muito bem, provavelmente o time de relacionamento com o cliente da sua empresa começará a pensar em ações de retenção para este cliente, a fim de evitar que esta previsão se concretize.

Agora imagine o seguinte cenário: e se construíssemos três modelos de classificação? Todos diriam a mesma coisa sobre o cliente José da Silva? E se usássemos estes três modelos para fazer uma espécie de votação? Assim eu poderia escolher a resposta mais votada pelos modelos.

É isso!!! Ensemble junta as saídas de diferentes modelos a fim de encontrar a melhor resposta para o problema, no nosso caso, prever se o José da Silva vai sair da nossa empresa.

Existem algumas maneiras para implementarmos ensemble:

  • Estatísticas simples: Em problemas de classificação podemos trabalhar com o esquema de votação (escolher a predição que mais se repete, moda). Em problemas de regressão, onde as saída dos modelos é uma variável contínua, podemos trabalhar com a média (simples ou ponderada) ou até mesmo a mediana das saídas dos modelos do ensemble.
  • Ensemble baseado em modelos: Podemos treinar outro modelo supervisionado para escolher o melhor resultado entre os modelos primários. Existem dois (1,2) tipos de técnicas nesta categoria de ensemble, sendo que elas se diferenciam pelo forma como selecionam as amostras de dados.
  1. Blending: Usa o conceito de hold-out validation. Separa X% dos dados (exemplo, 10%) para usar no processo de validação do modelo.
  2. Stacking: Mais complexo do que o blending, usa o conceito de cross-validation. Cria um determinado número de amostras (k-fold) para usar no processo de validação do modelo.

Também é importante dizer que ensemble pode ser aplicado por você mesmo, para combinar seus próprios modelos (como mencionado até agora) e/ou pode ser aplicado internamente pelos algoritmos que você está usando.

Basicamente os algoritmos seguem duas abordagens principais para criar seu próprio ensemble:

  • Bootstrap Aggregation ou Bagging: nesta abordagem treina-se vários modelos (geralmente modelos no mesmo tipo) em diferentes amostras de dados. Os principais algoritmos desta categoria são: Bagged CART e Random Forest.
  • Boosting: nesta abordagem treina-se vários modelos (geralmente modelos no mesmo tipo) sendo que cada um tenta corrigir o erro do outro. Os principais algoritmos desta categoria são: C5.0, Stochastic Gradient Boosting e AdaBoost.

É isso pessoal. Como eu disse, este é uma técnica avançada em machine learning e abre possibilidades infinitas para você construir seus modelos. Na parte prática deste artigo estou mostrando implementações em R de ensembles do tipo stacking.

Espero que tenham gostado de ler este artigo tanto quanto eu gostei de escrevê-lo.

Faça download da parte prática

Abraços.
Weslley Moura

Anúncios