![]()
Analogia: no bagging, vários alunos fazem a prova sozinhos e a turma vota na resposta. No boosting, um aluno faz a prova, o próximo estuda só as questões que ele errou, e assim por diante.
Modelo fraco (weak learner): aquele cuja taxa de erro é apenas um pouco melhor que um chute aleatório — por exemplo, uma árvore com uma única divisão (um stump).


Bagging parte de árvores profundas (alta variância) e reduz a variância. Boosting parte de árvores rasas (alto viés) e reduz o viés.
Resposta final: cada modelo vota \(+1\) ou \(-1\), multiplicamos pelo seu peso de voto e somamos. Se a soma for positiva, a classe é \(+1\); se for negativa, \(-1\).

O peso do voto é
\[\alpha = \frac{1}{2}\ln\frac{1 - \text{erro}}{\text{erro}}\]
Não precisamos decorar a fórmula — basta ler o gráfico:


\[\text{Resposta final} = \text{sinal}\big(0{,}42 \times \text{voto}_1 + 0{,}65 \times \text{voto}_2 + 0{,}92 \times \text{voto}_3\big)\]
Se a soma for > 0, predizemos +1 (azul); se for < 0, predizemos −1 (amarelo).
| Bagging | Boosting | |
|---|---|---|
| Amostragem | todo elemento tem a mesma probabilidade de entrar na amostra | observações ponderadas: as difíceis aparecem mais |
| Treinamento | paralelo: cada modelo é independente | sequencial: cada modelo depende do anterior |
| Combinação | média ou voto majoritário | média ponderada (pesos por desempenho) |
| Estratégia | treina e mantém | treina e avalia |
| Modelo base | árvores profundas (baixo viés) | árvores rasas (baixa variância) |
| Ataca | a variância | o viés |
| Mais árvores… | nunca piora o teste | pode levar a overfitting |

Diferença para o AdaBoost: em vez de repesar as observações, cada nova árvore é ajustada diretamente aos resíduos (erros) do modelo atual.
Predição final = árvore 1 + árvore 2 + árvore 3 + … — cada árvore é uma pequena correção da soma anterior.

Com poucas árvores, o ajuste é quase plano; cada árvore nova refina o que ainda faltava até capturar os degraus da relação real.
O nome vem do fato de o algoritmo usar o gradiente descendente.
Imagine que você está em uma montanha e quer chegar ao ponto mais baixo (o mínimo de uma função de custo). Você está de olhos vendados: não vê a paisagem, mas sente a inclinação do terreno sob os pés. Seu objetivo é descer o mais rápido possível.



Posição nova = posição atual − taxa de aprendizado × inclinação

Uma função convexa “curva para cima” em toda a extensão: tem um único mínimo. Funções não convexas têm mínimos locais, platôs e pontos de sela.
No gradient boosting, isso significa treinar cada árvore em uma subamostra dos dados — veremos isso como GBM estocástico.
| Altura (m) | Cor favorita | Gênero | Peso (kg) |
|---|---|---|---|
| 1,6 | Azul | M | 88 |
| 1,6 | Verde | F | 76 |
| 1,5 | Azul | F | 56 |
| 1,8 | Vermelho | M | 73 |
| 1,5 | Verde | M | 77 |
| 1,4 | Azul | F | 57 |
Passo 1. Calculamos a média da variável resposta no treino:
\[F_0 = \bar{y} = 71{,}2\]
É a nossa primeira árvore: uma única folha, que prediz 71,2 kg para todo mundo.
| Altura (m) | Cor favorita | Gênero | Peso (kg) | Pseudo-resíduo |
|---|---|---|---|---|
| 1,6 | Azul | M | 88 | 88 − 71,2 = 16,8 |
| 1,6 | Verde | F | 76 | 76 − 71,2 = 4,8 |
| 1,5 | Azul | F | 56 | 56 − 71,2 = -15,2 |
| 1,8 | Vermelho | M | 73 | 73 − 71,2 = 1,8 |
| 1,5 | Verde | M | 77 | 77 − 71,2 = 5,8 |
| 1,4 | Azul | F | 57 | 57 − 71,2 = -14,2 |
Construímos uma árvore baseada nos erros da primeira:
\[\text{resíduo} = \text{observado} - \text{predito}\]
A coluna pseudo-resíduo passa a ser a variável resposta da próxima árvore.
| Altura (m) | Cor favorita | Gênero | Pseudo-resíduo |
|---|---|---|---|
| 1,6 | Azul | M | 88 − 71,2 = 16,8 |
| 1,6 | Verde | F | 76 − 71,2 = 4,8 |
| 1,5 | Azul | F | 56 − 71,2 = -15,2 |
| 1,8 | Vermelho | M | 73 − 71,2 = 1,8 |
| 1,5 | Verde | M | 77 − 71,2 = 5,8 |
| 1,4 | Azul | F | 57 − 71,2 = -14,2 |
Usamos altura, cor e gênero para prever o resíduo. Aqui limitamos a árvore a 4 folhas.
Cada folha prevê a média dos resíduos que caem nela.
| Altura (m) | Cor favorita | Gênero | Peso (kg) | Predição |
|---|---|---|---|---|
| 1,6 | Azul | M | 88 | 71,2 + 16,8 = 88,0 |
| 1,6 | Verde | F | 76 | 71,2 + 4,8 = 76,0 |
| 1,5 | Azul | F | 56 | 71,2 − 14,7 = 56,5 |
| 1,8 | Vermelho | M | 73 | 71,2 + 3,8 = 75,0 |
| 1,5 | Verde | M | 77 | 71,2 + 3,8 = 75,0 |
| 1,4 | Azul | F | 57 | 71,2 − 14,7 = 56,5 |
O valor predito ficou quase igual ao real: viés muito baixo — mas, provavelmente, alta variância!
| Gênero | Peso (kg) | Predição (ν = 0,1) | Novo resíduo |
|---|---|---|---|
| M | 88 | 71,2 + 0,1 × 16,8 = 72,85 | 15,1 |
| F | 76 | 71,2 + 0,1 × 4,8 = 71,65 | 4,3 |
| F | 56 | 71,2 − 0,1 × 14,7 = 69,70 | -13,7 |
| M | 73 | 71,2 + 0,1 × 3,8 = 71,55 | 1,4 |
| M | 77 | 71,2 + 0,1 × 3,8 = 71,55 | 5,4 |
| F | 57 | 71,2 − 0,1 × 14,7 = 69,70 | -12,7 |
Multiplicamos a nova árvore por uma taxa de aprendizado \(\nu = 0{,}1\):
\[\text{predição} = \text{média} + 0{,}1 \times \text{árvore}\]
E onde entra o “gradiente”? Voltando à montanha: o resíduo diz para que lado e quanto a predição precisa se mover para diminuir o erro — é a “inclinação do terreno”. Cada nova árvore é um passo morro abaixo, e a taxa de aprendizado é o tamanho desse passo.
| Gosta de pipoca | Idade | Cor favorita | Gosta de animação |
|---|---|---|---|
| Sim | 12 | Azul | Sim (1) |
| Sim | 87 | Verde | Sim (1) |
| Não | 44 | Azul | Não (0) |
| Sim | 19 | Vermelho | Não (0) |
| Não | 32 | Verde | Sim (1) |
| Não | 14 | Azul | Sim (1) |
Passo 1. Ponto de partida: 4 de 6 pessoas gostam de animação, então a probabilidade inicial é
\[p = \frac{4}{6} = 0{,}67\]
Por conveniência, o algoritmo faz as contas na escala do log das chances: \(\log(4/2) = 0{,}69\). Pense nela apenas como outra forma de escrever a mesma probabilidade — sempre convertemos de volta no final.
| Idade | Cor favorita | Gosta de animação | Pseudo-resíduo |
|---|---|---|---|
| 12 | Azul | Sim (1) | 1 − 0,67 = 0,33 |
| 87 | Verde | Sim (1) | 1 − 0,67 = 0,33 |
| 44 | Azul | Não (0) | 0 − 0,67 = -0,67 |
| 19 | Vermelho | Não (0) | 0 − 0,67 = -0,67 |
| 32 | Verde | Sim (1) | 1 − 0,67 = 0,33 |
| 14 | Azul | Sim (1) | 1 − 0,67 = 0,33 |
Com corte em 0,5, todos seriam classificados como Sim. O resíduo é observado − probabilidade predita.
Árvore limitada a 3 folhas (na prática, de 8 a 32).
Na regressão, cada folha previa a média dos resíduos. Aqui há uma pequena correção, porque as contas estão em log-chances. A fórmula é:
\[\text{valor da folha} = \frac{\text{soma dos resíduos da folha}}{\text{soma de } p \times (1 - p) \text{ da folha}}\]
Para a folha Idade ≤ 37 (três resíduos de 0,33, todos com \(p = 0{,}67\)):
\[\frac{0{,}33 + 0{,}33 + 0{,}33}{3 \times (0{,}67 \times 0{,}33)} = 1{,}50\]
Do mesmo jeito: folha Vermelho → -3,00; folha Idade > 37 → -0,75.
Nova predição = ponto de partida + taxa × valor da folha
Para a 1ª pessoa (azul, 12 anos → folha de valor 1,50):
\[0{,}69 + 0{,}8 \times 1{,}50 = 1{,}89\]
Convertendo de volta para probabilidade: p = 0,87.
Usamos taxa 0,8 para o exemplo andar rápido; na prática, é mais comum 0,1.
| Idade | Cor favorita | Gosta de animação | Prob. predita | Novo resíduo |
|---|---|---|---|---|
| 12 | Azul | Sim (1) | 0,87 | 0,13 |
| 87 | Verde | Sim (1) | 0,52 | 0,48 |
| 44 | Azul | Não (0) | 0,52 | -0,52 |
| 19 | Vermelho | Não (0) | 0,15 | -0,15 |
| 32 | Verde | Sim (1) | 0,87 | 0,13 |
| 14 | Azul | Sim (1) | 0,87 | 0,13 |
Todos os resíduos ficaram menores em módulo.
Com os novos resíduos, construímos outra árvore, com a mesma fórmula para as folhas.
O modelo passa a ser:
ponto de partida + 0,8 × árvore 1 + 0,8 × árvore 2
O processo se repete até o número máximo de árvores ou até os resíduos ficarem muito pequenos.
Nova pessoa: gosta de pipoca = Sim, idade = 25, cor favorita = Verde. Ela gosta de animação?
\[0{,}69 + (0{,}8 \times 1{,}50) + (0{,}8 \times 0{,}51) = 2{,}30 \;\;\longrightarrow\;\; p = 0{,}91\]
Probabilidade de 91% → a pessoa gosta de animação.

Random Forest: adicionar mais árvores nunca piora o erro de teste — só estabiliza a média.
Gradient Boosting: adicionar mais árvores pode piorar o erro de teste — cada árvore passa a ajustar o ruído do treino.
Early stopping: monitorar o erro de validação a cada iteração e parar quando ele deixa de melhorar por um certo número de rodadas.

O XGBoost procura árvores que errem pouco e que sejam simples:
Custo total = erro do modelo + penalidade pela complexidade das árvores
A penalidade é controlada por dois “botões”:
O GBM tradicional controla a complexidade por fora (profundidade, taxa, número mínimo de observações); o XGBoost coloca essa preocupação dentro do próprio critério que está otimizando.
De volta à montanha de olhos vendados:
Resultado: cada árvore faz uma correção do tamanho certo, e o modelo precisa de menos árvores para chegar a um bom resultado.

Lembre: cada árvore do boosting tenta prever os resíduos (os erros que ainda faltam corrigir). Cada folha dá um único valor de correção para todas as observações que caem nela.
Pergunta-chave: uma folha consegue corrigir bem os seus resíduos com um único número?
A similaridade é uma nota que mede exatamente isso: quão “parecidos” (do mesmo lado) são os resíduos de um grupo.

\[\text{Similaridade} = \frac{(\text{soma dos resíduos})^2}{\text{nº de resíduos} + \lambda}\]
| Grupo | Resíduos | ① Soma | ② Ao quadrado | ③ ÷ 3 |
|---|---|---|---|---|
| A | 5, 6, 4 | 15 | 225 | 75 |
| B | 5, −6, 1 | 0 | 0 | 0 |
| C | −5, −6, −4 | −15 | 225 | 75 |
Quanto maior a nota, mais útil é ter esse grupo como uma folha.
Uma boa divisão separa os resíduos positivos dos negativos, criando grupos mais “parecidos” do que o grupo original.
Ganho = similaridade da esquerda + similaridade da direita − similaridade antes de dividir
O XGBoost testa várias divisões candidatas, fica com a de maior ganho e, no final, poda os ramos cujo ganho não supera o “preço” γ.
Os resíduos iniciais (peso − média 71,2) e a divisão candidata Gênero = F?:
Antes de dividir: a soma dos 6 resíduos é 0 (sempre é, em torno da média)
\[\text{Sim} = \frac{0^2}{6} = 0\]
Mulheres (F): \(\dfrac{(-24{,}5)^2}{3} = \dfrac{600{,}25}{3} = 200{,}1\)
Homens (M): \(\dfrac{(24{,}5)^2}{3} = \dfrac{600{,}25}{3} = 200{,}1\)
Ganho = 200,1 + 200,1 − 0 = 400,2

O λ entra somando no denominador: é como se cada folha tivesse “observações a mais”, o que deixa tudo mais conservador.
| λ = 0 | λ = 1 | |
|---|---|---|
| Similaridade das mulheres | 600,25 ÷ 3 = 200,1 | 600,25 ÷ (3 + 1) = 150,1 |
| Similaridade dos homens | 200,1 | 150,1 |
| Ganho | 400,2 | 300,1 |
| Valor da folha das mulheres (soma ÷ (nº + λ)) | −24,5 ÷ 3 = -8,17 | −24,5 ÷ (3 + 1) = -6,13 |

Hiperparâmetro (xgboost) |
O que controla | Valores típicos |
|---|---|---|
eta |
taxa de aprendizado | 0,01–0,3 |
nrounds + early_stopping_rounds |
número de árvores e parada antecipada | até milhares |
max_depth |
profundidade de cada árvore | 3–10 |
min_child_weight |
“tamanho” mínimo de uma folha (≈ nº mínimo de observações) | 1–20 |
gamma |
ganho mínimo para dividir (γ) | 0–5 |
lambda / alpha |
freio nos valores das folhas | 0–10 |
subsample |
fração de linhas por árvore | 0,5–0,9 |
colsample_bytree |
fração de colunas por árvore | 0,5–0,9 |
Mesma estratégia de antes: fixar eta, achar nrounds com early stopping, ajustar a árvore, depois a regularização e a subamostragem, e por fim diminuir eta.
| Gradient Boosting (GBM) | XGBoost | |
|---|---|---|
| Tamanho do passo | usa a inclinação | usa inclinação e curvatura |
| Controle da complexidade | indireto: taxa, profundidade, mín. obs. | dentro do critério: γ e λ |
| Critério de divisão | redução do erro dos resíduos | ganho de similaridade |
| Poda | parada antecipada | cresce e depois poda por γ |
| Valores ausentes | depende da implementação | tratamento nativo |
| Velocidade | moderada | alta (paralelismo, histogramas) |
Outras implementações modernas na mesma linha: LightGBM (Microsoft, crescimento por folha, muito rápido) e CatBoost (Yandex, ótimo com variáveis categóricas).

Vantagens
Limitações

