Ir para o conteúdo

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:

\[ \mathbb{E}\big[(y - \hat{f}(x))^2\big] = \underbrace{\big(f(x) - \mathbb{E}[\hat{f}(x)]\big)^2}_{\text{viés}^2} + \underbrace{\mathbb{E}\big[(\hat{f}(x) - \mathbb{E}[\hat{f}(x)])^2\big]}_{\text{variância}} + \underbrace{\sigma^2}_{\text{ruído irredutível}} \]
  • 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:

Curva de validação: erro de treino vs validação por grau do polinômio

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 scoring de 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


Quiz