Curso
Você sabe por que seu modelo tem 99% de acurácia nos dados de treino, mas não acerta quase nada em produção?
Existe uma diferença entre um modelo que memorizou e um modelo que aprendeu. Generalização é o objetivo da aprendizagem de máquina: você quer previsões que se sustentem em dados que o modelo nunca viu, não só nos dados usados no treinamento. Quando isso não acontece, quase sempre o problema cai em um de dois lados.
Esses dois lados são overfitting e underfitting. Você precisa saber qual deles está enfrentando antes de corrigir.
Neste artigo, vou mostrar como reconhecer overfitting e underfitting, por que acontecem e os passos práticos para encontrar o equilíbrio.
O que é underfitting?
Underfitting acontece quando seu modelo é simples demais para representar o que realmente está acontecendo nos dados.
Imagine tentar prever preços de casas com uma única regra: "toda casa custa US$ 300.000". Essa regra vai errar quase sempre. Ela ignora bairro, metragem, número de quartos, garagem ou ano de construção. O modelo não tem flexibilidade suficiente para acompanhar o padrão.
Você identifica underfitting sempre do mesmo jeito. Acurácia de treino é baixa, e a de teste também. Os dois números são ruins — o importante é que são ruins juntos.
Um caso clássico é ajustar uma linha reta a dados que fazem uma curva. A linha corta o meio e perde o formato. Não adianta dar mais dados de treino: o modelo simplesmente não consegue representar a relação.

Exemplo de underfitting
O que é overfitting?
Overfitting é o problema oposto. O modelo é complexo demais.
Em vez de aprender o padrão geral, ele memoriza o conjunto de treino. Cada ruído, cada outlier, cada pico e vale, cada coincidência nos dados recebe atenção como se fosse um padrão real. O modelo fica quase perfeito para os dados em que foi treinado.
A vantagem do overfitting é que ele é fácil de detectar. Acurácia de treino parece ótima, mas a de teste é péssima.
Pense em um aluno que decora as respostas do simulado palavra por palavra, mas não aprende o conteúdo. Vai bem no treino e provavelmente fracassa na prova real.

Exemplo de overfitting
Overfitting vs underfitting: principais diferenças
Agora que você viu os dois, a diferença fica mais clara. Modelos com underfitting não performam nem nos dados que já viram. Modelos com overfitting não performam nos dados que ainda não viram.
Eles também se comportam de forma distinta durante o treino:
- Underfitting aparece como desempenho mediano e estável em tudo — o modelo praticamente não aprende
- Overfitting aparece como um gap: as métricas de treino continuam subindo enquanto as de teste estagnam ou pioram com o tempo
As causas também se espelham. Underfitting vem do "fazer de menos": modelos simples e falta de features. Overfitting vem do "fazer demais": modelos complexos e features em excesso.
Aqui vai um resumo dos dois:

Underfitting comparado a overfitting
Como identificar overfitting e underfitting
Saber como eles parecem na teoria é uma coisa; pegá-los nos seus próprios modelos é outra.
O jeito mais simples é comparar erro de treino com erro de teste e analisar curvas de aprendizado.
Erro de treino vs. erro de teste
O check mais rápido é dividir os dados em treino e teste, treinar o modelo e olhar o erro em cada um.
No underfitting, ambos os erros serão altos. O modelo não aprendeu bem os dados de treino e não vai performar melhor em dados que nunca viu. O resultado ruim aparece dos dois lados.
No overfitting, o erro de treino fica bem baixo enquanto o erro de teste permanece alto. O modelo memorizou o treino, mas esse conhecimento não generaliza.

Visualização: erro de treino vs. erro de teste
Avalie o gap entre esses dois números. Gap pequeno com erros altos indica underfitting. Gap grande com erro de treino baixo e erro de teste alto indica overfitting. Gap pequeno com erros baixos em ambos é o ideal — significa que o modelo aprendeu a representação real dos dados.
Curvas de aprendizado
Curvas de aprendizado traçam erro de treino e validação em função do tamanho do conjunto de treino ou das iterações. Elas mostram o que acontece enquanto o modelo aprende.
Em um modelo com underfitting, ambas as curvas achatam rápido em erro alto. Adicionar mais dados não ajuda, porque o modelo não consegue representar o padrão. As duas curvas permanecem altas.

Curvas de um modelo com underfitting
Em um modelo com overfitting, a curva de treino cai quase a zero enquanto a de validação permanece alta. O gap entre elas cresce conforme o treino continua. Esse gap crescente é a cara do overfitting no gráfico.

Curvas de um modelo com overfitting
Um modelo saudável mostra as duas curvas caindo e se encontrando em erro baixo, com um gap pequeno entre elas.
Por que acontecem overfitting e underfitting
Depois de saber identificar, a próxima pergunta é por que eles surgem. Ambos vêm de um descompasso entre o modelo e o problema — mas em direções opostas.
Causas de underfitting
Underfitting quase sempre se explica por um destes três motivos:
- Modelo simples demais: um modelo linear não representa uma relação curva. Falta capacidade para o que o problema exige.
- Features insuficientes: mesmo um modelo capaz vai subajustar se você der entradas erradas. Prever preço de casa só pelo CEP não faz sentido e ignora metragem, quartos, estado, idade e tamanho do lote. O modelo não tem insumos úteis.
- Treinamento insuficiente: faltaram profundidade, iterações, épocas ou ajustes de taxa de aprendizado para chegar a uma boa solução. O treino parou cedo demais.
Causas de overfitting
Overfitting surge quando o modelo tem mais liberdade do que os dados pedem.
- Modelo complexo demais: uma rede neural profunda com milhões de parâmetros treinada em um dataset minúsculo tem espaço de sobra para memorizar. A capacidade excede o que o problema precisa.
- Features demais: quando há mais features do que padrões significativos nos dados, o modelo aprende correlações que existem só no seu treino e não se repetem fora dele.
- Dataset pequeno demais: com poucos dados, até modelos moderados conseguem memorizar tudo. Faltam exemplos para generalizar.
- Treino longo demais: o modelo continua ajustando pesos depois de já ter aprendido o padrão real e passa a ajustar o ruído. Dali em diante, mais treino só piora.
O trade-off viés-variância
O trade-off entre viés e variância explica por que desempenho de modelo é sobre achar o ponto ideal em que ele generaliza bem para dados não vistos sem simplificar demais o problema nem se ajustar em excesso ao treino.
Viés alto
Viés é o erro que vem das suposições do modelo sobre os dados. Um modelo com viés alto tem suposições fortes e simplistas. Ele não representa a complexidade real do que acontece nos dados.
Isso é exatamente o underfitting. O modelo é rígido demais para encaixar os padrões, então erra as previsões independentemente da quantidade de dados.
Se você treinar um modelo com viés alto 100 vezes em amostras diferentes, todos os 100 vão cometer erros parecidos. As previsões se agrupam em torno da resposta errada.
Variância alta
Variância é o erro que surge quando o modelo é sensível demais aos dados específicos de treino. Um modelo com variância alta capta todo pequeno padrão — geralmente, o ruído.
Isso é o overfitting. O modelo se ajusta muito ao conjunto de treino, mas pequenas mudanças nos dados de treino geram previsões bem diferentes.
Se você treinar um modelo com variância alta 100 vezes em amostras diferentes, terá 100 modelos muito distintos. As previsões variam demais, até para a mesma entrada.
O equilíbrio
Você não elimina totalmente nem viés nem variância — apenas transita entre eles.
Ao reduzir o viés tornando o modelo mais complexo, a variância sobe. Ao reduzir a variância simplificando o modelo, o viés sobe. A meta é achar o meio-termo, onde o erro total é o menor possível.

Exemplo do trade-off viés-variância
Como corrigir underfitting
Depois de diagnosticar underfitting, há algumas formas de resolver. Todas aumentam a capacidade do modelo de representar os padrões dos seus dados.
- Aumente a complexidade do modelo: migre para um modelo mais flexível. De regressão linear para polinomial, ou de uma árvore rasa para outra mais profunda.
- Adicione mais features: inclua entradas que realmente agreguem valor. Crie termos de interação, features polinomiais ou features específicas do domínio que o modelo não tinha.
- Treine por mais tempo: o modelo pode não ter tido tempo suficiente para convergir. Dê mais épocas ou ajuste o schedule da taxa de aprendizado.
- Reduza a regularização: regularização mantém o modelo simples — o oposto do que underfitting precisa. Diminua a força da regularização ou remova-a para dar mais liberdade ao modelo.
Algumas boas features costumam impactar mais do que trocar de arquitetura. Comece por aí antes de mexer no modelo em si.
Como corrigir overfitting
Para corrigir overfitting, a abordagem é o inverso. Você precisa restringir o modelo para que ele pare de memorizar os dados de treino.
- Colete mais dados: um dataset maior dificulta a memorização. Mais exemplos forçam o modelo a encontrar padrões que valem para todo o conjunto, não só para algumas linhas.
- Aplique regularização: L1 e L2 adicionam penalidade para pesos grandes, evitando que o modelo dependa demais de uma única feature. É uma das correções mais confiáveis.
- Reduza a complexidade do modelo: se o modelo está grande demais para os dados, diminua. Use menos parâmetros, árvores mais rasas ou redes menores.
- Use validação cruzada: validação cruzada dá uma leitura mais fiel de como o modelo vai performar em dados não vistos, com vários splits treino-teste a partir de um único dataset.
- Aplique dropout em redes neurais: Dropout desativa aleatoriamente uma porcentagem de neurônios durante o treino. Isso força a rede a aprender representações redundantes e reduz a dependência de um único neurônio.
- Pare de treinar mais cedo: monitore o erro de validação e interrompa quando ele começar a subir, mesmo que o erro de treino continue caindo. Isso é early stopping e é uma das mudanças mais fáceis de implementar.
Regularização e early stopping costumam ser os primeiros passos. Não custam nada e quase sempre ajudam.
Overfitting e underfitting em diferentes modelos
Famílias de modelos diferentes apresentam underfitting e overfitting de jeitos próprios. Veja como três comuns falham nos dois sentidos.
Modelos lineares
- Underfitting: modelos lineares assumem relação em linha reta. Quando o padrão real é curvo, o modelo não acompanha, por mais dados que você forneça.
- Overfitting: com termos polinomiais e de interação demais, até regressão linear memoriza ruído. Métodos de regularização como Ridge e Lasso existem principalmente para lidar com isso.
Árvores de decisão
- Underfitting: uma árvore rasa faz poucas divisões. Com duas ou três decisões, não representa padrões que exigem mais nuance.
- Overfitting: árvores profundas tendem a sobreajustar. Uma árvore que divide até cada folha ter um único exemplo de treino terá acurácia perfeita no treino e ruim no teste. Por isso existem parâmetros como
max_depth,min_samples_splite poda.
Redes neurais
- Underfitting: redes pequenas demais para o problema vão subajustar. O mesmo vale quando o treino para cedo ou o otimizador fica preso em uma solução ruim.
- Overfitting: é mais comum em deep learning. Uma rede com milhões de parâmetros pode memorizar até datasets grandes com épocas suficientes. Dropout, weight decay, aumento de dados e early stopping existem para evitar isso.
Mais exemplos de overfitting vs underfitting
Agora vou mostrar dois exemplos clássicos com código para visualizar esses padrões de forma simples.
Regressão polinomial
Uma senoide com ruído é um bom teste. Ao ajustar polinômios de diferentes graus, você vê o comportamento do modelo mudar.
import numpy as np
# Data
np.random.seed(7)
X = np.linspace(0, 1, 30)
y_true = np.sin(2 * np.pi * X)
y = y_true + np.random.normal(0, 0.2, X.shape)
# Fit polynomials of three degrees
X_smooth = np.linspace(0, 1, 300)
degrees = [1, 3, 15]
for degree in degrees:
coefs = np.polyfit(X, y, deg=degree)
y_pred = np.polyval(coefs, X_smooth)

Exemplo de regressão polinomial
Grau 1 é uma linha reta que subajusta: não acompanha a curva. Grau 3 representa o formato real — absorve um pouco de ruído, mas fica perto da verdade. Grau 15 faz overfitting, serpenteando por cada ponto de treino e gerando oscilações enormes entre eles.
Árvores de decisão com profundidades variadas
A mesma história aparece com árvores de decisão. Você treina árvores com profundidade crescente nos mesmos dados e mede o erro em treino e teste.
import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# Data
np.random.seed(11)
X = np.linspace(0, 10, 250).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.3, 250)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0
)
depths = range(1, 21)
train_errors = []
test_errors = []
for depth in depths:
tree = DecisionTreeRegressor(max_depth=depth, random_state=0)
tree.fit(X_train, y_train)
train_errors.append(mean_squared_error(y_train, tree.predict(X_train)))
test_errors.append(mean_squared_error(y_test, tree.predict(X_test)))

Exemplo de árvore de decisão
O erro de treino cai conforme a árvore aprofunda, aproximando-se de zero quando cada folha contém um único ponto de treino. O erro de teste cai no início — à medida que a árvore captura relações reais — e depois volta a subir quando divisões mais profundas começam a ajustar o ruído. O mínimo fica na profundidade que equilibra os dois.
Erros comuns ao diagnosticar desempenho de modelos
Mesmo escolhendo a métrica certa, é fácil tirar conclusões erradas. Aqui estão coisas que você não deve fazer ao avaliar o desempenho:
- Avaliar só a acurácia de treino: ela mostra o quão bem o modelo se ajusta ao que já viu. Não diz nada sobre desempenho em novos dados. Sempre meça em um conjunto separado antes de concluir.
- Ignorar dados de validação: validação serve para ajustar arquitetura, hiperparâmetros e ponto de parada. O modelo pode acabar fazendo overfitting tanto no treino quanto no teste se você reutilizar demais o mesmo split.
- Achar que mais complexidade é sempre melhor: modelo maior não é sinônimo de modelo mais capaz. Se seus dados são pequenos ou as relações são simples, mais complexidade só atrapalha. Comece simples e aumente a capacidade apenas quando os diagnósticos pedirem.
- Confundir ruído com sinal: nem todo padrão no treino vale a pena. Flutuações aleatórias, vieses de amostragem, outliers e artefatos de coleta podem parecer significativos para um modelo flexível. Se você não consegue explicar por que uma relação deveria existir, trate-a com cautela.
Sempre verifique os quatro pontos antes de fechar com um modelo. A maioria das falhas em produção está ligada a um (ou mais) deles.
Conclusão
Underfitting e overfitting são as duas formas de um modelo falhar na generalização. Um fica simples demais para aprender o padrão. O outro tenta aprender cada ponto do seu dataset.
O objetivo real do treino é chegar ao meio-termo, onde viés e variância se equilibram e o erro total é o menor.
Desempenho em validação é a métrica que diz onde você está. Acompanhe durante o treino e deixe a diferença entre erro de treino e validação orientar suas decisões. Se o erro de validação para de melhorar enquanto o de treino segue caindo, você passou do ponto ideal. Se ambos ficam altos, você ainda não chegou lá.
Quer aprender conceitos avançados de ciência de dados e conquistar empregabilidade em 2026? Inscreva-se na nossa Machine Learning Engineer track e vá dos fundamentos a MLOps.
FAQs
Qual é a diferença entre overfitting e underfitting?
Underfitting ocorre quando o modelo é simples demais para representar os padrões dos seus dados, então ele vai mal tanto no treino quanto no teste. Overfitting é o contrário: o modelo aprende bem demais os dados de treino, inclusive o ruído, performa ótimo no treino e falha em dados novos. Ambos geram previsões fracas, mas por motivos diferentes.
Como saber se meu modelo está com overfitting ou underfitting?
Compare o erro de treino com o de teste. Se ambos forem altos, é underfitting. Se o erro de treino for muito baixo e o de teste for alto, é overfitting. Curvas de aprendizado também ajudam: em overfitting, erros de treino e validação divergem; em underfitting, ficam estáveis em um erro alto.
O que é o trade-off viés-variância?
Viés é o erro de um modelo simples demais; variância é o erro de um modelo sensível demais aos dados de treino. Reduzir um geralmente aumenta o outro, então a meta é equilibrar para minimizar o erro total. Modelos com o melhor equilíbrio generalizam melhor para novos dados.
Coletar mais dados resolve overfitting?
Geralmente ajuda, mas não é garantia. Mais dados dificultam a memorização, forçando o modelo a encontrar padrões que valem para todo o conjunto. Mas se o modelo é complexo demais para o problema, ou suas features são majoritariamente ruído, mais dados não resolvem totalmente. Nesses casos, regularização e modelos mais simples costumam funcionar melhor.
Posso usar early stopping para evitar overfitting em redes neurais?
Sim, e é uma das correções mais fáceis de implementar. Monitore o erro de validação durante o treino e pare quando ele estabilizar ou começar a subir, mesmo que o erro de treino siga caindo. Isso captura o ponto em que o modelo já aprendeu o padrão real e está começando a ajustar o ruído. A maioria dos frameworks de deep learning já tem callbacks de early stopping.



