Sigmoidal
  • Home
  • MentoriaNOVO
  • Cursos
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
  • English
  • Home
  • MentoriaNOVO
  • Cursos
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
Sigmoidal
Sem Resultado
Ver Todos Resultados

Modelos de Árvore em Machine Learning: Guia Completo

Carlos Melo por Carlos Melo
julho 16, 2026
em Machine Learning, Python, Teoria, Tutoriais
0
77
VIEWS
Publicar no LinkedInCompartilhar no FacebookCompartilhar no Whatsapp

Você sabia que, em dados tabulares, os modelos de árvore ainda vencem redes neurais profundas na maioria dos problemas do mundo real?

Enquanto as manchetes celebram modelos de linguagem com bilhões de parâmetros, são as árvores de decisão e seus descendentes que sustentam sistemas de crédito, detecção de fraude e diagnóstico médico em produção. Um estudo publicado no NeurIPS, Why do tree-based models still outperform deep learning on tabular data?, confirmou o que praticantes de Kaggle observam há anos: para dados organizados em tabelas, os modelos de árvore continuam sendo o ponto de partida mais forte.

Neste artigo, quero convidar você a entender essa família de algoritmos do início: o que é uma Árvore de Decisão, por que uma árvore sozinha tem limites, e como Random Forest e Gradient Boosting transformam árvores simples em modelos de alta performance. Tudo com código em Python e resultados reais, usando o scikit-learn.

💻

Código do Artigo

Acesse o código-fonte deste artigo gratuitamente.

Informe seu email para acessar o código:

✓ Seu código está pronto!

Abrir no Google Colab →

O que é uma Árvore de Decisão?

Uma Árvore de Decisão (Decision Tree) é um modelo que aprende uma sequência de perguntas sobre os dados. Cada pergunta divide o conjunto em dois grupos mais homogêneos, e a sequência de divisões termina em uma previsão. O processo lembra um jogo de vinte perguntas: a cada resposta, o espaço de possibilidades diminui, até restar uma única conclusão.

Essa estrutura torna a árvore um dos raros modelos de Machine Learning que um ser humano consegue ler. Um médico pode auditar cada ramo de uma árvore de triagem; um analista de crédito pode justificar por que um empréstimo foi negado. Se você quiser revisitar os fundamentos com mais profundidade, temos um artigo dedicado a entender as árvores de decisão em Machine Learning.

Para ver os três algoritmos em ação, vamos usar o dataset Palmer Penguins, que reúne medidas corporais de 344 pinguins de três espécies da Antártida: Adélie, Chinstrap e Gentoo. A tarefa é classificar a espécie a partir de quatro medidas do animal.

# importar os pacotes necessários
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.metrics import accuracy_score

# carregar o dataset a partir do repositório do blog
url = "https://raw.githubusercontent.com/carlosfab/blog-sigmoidal/main/datasets/penguins.csv"
df = pd.read_csv(url).dropna()

Duas medidas do bico já revelam boa parte da estrutura do problema. No gráfico de dispersão abaixo, cada espécie ocupa uma região relativamente bem definida do espaço, com alguma sobreposição entre Adélie e Chinstrap.

Gráfico de dispersão das três espécies de pinguins por comprimento e profundidade do bico

Como a árvore aprende as suas regras?

O treinamento de uma árvore consiste em escolher, a cada nó, a pergunta que melhor separa as classes. O algoritmo avalia todas as divisões possíveis e seleciona a que produz os grupos mais puros, segundo critérios como o índice de Gini ou a entropia, descritos na documentação do scikit-learn.

No código abaixo, separamos 70% dos dados para treino e 30% para teste, e limitamos a profundidade da árvore a três níveis. A restrição é proposital: uma árvore rasa é mais fácil de interpretar e menos propensa a memorizar os dados.

# selecionar as variáveis numéricas e o alvo
atributos = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
X = df[atributos]
y = df["species"]

# separar em conjuntos de treino (70%) e teste (30%)
X_treino, X_teste, y_treino, y_teste = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y)

# treinar a árvore de decisão com profundidade limitada
arvore = DecisionTreeClassifier(max_depth=3, random_state=42)
arvore.fit(X_treino, y_treino)

# avaliar a acurácia no conjunto de teste
acc_arvore = accuracy_score(y_teste, arvore.predict(X_teste))
print(f"Acurácia da Árvore de Decisão (teste): {acc_arvore:.4f}")

# Acurácia da Árvore de Decisão (teste): 0.9400

Com apenas três níveis de perguntas, o modelo acerta 94% das classificações no conjunto de teste. E o melhor: podemos desenhar exatamente o que ele aprendeu.

Estrutura da árvore de decisão treinada com profundidade máxima 3

Cada nó mostra a pergunta feita, quantas amostras chegam até ali e qual classe predomina. A primeira divisão usa o comprimento da nadadeira; as seguintes refinam a separação com as medidas do bico. Essa transparência é o grande patrimônio das árvores de decisão.

Onde uma árvore única falha?

Se uma árvore rasa funciona bem, por que não deixá-la crescer sem limites? Porque uma árvore com profundidade livre continua dividindo os dados até isolar praticamente cada exemplo do treino. O modelo deixa de aprender padrões e passa a memorizar casos.

# treinar uma árvore sem limite de profundidade
arvore_profunda = DecisionTreeClassifier(random_state=42)
arvore_profunda.fit(X_treino, y_treino)

acc_treino = accuracy_score(y_treino, arvore_profunda.predict(X_treino))
acc_teste = accuracy_score(y_teste, arvore_profunda.predict(X_teste))

print(f"Acurácia no treino: {acc_treino:.4f}")
print(f"Acurácia no teste:  {acc_teste:.4f}")

# Acurácia no treino: 1.0000
# Acurácia no teste:  0.9500

O resultado expõe o problema clássico de sobreajuste (overfitting): a árvore acerta 100% do conjunto de treino, mas apenas 95% do teste. O modelo construiu regras específicas demais, que descrevem os dados vistos e generalizam mal para dados novos.

A visualização das fronteiras de decisão torna o fenômeno evidente. Treinando os modelos apenas com as duas medidas do bico, a árvore única produz regiões recortadas, com estrias estreitas criadas para acomodar pontos individuais. O Random Forest, ao lado, desenha fronteiras mais suaves e plausíveis.

Comparação das fronteiras de decisão entre uma árvore única e um Random Forest

O que muda quando combinamos centenas de árvores?

O Random Forest, proposto por Leo Breiman no paper Random Forests (2001), ataca o sobreajuste com uma ideia elegante: em vez de confiar em uma única árvore, o algoritmo treina centenas delas e combina as respostas por votação.

A analogia clássica é a sabedoria das multidões. Cada árvore da floresta é treinada com uma amostra aleatória dos dados (bootstrap) e, a cada divisão, considera apenas um subconjunto aleatório das variáveis. As árvores individuais erram, mas erram de formas diferentes; na média, os erros se cancelam. O conceito é o mesmo que exploramos no artigo sobre métodos de ensemble.

# treinar o random forest com 100 árvores
floresta = RandomForestClassifier(n_estimators=100, random_state=42)
floresta.fit(X_treino, y_treino)

acc_floresta = accuracy_score(y_teste, floresta.predict(X_teste))
print(f"Acurácia do Random Forest (teste): {acc_floresta:.4f}")

# Acurácia do Random Forest (teste): 0.9700

A floresta alcança 97% de acurácia no teste, superando as duas versões da árvore única. Além da performance, o Random Forest oferece um subproduto valioso: a importância das variáveis, que mede quanto cada atributo contribui para as decisões do conjunto.

Importância relativa das variáveis segundo o Random Forest

O gráfico mostra que o comprimento do bico e o comprimento da nadadeira concentram a maior parte do poder preditivo. Em projetos reais, essa análise orienta a coleta de dados e a conversa com especialistas do domínio.

E se cada árvore aprendesse com os erros da anterior?

O Gradient Boosting organiza as árvores de outra maneira. Em vez de treiná-las em paralelo e votar, o algoritmo as constrói em sequência: cada nova árvore é ajustada para corrigir os erros residuais do conjunto anterior. O modelo final é uma soma ponderada de árvores rasas, refinada iteração após iteração.

# treinar o gradient boosting
boosting = GradientBoostingClassifier(n_estimators=100, random_state=42)
boosting.fit(X_treino, y_treino)

acc_boosting = accuracy_score(y_teste, boosting.predict(X_teste))
print(f"Acurácia do Gradient Boosting (teste): {acc_boosting:.4f}")

# Acurácia do Gradient Boosting (teste): 0.9800

Com 98% de acurácia no teste, o Gradient Boosting entrega o melhor resultado desta divisão treino/teste. Essa família de algoritmos deu origem a implementações otimizadas como o XGBoost e o LightGBM, dominantes em competições de dados tabulares. Se você quiser ir além da versão do scikit-learn, temos um tutorial completo de XGBoost em Python.

Qual modelo de árvore escolher?

Uma única divisão treino/teste pode favorecer um modelo por sorte. Para uma comparação mais robusta, avaliamos os três algoritmos com validação cruzada de 5 partições sobre o dataset completo.

# comparar os três modelos com validação cruzada (5 folds)
modelos = {
    "Árvore de Decisão": DecisionTreeClassifier(max_depth=3, random_state=42),
    "Random Forest": RandomForestClassifier(n_estimators=100, random_state=42),
    "Gradient Boosting": GradientBoostingClassifier(n_estimators=100, random_state=42),
}

for nome, modelo in modelos.items():
    scores = cross_val_score(modelo, X, y, cv=5)
    print(f"{nome}: {scores.mean():.4f} (+/- {scores.std():.4f})")

# Árvore de Decisão: 0.9429 (+/- 0.0239)
# Random Forest: 0.9790 (+/- 0.0154)
# Gradient Boosting: 0.9760 (+/- 0.0153)
Comparação da acurácia média dos três modelos com validação cruzada

Os números contam uma história consistente. Os dois métodos de conjunto superam a árvore única por uma margem clara, com acurácias médias de 97,9% para o Random Forest e 97,6% para o Gradient Boosting, contra 94,3% da Árvore de Decisão. Entre os dois ensembles, a diferença fica dentro do desvio padrão: neste dataset, eles empatam na prática.

A escolha, portanto, depende do contexto do seu problema:

  • Árvore de Decisão: quando a interpretabilidade é requisito, como em decisões regulatórias e sistemas auditáveis.
  • Random Forest: quando você busca robustez com pouco ajuste de hiperparâmetros; é um excelente primeiro modelo de referência.
  • Gradient Boosting: quando cada fração de acurácia importa e há tempo para ajustar taxa de aprendizado, profundidade e número de estimadores.

Takeaways

  • Árvores de decisão aprendem perguntas, e por isso são interpretáveis: cada previsão pode ser auditada nó a nó, uma propriedade rara em Machine Learning.
  • Uma árvore sem limites memoriza o treino: no nosso experimento, a acurácia de 100% no treino caiu para 95% no teste, o retrato clássico do sobreajuste.
  • Ensembles convertem árvores fracas em modelos fortes: o Random Forest reduz a variância pela votação de árvores independentes; o Gradient Boosting refina os erros em sequência.
  • Em dados tabulares, comece por modelos de árvore: a literatura recente e a prática em competições confirmam que eles seguem sendo a referência a ser batida.
  • Valide com mais de uma partição: a validação cruzada revelou um empate técnico entre os ensembles que uma única divisão treino/teste esconderia.

Se este artigo ajudou você a organizar o mapa dos modelos de árvore, o notebook completo está disponível no botão do início da página. Execute, modifique os hiperparâmetros e observe como as fronteiras de decisão reagem: a intuição que você constrói experimentando vale mais do que qualquer leitura passiva.

CompartilharCompartilhar1Enviar
Post Anterior

Análise de ECG com Python: do sinal ao diagnóstico automático

Próximo Post

Aplicação do SLAM para criação de mapas 3D: do conceito ao ORB-SLAM3

Carlos Melo

Carlos Melo

Engenheiro de Visão Computacional graduado em Ciências Aeronáuticas pela Academia da Força Aérea (AFA) e Mestre em Engenharia Aeroespacial pelo Instituto Tecnológico de Aeronáutica (ITA).

Relacionado Artigos

Cena urbana do YOLO26 com um ônibus e quatro pedestres delimitados por caixas únicas, em transição da imagem real para a detecção end-to-end
Artigos

YOLO26: O Que Mudou na Detecção de Objetos

por Carlos Melo
agosto 25, 2026
Carlos Melo diante de dois drones em voo e da frase Ele Segue pelo Som
Aeroespacial

SonicFly: Rastreamento e Perseguição de Drones pelo Som

por Carlos Melo
agosto 21, 2026
DETR associando consultas do Transformer a pedestre, ciclista, carro, ônibus e semáforo em uma cena urbana
Deep Learning

DETR para Detecção de Objetos: Como Funciona

por Carlos Melo
agosto 20, 2026
Carlos Melo ao lado de uma representação de um segundo cérebro conectado ao Claude e ao Obsidian
IA Generativa

Segundo Cérebro com Claude Code e Obsidian

por Carlos Melo
agosto 19, 2026
Carlos Melo diante de um projeto de detecção e segmentação em uma cena urbana
Carreira

7 Projetos de Visão Computacional para Portfólio

por Carlos Melo
agosto 18, 2026
Próximo Post

Aplicação do SLAM para criação de mapas 3D: do conceito ao ORB-SLAM3

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Últimos dias para o Curso de Inteligência Artificial para Drones Últimos dias para o Curso de Inteligência Artificial para Drones Últimos dias para o Curso de Inteligência Artificial para Drones

Mais Populares

  • Cientista de Dados: Salário em 2026 (Júnior, Pleno e Sênior)

    104 compartilhamentos
    Compartilhar 42 Tweet 26
  • Geometria da Formação de Imagens: Matrizes, Transformações e Sistemas de Coordenadas

    447 compartilhamentos
    Compartilhar 179 Tweet 112
  • ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

    486 compartilhamentos
    Compartilhar 194 Tweet 122
  • Fundamentos da Formação da Imagem

    214 compartilhamentos
    Compartilhar 86 Tweet 54
  • O Que é Amostragem e Quantização no Processamento de Imagens

    71 compartilhamentos
    Compartilhar 28 Tweet 18
  • Em Alta
  • Comentários
  • Mais Recente
Como Tratar Dados Ausentes com Pandas

Como Tratar Dados Ausentes com Pandas

agosto 13, 2019
Introdução ao MediaPipe e Pose Estimation

Introdução ao MediaPipe e Pose Estimation

julho 15, 2023
Como usar o DALL-E 2 para gerar imagens a partir de textos

Como usar o DALL-E 2 para gerar imagens a partir de textos

dezembro 25, 2022

ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

abril 10, 2023
Como Analisar Ações da Bolsa com Python

Como Analisar Ações da Bolsa com Python

15
Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

13
Como Aprender Data Science?

Como Aprender Data Science?

9
Qual o Cenário de Data Science no Brasil hoje?

Qual o Cenário de Data Science no Brasil hoje?

8
Cena urbana do YOLO26 com um ônibus e quatro pedestres delimitados por caixas únicas, em transição da imagem real para a detecção end-to-end

YOLO26: O Que Mudou na Detecção de Objetos

agosto 25, 2026
Carlos Melo diante de dois drones em voo e da frase Ele Segue pelo Som

SonicFly: Rastreamento e Perseguição de Drones pelo Som

agosto 21, 2026
DETR associando consultas do Transformer a pedestre, ciclista, carro, ônibus e semáforo em uma cena urbana

DETR para Detecção de Objetos: Como Funciona

agosto 20, 2026
Carlos Melo ao lado de uma representação de um segundo cérebro conectado ao Claude e ao Obsidian

Segundo Cérebro com Claude Code e Obsidian

agosto 19, 2026
Instagram Youtube LinkedIn Twitter
Sigmoidal

O melhor conteúdo técnico de Data Science, com projetos práticos e exemplos do mundo real.

Seguir no Instagram

Categorias

  • Aeroespacial
  • Artigos
  • Blog
  • Carreira
  • Cursos
  • Data Science
  • Deep Learning
  • Destaques
  • Entrevistas
  • IA Generativa
  • Livros
  • Machine Learning
  • Notícias
  • Python
  • Sinais Biomédicos
  • Teoria
  • Tutoriais
  • Visão Computacional
  • Youtube

Navegar por Tags

algebra-linear camera calibration carreira chatgpt cientista de dados cnn computer vision Cursos dados desbalanceados data science data science na prática decision tree deep learning deploy detecção de objetos IA generativa inteligência artificial jupyter kaggle keras livros machine learning matplotlib object detection openai opencv pandas portfólio profissão python pytorch random forest reconstrução 3d redes neurais redes neurais convolucionais regressão linear regressão logística scikit-learn sklearn tensorflow tutorial visão computacional vídeo youtube árvore de decisão

© 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

Sem Resultado
Ver Todos Resultados
  • Home
  • Mentoria
  • Cursos
  • Blog
  • Sobre Mim
  • Contato
  • English

© 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.