Generalização e Viés/Variância
O que “generalização” significa
Em aprendizado de máquina (machine learning), generalização é a capacidade de um modelo de ter bom desempenho em dados novos, não vistos extraídos da mesma distribuição (ou de uma distribuição similar) que os dados em que ele foi treinado. Um modelo que generaliza bem aprendeu padrões que persistem além dos exemplos específicos do seu conjunto de treinamento.
Formalmente, a maioria dos cenários de aprendizado supervisionado assume que pontos de dados ((x, y)) são amostrados i.i.d. de alguma distribuição desconhecida (\mathcal{D}). Escolhemos uma hipótese/modelo (f_\theta) e uma função de perda (\ell(f_\theta(x), y)).
- Risco de treinamento (empírico): [ \hat{R}(\theta) = \frac{1}{n}\sum_{i=1}^n \ell(f_\theta(x_i), y_i) ]
- Risco de teste (verdadeiro): [ R(\theta) = \mathbb{E}{(x,y)\sim \mathcal{D}}[\ell(f\theta(x), y)] ]
Como (R(\theta)) depende da distribuição desconhecida (\mathcal{D}), nós o aproximamos usando um conjunto de validação/teste (validation/test set). A questão central da teoria do aprendizado é: quando um erro de treinamento baixo implica um erro de teste baixo? Isso é tratado de forma mais formal em tópicos como Aprendizado PAC e medidas de capacidade como Dimensão VC, mas a lente mais prática é o trade-off viés/variância (bias/variance tradeoff).
A lacuna de generalização
Uma quantidade diagnóstica útil é a lacuna de generalização (generalization gap):
[ \text{gap} = R_{\text{test}} - R_{\text{train}} ]
- Uma lacuna positiva grande frequentemente indica sobreajuste: o modelo está ajustando idiossincrasias do conjunto de treinamento.
- Uma lacuna pequena pode ser algo bom, mas também pode ocorrer quando tanto o erro de treino quanto o de teste são altos (subajuste).
Subajuste vs sobreajuste (como o trade-off aparece)
Dois modos de falha comuns:
Subajuste (alto viés)
O modelo é simples demais (ou restrito demais) para capturar a relação subjacente.
Sintomas:
- O erro de treinamento é alto
- O erro de validação/teste também é alto
- As previsões do modelo podem parecer excessivamente suaves ou sistematicamente erradas
Exemplos práticos:
- Usar regressão linear (linear regression) para uma relação claramente não linear (por exemplo, prever o preço de uma casa apenas com uma função linear da área quando os efeitos de localização dominam).
- Uma árvore de decisão rasa (shallow decision tree) com uma profundidade máxima muito pequena que não consegue capturar interações.
Sobreajuste (alta variância)
O modelo é flexível demais em relação aos dados (ou é treinado de forma agressiva demais), então ele aprende ruído ou padrões incidentais.
Sintomas:
- O erro de treinamento é muito baixo
- O erro de validação/teste é significativamente maior
- O desempenho pode variar bastante entre diferentes particionamentos de treinamento
Exemplos práticos:
- Um polinômio de alto grau (high-degree polynomial) que passa por todos os pontos de treinamento, mas oscila violentamente entre os pontos.
- Uma árvore de decisão sem limite de profundidade (decision tree with no depth limit) que memoriza perfeitamente os dados de treinamento.
- Uma rede neural grande (large neural network) treinada em um conjunto de dados pequeno sem regularização/aumento de dados adequados.
Um exemplo concreto: regressão polinomial
Imagine dados gerados por uma função suave com ruído:
[ y = \sin(x) + \epsilon,\quad \epsilon \sim \mathcal{N}(0, \sigma^2) ]
- Polinômio de grau 1: rígido demais → subajusta
- Polinômio de grau 5: frequentemente um bom ajuste
- Polinômio de grau 20: pode interpolar os dados de treino → frequentemente sobreajusta, a menos que você tenha muitos dados e/ou regularização
Esse exemplo ilustra que a complexidade do modelo (model complexity) altera tanto o erro de treinamento quanto o erro de teste, mas não da mesma forma.
Viés e variância: a intuição central
Viés e variância são duas fontes de erro de teste (além de ruído irredutível):
- Viés: erro devido a suposições equivocadas ou flexibilidade insuficiente (erro sistemático).
- Variância: erro devido à sensibilidade aos dados de treinamento (instabilidade).
Intuitivamente:
- Modelos com alto viés são estáveis, mas podem deixar passar estrutura real.
- Modelos com alta variância conseguem ajustar estrutura complexa, mas podem perseguir ruído.
Um modelo mental clássico: se você treinasse o mesmo algoritmo em muitas amostras diferentes da mesma distribuição, a função aprendida variaria muito?
- Se sim → alta variância.
- Se não → baixa variância.
A decomposição viés–variância (regressão)
A decomposição mais limpa é para regressão com erro quadrático (squared error regression). Suponha que a relação verdadeira seja:
[ y = f^*(x) + \epsilon,\quad \mathbb{E}[\epsilon]=0,\ \text{Var}(\epsilon)=\sigma^2 ]
Deixe (\hat{f}(x)) ser o modelo treinado em um conjunto de treinamento aleatório. Então o erro de previsão esperado em um ponto (x) pode ser decomposto como:
[ \mathbb{E}\left[(\hat{f}(x)-y)^2\right] = \underbrace{\left(\mathbb{E}[\hat{f}(x)] - f^*(x)\right)^2}_{\text{Viés}^2}
- \underbrace{\mathbb{E}\left[\left(\hat{f}(x)-\mathbb{E}[\hat{f}(x)]\right)^2\right]}_{\text{Variância}}
- \underbrace{\sigma^2}_{\text{Ruído}} ]
Implicações principais:
- Você pode reduzir o viés aumentando a capacidade do modelo, melhorando características (features) ou reduzindo restrições excessivamente fortes.
- Você pode reduzir a variância adicionando mais dados, usando regularização, fazendo ensembles ou tornando o modelo menos sensível.
- Ruído (erro irredutível) não pode ser eliminado por modelagem — ele reflete aleatoriedade ou variáveis ausentes.
E quanto à classificação?
Para classificação com perda 0–1, a decomposição é menos “arrumada”. Mas a intuição permanece:
- Classificadores simples demais tendem a ter alto viés.
- Classificadores muito flexíveis (por exemplo, árvores sem poda, 1-NN) tendem a ter alta variância.
Na prática, você diagnostica problemas de viés/variância usando curvas de aprendizado (learning curves), comportamento de validação cruzada e padrões de erro.
O trade-off: por que melhorar um pode piorar o outro
Muitas escolhas de modelagem movem você ao longo de um espectro viés/variância:
- Aumentar a capacidade (mais parâmetros, árvores mais profundas, polinômios de grau mais alto):
- tipicamente reduz o viés
- tipicamente aumenta a variância
- Adicionar regularização ou restrições:
- tipicamente aumenta o viés
- tipicamente reduz a variância
O objetivo não é “minimizar viés” ou “minimizar variância” isoladamente, mas minimizar o erro esperado de teste.
Diagnosticando subajuste e sobreajuste na prática
Curvas de aprendizado (treino/validação vs tamanho do conjunto de dados)
Uma curva de aprendizado plota o desempenho de treinamento e validação em função do tamanho do conjunto de treinamento.
Padrões comuns:
- Subajuste (alto viés)
- Erro de treinamento alto e estabiliza cedo
- Erro de validação próximo ao erro de treinamento (ambos ruins)
- Adicionar mais dados não ajuda muito porque o modelo não consegue usá-los de forma eficaz
- Sobreajuste (alta variância)
- Erro de treinamento muito baixo
- Erro de validação significativamente pior
- Aumentar os dados de treinamento frequentemente ajuda (a curva de validação melhora)
Código de exemplo (scikit-learn) para gerar curvas de aprendizado:
import numpy as np
from sklearn.model_selection import learning_curve
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
X = np.linspace(-3, 3, 200).reshape(-1, 1)
y = np.sin(X).ravel() + 0.2 * np.random.randn(len(X))
model = make_pipeline(PolynomialFeatures(degree=15), Ridge(alpha=1e-3))
train_sizes, train_scores, val_scores = learning_curve(
model, X, y, cv=5, scoring="neg_mean_squared_error",
train_sizes=np.linspace(0.1, 1.0, 8), shuffle=True, random_state=0
)
train_mse = -train_scores.mean(axis=1)
val_mse = -val_scores.mean(axis=1)
print("train sizes:", train_sizes)
print("train MSE:", train_mse.round(3))
print("val MSE:", val_mse.round(3))
Interpretação:
- Se o MSE de validação permanece muito pior do que o MSE de treinamento → problema de variância.
- Se ambos são altos → problema de viés.
Curvas de validação (erro vs hiperparâmetro)
Uma curva de validação (validation curve) varia um hiperparâmetro (por exemplo, profundidade da árvore, força de regularização) e mede erro de treino/validação.
Comportamento típico:
- Baixa capacidade → subajuste → ambos os erros altos
- Capacidade moderada → melhor validação
- Alta capacidade → treino melhora, validação piora → sobreajuste
Esta é uma forma prática de ver o trade-off para a sua família de modelos.
Estabilidade na validação cruzada como “detector de variância”
Modelos com alta variância tendem a ter:
- Grande desvio padrão nas pontuações de validação cruzada
- Sensibilidade a sementes aleatórias, ordenação dos dados e pequenas mudanças nos dados
Se uma pequena mudança no conjunto de dados causa uma grande mudança nas previsões ou na acurácia, você provavelmente tem um problema de variância.
Não confunda sobreajuste com bugs de avaliação
Algum “sobreajuste” é, na verdade, vazamento de dados (data leakage) ou avaliação falha:
- Pré-processamento ajustado no conjunto completo de dados (por exemplo, escalonamento antes de separar)
- Vazamento de informação do futuro (séries temporais)
- Duplicatas entre treino/teste
- Vazamento do alvo nas características
Isso pode criar desempenho de validação irrealisticamente bom e, depois, falhas “misteriosas” no deployment.
Alavancas práticas: como gerenciar o trade-off
Este artigo foca no trade-off conceitual. Para um catálogo mais profundo de métodos, veja Sobreajuste & Regularização. Na prática, você gerencia generalização usando várias classes de intervenções:
1) Obter mais (e melhores) dados
Frequentemente a redução de variância mais confiável:
- Mais amostras rotuladas
- Melhor cobertura de casos raros
- Menos ruído nos rótulos (melhor anotação)
- Aumento de dados (data augmentation) (especialmente em visão/áudio, às vezes NLP)
Mais dados tendem a reduzir variância sem necessariamente aumentar viés.
2) Ajustar a capacidade do modelo à tarefa e ao conjunto de dados
Exemplos:
- Preferir modelos mais simples para conjuntos de dados pequenos, a menos que você tenha regularização forte.
- Usar arquiteturas com vieses indutivos (inductive biases) apropriados (por exemplo, CNNs para imagens, modelos de sequência para texto). Um bom viés indutivo pode reduzir variância ao restringir o espaço de hipóteses a soluções plausíveis.
3) Regularizar (explicitamente ou implicitamente)
Regularização reduz variância ao desencorajar soluções complexas demais:
- Weight decay (L2), esparsidade L1
- Dropout
- Early stopping
- Data augmentation
- Restrições como profundidade máxima em árvores
Muitos desses tópicos são cobertos em Sobreajuste & Regularização.
4) Usar ensembles para reduzir variância
Ensembles fazem média da instabilidade:
- Bagging / Florestas Aleatórias (Random Forests) reduzem a variância de árvores
- Média de modelos ou snapshot ensembles em deep learning
- Boosting pode reduzir viés e às vezes variância, mas também pode sobreajustar se levado longe demais sem controles
Regra prática:
- Se o seu aprendiz base é instável (alta variância), bagging/média ajuda muito.
5) Ajustar hiperparâmetros com validação adequada
Use:
- validação cruzada k-fold (comum para conjuntos pequenos/médios)
- validação com conjunto separado e early stopping (comum em deep learning)
- validação cruzada aninhada (nested CV) se você precisar de uma estimativa não enviesada após o ajuste
O ajuste de hiperparâmetros é essencialmente uma busca pelo melhor trade-off viés/variância.
Fundamentos teóricos (leves, mas úteis)
Capacidade, complexidade amostral e por que dados importam
A teoria do aprendizado explica generalização via limites (bounds) que relacionam:
- complexidade da classe de modelos (capacidade)
- número de amostras
- erro/confiança desejados
Conceitos como Dimensão VC formalizam capacidade para algumas classes de hipóteses. Estruturas de alto nível como Aprendizado PAC conectam tamanho da amostra à generalização alcançável.
Embora limites clássicos possam ser frouxos para deep learning moderno, eles ainda fornecem intuição importante:
- Se você aumenta a complexidade do espaço de hipóteses, tipicamente precisa de mais dados ou de um viés indutivo/regularização mais fortes para generalizar.
Minimização do Risco Empírico (ERM) e viés indutivo
A maioria dos procedimentos de treinamento realiza ERM (minimizar a perda de treinamento). Generalização exige que:
- a solução escolhida entre muitas soluções com baixa perda de treinamento também tenha baixa perda de teste
- o viés indutivo do algoritmo (arquitetura + otimização + regularização) selecione soluções “boas”
Isso ajuda a explicar por que dois modelos com capacidade similar podem generalizar de forma diferente: a dinâmica de treinamento importa.
Nuance moderna: interpolação e “double descent”
Narrativas clássicas de viés/variância preveem uma curva em U do erro de teste conforme a capacidade aumenta: melhora → melhor → piora.
Modelos modernos superparametrizados (especialmente redes profundas) frequentemente mostram descida dupla (double descent):
- À medida que a capacidade aumenta, o erro de teste diminui (o viés diminui)
- Perto do “limiar de interpolação” (interpolation threshold) (onde o erro de treinamento se aproxima de zero), o erro de teste pode aumentar (comportamento tipo variância)
- Com ainda mais capacidade, o erro de teste pode diminuir novamente — otimização e regularização implícita podem favorecer soluções que generalizam
Conclusão prática:
- “Mais parâmetros” não significa automaticamente pior generalização.
- Mas sobreajuste continua real: dados insuficientes, ruído de rótulos, mudança de distribuição ou regularização fraca ainda podem causar grandes lacunas de generalização.
- Diagnósticos (curvas de aprendizado, validação adequada) continuam essenciais.
Generalização no mundo real: além da suposição i.i.d.
Mesmo um modelo que “generaliza” perfeitamente sob suposições i.i.d. pode falhar em produção devido a:
- Mudança de distribuição (distribution shift): os dados de treinamento diferem dos dados de produção (comportamento do usuário muda, novos dispositivos, efeitos sazonais).
- Entradas fora da distribuição (out-of-distribution, OOD): casos raros ou novos não representados no treinamento.
- Deriva de conceito (concept drift): o mapeamento de (x \to y) muda ao longo do tempo (padrões de fraude, dinâmica de mercado).
Nesses cenários, um aparente sobreajuste pode, na verdade, ser um desalinhamento entre distribuições de treino e teste. As soluções podem envolver:
- melhor coleta de dados e monitoramento
- aprendizado contínuo ou retreinamento periódico
- protocolos robustos de avaliação e testes de estresse
Um checklist prático (orientado a viés/variância)
Quando o desempenho estiver ruim, pergunte:
- O erro de treinamento é alto?
- Sim → provavelmente alto viés (subajuste) ou problema de otimização
- aumentar a capacidade, melhorar características, treinar por mais tempo, reduzir regularização excessivamente forte
- Não → vá para 2
- A lacuna de generalização é grande?
- Sim → provavelmente alta variância (sobreajuste)
- mais dados, regularização mais forte, aumento de dados, early stopping, ensembles
- Não → vá para 3
- Você está avaliando corretamente?
- verificar vazamento, estratégia de split (especialmente séries temporais), duplicatas, pipeline de pré-processamento
- Os dados de produção são diferentes?
- investigar shift/drift; validar em dados que correspondam às condições de deployment
Resumo
- Generalização é desempenho em dados não vistos; a lacuna de generalização é a diferença entre desempenho em treinamento e teste/validação.
- Subajuste corresponde a alto viés; sobreajuste corresponde a alta variância.
- Para regressão com perda quadrática, o erro se decompõe em viés² + variância + ruído.
- Na prática, você diagnostica problemas de viés/variância usando curvas de aprendizado, curvas de validação, estabilidade na validação cruzada e higiene cuidadosa de avaliação.
- Você gerencia o trade-off com dados, capacidade do modelo, regularização, ensembles e validação adequada, com deep learning moderno adicionando nuances (por exemplo, descida dupla) mas sem eliminar a necessidade dessas ferramentas.
Para o conjunto concreto de técnicas para reduzir sobreajuste, veja Sobreajuste & Regularização. Para uma teoria mais profunda sobre por que generalização é possível, veja Aprendizado PAC e Dimensão VC.