¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Detectar un modelo que memoriza

Después de esta lección: Puedo reconocer un modelo que se ha aprendido los ejemplos de memoria.

Lección de 40 minSin comandos

Un 100 % en casa, un 60 % fuera

Una cadena de hoteles de la costa quiere saber qué reservas se cancelarán.

El primer modelo acierta el 100 % de las reservas del año pasado. Con las reservas de este mes, solo el 60 %.

No ha aprendido a predecir cancelaciones. Se ha aprendido las reservas antiguas de memoria.

Al final de esta lección

Nota

Puedo reconocer un modelo que se ha aprendido los ejemplos de memoria.

Palabras clave

PalabraQué significaEjemplo
Sobreajusteel modelo memoriza los ejemplos y falla con casos nuevos
Subajusteel modelo es tan simple que falla en todo
Generalizaracertar con casos que no ha visto
Brechala diferencia entre entrenamiento y prueba100 % − 60 % = 40 puntos
Ruidocasos raros que no siguen la regla

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Memorizar no es aprender

Un modelo con sobreajuste se aprende cada ejemplo, incluso los casos raros. Los casos raros se llaman ruido.

Con los datos de entrenamiento acierta casi todo. Con datos nuevos falla mucho.

La señal es la brecha: la exactitud de entrenamiento menos la de prueba. Si la brecha es grande, el modelo no sabe generalizar.

Ejemplo resuelto: tres modelos de cancelaciones

ModeloEntrenamientoPruebaBrechaDiagnóstico
A100 %60 %40 puntosSobreajuste
B88 %85 %3 puntosBien
C55 %52 %3 puntosSubajuste

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Memoria frente a una regla sencilla

Código: python
# Reservas de un hotel: [días de antelación, ¿cancelada?]
train = [[2, False], [30, True], [5, False], [45, True],
         [60, True], [3, False], [10, True]]
test = [[40, True], [4, False], [31, True], [50, True]]

# Modelo 1: se aprende cada reserva de memoria.
memory = {}
for row in train:
    memory[row[0]] = row[1]

def memorised(days):
    if days in memory:
        return memory[days]
    return False  # nunca la ha visto: responde lo de siempre

# Modelo 2: una regla sencilla.
def simple(days):
    return days > 20

def accuracy(model, rows):
    right = 0
    for row in rows:
        if model(row[0]) == row[1]:
            right = right + 1
    return right * 100 // len(rows)

print("Memoria: entrenamiento", accuracy(memorised, train), "%, prueba", accuracy(memorised, test), "%")
print("Regla:   entrenamiento", accuracy(simple, train), "%, prueba", accuracy(simple, test), "%")

Un error frecuente

Advertencia

Mucha gente cree que un 100 % en entrenamiento es la mejor noticia posible. Casi nunca lo es: los datos reales tienen ruido, y acertarlo todo suele ser memoria. Mira siempre la exactitud de prueba antes de celebrar nada.

Qué hacer en cada caso

Ante el sobreajuste tienes tres salidas habituales. Consigue más ejemplos. Usa un modelo más sencillo. O para el entrenamiento antes, cuando la prueba deja de mejorar.

El subajuste es lo contrario. El modelo falla incluso en entrenamiento, porque es demasiado simple. Ahí sirve un modelo más completo o mejores características.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.