← Voltar pra playlist

Decorou a Prova, Não Aprendeu a Matéria

O notebook original desse lab é um widget clicável do Jupyter que só roda dentro do ambiente do curso. Sem ele, reconstruí a mesma intuição como dois componentes interativos que rodam direto aqui na página, um pra regressão (você já usou essa peça no lab de engenharia de features) e um novo, pra classificação, que é o assunto de hoje.

Uma palavra que já apareceu, agora com nome

Lá no post de engenharia de features você já viu esse fenômeno: um polinômio de grau alto para de aprender a tendência dos dados e passa a decorar cada ponto de treino, ziguezagueando entre eles. Isso tem nome: overfitting (sobreajuste). O oposto, um modelo simples demais que nem consegue captar o padrão óbvio, é underfitting (subajuste). Hoje esse mesmo par de problemas aparece de novo, só que do lado da classificação, e a cara dele muda.

O mesmo truque de sempre: mapear features

Pra fronteira de decisão poder curvar, preciso do mesmo truque das features polinomiais, só que agora em duas variáveis ao mesmo tempo: transformo x0 e x1 numa porção de termos novos, x0², x0·x1, x1², e por aí vai até o grau que eu escolher. Jogo regressão logística de novo em cima desses termos, exatamente como sempre. A fronteira continua sendo "linear" nesses termos novos, só que, quando eu volto pro espaço original de x0 e x1, essa reta virou curva.

Testando com um dataset que não dá pra separar com reta nenhuma

Um anel de pacientes de uma classe, cercando um grupo central da outra classe. Nenhuma reta corta um anel ao meio deixando o centro de um lado só, então esse dataset é o teste perfeito pra ver grau baixo falhar e grau alto exagerar:

grau 1 · lambda 0 · acurácia de treino ≈ 0.5000

Com grau 1 (deixa lambda em 0), a fronteira só consegue ser uma reta, e uma reta não separa anel de centro de jeito nenhum: acurácia trava em 50%, a cara clássica de underfitting. Sobe pra grau 2 e a mágica acontece: um círculo já resolve o problema perfeitamente, acurácia vai pra 100%. Até aqui, tudo certo.

Agora sobe até grau 8 ou 10. Repara: a acurácia continua em 100%, ela não piora. Mas olha o formato da região colorida: em vez de um círculo limpo, ela fica cheia de dobras e línguas se esticando pra alcançar cada ponto individualmente. Isso é overfitting em classificação: o modelo não aprendeu "tem um anel em volta de um centro", ele decorou a posição exata de cada um dos 20 pacientes que eu mostrei pra ele. Um paciente novo, caindo numa dessas dobras esquisitas, provavelmente ia ser classificado errado, mesmo o modelo acertando 100% dos que ele já viu.

A acurácia de treino pode mentir pra você

Esse é o ponto mais importante do lab: acurácia de treino em 100% não quer dizer modelo bom. Ela só diz que o modelo é flexível o bastante pra decorar o que já viu. Pra saber se ele aprendeu de verdade, o teste tem que ser em gente que ele nunca viu, exatamente a acurácia de teste que venho reportando desde o primeiro lab da fronteira de decisão.

O que fazer quando isso acontece

O curso lista três saídas, sem entrar em código ainda:

  • Mais dados de treino: com mais exemplos espalhados pelo anel e pelo centro, fica mais difícil pra uma fronteira maluca "caber" perfeitamente em todos.
  • Menos features: um grau menor (ou menos variáveis de entrada) tira flexibilidade do modelo, ele não consegue mais dobrar tanto.
  • Regularização: em vez de cortar features, você deixa todas, mas força os pesos a ficarem pequenos, sem zerar nenhum. É a saída mais usada na prática, e é o assunto do próximo lab.

Fechando

O que eu já sabiaO que essa aula assentou
Grau alto decora em vez de aprender, eu já vi isso na regressãoO mesmo fenômeno aparece na classificação, só que como fronteira serpenteando em vez de curva ziguezagueando
Acurácia de treino mede acerto no que já foi vistoAcurácia de treino em 100% pode esconder um modelo decorado, não aprendido
Fronteira reta não separa qualquer datasetMapear features pra um grau mais alto dá curva à fronteira, com o mesmo custo de ficar exagerada se eu não tomar cuidado

Aplicação Prática

Volto pro dataset real de câncer de mama (worst concave points + worst perimeter, conjunto de treino/teste completo, 455 pacientes pra treinar e 114 pra testar). Treino regressão logística mapeada em graus crescentes e comparo o custo no treino contra o custo em pacientes nunca vistos:

O custo de treino cai sem parar conforme o grau sobe (faz sentido, mais flexibilidade sempre ajuda a explicar o que já foi visto). O custo de teste faz o oposto: começa subindo já no grau 2 e não para de piorar. E a acurácia de teste confirma: 97.4% no grau 1, caindo pra 94.7% no grau 8, exatamente enquanto a acurácia de treino sobe de 93.2% pra 94.5%. O modelo mais "preciso" no papel (treino) é o pior nos pacientes que ele não viu.

Pra ver esse mesmo fenômeno no dado real, não só no gráfico de custo:

grau 1 · lambda 0 · acurácia de treino ≈ 0.9833

Com grau baixo a fronteira é praticamente a mesma reta dos labs anteriores. Sobe o grau e repara nas bordas da amostra: a região colorida começa a fazer curvas apertadas em volta de pacientes isolados, tentando "acertar" cada um, exatamente o padrão que o gráfico de custo já denunciou como piora, não melhora.