Curvas de aprendizaje: Cómo leer la mente de tu modelo para corregir el sobreajuste y el subajuste
1. El mito de ‘más datos’
¿Alguna vez has pasado semanas recolectando nuevos datos, convencido de que solucionarían la baja precisión de tu modelo, solo para ver que la aguja no se mueve? Agregas más filas, reentrenas, esperas. La puntuación se mantiene estancada.
Ajustar parámetros a ciegas o acumular datos es como buscar a tientas el interruptor de la luz en una habitación oscura. Podrías encontrar la puerta por suerte. No sabrás cómo llegaste allí. Las Curvas de aprendizaje ofrecen algo mejor: una vista de rayos X de tu modelo. En lugar de adivinar por qué tiene un bajo rendimiento, ves lo que realmente está sucediendo por dentro a medida que el modelo procesa más información.
Ahora intentaremos resolver un problema complejo con un modelo que simplemente no puede manejarlo, sin importar cuántos datos le demos.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import learning_curve
# Create a curvy dataset (a sine wave)
np.random.seed(42)
X = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.2, 100)
# Try to fit a straight line to a curve
model = LinearRegression()
train_sizes, train_scores, test_scores = learning_curve(
model, X, y, cv=5, train_sizes=np.linspace(0.1, 1.0, 10))
print(f"Final Training Score: {train_scores[-1].mean():.2f}")
print(f"Final Validation Score: {test_scores[-1].mean():.2f}")
Aquí las puntuaciones se sitúan alrededor de 0.06. Eso es esencialmente adivinar. Agregar más datos en este caso es como darle un examen de cálculo a un estudiante que solo sabe sumar. Podría revisar 1,000 ejemplos y aún así no entender las reglas subyacentes.
2. Las dos puntuaciones: Entrenamiento vs. Validación
Leer una curva de aprendizaje se reduce a dos números: el Puntaje de entrenamiento y el Puntaje de validación.
- El Puntaje de entrenamiento es un examen de práctica con las respuestas en la mano. Mide qué tan bien el modelo memorizó los datos que ya vio.
- El Puntaje de validación es el examen real. Utiliza datos que el modelo nunca ha visto, por lo que muestra si el modelo aprendió las reglas lo suficientemente bien como para resolver nuevos problemas.
La brecha entre esas líneas cuenta la historia. Si el entrenamiento se sitúa en 100% pero la validación solo alcanza 50%, el estudiante memorizó el libro de texto sin comprender los conceptos.
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# Splitting the data to see the 'Practice' vs 'Real Exam' scores
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
model.fit(X_train, y_train)
train_pred = model.predict(X_train)
val_pred = model.predict(X_val)
print(f"Training MSE: {mean_squared_error(y_train, train_pred):.3f}")
print(f"Validation MSE: {mean_squared_error(y_val, val_pred):.3f}")
Aquí, ambos errores son altos. El modelo está reprobando el examen de práctica y el real.
3. Escenario A: El modelo ‘terco’ (alto sesgo)
Imagina a un estudiante que piensa que todos los problemas matemáticos se pueden resolver sumando 2. Muéstrale cien contraejemplos y ni así cederá. Eso es subajuste (o alto sesgo).
En una curva de aprendizaje, tanto la línea de entrenamiento como la de validación se aplanan prematuramente y se mantienen juntas en un nivel bajo. La parte con la que los principiantes batallan es esta: más datos no ayudarán. El modelo es demasiado simple, demasiado rígido para captar el patrón.
# Visualizing High Bias
train_sizes, train_scores, test_scores = learning_curve(
LinearRegression(), X, y, cv=5)
plt.plot(train_sizes, np.mean(train_scores, axis=1), label='Training Score')
plt.plot(train_sizes, np.mean(test_scores, axis=1), label='Validation Score')
plt.title("High Bias: The Model is Too Simple")
plt.xlabel("Training Examples")
plt.ylabel("Score")
plt.legend()
plt.show()
Las líneas son planas y están muy juntas. El modelo ni siquiera ha logrado aprender de los datos de entrenamiento: una línea recta no puede ajustarse a una curva. Lo que necesitas es un modelo más flexible, como una regresión polinómica o un Random Forest.
4. Escenario B: El ‘memorizador’ (alta varianza)
Imagina a un estudiante con memoria fotográfica. Memoriza cada dígito de cada pregunta del libro de texto. En el examen de práctica, obtiene un 100%. Pero si cambias un ‘5’ por un ‘6’ en el examen real, se viene abajo: aprendió el ruido, no la lógica.
Esto es sobreajuste (o alta varianza). El modelo es demasiado complejo, por lo que trata los patrones aleatorios como reglas universales.
from sklearn.tree import DecisionTreeRegressor
# A Decision Tree with no limits will try to memorize every point
overfit_model = DecisionTreeRegressor(max_depth=None)
train_sizes, train_scores, test_scores = learning_curve(
overfit_model, X, y, cv=5)
plt.plot(train_sizes, np.mean(train_scores, axis=1), label='Training Score')
plt.plot(train_sizes, np.mean(test_scores, axis=1), label='Validation Score')
plt.title("High Variance: The Model is Memorizing")
plt.legend()
plt.show()
Verás una gran brecha entre las dos líneas. El puntaje de entrenamiento se sitúa casi a la perfección, mientras que el de validación se queda muy atrás. Cabe destacar que más datos ayudarían en este caso: obligan al modelo a encontrar patrones que se mantienen en más ejemplos, lo que eventualmente ahoga el ruido.
5. La zona ‘Goldilocks’
Un modelo saludable muestra ambas líneas convergiendo hacia un puntaje alto. Al agregar más datos, el puntaje de entrenamiento puede disminuir ligeramente —es más difícil memorizar 1,000 puntos que 10— mientras que el puntaje de validación aumenta para alcanzarlo.
from sklearn.ensemble import RandomForestRegressor
# A balanced model
goldilocks_model = RandomForestRegressor(n_estimators=50, max_depth=3)
train_sizes, train_scores, test_scores = learning_curve(
goldilocks_model, X, y, cv=5)
plt.plot(train_sizes, np.mean(train_scores, axis=1), label='Training Score')
plt.plot(train_sizes, np.mean(test_scores, axis=1), label='Validation Score')
plt.title("The Goldilocks Zone: Healthy Convergence")
plt.legend()
plt.show()
La brecha se está reduciendo. El puntaje de validación es ‘suficientemente bueno’ para nuestras necesidades. En este punto, el modelo generaliza bien.
6. Cómo solucionarlo: Tu plan de acción
Deja de adivinar. Usa esta lista de verificación basada en tus gráficos de curvas de aprendizaje:
Si las líneas están juntas pero la puntuación es baja (Alto sesgo):
- No gastes dinero en más datos.
- Sí usa un modelo más complejo (p. ej., cambia de Lineal a Random Forest).
- Sí diseña mejores características que le den más pistas al modelo.
Si hay una gran brecha entre las líneas (Alta varianza):
- Sí obtén más datos si es posible; esto ayuda a que el modelo deje de memorizar el ruido.
- Sí simplifica el modelo (Regularización). Para árboles, limita
max_depth. Para modelos lineales, usaLassooRidge. - Sí elimina las características irrelevantes que podrían confundir al modelo.
Aquí tienes una corrección lado a lado. Tomaremos nuestro árbol sobreajustado y lo regularizaremos limitando su profundidad.
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
# Plot 1: Overfit (No depth limit)
t_s1, tr_s1, te_s1 = learning_curve(DecisionTreeRegressor(max_depth=None), X, y, cv=5)
ax[0].plot(t_s1, np.mean(tr_s1, axis=1), label='Train')
ax[0].plot(t_s1, np.mean(te_s1, axis=1), label='Val')
ax[0].set_title("Before: Overfit (Big Gap)")
# Plot 2: Fixed (Limited depth)
t_s2, tr_s2, te_s2 = learning_curve(DecisionTreeRegressor(max_depth=3), X, y, cv=5)
ax[1].plot(t_s2, np.mean(tr_s2, axis=1), label='Train')
ax[1].plot(t_s2, np.mean(te_s2, axis=1), label='Val')
ax[1].set_title("After: Regularized (Converged)")
plt.legend()
plt.show()
En el segundo gráfico, la puntuación de validación mejoró porque forzamos al modelo a aprender patrones generales en lugar de puntos específicos. La brecha se cerró. Nuestro modelo se volvió más confiable.
Lista de verificación resumen:
- Grafica tus curvas de aprendizaje antes de ajustar los hiperparámetros.
- Identifica si tienes un problema de Sesgo (líneas cercanas y bajas) o un problema de Varianza (gran brecha).
- Elige tu solución: modelos más inteligentes para el sesgo, más datos o modelos más simples para la varianza.
Ahora que puedes interpretar lo que tus curvas de aprendizaje te dicen, no perderás tiempo recolectando datos que no necesitas. A continuación, exploraremos cómo usar las Curvas de Validación para encontrar el ‘ajuste de perillas’ adecuado para tus parámetros.
Comprueba tu comprensión
Las preguntas a continuación avanzan desde el simple recuerdo hasta el diseño abierto, siguiendo aproximadamente la Taxonomía de Bloom.
Recordar En una curva de aprendizaje, ¿qué patrón indica Sesgo Alto (subajuste) versus Varianza Alta (sobreajuste)?
Comprender Con tus propias palabras, explica por qué el artículo dice “agregar más datos no ayudará” para un modelo de Sesgo Alto, usando la analogía del “estudiante que solo sabe sumar”.
Aplicar Usando la lista de verificación de diagnóstico del artículo, si graficas una curva de aprendizaje y ves la puntuación de entrenamiento en 0.95 y la puntuación de validación en 0.55, con una gran brecha entre ellas, ¿qué solución probarías primero: cambiar a un modelo más complejo o añadir regularización?
Analizar El artículo dice que la puntuación de entrenamiento de un modelo sano (“Goldilocks”) podría bajar ligeramente a medida que se añaden más datos, mientras que la puntuación de validación sube para encontrarse con ella. Explica paso a paso por qué la puntuación de entrenamiento disminuye de forma natural a medida que el tamaño del conjunto de entrenamiento crece, incluso para un modelo bien ajustado — ¿qué tiene de diferente memorizar 10 puntos frente a memorizar 1,000?
Evaluar La lista de soluciones para Varianza Alta del artículo incluye “obtener más datos” y “simplificar el modelo” como opciones paralelas. Critica esto como un menú de alternativas: para un equipo con un tamaño de conjunto de datos fijo e inmutable (p. ej., una condición médica rara con solo 200 registros de pacientes), ¿cuál de las dos soluciones está realmente disponible para ellos, y el orden del artículo (datos primero) refleja esa restricción?
Crear Diseña un experimento de diagnóstico de curva de aprendizaje para un nuevo escenario: un clasificador de spam que obtiene un 99% de precisión en el entrenamiento y un 97% de precisión en la validación (una brecha pequeña pero distinta de cero). ¿Llamarías a esto Sesgo, Varianza o la zona Goldilocks, y qué verificación adicional (más allá de la forma de la curva trazada) ejecutarías antes de decidir que no se necesita ninguna acción?
Esta traducción fue generada automáticamente y puede contener errores. Si el idioma inglés es tu preferencia, puedes leer el artículo original en inglés .
«Aplica lo que aprendiste» es para suscriptores Supporter e Insider.
Suscríbete para desbloquear los ejercicios de este artículo.
Ver planesArtículos relacionados
- Aprendizaje Automático En revisión
Curvas de calibración: cuando las probabilidades de tu modelo te mienten
Aprende por qué las probabilidades de los modelos suelen ser excesivamente confiadas, cómo diagnosticar esto con curvas de calibración y cómo solucionarlo mediante escalado de Platt o regresión isotónica.
- Aprendizaje Automático En revisión
¿Qué es la validación cruzada y cómo evitar hacerla mal?
Aprende a hacer validación cruzada de la manera correcta: evita el sobreajuste, previene la fuga de datos con pipelines, lee la desviación estándar y maneja las series de tiempo correctamente.
- Aprendizaje Automático En revisión
Validación cruzada anidada: cómo ajustar tu modelo sin engañarte a ti mismo
Aprende cómo la validación cruzada anidada evita el sesgo optimista al ajustar los hiperparámetros, brindándote una estimación honesta del rendimiento del modelo antes de enviarlo a producción.
- Aprendizaje Automático En revisión
Por qué falla tu modelo KNN en alta dimensionalidad: Entendiendo la maldición de la dimensionalidad
Aprende por qué los modelos KNN fallan en alta dimensionalidad debido a la maldición de la dimensionalidad y cómo el PCA o la selección de características pueden restaurar tu precisión predictiva.
¿Buscas otra cosa?
Busca en todos los artículos por título, resumen o tema.