Explorando a técnica de boosting para melhorar modelos de regressão

Explorando a técnica de boosting para melhorar modelos de regressão
Valquíria Alencar 
Valquíria Alencar 

Compartilhe

Imagine que você está trabalhando em um projeto para prever os preços de imóveis em uma grande cidade, utilizando diversas características como localização, tamanho, número de quartos, entre outros.

Apesar de possuir uma quantidade grande de dados e já ter experimentado diferentes modelos de regressão, você nota que as previsões ainda estão longe do desejado, apresentando um erro significativo.

Modelos simples, como a regressão linear, muitas vezes não conseguem capturar toda a complexidade dos dados, enquanto modelos mais complexos, como as árvores de decisão, podem sofrer com o problema do sobreajuste, resultando em alta variabilidade nas previsões e, consequentemente, em baixa generalização para novos dados.

É nesse cenário desafiador que técnicas avançadas, como o boosting, se destacam como soluções eficazes.

Neste artigo, vamos explorar a técnica de boosting, detalhando uma das bibliotecas mais utilizadas para essa finalidade: a XGBoost.

Fique comigo até o final para descobrirmos como essa técnica funciona, suas vantagens e como a biblioteca XGBoost pode ser aplicada em diversos problemas de aprendizado de máquina! 🚀

Ensemble

Sabe quando você está trabalhando com um conjunto de dados para resolver um problema de regressão, mas a relação entre as variáveis pode não ser linear e pode envolver interações complexas?

Nesse momento é onde as árvores de decisão entram em cena como uma ferramenta valiosa em Machine Learning para resolver problemas de regressão.

Ao construir uma árvore de decisão, o algoritmo pode identificar padrões não lineares nos dados e criar regras simples que capturam as relações entre as variáveis, permitindo previsões mais precisas.

Porém, embora as árvores de decisão sejam uma ferramenta interessante, elas também apresentam algumas limitações.

Uma delas é a propensão ao overfitting (sobreajuste), que ocorre quando o modelo se ajusta muito bem aos dados de treinamento, mas não consegue generalizar bem para novos dados.

Além disso, estamos falando aqui de uma única árvore de decisão para resolver nosso problema. Será que isso é confiável?

Para superar as limitações das árvores de decisão individuais, podemos utilizar uma abordagem conhecida como ensemble, onde a ideia central é combinar vários modelos para obter um desempenho melhor do que qualquer um dos modelos individuais.

Isso é como ter um grupo de especialistas trabalhando juntos para resolver um problema: cada especialista oferece sua perspectiva única, e a combinação de suas ideias leva a uma solução mais abrangente e precisa.

Um exemplo clássico de algoritmo de ensemble é o Random Forest. Com este algoritmo, várias árvores de decisão são construídas de forma aleatória a partir de diferentes subconjuntos dos dados e de um subconjunto aleatório de características.

As previsões dessas várias árvores são então combinadas, normalmente por meio de uma votação para resolver problemas de classificação ou pela média em problemas de regressão.

Esse processo reduz o risco de overfitting, pois mesmo que algumas árvores superajustem os dados de treinamento, outras não passarão por isso, e a combinação das árvores resulta em um modelo mais equilibrado.

Imagem da representação gráfica do algoritmo Random Forest, aplicado tanto para tarefas de classificação quanto de regressão. No topo do diagrama, há um círculo rotulado como "Nova amostra", indicando o ponto de partida para a análise de novos dados. Esse círculo se divide em três ramificações, cada uma levando a círculos, que representam os nós de decisão iniciais em diferentes árvores da floresta. Cada ramificação subsequente inclui círculos adicionais, simbolizando os níveis subsequentes de decisão nas árvores. Na base, as terminações de cada ramificação apontam para três caixas de texto: "Resultado 1", "Resultado 2", e "Resultado 3". Abaixo dos resultados, há uma caixa de texto explicativa que indica "votação majoritária / média", descrevendo o método pelo qual o Random Forest chega à previsão final, seja por votação majoritária (classificação) ou por média (regressão).

Além disso, dentro do ensemble, existe outro método ainda mais sofisticado que pode ser empregado para alcançar resultados melhores. Vamos explorá-lo em detalhes?

Banner da Escola de Data Science: Matricula-se na escola de Data Science. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Boosting

Imagine que você tem um grupo de especialistas em previsão de preços de imóveis. Cada especialista faz uma estimativa inicial, mas como todos têm suas limitações, cometem erros.

No entanto, uma técnica entra em ação para melhorar essas previsões sequencialmente.

Após a primeira rodada de previsões, o modelo identifica os erros cometidos pelo primeiro especialista e direciona o segundo especialista para corrigi-los.

Essa correção dos erros continua em cada rodada subsequente, resultando em previsões cada vez mais precisas à medida que os especialistas ajustam e refinam os modelos com base nos erros anteriores.

Essa é a ideia por trás da técnica de boosting, que combina uma série de modelos simples para criar um modelo forte e robusto.

Ao invés de treinar todos os modelos de uma vez, o boosting treina os modelos de forma sequencial. Isso significa que cada novo modelo tenta corrigir os erros cometidos pelos modelos anteriores, como podemos observar na imagem abaixo:

Imagem da representação gráfica do método boosting. Na imagem, em um fluxo de cima para baixo e da esquerda para a direita, começamos com um conjunto de dados, que é utilizado por um classificador. Em seguida, após o classificador avaliar os dados, os dados classificados incorretamente são utilizados no classificador seguinte, para trabalhar em cima do que deu errado, e assim em diante, até o modelo ensemble final.

Embora árvores de decisão individualmente sejam modelos preditivos relativamente simples, quando adequadamente "impulsionadas" formam um comitê de decisão robusto.

Esse comitê, composto por várias árvores em sequência e ajustadas em conjunto, muitas vezes produz resultados difíceis de superar com outros algoritmos de Machine Learning.

Agora que compreendemos o conceito de boosting e seu funcionamento, que tal explorarmos alguns algoritmos que se baseiam nessa técnica.

Algoritmos de Boosting

Existem vários algoritmos de boosting populares, cada um com suas próprias características e aplicações específicas. Vamos dar uma conferida em alguns deles?

  • Adaptive boosting ou AdaBoost: É o algoritmo de boosting mais simples e, por isso, um excelente ponto de partida. Ele funciona de forma iterativa, ajustando o peso de cada exemplo no conjunto de treinamento a cada rodada. Exemplos mais difíceis recebem mais peso, forçando o modelo a focar neles e melhorar sua precisão geral.

  • Gradient Boosting: Possui um algoritmo de otimização para encontrar a direção que mais melhora o modelo a cada iteração. Essa abordagem garante que o modelo aprenda os erros de forma mais eficiente, levando a um desempenho superior em diversos problemas.

  • XGBoost: É um dos algoritmos de boosting mais populares e poderosos. Ele combina a técnica de Gradient Boosting com várias otimizações, como regularização L1 e L2 e aprendizado em paralelo, o que resulta em um modelo extremamente rápido, preciso e robusto.

A popularidade do XGBoost começou a crescer rapidamente devido à sua capacidade comprovada de produzir resultados melhores em competições de ciência de dados, como as hospedadas no Kaggle.

Os participantes descobriram que o XGBoost frequentemente superava outros algoritmos em termos de precisão e eficiência computacional, tornando-se rapidamente uma escolha preferencial para competições desafiadoras.

Além disso, sua implementação fácil de usar, juntamente com uma comunidade ativa de pessoas desenvolvedoras e usuárias, contribuiu para sua adoção generalizada na indústria de aprendizado de máquina.

E aí, vamos conhecer melhor o XGBoost?😍

XGBoost

XGBoost, abreviação para Extreme Gradient Boosting (Aumento extremo de gradiente), é uma biblioteca que se destaca como uma das abordagens mais utilizadas em aprendizado de máquina.

Desde sua introdução, o XGBoost conquistou uma popularidade significativa devido à sua eficácia em uma variedade de problemas de modelagem, incluindo regressão e classificação.

Essa biblioteca se destaca por utilizar a técnica de Gradient Boosting (Aumento de Gradiente), funcionando como um treinador experiente, guiando as árvores de decisão em direção à melhor solução.

Mas como será que essa técnica funciona?

Para entender como os algoritmos que utilizam esse tal de “aumento de gradiente” conseguem melhorar as previsões, precisamos explorar um conceito fundamental em aprendizado de máquina: o gradiente descendente.

Um meme clássico da internet em que aparece uma mulher loira com expressão confusa, enquanto várias fórmulas matemáticas aparecem na tela.

Gradiente descendente

Imagine que você está tentando encontrar o ponto mais baixo em uma montanha usando uma lanterna em uma noite escura. Você começa em um ponto aleatório e dá passos na direção em que o terreno está descendo mais rápido.

Cada passo é cuidadosamente escolhido para garantir que você esteja sempre descendo, e não subindo, até eventualmente chegar ao ponto mais baixo da montanha.

No contexto de aprendizado de máquina, o ponto mais baixo da montanha representa o menor erro possível que nosso modelo pode alcançar. O gradiente descendente é o algoritmo que usamos para encontrar esse ponto mínimo.

Quando treinamos um modelo, nosso objetivo é minimizar a diferença entre as previsões do modelo e os valores reais.

Essa diferença é medida por uma função de perda (ou erro). No caso da regressão, uma função de perda comum é o erro quadrático médio, que calcula a média dos quadrados das diferenças entre as previsões e os valores reais.

O gradiente descendente é um método iterativo de otimização que ajusta os parâmetros do modelo para minimizar a função de perda.

Para entendermos direitinho como funciona, vamos separar o processo em alguns passos:

  1. Inicialização: Começamos com valores iniciais aleatórios para os parâmetros do modelo.
  2. Cálculo do Gradiente: Calculamos o gradiente da função de perda em relação aos parâmetros. O gradiente é um vetor de derivadas parciais que aponta na direção do maior aumento da função de perda.
  3. Atualização dos Parâmetros: Atualizamos os parâmetros na direção oposta ao gradiente, ou seja, na direção que reduz a função de perda. A magnitude dessa atualização é controlada por um valor chamado taxa de aprendizado.
  4. Iterações: Repetimos os passos 2 e 3 até que o modelo convirja para um mínimo local da função de perda.

A figura abaixo mostra quando alcançamos o ponto mínimo:

A figura ilustra o processo de otimização da função de perda usando o método do gradiente descendente. No eixo horizontal, temos θ indicando o ponto mínimo, e no eixo vertical, a função de perda. A curva, representada por uma parábola, mostra como a função de perda varia em função de θ. O processo começa no "Valor inicial", localizado à esquerda do gráfico. A partir deste ponto, os pontos azuis marcam os valores sucessivos de cada iteração do método, demonstrando o caminho percorrido pelo algoritmo em direção ao ponto de mínimo da função, que é o ponto mais baixo da curva e está marcado como "Mínimo". A trajetória é conectada por uma linha cinza pontilhada, evidenciando a progressão do algoritmo até chegar ao mínimo global da função, que é realçado com um círculo amarelo.

Mas não se assuste com todos esses conceitos matemáticos! Quando você usa um algoritmo de aumento de gradiente para criar um classificador (para categorizar coisas) ou um regressor (para prever um valor numérico), você não precisa se preocupar muito com os detalhes matemáticos complicados.

Ferramentas como a biblioteca XGBoost fazem a maior parte do trabalho pesado, permitindo que você se concentre em ajustar alguns parâmetros para obter o melhor modelo possível para sua tarefa.

Vantagens e aplicações do XGBoost

Talvez você ainda esteja se perguntando: "O que torna o XGBoost tão especial? Por que ele se tornou tão popular?"

Neste sentido, temos alguns pontos a considerar:

  1. Aprendizagem regularizada: O XGBoost oferece técnicas de regularização integradas, como L1 e L2, para evitar o overfitting. Isso ajuda que seu modelo seja generalizável para novos dados, não apenas para os dados em que foi treinado.
  2. Poda de árvores: A poda de árvores é usada para controlar a complexidade dos modelos de árvore de decisão, removendo ramos desnecessários que não contribuem significativamente para a precisão. Isso resulta em modelos mais eficientes e menos propensos a erros.
  3. Tratamento de valores nulos: O tratamento de dados ausentes é facilitado por recursos integrados, que simplificam o processo de pré-processamento durante o treinamento.
  4. Facilidade para lidar com variáveis categóricas: Ao contrário de outros algoritmos que exigem que você converta variáveis categóricas em valores numéricos, o XGBoost as trata de forma nativa. Isso significa que você pode alimentar seus dados diretamente no modelo, sem nenhuma etapa de pré-processamento adicional, desde que suas colunas categóricas estejam com o tipo “category” ao invés de “object”.
  5. Flexibilidade e adaptabilidade: O XGBoost é altamente flexível e pode ser aplicado a uma variedade de problemas de aprendizado supervisionado, incluindo classificação, regressão e ranking. Além disso, ele suporta uma variedade de funções de perda e hiperparâmetros, permitindo que os usuários personalizem o modelo de acordo com as necessidades específicas do problema.
  6. Eficiência computacional: O XGBoost é otimizado para eficiência computacional, oferecendo suporte à paralelização, tornando-o rápido e escalável mesmo para grandes conjuntos de dados.

Com isso, o XGBoost se destaca como uma biblioteca de Machine Learning de alto desempenho, conquistando popularidade tanto no mundo acadêmico quanto no ambiente corporativo.

O XGBoost tem muitos casos de uso reais em aprendizado de máquina como, por exemplo:

Além disso, o XGBoost tem sido amplamente utilizado para resolver uma variedade de problemas em competições de Machine Learning, como: previsão de vendas em lojas, classificação de textos da web, previsão do comportamento do cliente, detecção de movimento, previsão da taxa de cliques em anúncios, classificação de malware, categorização de produtos, previsão de risco e previsão em larga escala da taxa de evasão em cursos online.

Eita! É uma quantidade grande de aplicações, né? Que tal experimentar essa biblioteca nos seus próprios projetos e descobrir como ela pode ser útil pra você? 😀

Conclusão

Neste artigo, nós exploramos em detalhes o conceito de boosting, destacando sua capacidade de combinar modelos simples sequencialmente para criar um modelo forte e robusto, capaz de superar as limitações de modelos individuais.

Especificamente, concentramos nossa atenção na biblioteca XGBoost, uma das abordagens mais populares e poderosas nesse contexto.

Ao compreender a fundo o funcionamento do boosting e suas aplicações, assim como as vantagens e a flexibilidade oferecidas pelo XGBoost, você já pode pensar em começar a explorar e aplicar essa técnica!

E aí, curtiu o artigo? Aqui na Alura temos muitos outros conteúdos para te ajudar a estruturar seus conhecimentos em Machine Learning. Bora mergulhar em tecnologia? Venha estudar com a gente! 🤿

Créditos

Valquíria Alencar 
Valquíria Alencar 

Doutora em Biotecnologia e realizou pós-doutorado na Universidade Federal do ABC. Atualmente, atua como instrutora na escola de Data Science, onde desenvolve projetos e cursos abrangendo o pré-processamento e análise exploratória de dados, visualização de dados em Python, aplicação de inteligências artificiais generativas, além da implementação e otimização de modelos de aprendizado de máquina. Também é uma das autoras do livro Séries Temporais com Prophet, publicado pela Editora Casa do Código.

Veja outros artigos sobre Data Science