ML Atlas

Machine learning desde cero · Lección 3.1 · 14 de 33 lecciones listas · 10 min

Sobreajuste: cuando un modelo memoriza

En pocas palabras

Un modelo flexible puede acertar en todo su entrenamiento y fallar con datos nuevos. Al subir el grado de un polinomio, los dos errores se separan.

Calentamiento Dos preguntas de lecciones anteriores. Un minuto, y no bloquea la lección.
De la lección 2.6: Métrica y umbral según el coste de los errores Un filtro de spam: un correo bueno en spam cuesta 5 veces más que un spam en la bandeja. ¿Dónde poner el umbral sobre P(spam)?

Ver la respuesta

Respuesta correcta: Alto, cerca de 5 / (5 + 1) ≈ 0,83: al spam solo los casos seguros

Aquí el error caro es la falsa alarma, así que el umbral sube: c_FP / (c_FP + c_FN) = 5/6 ≈ 0,83, si el modelo está calibrado. En el lab una alarma más cara también lleva el umbral más barato por encima de 0,5.

De la lección 2.5: Clases desequilibradas Con 8 malignas en el aprendizaje, los pesos de clase suben la sensibilidad del 61,5 % al 80,0 %. ¿Qué no hacen?

Ver la respuesta

Respuesta correcta: No añaden ejemplos nuevos, así que todavía falta algo frente a todos los datos

Los pesos solo cambian cuánto cuesta un error en cada clase. Todos los datos con pesos dan una sensibilidad del 86,8 %, así que con 8 malignas faltan 6,8 puntos.

Dos estudiantes preparan un examen de matemáticas. Una trabaja las ideas que hay detrás de los problemas. La otra memoriza palabra por palabra las respuestas de todos los exámenes anteriores. Con los exámenes anteriores, la segunda es impecable. Luego llega el examen real, con números nuevos. ¿Por quién apostarías? Los modelos se enfrentan exactamente a esta elección y, si los dejas solos, un modelo flexible se convertirá encantado en la segunda estudiante. Pruébalo tú mismo antes de leer la explicación.

Predice y comprueba Ajustas polinomios de grado 0 a 10 a 30 pacientes. ¿Qué grado da el menor error con los pacientes de prueba?
¿Qué tan seguro estás?

Experimento interactivo

Este experimento interactivo funciona en un navegador con JavaScript activado. El texto que lo rodea describe lo que muestra.

Ver la respuesta

Respuesta correcta: Grado 1 (una recta sencilla)

El mejor es el grado 1: error de prueba de 64,1. El grado 3 tiene 65,2, el grado 6 tiene 70,3 y el grado 10 llega a 132,6, aunque el error de entrenamiento baja de 60,2 (grado 1) a 51,1 (grado 10). Más flexibilidad reduce el error de entrenamiento, no el de prueba.

Prueba esto

  • Empieza en el grado 1 y anota los dos errores. Luego sube el control del grado de uno en uno y observa cómo baja el error de entrenamiento.
  • Sigue subiendo y fíjate en el error de prueba. Encuentra el grado en el que es más bajo: ese es el punto óptimo para esta muestra.
  • Lleva el control del grado al máximo. Mira la curva entre los puntos: ¿sigue pareciendo una descripción sensata de la relación entre el IMC y la progresión?
  • Compara la diferencia entre el error de entrenamiento y el de prueba en el grado más bajo y en el más alto. Una diferencia que crece es la huella dactilar del sobreajuste.

La idea en pocas palabras

En la lección 3 ajustamos una recta. Una recta es rígida: no puede doblarse para seguir una curva, aunque los datos se curven claramente. Un polinomio es una familia de curvas más flexible:

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

El grado d controla la flexibilidad. El grado 1 es la recta; el grado 2 puede hacer una curva; los grados más altos pueden ondular cada vez más. Con el grado suficiente, un polinomio puede pasar por cada uno de los puntos de entrenamiento.

Suena a éxito, pero los datos reales contienen ruido: variación aleatoria que ninguna característica explica. Dos pacientes con el mismo IMC no progresan igual. Un modelo lo bastante flexible para tocar cada punto no solo aprende la tendencia; también aprende el ruido, los accidentes de esta muestra concreta. Eso es el sobreajuste (overfitting): el modelo se ajusta cada vez mejor a los datos de entrenamiento mientras sus predicciones para datos nuevos empeoran. El fallo opuesto, un modelo demasiado rígido para captar el patrón real, es el subajuste (underfitting).

Por qué funciona

Tomemos una pequeña muestra aleatoria de los pacientes con diabetes de la lección 3 y dividámosla en puntos de entrenamiento y de prueba. Una muestra pequeña hace que el efecto se vea con facilidad, porque unos pocos puntos raros pueden arrastrar muy lejos una curva flexible.

Sigamos lo que les pasa a los dos errores cuando sube el grado. El error de entrenamiento no deja de bajar: una curva más flexible siempre puede hacerlo al menos igual de bien con los puntos a los que se ajusta, porque puede imitar cualquier curva más simple. El error de prueba se comporta de otra forma. Al principio también baja, porque la flexibilidad extra capta estructura real. Luego, a partir de cierto grado, empieza a subir, porque la curva se dobla para perseguir puntos de entrenamiento concretos, y esas curvas están mal para todos los demás. El resultado es la famosa forma de U del error de prueba.

La razón tiene nombre: el compromiso sesgo-varianza. Un modelo rígido tiene un sesgo alto: se equivoca de forma sistemática, vea la muestra que vea. Un modelo muy flexible tiene una varianza alta: toma una muestra un poco distinta y obtendrás una curva completamente diferente. El mejor modelo está en medio, lo bastante flexible para seguir la señal y lo bastante rígido para ignorar el ruido. Dónde está ese punto depende de cuántos datos tengas: con más datos, el ruido se promedia y más flexibilidad se vuelve segura.

Error frecuente

El error fundamental es elegir la complejidad del modelo por el error de entrenamiento. El error de entrenamiento siempre premia la flexibilidad, así que siempre votará por el modelo más complejo: la estudiante que memoriza. El segundo error es creer que el sobreajuste es raro o exótico. Es el comportamiento por defecto de cualquier modelo flexible con datos limitados, lo que incluye árboles de decisión, redes neuronales y casi todo lo que vas a construir. La solución no es evitar los modelos flexibles, sino controlarlos: modelos más simples, más datos o regularización, que penaliza los pesos extremos.

En este razonamiento hay una trampa escondida: elegimos el mejor grado mirando el error de prueba, justo lo que la lección 2 advertía que no hiciéramos. En la próxima lección aprendemos a elegir ajustes de forma honesta, con validación y validación cruzada.

Atrapa el error de la IA

Así respondió un chatbot. Una frase es incorrecta. ¿Cuál?

Pregunta: Ajusté polinomios de grado 1 a 10 a 30 pacientes, IMC frente a progresión de la enfermedad. ¿Qué grado debo elegir?

Respuesta del chatbot

Mostrar la frase incorrecta

La frase incorrecta: Por tanto, el grado con el menor error de entrenamiento, aquí el grado 10, es también el que mejor predecirá a pacientes nuevos.

El error de entrenamiento siempre premia la flexibilidad, así que no sirve para elegir el grado. En la lección el grado 10 tiene el menor error de entrenamiento (51,1 frente a 60,2 del grado 1), pero su error de prueba es 132,6, más del doble de los 64,1 de la recta.

Test

Tres preguntas para comprobar lo aprendido. Elige una respuesta o despliega la solución bajo cada pregunta. Con el teclado: las flechas eligen, Enter o Espacio confirma.

1. Al aumentar el grado del polinomio, ¿qué le pasa al error de entrenamiento?
Ver la respuesta

Respuesta correcta: Sigue bajando o se mantiene, porque una curva más flexible puede copiar una simple

Un polinomio de grado mayor contiene a todos los de grado menor como caso particular, así que nunca puede ajustarse peor a los puntos de entrenamiento.

2. El error de entrenamiento es diminuto, pero el de prueba es grande. ¿Cuál es el diagnóstico más probable?
Ver la respuesta

Respuesta correcta: Sobreajuste, porque el modelo memorizó el entrenamiento

Una gran diferencia entre el error de entrenamiento y el de prueba significa que el modelo aprendió detalles de la muestra de entrenamiento que no se generalizan.

3. ¿Por qué más datos de entrenamiento suelen hacer más seguro un modelo flexible?
Ver la respuesta

Respuesta correcta: Porque con más puntos el ruido se promedia y la curva ya no persigue puntos sueltos

El ruido de cada punto sigue ahí, pero con muchos puntos se compensa, así que el ajuste sigue la tendencia real.

Ideas clave

  • El sobreajuste significa ajustarse al ruido de los datos de entrenamiento, de modo que el rendimiento en prueba empeora.
  • El error de entrenamiento siempre premia la flexibilidad; solo los datos de los que el modelo no aprendió revelan el sobreajuste.
  • El error de prueba suele formar una U al crecer la complejidad: subajuste a un lado, sobreajuste al otro.
  • Más datos, modelos más simples y regularización reducen el sobreajuste.

Más a fondo: fórmula, código, práctica

Las matemáticas

Un polinomio de grado d tiene d + 1 pesos: ŷ = w₀ + w₁x + … + w_d·x^d. Ajustar por mínimos cuadrados minimiza el error de entrenamiento. Todo polinomio de grado d − 1 es también un polinomio de grado d (con w_d = 0), así que el mejor error de entrenamiento solo puede mantenerse o bajar al aumentar d. Con n puntos que tienen todos una x distinta, el grado n − 1 pasa por cada punto y el error de entrenamiento es 0.

El error de prueba se divide en tres partes: E[(y − ŷ)²] = bias² + variance + σ². El sesgo es el fallo sistemático de un modelo demasiado rígido. La varianza es cuánto cambia la curva ajustada entre muestras. σ² es el ruido que nadie puede eliminar. Un grado mayor reduce el sesgo y aumenta la varianza, lo que da la forma de U.

El lab informa el RMSE, √MSE, en las unidades de la variable objetivo.

En código (Python)

Treinta pacientes de diabetes elegidos al azar como conjunto de entrenamiento, y los demás pacientes (dentro del rango de IMC del entrenamiento) como conjunto de prueba. Es el mismo tipo de experimento que el del lab, pero con otra muestra aleatoria, así que los números difieren de los del 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())]  # quedarse dentro del rango de entrenamiento
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 una x reescalada, así que el grado 10 es estable
    print(f"degree {deg:2d}: train RMSE {rmse(tr, p):6.1f}, test RMSE {rmse(te, p):6.1f}")

Resultado

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

El error de entrenamiento sigue bajando con el grado. El error de prueba del grado 10 es más de tres veces el del grado 1.

Para profesionales
  • Nunca elijas el grado, ni ningún otro ajuste de flexibilidad, por el error de entrenamiento. Siempre vota por el modelo más flexible.
  • Mira la brecha entre el error de entrenamiento y el de prueba. Un error de entrenamiento pequeño con un error de prueba grande indica sobreajuste. Los dos errores altos indican subajuste.
  • Los polinomios de grado alto se disparan fuera del rango de los datos de entrenamiento. No los uses para extrapolar.
  • Con una sola muestra pequeña la imagen es ruidosa. Repite la partición con varias semillas antes de confiar en un «mejor grado».
  • Para mantener a raya a un modelo flexible, prueba con más datos, un modelo más simple o regularización (ridge, lasso) antes de renunciar por completo a la flexibilidad.

Profundiza en el Atlas

Entradas de la enciclopedia sobre las ideas de esta lección: