Estratégias de Ensemble
Visão geral
A combinação em comitê (ensembling) combina múltiplos modelos para produzir uma única previsão que, em geral, é mais precisa, mais estável ou melhor do que qualquer modelo individual. A ideia central é que modelos diferentes cometem erros diferentes; se esses erros não forem perfeitamente correlacionados, combinar previsões pode reduzir a variância e, às vezes, o viés.
Este artigo foca em empilhamento (stacking), mesclagem (blending) e padrões práticos de comitês usados em fluxos de trabalho modernos de aprendizado de máquina (machine learning) — especialmente em cenários em que você está fazendo Seleção de Modelos e quer uma forma fundamentada de usar comitês com “segurança”, sem sobreajuste (overfitting).
Por que comitês funcionam (fundamentação teórica)
Decomposição do erro e diversidade
Um modelo mental útil vem do Trade-off Viés-Variância:
- Modelos de alta variância (por exemplo, árvores profundas, muitas redes neurais (neural nets)) podem ser instáveis; comitês tendem a reduzir a variância ao fazer média do ruído.
- Modelos de alto viés (por exemplo, modelos lineares) podem deixar de capturar padrões não lineares; combinar aprendizes diversos pode reduzir o viés se alguns membros capturarem padrões que outros não capturam.
A média ajuda quando os erros dos modelos não são perfeitamente correlacionados. Se dois modelos cometem erros idênticos, fazer média pouco ajuda. Se cometem erros diferentes, a média pode cancelar erros.
Implicação prática: comitês têm sucesso quando você incentiva diversidade, por exemplo:
- Diferentes famílias de modelos (árvores de decisão com reforço por gradiente (GBDT) + linear + rede neural)
- Diferentes hiperparâmetros (hyperparameters) (Ajuste de Hiperparâmetros)
- Diferentes sementes aleatórias (random seeds) / amostragens bootstrap (bootstraps)
- Diferentes conjuntos de atributos ou pré-processamento (preprocessing)
- Diferentes fatias dos dados de treinamento (cuidado com vazamento de dados (leakage))
Média simples vs combinação aprendida
Há duas formas amplas de combinar previsões:
- Regras fixas: média/mediana de probabilidades, voto majoritário, média ponderada.
- Regras aprendidas: treinar um meta-modelo (meta-model) para combinar as saídas dos modelos base (empilhamento).
Regras fixas são mais simples e muitas vezes surpreendentemente fortes. Regras aprendidas podem ser mais poderosas, mas introduzem mais formas de sobreajustar se forem feitas incorretamente.
Padrões base de comitês (contexto rápido)
Embora este artigo enfatize empilhamento e mesclagem, ajuda situá-los entre famílias comuns de comitês:
- Agregação por bootstrap (bagging) (por exemplo, Floresta Aleatória (Random Forest)): treinar muitos modelos em amostras bootstrap; fazer média. Forte redução de variância. Relacionado: Bagging.
- Reforço (boosting) (por exemplo, XGBoost/LightGBM/CatBoost): adicionar modelos sequencialmente para corrigir erros anteriores; frequentemente estado da arte (state-of-the-art) em dados tabulares (tabular data). Relacionado: Boosting por Gradiente.
- Comitês de instantâneos / pontos de verificação (snapshot / checkpoint ensembles) (aprendizado profundo): fazer média de previsões de múltiplos checkpoints.
- Empilhamento / mesclagem: combinar modelos treinados diferentes com um aprendiz de segunda etapa (empilhamento) ou um combinador baseado em retenção (mesclagem).
Empilhamento/mesclagem são especialmente úteis quando você já tem vários bons candidatos e quer uma forma sistemática de combiná-los.
Empilhamento
O que é empilhamento?
Empilhamento (generalização empilhada (stacked generalization)) treina:
- Modelos de nível 0 (modelos base (base models)): seus modelos usuais treinados nos atributos originais.
- Modelo de nível 1 (meta-modelo): um modelo treinado para combinar as previsões dos modelos base.
O detalhe crítico: o meta-modelo deve ser treinado em previsões fora da amostra (out-of-sample) dos modelos base, geralmente via Validação Cruzada. Caso contrário, o meta-modelo vê previsões excessivamente otimistas dos modelos base e vai sobreajustar (vazamento clássico).
A receita central: previsões out-of-fold (OOF)
Para cada dobra (k):
- Treine cada modelo base nas dobras de treinamento (\neq k).
- Prediga na dobra (k) (a dobra mantida fora).
- Colete essas previsões para todas as dobras → previsões fora da dobra (out-of-fold, OOF) para todo o conjunto de treinamento.
- Treine o meta-modelo nas previsões OOF (e, opcionalmente, nos atributos originais).
No tempo de inferência:
- Ajuste cada modelo base em todos os dados de treinamento.
- Obtenha as previsões deles em novos dados.
- Alimente essas previsões no meta-modelo treinado.
Detalhes: empilhamento com classificador vs regressor
- Regressão (regression): previsões base são contínuas; o meta-modelo pode ser regressão linear, regressão ridge (ridge regression), elastic net (elastic net), ou uma árvore/GBDT pequena.
- Classificação binária (binary classification): use probabilidades previstas (ou logits (logits)). O meta-modelo costuma ser regressão logística ou um GBDT pequeno.
- Multiclasse (multiclass): cada modelo base produz um vetor de probabilidades; os meta-atributos (meta-features) são probabilidades (ou logits) concatenadas entre classes e modelos.
Escolhendo o meta-modelo
Um padrão comum e robusto é um modelo linear regularizado (regularized linear model):
- Regressão logística (classificação)
- Ridge/elastic net (regressão)
Por quê? É difícil um combinador linear sobreajustar de forma grave, e ele fornece pesos interpretáveis (“quanto confiar em cada modelo base”). Um meta-modelo mais flexível (GBDT, rede neural) pode superar, mas aumenta o risco de vazamento/sobreajuste e exige validação cuidadosa e Regularização.
Exemplo prático: empilhamento com scikit-learn
Abaixo há um classificador de empilhamento básico usando scikit-learn. Isso usa validação cruzada interna para gerar previsões OOF corretamente.
from sklearn.ensemble import RandomForestClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
base_estimators = [
("rf", RandomForestClassifier(n_estimators=500, random_state=0)),
("svm", Pipeline([
("scaler", StandardScaler()),
("svm", SVC(probability=True, C=2.0, kernel="rbf", random_state=0))
]))
]
meta = LogisticRegression(max_iter=2000)
stack = StackingClassifier(
estimators=base_estimators,
final_estimator=meta,
stack_method="predict_proba", # use probabilities
cv=5,
n_jobs=-1,
passthrough=False # set True to include original features as well
)
stack.fit(X_train, y_train)
proba = stack.predict_proba(X_test)
Notas:
passthrough=Truepode ajudar quando o meta-modelo precisa de atributos originais para resolver ambiguidades (mas também aumenta o risco de sobreajuste).- Se você ajustar os modelos base intensamente, faça isso com cuidado: o empilhamento adiciona outra camada em que viés de seleção (selection bias) pode se infiltrar. Considere avaliação aninhada (nested evaluation) se você estiver fazendo afirmações fortes. Relacionado: Avaliação de Modelos.
Armadilhas comuns do empilhamento
Vazamento de dados por usar previsões na própria amostra
- Se você treina modelos base em todos os dados de treinamento e gera previsões nesses mesmos dados para treinar o meta-modelo, o meta-modelo aprende a partir de previsões irrealisticamente “boas demais”.
Esquema de validação cruzada incompatível
- Para séries temporais, dados agrupados ou dados hierárquicos, use divisão apropriada (por exemplo, forward chaining, dobras por grupo). Relacionado: Validação Cruzada para Séries Temporais.
Vazamento do alvo (target leakage) via pré-processamento
- Garanta que o escalonamento (scaling), codificação (encoding) e imputação (imputation) sejam ajustados dentro de cada dobra (use pipelines (pipelines)).
Sobreajuste do meta-modelo
- Use regularização; mantenha o meta-modelo simples; valide corretamente.
Calibração de probabilidades (probability calibration)
- O empilhamento pode melhorar o ranqueamento, mas às vezes piora a calibração das probabilidades. Se probabilidades calibradas importam, avalie calibração explicitamente e considere Calibração de Probabilidades.
Mesclagem
O que é mesclagem?
Mesclagem é uma alternativa mais simples ao empilhamento:
- Divida os dados de treinamento em:
- um subconjunto de treino
- um subconjunto de retenção (holdout) (frequentemente chamado de “conjunto de mesclagem (blend set)”)
- Treine os modelos base no subconjunto de treino.
- Gere previsões dos modelos base no subconjunto de retenção.
- Treine o meta-modelo nas previsões do holdout (e, opcionalmente, nos atributos originais).
- Para inferência, retreine os modelos base em todos os dados (ou mantenha-os treinados no treino) e use o meta-modelo para combinar as previsões.
A mesclagem evita loops de validação cruzada e é mais fácil de implementar, mas usa menos dados para treinar os modelos base (e o meta-modelo vê menos exemplos).
Quando mesclagem é uma boa escolha
- Você tem muitos dados (então sacrificar um conjunto de retenção é aceitável).
- Você quer implementação simples e iteração rápida.
- Você quer uma separação clara entre “ajustar modelos base” e “aprender a combinação”.
Exemplo simples de mesclagem (manual)
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_tr, X_blend, y_tr, y_blend = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# Train base models on X_tr
m1.fit(X_tr, y_tr)
m2.fit(X_tr, y_tr)
m3.fit(X_tr, y_tr)
# Predict on blend set
P_blend = np.column_stack([
m1.predict_proba(X_blend)[:, 1],
m2.predict_proba(X_blend)[:, 1],
m3.predict_proba(X_blend)[:, 1],
])
# Train meta-model on blend predictions
meta = LogisticRegression()
meta.fit(P_blend, y_blend)
# Inference: predict with base models, then meta-model
P_test = np.column_stack([
m1.predict_proba(X_test)[:, 1],
m2.predict_proba(X_test)[:, 1],
m3.predict_proba(X_test)[:, 1],
])
final_proba = meta.predict_proba(P_test)[:, 1]
Armadilhas da mesclagem
- O conjunto de mesclagem vira um “mini conjunto de teste” ao qual você pode sobreajustar acidentalmente por iteração repetida.
- Se o conjunto de mesclagem for pequeno demais ou não representativo, o meta-modelo aprende pesos instáveis.
- Para classes desbalanceadas, garanta que a divisão do conjunto de mesclagem seja estratificada e que as métricas correspondam ao seu objetivo.
Padrões práticos de comitês (o que as pessoas realmente fazem)
1) Média simples (frequentemente uma linha de base forte)
Para muitos problemas, especialmente classificação com probabilidades bem comportadas, a média não ponderada (unweighted averaging) é difícil de superar:
- Regressão: (\hat{y} = \frac{1}{M}\sum_m \hat{y}_m)
- Classificação binária: média das probabilidades
- Multiclasse: média das probabilidades por classe
Por que funciona:
- Sem etapa extra de ajuste → menor risco de sobreajuste
- Suaviza erros idiossincráticos
- Funciona bem se os modelos forem igualmente fortes e diversos
Implementação:
proba_avg = (proba_m1 + proba_m2 + proba_m3) / 3.0
Dica: para classificação, fazer média de logits (escores pré-sigmoide) pode se comportar melhor do que fazer média de probabilidades quando os modelos estão muito confiantes, mas isso depende da calibração.
2) Média ponderada (aprenda pesos com segurança)
Se alguns modelos são consistentemente melhores, use pesos:
[ \hat{p} = \sum_m w_m \hat{p}_m,\quad \sum_m w_m = 1,\ w_m \ge 0 ]
Como escolher os pesos:
- Use um conjunto de validação (validation set) (ou OOF) e otimize a métrica diretamente.
- Ou use um meta-modelo linear regularizado (empilhamento com combinador linear).
Um compromisso muito prático:
- Gerar previsões OOF para cada modelo base
- Ajustar um meta-modelo de regressão ridge / regressão logística
- Usar seus coeficientes como pesos (opcionalmente com restrições)
3) Média de rankings (robusta para calibração ruidosa)
Se você se importa com métricas de ranqueamento (AUC, NDCG) e a calibração de probabilidades dos modelos difere, combine rankings (ranks) em vez de probabilidades:
- Converter as previsões de cada modelo em rankings
- Fazer média dos rankings
- Converter de volta, se necessário (ou avaliar diretamente a métrica de ranqueamento)
Isso é comum em competições e tarefas de recuperação (retrieval).
4) Comitê de dois modelos “especialista + generalista”
Um padrão comum em produção:
- Um modelo generalista robusto (por exemplo, GBDT em atributos tabulares)
- Um modelo especialista que se destaca em um segmento (por exemplo, rede neural em texto/imagem, ou um modelo ajustado para casos raros)
- Um combinador (combiner) que decide o quanto confiar em cada modelo
Você pode implementar o combinador como:
- Regras simples (“se houver texto, ponderar mais o modelo de texto”)
- Um pequeno modelo de gateamento (gating model) (uma mistura de especialistas (mixture-of-experts) simplificada)
Isso costuma ser mais fácil de depurar do que um empilhamento totalmente geral.
5) Empilhamento com atributos passthrough (com cuidado)
Às vezes, as previsões base são ambíguas sem contexto. Exemplo:
- Dois modelos base discordam principalmente em uma certa região do espaço de atributos (por exemplo, usuários de alta renda, textos longos).
- Incluir alguns atributos originais no meta-modelo pode ajudar a resolver conflitos.
Use:
passthrough=Truecom meta-modelo regularizado- Disciplina forte de validação para evitar vazamento sutil
6) Empilhamento multi-nível (raramente necessário)
Você pode empilhar empilhamentos (meta-modelos de nível 2), mas a complexidade cresce rápido e os ganhos muitas vezes são marginais, a menos que você tenha muitos dados e disciplina forte. Na maioria dos cenários práticos:
- uma meta-camada é suficiente
- ou uma média simples é competitiva
7) Aprendizado profundo: comitês por semente/checkpoint
Em aprendizado profundo, comitês de alto desempenho frequentemente vêm da mesma arquitetura treinada com:
- diferentes sementes aleatórias
- diferentes aumentos de dados (data augmentations)
- diferentes checkpoints (comitês de instantâneos)
- diferentes dobras
Isso é uma estratégia de redução de variância e pode gerar melhorias consistentes em visão computacional e processamento de linguagem natural (NLP). Também é caro; pese o custo contra latência e restrições de manutenção. Conceitos relacionados: Dropout (para aproximações de MC dropout) e Arquitetura Transformer (comum em comitês de PLN).
8) “Sopas de modelos” / média de parâmetros (avançado)
Uma prática recente em redes profundas às vezes faz média de pesos (parâmetros) em vez de previsões (por exemplo, média no espaço de pesos entre checkpoints ajustados/fine-tuned). Isso pode trazer ganhos semelhantes a comitês sem múltiplas passagens forward na inferência — embora dependa da arquitetura e do regime de treinamento e seja menos amplamente aplicável do que combinar previsões.
Como avaliar comitês corretamente
Use validação consistente, sem vazamento
Comitês frequentemente melhoram métricas por margens pequenas, mas reais, então a avaliação precisa ser estável:
- Prefira estimativas com validação cruzada para conjuntos pequenos/médios
- Mantenha um conjunto de teste final intocado quando possível
- Faça a estratégia de divisão refletir o cenário de implantação (tempo, grupos, usuários)
Se você iterar repetidamente em comitês, pode sobreajustar seu procedimento de validação. Trate sua validação como um recurso limitado.
Compare contra linhas de base fortes
Antes de implementar empilhamento, compare com:
- Melhor modelo único (bem ajustado)
- Média simples de alguns modelos diversos
- Média ponderada usando um pequeno conjunto de validação
Empilhamento não é garantido que vença uma média forte — especialmente se os modelos base forem altamente correlacionados.
Métricas e calibração
- Para saídas probabilísticas, verifique:
- log loss (log loss) / entropia cruzada (cross-entropy)
- curvas de calibração (calibration curves) / pontuação de Brier (Brier score) (veja Calibração de Probabilidades)
- Para problemas com classes desbalanceadas, prefira PR-AUC, F1 em limiares-alvo, ou métricas baseadas em custo.
Diretrizes de design (o que tende a funcionar)
Incentive diversidade intencionalmente
Bons membros de um comitê diferem em viés indutivo (inductive bias):
- Modelo baseado em árvore vs modelo linear vs rede neural
- Diferentes pipelines de engenharia de atributos (por exemplo, texto bruto vs TF-IDF)
- Diferentes janelas de contexto ou resoluções (para séries temporais / visão)
Se todos os modelos forem variantes da mesma arquitetura ajustada, o empilhamento pode agregar pouco além da média.
Mantenha o meta-modelo simples no início
Comece com:
- regressão logística / ridge sobre previsões OOF
Só avance para meta-modelos mais complexos se:
- você tiver dados suficientes no nível meta
- você conseguir validar corretamente
- você observar ganhos estáveis entre dobras/ao longo do tempo
Atente à latência e ao custo operacional
Comitês multiplicam:
- custo de treinamento (frequentemente administrável)
- custo de inferência (frequentemente a restrição real)
- superfície de monitoramento (múltiplos modelos podem sofrer drift de formas diferentes)
Compromisso comum em produção:
- Usar comitês offline ou para decisões de alto valor
- Destilar (distillation) o comitê em um único modelo (professor–aluno (teacher–student)) para serving (serving) (avançado)
Quando usar empilhamento vs mesclagem vs média simples
Média simples
Use quando:
- Você tem 2–10 modelos razoavelmente fortes e diversos
- Você quer robustez com complexidade mínima
- Você não tem muitos dados para treinar um meta-modelo
Mesclagem
Use quando:
- Você tem muitos dados
- Você quer simplicidade e velocidade
- Você aceita sacrificar um conjunto de retenção
Empilhamento
Use quando:
- Os dados são limitados (então você não quer reservar um grande conjunto de mesclagem)
- Você quer que o meta-modelo aprenda como combinar previsões entre regimes
- Você consegue implementar geração de previsões OOF sem vazamento
Checklist prático
- Escolha 3–7 modelos base diversos (mais nem sempre é melhor).
- Estabeleça uma linha de base forte com um único modelo.
- Tente média não ponderada primeiro.
- Se for empilhar:
- gere previsões OOF com o esquema certo de validação cruzada
- mantenha o pré-processamento dentro de pipelines
- comece com um meta-modelo linear regularizado
- Se for mesclar:
- reserve um conjunto de retenção representativo
- evite iterar indefinidamente no mesmo holdout
- Avalie com a métrica que corresponde ao objetivo real.
- Considere necessidades de calibração e definição de limiares.
- Leve em conta custo de inferência e manutenibilidade.
Relação com seleção de modelos
A combinação em comitê é tanto uma técnica de modelagem quanto uma estratégia de seleção de modelos:
- Ela pode reduzir o risco de escolher o “modelo único errado” quando vários têm desempenho semelhante.
- Ela interage fortemente com o desenho da validação e com a busca de hiperparâmetros (hyperparameter search); um fluxo de trabalho ingênuo pode inadvertidamente “fazer comitê do conjunto de validação” e superestimar o desempenho.
Para ajustar os aprendizes base que alimentam um comitê, veja Ajuste de Hiperparâmetros.