Curso
¿Sabes por qué tu modelo tiene un 99% de acierto en entrenamiento pero en producción no acierta ni una?
Hay una gran diferencia entre un modelo que memoriza y uno que aprende. La generalización es el objetivo de todo aprendizaje automático: quieres predicciones que se mantengan en datos que el modelo nunca ha visto, no solo en los datos de entrenamiento. Cuando no ocurre, casi siempre es por uno de dos motivos.
Esos dos problemas son el overfitting y el underfitting. Antes de arreglarlo, necesitas saber con cuál estás lidiando.
En este artículo te explico cómo reconocer el overfitting y el underfitting, por qué aparecen y los pasos prácticos para encontrar el equilibrio.
¿Qué es el underfitting?
El underfitting ocurre cuando tu modelo es demasiado simple para reflejar lo que pasa realmente en los datos.
Imagina intentar predecir el precio de la vivienda con una sola regla: "todas las casas cuestan 300.000 $". Fallará casi siempre. No tiene en cuenta el barrio, los metros cuadrados, el número de dormitorios, el garaje o el año de construcción. El modelo no tiene flexibilidad suficiente para seguir el patrón.
Detectar underfitting es siempre igual. La precisión en entrenamiento es baja y en test también. Ambos valores son malos, pero lo clave es que lo son a la vez.
Un caso clásico es ajustar una línea recta a datos que se curvan. La línea corta por el medio y se pierde la forma. Por mucho que añadas más datos, no se arregla: el modelo no puede representar la relación.

Ejemplo de underfitting
¿Qué es el overfitting?
El overfitting es justo lo contrario. El modelo es demasiado complejo.
En lugar de aprender el patrón general, memoriza el conjunto de entrenamiento. Cada punto ruidoso, cada valor atípico, cada pico y valle, cada coincidencia en los datos recibe atención como si fuera un patrón real. El modelo roza la perfección en los datos con los que se entrenó.
La parte buena del overfitting es que se ve fácil: en entrenamiento todo parece genial, pero en test el rendimiento es pésimo.
Piensa en un estudiante que memoriza las respuestas palabra por palabra pero no entiende la materia. Saca buena nota en los simulacros y probablemente suspende el examen real.

Ejemplo de overfitting
Overfitting vs underfitting: diferencias clave
Ahora que has visto ambos, es más fácil distinguirlos. Los modelos con underfitting no rinden ni siquiera en los datos vistos. Los modelos con overfitting no rinden en datos que no han visto.
Durante el entrenamiento se comportan de forma distinta:
- El underfitting aparece como un rendimiento plano y mediocre en general: el modelo apenas aprende nada
- El overfitting aparece como una brecha: la puntuación en entrenamiento sigue subiendo mientras que en test se estanca o empeora con el tiempo
Las causas también se reflejan en sentido opuesto. El underfitting viene de quedarse corto: modelos simples y carencia de variables. El overfitting viene de pasarse: modelos complejos y demasiadas variables.
Aquí tienes un resumen de ambos:

Comparativa de underfitting y overfitting
Cómo identificar overfitting y underfitting
Saber cómo son en teoría es una cosa; detectarlos en tus propios modelos es otra.
Lo más sencillo es comparar el error de entrenamiento con el de test y revisar las curvas de aprendizaje.
Error de entrenamiento vs. error de test
La comprobación más rápida: divide tus datos en entrenamiento y test, entrena el modelo y mira el error en cada uno.
Si hay underfitting, ambos errores serán altos. El modelo no aprende bien ni siquiera en entrenamiento y no va a rendir mejor en datos no vistos. Mal por ambos lados.
Si hay overfitting, el error de entrenamiento será muy bajo mientras el de test se mantiene alto. El modelo ha memorizado el entrenamiento, pero ese conocimiento no se traslada.

Visualización de error de entrenamiento vs. test
Analiza la brecha entre ambos valores. Una brecha pequeña con errores altos apunta a underfitting. Una brecha grande con error de entrenamiento bajo y de test alto apunta a overfitting. La meta es una brecha pequeña con errores bajos en ambos, señal de que el modelo ha aprendido la representación real de los datos.
Curvas de aprendizaje
Las curvas de aprendizaje representan los errores de entrenamiento y validación frente al tamaño del conjunto de entrenamiento o frente a las iteraciones. Muestran qué ocurre a medida que el modelo aprende.
En un modelo con underfitting, ambas curvas se aplanan rápido en un error alto. Añadir más datos no ayuda porque el modelo, de partida, no puede representar el patrón. Ambas curvas se quedan altas.

Curvas de un modelo con underfitting
En un modelo con overfitting, la curva de entrenamiento cae casi a cero mientras la de validación se mantiene alta. La brecha entre ambas se amplía a medida que entrenas. Esa brecha creciente es el overfitting en un gráfico.

Curvas de un modelo con overfitting
Un modelo sano muestra ambas curvas bajando y encontrándose en un error bajo, con una brecha pequeña.
Por qué ocurren el overfitting y el underfitting
Una vez sepas detectarlos, la siguiente pregunta es por qué aparecen. Ambos vienen de un desajuste entre el modelo y el problema, pero en direcciones opuestas.
Causas del underfitting
El underfitting casi siempre se debe a una de estas tres cosas.
- El modelo es demasiado simple: un modelo lineal no puede representar una relación curva. La capacidad del modelo no alcanza lo que el problema requiere.
- Las variables son insuficientes: incluso un modelo capaz hará underfitting si le das entradas equivocadas. Predecir precios de casas solo con el código postal no tiene sentido y se pierde los metros cuadrados, dormitorios, estado, antigüedad o tamaño de la parcela. El modelo no tiene con qué trabajar.
- Entrenamiento insuficiente: al modelo le faltó profundidad, iteraciones, épocas o ajustes de tasa de aprendizaje para llegar a una buena solución. El entrenamiento se detuvo demasiado pronto.
Causas del overfitting
El overfitting surge de darle al modelo más libertad de la que los datos necesitan.
- El modelo es demasiado complejo: una red neuronal profunda con millones de parámetros entrenada con un conjunto diminuto tiene margen de sobra para memorizar. La capacidad excede lo que el problema requiere.
- Demasiadas variables: cuando tienes más variables que patrones significativos en los datos, el modelo aprende correlaciones que existen en tu muestra de entrenamiento pero no generalizan.
- El conjunto de datos es demasiado pequeño: con pocos datos, incluso una complejidad moderada puede memorizarlo entero. No hay suficientes ejemplos para generalizar.
- Entrenamiento excesivo: el modelo siguió ajustando pesos tras aprender el patrón real y empezó a ajustar el ruido. A partir de ahí, entrenar más empeora el resultado.
El compromiso sesgo-varianza
El compromiso sesgo-varianza explica por qué el rendimiento del modelo consiste en encontrar el punto óptimo en el que tu modelo generaliza bien a datos no vistos sin simplificar en exceso el problema ni sobreajustarse al conjunto de entrenamiento.
Alto sesgo
El sesgo es el error que proviene de las suposiciones del modelo sobre los datos. Un modelo con alto sesgo tiene suposiciones fuertes y simplistas. No puede representar la complejidad real de lo que ocurre en los datos.
Esto es, exactamente, el underfitting. El modelo es demasiado rígido para captar los patrones, así que sus predicciones se desvían, por mucha cantidad de datos que le des.
Si entrenas 100 veces un modelo con alto sesgo en muestras distintas, los 100 cometerán errores similares. Sus predicciones se agrupan alrededor de una respuesta equivocada.
Alta varianza
La varianza es el error que aparece cuando un modelo es demasiado sensible a los datos concretos con los que se entrenó. Un modelo con alta varianza capta cada micro-patrón, normalmente el ruido.
Esto es el overfitting. El modelo ajusta el conjunto de entrenamiento al milímetro, pero pequeños cambios en los datos de entrenamiento generan predicciones muy distintas.
Si entrenas 100 veces un modelo con alta varianza en muestras distintas, obtendrás 100 modelos muy diferentes. Sus predicciones son erráticas, incluso para la misma entrada.
El equilibrio
No puedes eliminar por completo ni el sesgo ni la varianza; solo puedes mover el equilibrio entre ambos.
Si reduces el sesgo haciendo el modelo más complejo, sube la varianza. Si reduces la varianza simplificando el modelo, sube el sesgo. El objetivo es encontrar el punto medio, donde el error total sea mínimo.

Ejemplo del compromiso sesgo-varianza
Cómo corregir el underfitting
Una vez diagnosticado el underfitting, tienes varias formas de solucionarlo. Todas aumentan la capacidad del modelo para representar los patrones de tus datos.
- Aumenta la complejidad del modelo: pásate a un modelo más flexible. De regresión lineal a polinómica, o de un árbol poco profundo a uno más profundo.
- Añade más variables: incorpora entradas que realmente aporten valor. Crea términos de interacción, variables polinómicas o variables específicas del dominio a las que el modelo no tenía acceso.
- Entrena durante más tiempo: puede que el modelo no haya tenido tiempo suficiente para converger. Dale más épocas o cambia la programación de la tasa de aprendizaje.
- Reduce la regularización: la regularización mantiene un modelo simple, justo lo contrario de lo que necesita el underfitting. Reduce su intensidad o elimínala para darle más libertad al modelo.
Un puñado de buenas variables suele tener más impacto que cambiar de arquitectura. Empieza por ahí antes de tocar el modelo.
Cómo corregir el overfitting
Para el overfitting, haz lo contrario. Restringe el modelo para que deje de memorizar el entrenamiento.
- Recoge más datos: con un conjunto más grande, al modelo le cuesta mucho más memorizar. Más ejemplos le obligan a encontrar patrones que se mantengan en todo el conjunto, no solo en unas pocas filas.
- Aplica regularización: L1 y L2 añaden una penalización a los pesos grandes, evitando que el modelo dependa en exceso de una sola variable. Es una de las soluciones más fiables.
- Reduce la complejidad del modelo: si el modelo es demasiado grande para los datos, redúcelo. Menos parámetros, árboles menos profundos o redes más pequeñas.
- Usa validación cruzada: la validación cruzada te da una lectura más honesta de cómo rendirá el modelo en datos no vistos. Obtienes más particiones entrenamiento-test a partir de un único conjunto.
- Aplica dropout en redes neuronales: el dropout desactiva aleatoriamente un porcentaje de neuronas durante el entrenamiento. Obliga a la red a aprender representaciones redundantes y reduce la dependencia de una sola neurona.
- Detén el entrenamiento a tiempo: vigila el error de validación y para cuando empiece a aumentar, aunque el de entrenamiento siga bajando. Es el early stopping, y es de los cambios más sencillos de aplicar.
La regularización y el early stopping suelen ser lo primero que probar. No cuestan nada y casi siempre ayudan.
Overfitting y underfitting en distintos modelos
Cada familia de modelos muestra el underfitting y el overfitting a su manera. Así es como tres de las más comunes fallan en ambos sentidos.
Modelos lineales
- Underfitting: los modelos lineales asumen una relación en línea recta. Cuando el patrón real es curvo, no pueden seguirlo, por muchos datos que les des.
- Overfitting: si añades suficientes términos polinómicos o de interacción, incluso la regresión lineal puede memorizar el ruido. Métodos como Ridge y Lasso existen en gran medida para controlarlo.
Árboles de decisión
- Underfitting: un árbol poco profundo solo puede hacer pocas particiones. Con dos o tres decisiones, no puede representar patrones que requieren más matices.
- Overfitting: los árboles profundos tienden a sobreajustar. Un árbol que sigue dividiendo hasta que cada hoja contiene un único ejemplo de entrenamiento logra precisión perfecta en entrenamiento y pobre en test. Por eso existen parámetros como
max_depth,min_samples_splity la poda.
Redes neuronales
- Underfitting: las redes demasiado pequeñas para el problema harán underfitting. También cuando se detiene el entrenamiento demasiado pronto o cuando el optimizador se queda atascado en una solución subóptima.
- Overfitting: es más común en deep learning. Una red con millones de parámetros puede memorizar incluso conjuntos grandes si se entrena suficientes épocas. Dropout, weight decay, aumento de datos y early stopping existen para evitarlo.
Ejemplos adicionales de overfitting vs underfitting
Ahora te muestro dos ejemplos clásicos con código que te ayudarán a ver estos patrones con claridad.
Regresión polinómica
Una onda sinusoidal ruidosa es un buen caso de prueba. Al ajustar polinomios de distintos grados, verás cómo cambia el comportamiento del modelo.
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)

Ejemplo de regresión polinómica
El grado 1 es una línea recta que hace underfitting: no sigue la curva. El grado 3 representa la forma real: absorbe algo de ruido pero se mantiene cerca de la verdad. El grado 15 hace overfitting: serpentea entre cada punto de entrenamiento y genera grandes oscilaciones entre ellos.
Árboles de decisión con distinta profundidad
La misma historia ocurre con los árboles de decisión. Puedes entrenar árboles con profundidad creciente en los mismos datos y medir el error en entrenamiento y test.
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)))

Ejemplo de árbol de decisión
El error de entrenamiento se reduce a medida que el árbol crece, aproximándose a cero cuando cada hoja contiene un único punto de entrenamiento. El error de test baja al principio, al capturar las relaciones reales, y luego vuelve a subir cuando las divisiones más profundas empiezan a ajustar el ruido. El mínimo está en la profundidad que equilibra ambos.
Errores comunes al diagnosticar el rendimiento de un modelo
Aunque elijas la métrica adecuada, es fácil sacar conclusiones erróneas. Esto es lo que no deberías hacer al evaluar el rendimiento:
- Evaluar solo la precisión de entrenamiento: la precisión en entrenamiento indica cómo ajusta el modelo datos ya vistos. No te dice nada de cómo rendirá con entradas nuevas. Mide siempre en un conjunto aparte antes de concluir nada.
- Ignorar los datos de validación: la validación sirve para afinar arquitectura, hiperparámetros y punto de parada. Si reutilizas demasiadas veces el mismo conjunto, el modelo acabará sobreajustando tanto al entrenamiento como al test.
- Asumir que más complejidad siempre es mejor: un modelo más grande no implica automáticamente más capacidad. Si tus datos son pocos o las relaciones son simples, la complejidad solo empeorará el rendimiento. Empieza simple y añade capacidad solo cuando los diagnósticos lo pidan.
- Confundir ruido con señal: no todo patrón en los datos de entrenamiento merece la pena aprenderlo. Fluctuaciones aleatorias, sesgos de muestreo, outliers y artefactos de recogida pueden parecer significativos a un modelo flexible. Si no puedes explicar por qué debería existir una relación, trátala con cautela.
Revisa siempre estos cuatro puntos antes de dar un modelo por bueno. La mayoría de fallos en producción se relacionan con uno (o varios) de ellos.
Conclusión
El underfitting y el overfitting son las dos formas en que un modelo no logra generalizar. Uno se queda demasiado simple para aprender el patrón. El otro intenta aprender cada punto de tu conjunto.
El objetivo real del entrenamiento es situarse entre ambos, donde sesgo y varianza se equilibran y el error total es mínimo.
El rendimiento en validación es la métrica que te indica dónde estás. Síguelo durante el entrenamiento y deja que la diferencia entre error de entrenamiento y validación guíe tus decisiones. Si el error de validación deja de mejorar mientras el de entrenamiento sigue bajando, te has pasado del punto óptimo. Si ambos se mantienen altos, aún no has llegado.
¿Quieres aprender conceptos avanzados de ciencia de datos y llegar preparado al mercado en 2026? Apúntate a nuestro Machine Learning Engineer track y pasa de los fundamentos al MLOps.
FAQs
¿Cuál es la diferencia entre overfitting y underfitting?
El underfitting ocurre cuando un modelo es demasiado simple para representar los patrones de tus datos, por lo que rinde mal tanto en entrenamiento como en test. El overfitting es lo contrario: el modelo aprende en exceso los datos de entrenamiento, incluido el ruido, rinde genial en entrenamiento pero falla en datos nuevos. Ambos producen predicciones débiles, pero por razones diferentes.
¿Cómo sé si mi modelo hace overfitting o underfitting?
Compara el error de entrenamiento con el de test. Si ambos son altos, hay underfitting. Si el error de entrenamiento es muy bajo pero el de test es alto, hay overfitting. Las curvas de aprendizaje también ayudan: en overfitting los errores de entrenamiento y validación divergen, y en underfitting se mantienen planos con error alto.
¿Qué es el compromiso sesgo-varianza?
El sesgo es el error de un modelo por ser demasiado simple, y la varianza es el error por ser demasiado sensible a sus datos de entrenamiento. Reducir uno suele aumentar la otra, así que el objetivo es encontrar el equilibrio donde el error total sea mínimo. Los modelos mejor equilibrados son los que mejor generalizan.
¿Recoger más datos soluciona el overfitting?
Suele ayudar, pero no es una solución garantizada. Más datos dificultan que el modelo memorice, así que debe encontrar patrones que se mantengan en todo el conjunto. Pero si tu modelo es demasiado complejo para el problema o tus variables contienen sobre todo ruido, más datos no bastarán. En esos casos, la regularización y modelos más simples funcionan mejor.
¿Puedo usar early stopping para evitar el overfitting en redes neuronales?
Sí, y es de las soluciones más fáciles de aplicar. Vigila el error de validación durante el entrenamiento y detén cuando se estanque o empiece a subir, aunque el de entrenamiento siga bajando. Así captas el punto en que el modelo ya ha aprendido el patrón y empieza a ajustar el ruido. La mayoría de frameworks de deep learning incluyen callbacks de early stopping.


