XGBoost: A Evolução das Árvores de Decisão

Volta e meia, surgem no meio de machine learning novos modelos, e não raramente esses se tratam de melhorias incorporadas a modelos anteriores. Os modelos baseados em árvores de decisão receberam sua última importante atualização com a chegada do método XGBoost, apelido para Extreme Gradient Boosting, que foi apresentado em 2016 por Tianqi Chen e Carlos Guestrin na Conferência SIGKDD e, desde então, tem sido o método de preferência dos profissionais da área.

Para entender a evolução dos modelos baseados em árvores de decisão, as melhorias trazidas por cada novo método, e por que o XGBoost tem sido tão bem sucedido, vamos imaginar o cenário de um reality show culinário e inspecionar, na sequência de complexidade, como pode ser feita a avaliação da performance dos candidatos.

Árvore de decisão: É o método mais simples. Um único chef faz a avaliação, baseado em critérios que ele considera relevantes, como apresentação do prato, sabor, textura e satisfação do consumidor. A nota final é calculada pelas notas dos critérios individuais.

Bagging: Agora nós temos mais de um chef avaliando os mesmos critérios. No final do processo, a nota final é calculada em cima das notas dadas por cada chef.

Random forest: Ainda temos vários chefs responsáveis pela avaliação, mas cada um avalia apenas alguns critérios selecionados aleatoriamente. A produção das notas costuma ser mais rápida, mas mais precisa já que cada avaliador agora é especializado. A nota final é baseada nas notas individuais.

Boosting: Os chefs fazem suas avaliações sequencialmente, alterando seus critérios conforme a nota dada pelo chef anterior. Por exemplo, se o primeiro avaliador deu uma pontuação baixa para o critério sabor alegando que o prato ficou pouco salgado, o segundo pode levar em consideração a harmonia entre o nível de sal e dos outros temperos. A nota final é mais precisa e o processo, mais dinâmico.

Gradient Boosting: Além do método de boosting descrito anteriormente, os erros são minimizados pelo algoritmo de descida do gradiente. Seria como evitar “mínimos locais” (onde o segundo melhor colocado receberia a melhor nota) ajustando os critérios para capturar o melhor desempenho. Por exemplo: se o prato anterior estava pouco salgado, então o segundo chef poderia usar como critério “era pra ser salgado?” para dar uma nota mais conforme com o objetivo final de avaliar o melhor prato.

XGBoost: Esse método busca melhorar o desempenho do gradient boosting otimizando a utilização do software (conhecimento técnico dos chefs) e hardware (ferramentas que eles usam para avaliar, como seus sentidos). Seria como criar um ambiente perfeito para que os avaliadores possam fazer o melhor trabalho possível: a nota mais factível no menor tempo. Digamos que os chefs recebem antecipadamente uma relação descritiva dos critérios a serem considerados, e um despalatizante para usarem entre as provas gustativas.

Que otimizações são essas que o XGBoost realiza? Do lado de software, o método incorpora o conceito de regularização para evitar modelos muito complexos, que tendem a gerar overfitting. Esse problema também é controlado pela validação cruzada nativa. Ele ainda aceita variáveis esparsas para treinamento, o que quer dizer que é capaz de trabalhar com valores faltantes eficientemente, sem que o usuário tenha que escolher a estratégia de pré-processamento. Do lado de hardware, o método usa paralelização e manejo de memória em cache para acelerar a computação.

O algoritmo computacional do XGBoost foi desenvolvido para que sua utilização fosse a mais ampla possível. Ele pode ser usado para resolver problemas de classificação, regressão e ranqueamento, por exemplo. É compatível com os principais sistemas operacionais e linguagens de programação e oferece suporte para integração com recursos na nuvem e processamento de big data.

Atualmente, em termos de árvores de decisão, o XGBoost tem se mostrado imbatível, e vale explorar sua excelente documentação para aprender a fazer uso de seus impressionantes recursos.