Seleção de Modelos
Agora você já consegue treinar várias famílias de modelos e validá-las honestamente. A seleção de modelos é a disciplina de escolher entre elas — e entre seus hiperparâmetros — sem se enganar. Seu coração teórico é o trade-off viés–variância; sua armadilha mais antiga é a regressão à média; sua ferramenta de trabalho é a busca em grade com validação cruzada.
O trade-off viés–variância
Imagine retreinar seu modelo em muitas amostras diferentes de dados de treino e observar sua previsão para um ponto fixo \(x\). Para o erro quadrático, o erro de teste esperado se decompõe:
- Viés — erro sistemático de um modelo simples demais para representar a verdade (ajuste de grau 1 a um seno: errado em toda parte, do mesmo jeito, a cada retreinamento);
- Variância — sensibilidade à amostra de treino específica (ajuste de grau 15: curvas radicalmente diferentes para cada amostra de 25 pontos);
- Ruído — a parte que nenhum modelo consegue remover.
Modelos simples: viés alto, variância baixa → subajuste. Modelos complexos: viés baixo, variância alta → sobreajuste. Em algum ponto intermediário está o ponto ideal — visível experimentalmente em uma curva de validação:
O erro de treino (laranja) cai monotonicamente com a complexidade — ele não consegue enxergar o sobreajuste. O erro de validação (azul) tem forma de U: cai enquanto a complexidade reduz o viés e depois sobe conforme a variância assume. Selecione a complexidade no fundo da curva azul, nunca na laranja.
Botões que movem você ao longo dessa curva: grau do polinômio, regularização α (invertido: α maior = mais simples), profundidade da árvore (Árvores de Decisão), k no k-NN (invertido), número de atributos.
Conduza você mesmo o trade-off — deslize do grau 0 (viés puro) ao 12 (variância pura) e observe os dois erros se separarem:
Curvas de aprendizado: mais dados valem a pena?
Plote os escores de treino e validação versus o tamanho do conjunto de treino:
- as curvas convergem para um escore baixo → viés alto: mais dados não ajudam; adicione capacidade ou atributos;
- grande diferença persistente → variância alta: mais dados (ou regularização) ajudarão.
Regressão à média
Galton (1886) notou que filhos de pais muito altos costumam estar mais próximos da altura média. O fenômeno geral: observações extremas são em parte sorte, e a sorte não se repete. Sempre que desempenho = habilidade + ruído, o melhor colocado da primeira rodada tende a recuar na segunda — sem necessidade de nenhuma explicação causal.
Por que isso assombra a seleção de modelos: compare 50 configurações de modelo pelo escore de validação e escolha a vencedora. A vencedora venceu em parte por ser boa e em parte por ter tido sorte naqueles dados de validação. Seu escore reportado é otimisticamente enviesado — espere que ele regrida quando testado de novo. Concretamente:
- quanto mais configurações você tenta, mais inflado fica o melhor escore de validação;
- é por isso que o conjunto de teste intocado existe: ele dá à vencedora uma medição honesta, sem sorte;
- o mesmo efeito explica por que o vencedor do Kaggle do ano passado tem desempenho pior em dados novos, e por que o "melhor gestor de fundos de 2025" decepciona em 2026.
A seleção infla os escores
O máximo de muitas estimativas ruidosas superestima o verdadeiro melhor. Reporte o escore de teste da vencedora, não seu escore de validação vencedor.
Busca em grade com validação cruzada
O GridSearchCV automatiza a seleção honesta de hiperparâmetros: para cada combinação em uma grade, rode CV k-fold; escolha o melhor escore médio; reajuste em todos os dados de treino.
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
pipe = Pipeline([('preprocess', preprocess), ('model', Ridge())])
param_grid = {
'model__alpha': [0.01, 0.1, 1, 10, 100],
'preprocess__num__imputer__strategy': ['mean', 'median'],
}
search = GridSearchCV(pipe, param_grid, cv=5,
scoring='neg_root_mean_squared_error', n_jobs=-1)
search.fit(X_train, y_train)
search.best_params_ # combinação vencedora
search.best_score_ # seu escore médio de CV (otimista — veja acima!)
search.best_estimator_ # pipeline reajustado em TODOS os dados de treino
search.score(X_test, y_test) # o número honesto
Notas de projeto:
- Busque sobre o pipeline, não sobre o modelo nu — escolhas de pré-processamento também são hiperparâmetros, e a CV dentro do pipeline permanece livre de vazamento;
- O custo da grade é multiplicativo (5 α's × 2 estratégias × 5 folds = 50 ajustes) — para espaços grandes use
RandomizedSearchCV, que amostra combinações e costuma encontrar configurações quase ótimas muito mais rápido (Bergstra & Bengio, 2012), ou as estratégias mais inteligentes do AutoML; - Escolha o
scoringde acordo com o problema — F1 ou ROC-AUC para classificação desbalanceada, não acurácia; - Prefira grades em escala logarítmica para parâmetros de escala (α, C):
[0.01, 0.1, 1, 10, 100].
A navalha de Occam, operacionalizada
Quando duas configurações têm escores dentro do ruído uma da outra (compare seus desvios padrão de CV), prefira a mais simples — menos atributos, regularização mais forte, árvores mais rasas. Modelos mais simples são mais baratos de servir, mais fáceis de explicar e mais robustos a drift.
Material de aula
Notebook da aula (em português)
Notebook prático usado em sala — Aula 11 — Model Selection, Regression to the Mean e GridSearchCV: abrir no Colab