ML Atlas

Machine learning do zero · Aula 3.1 · 14 de 33 aulas prontas · 10 min

Overfitting: quando o modelo decora

Em resumo

Um modelo flexível pode acertar todo o treino e ainda falhar com dados novos. Quando o grau de um polinômio sobe, os erros de treino e de teste se separam.

Aquecimento Duas perguntas de aulas anteriores. Um minuto, e a aula nunca fica bloqueada.
Da aula 2.6: Métrica e limiar pelo custo dos erros Um filtro de spam: um e-mail bom no spam custa 5 vezes mais que um spam na caixa de entrada. Onde pôr o limiar sobre P(spam)?

Ver a resposta

Resposta certa: Alto, perto de 5 / (5 + 1) ≈ 0,83: no spam só os casos certos

Aqui o erro caro é o alarme falso, então o limiar sobe: c_FP / (c_FP + c_FN) = 5/6 ≈ 0,83, se o modelo estiver calibrado. No lab, um alarme mais caro também leva o limiar mais barato para acima de 0,5.

Da aula 2.5: Classes desbalanceadas Com 8 malignas no aprendizado, os pesos de classe sobem a sensibilidade de 61,5% para 80,0%. O que eles não fazem?

Ver a resposta

Resposta certa: Não acrescentam exemplos novos, então ainda falta algo em relação a todos os dados

Os pesos só mudam quanto custa um erro em cada classe. Todos os dados com pesos dão sensibilidade de 86,8%, então com 8 malignas faltam 6,8 pontos.

Duas estudantes se preparam para uma prova de matemática. Uma estuda as ideias por trás dos problemas. A outra decora, palavra por palavra, as respostas de todas as provas antigas. Nas provas antigas, a segunda é impecável. Aí chega a prova de verdade, com números novos. Em quem você aposta? Os modelos enfrentam exatamente essa escolha e, se deixados por conta própria, um modelo flexível vira, todo feliz, a segunda estudante.

Preveja, depois confira Você ajusta polinômios de grau 0 a 10 a 30 pacientes. Qual grau dá o menor erro nos pacientes de teste?
Qual é o seu grau de certeza?

Experimento interativo

Este experimento interativo funciona em um navegador com JavaScript ativado. O texto ao redor descreve o que ele mostra.

Ver a resposta

Resposta certa: Grau 1 (uma reta simples)

O grau 1 é o melhor: erro de teste de 64,1. O grau 3 tem 65,2, o grau 6 tem 70,3 e o grau 10 chega a 132,6, embora o erro de treino caia de 60,2 (grau 1) para 51,1 (grau 10). Mais flexibilidade reduz o erro de treino, mas não o de teste.

Experimente

  • Comece no grau 1 e anote os dois erros. Depois suba o controle do grau um passo de cada vez e veja o erro de treino cair.
  • Continue subindo e observe o erro de teste. Encontre o grau em que ele é mais baixo — esse é o ponto ideal para esta amostra.
  • Leve o controle do grau ao máximo. Olhe a curva entre os pontos: ela ainda parece uma descrição sensata de como o IMC se relaciona com a progressão?
  • Compare a distância entre o erro de treino e o de teste no grau mais baixo e no mais alto. Uma distância que cresce é a impressão digital do overfitting.

A ideia em poucas palavras

Vamos ver agora, em palavras simples, o que você acabou de manipular.

Na lição 3, ajustamos uma reta. Uma reta é rígida: não consegue se curvar para acompanhar uma curva, mesmo quando os dados claramente se curvam. Um polinômio é uma família de curvas mais flexível:

ŷ = w₀ + w₁x + w₂x² + … + w_d·x^d

O grau d controla a flexibilidade. Grau 1 é a reta; grau 2 consegue fazer uma curva; graus mais altos conseguem ondular cada vez mais. Com grau suficiente, um polinômio passa por todos os pontos de treino.

Parece sucesso, mas dados reais têm ruído — variação aleatória que nenhum atributo explica. Dois pacientes com o mesmo IMC não progridem do mesmo jeito. Um modelo flexível o bastante para acertar cada ponto não aprende só a tendência; aprende também o ruído, os acidentes desta amostra específica. Isso é overfitting (sobreajuste): o modelo se ajusta cada vez melhor aos dados de treino enquanto as previsões para dados novos pioram. A falha oposta, um modelo rígido demais para captar o padrão real, é o underfitting (subajuste).

Por que funciona

Pegue uma pequena amostra aleatória dos pacientes com diabetes da lição 3 e divida-a em pontos de treino e de teste. Uma amostra pequena deixa o efeito fácil de ver, porque alguns pontos incomuns conseguem arrastar uma curva flexível para bem longe.

Acompanhe o que acontece com os dois erros quando o grau sobe. O erro de treino não para de cair: uma curva mais flexível sempre consegue se sair pelo menos tão bem nos pontos em que é ajustada, porque pode imitar qualquer curva mais simples. O erro de teste se comporta de outro jeito. No começo ele também cai, porque a flexibilidade extra captura estrutura real. Depois, a partir de certo grau, começa a subir, porque a curva se dobra para perseguir pontos de treino específicos, e essas dobras estão erradas para todo o resto. O resultado é o famoso formato de U do erro de teste.

O motivo tem nome: o dilema viés-variância. Um modelo rígido tem viés alto — erra de forma sistemática, seja qual for a amostra. Um modelo muito flexível tem variância alta — pegue uma amostra um pouco diferente e você terá uma curva completamente diferente. O melhor modelo fica no meio, flexível o bastante para seguir o sinal e rígido o bastante para ignorar o ruído. Onde fica esse ponto depende de quantos dados você tem: com mais dados, o ruído se dilui na média e mais flexibilidade passa a ser segura.

Erro comum

O erro fundamental é escolher a complexidade do modelo pelo erro de treino. O erro de treino sempre recompensa a flexibilidade, então ele sempre vai votar no modelo mais complexo — a estudante que decora. O segundo erro é achar que overfitting é raro ou exótico. É o comportamento padrão de qualquer modelo flexível com dados limitados, o que inclui árvores de decisão, redes neurais e quase tudo o que você vai construir. A solução não é evitar modelos flexíveis, e sim controlá-los: modelos mais simples, mais dados ou regularização, que penaliza pesos extremos.

Há uma pegadinha escondida neste raciocínio: escolhemos o melhor grau olhando o erro de teste, exatamente o que a lição 2 disse para não fazer. Na próxima lição aprendemos a escolher configurações de forma honesta, com validação e validação cruzada.

Pegue o erro da IA

Foi assim que um chatbot respondeu. Uma frase está errada. Qual?

Pergunta: Ajustei polinômios de grau 1 a 10 a 30 pacientes, IMC contra progressão da doença. Qual grau devo escolher?

Resposta do chatbot

Mostrar a frase errada

A frase errada: Assim, o grau com o menor erro de treino, aqui o grau 10, também é o que vai prever melhor os pacientes novos.

O erro de treino sempre recompensa a flexibilidade, então não serve para escolher o grau. Na lição o grau 10 tem o menor erro de treino (51,1 contra 60,2 do grau 1), mas seu erro de teste é 132,6, mais que o dobro dos 64,1 da reta.

Quiz

Três perguntas para você se testar. Escolha uma resposta ou abra a resposta embaixo de cada pergunta. No teclado: as setas escolhem, Enter ou Espaço confirma.

1. Quando o grau do polinômio aumenta, o que acontece com o erro de treino?
Ver a resposta

Resposta certa: Cai ou fica estável: uma curva mais flexível sempre consegue copiar uma mais simples

Um polinômio de grau maior contém todos os de grau menor como caso particular, então nunca se ajusta pior aos pontos de treino.

2. O erro de treino é minúsculo, mas o de teste é grande. Qual é o diagnóstico mais provável?
Ver a resposta

Resposta certa: Overfitting, porque o modelo decorou o treino

Uma grande distância entre o erro de treino e o de teste significa que o modelo aprendeu detalhes da amostra de treino que não se generalizam.

3. Por que mais dados de treino costumam deixar um modelo flexível mais seguro?
Ver a resposta

Resposta certa: Porque, com mais pontos, o ruído se dilui e a curva não persegue pontos isolados

O ruído de cada ponto continua lá, mas com muitos pontos ele se compensa, e o ajuste segue a tendência real.

Pontos-chave

  • Overfitting é ajustar o ruído dos dados de treino, o que piora o desempenho no teste.
  • O erro de treino sempre recompensa a flexibilidade; só dados com os quais o modelo não aprendeu revelam o overfitting.
  • O erro de teste costuma formar um U conforme a complexidade cresce: underfitting de um lado, overfitting do outro.
  • Mais dados, modelos mais simples e regularização reduzem o overfitting.

Mais a fundo: fórmula, código, prática

A matemática

Um polinômio de grau d tem d + 1 pesos: ŷ = w₀ + w₁x + … + w_d·x^d. Ajustar por mínimos quadrados minimiza o erro de treino. Todo polinômio de grau d − 1 é também um polinômio de grau d (com w_d = 0), então o melhor erro de treino só pode ficar igual ou cair quando d cresce. Com n pontos que têm todos x diferentes, o grau n − 1 passa por todos os pontos e o erro de treino é 0.

O erro de teste se divide em três partes: E[(y − ŷ)²] = bias² + variance + σ². O viés é o erro sistemático de um modelo rígido demais. A variância é o quanto a curva ajustada muda entre amostras. σ² é o ruído que ninguém consegue remover. Um grau maior reduz o viés e aumenta a variância, o que dá o formato de U.

O lab informa o RMSE, √MSE, nas unidades da variável alvo.

No código (Python)

Trinta pacientes de diabetes sorteados como conjunto de treino, e os demais pacientes (dentro da faixa de IMC do treino) como conjunto de teste. É o mesmo tipo de experimento do lab, mas com outra amostra aleatória, então os números diferem dos do lab:

import numpy as np
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True, scaled=False)
x, y = X["bmi"].to_numpy(), y.to_numpy()
perm = np.random.default_rng(0).permutation(len(x))
tr, te = perm[:30], perm[30:]
te = te[(x[te] >= x[tr].min()) & (x[te] <= x[tr].max())]  # ficar dentro da faixa do treino
rmse = lambda i, p: np.sqrt(np.mean((y[i] - p(x[i])) ** 2))
for deg in (1, 3, 10):
    p = np.polynomial.Polynomial.fit(x[tr], y[tr], deg)  # ajusta sobre um x reescalado, então o grau 10 é estável
    print(f"degree {deg:2d}: train RMSE {rmse(tr, p):6.1f}, test RMSE {rmse(te, p):6.1f}")

Saída

degree  1: train RMSE   61.6, test RMSE   63.5
degree  3: train RMSE   60.9, test RMSE   63.8
degree 10: train RMSE   54.7, test RMSE  199.5

O erro de treino continua caindo com o grau. O erro de teste do grau 10 é mais de três vezes o do grau 1.

Para quem pratica
  • Nunca escolha o grau, nem qualquer outro ajuste de flexibilidade, pelo erro de treino. Ele sempre vota no modelo mais flexível.
  • Olhe a diferença entre o erro de treino e o de teste. Um erro de treino pequeno com um erro de teste grande indica overfitting. Os dois erros altos indicam underfitting.
  • Polinômios de grau alto explodem fora da faixa dos dados de treino. Não os use para extrapolar.
  • Com uma única amostra pequena o quadro é ruidoso. Repita a divisão com várias sementes antes de confiar em um “melhor grau”.
  • Para manter um modelo flexível sob controle, tente mais dados, um modelo mais simples ou regularização (ridge, lasso) antes de abrir mão por completo da flexibilidade.

Vá mais fundo no Atlas

Verbetes da enciclopédia sobre as ideias desta aula: