ML Atlas

Machine learning desde cero · Lección 1.2 · 3 de 33 lecciones listas · 10 min

Datos, características, etiquetas y particiones

En pocas palabras

Un conjunto de datos es una tabla de ejemplos, características y etiquetas. Por qué el conjunto de prueba debe quedar oculto y cuánto pesa su tamaño.

Calentamiento Dos preguntas de lecciones anteriores. Un minuto, y no bloquea la lección.
De la lección 1.1: ¿Qué es el aprendizaje automático? Un modelo acierta alrededor del 60 % de las veces con estos datos de tumores. ¿Por qué no es impresionante?

Ver la respuesta

Respuesta correcta: Porque decir siempre «benigno» ya acierta en casi dos tercios de los casos

La mayoría de los tumores del conjunto son benignos, así que un modelo tiene que superar la respuesta mayoritaria trivial antes de ser útil.

De la lección 1.1: ¿Qué es el aprendizaje automático? Ajustas una regla hasta que acierta en todos los ejemplos de entrenamiento. ¿Qué te dice eso sobre la próxima paciente?

Ver la respuesta

Respuesta correcta: Muy poco: solo datos nunca vistos revelan cómo rinde con casos nuevos

La exactitud de entrenamiento mide el ajuste a casos conocidos; solo los datos reservados estiman el rendimiento con casos nuevos.

Si un profesor le da a la clase exactamente las preguntas que saldrán en el examen final y todo el mundo saca la nota máxima, ¿qué ha medido el examen? La memoria de esas preguntas, nada más. El aprendizaje automático se enfrenta a este mismo problema cada vez, y la forma de resolverlo es sorprendentemente sencilla: guardar parte de las preguntas bajo llave en un cajón. Pruébalo tú mismo antes de leer la explicación.

Predice y comprueba El mismo modelo, 20 particiones aleatorias distintas (el 30 % de las biopsias en prueba, o sea 171). ¿Cuánto cambia la exactitud de prueba de una partición a otra?
¿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: Visiblemente: la peor y la mejor partición se separan varios puntos porcentuales

Con el 30 % en prueba, la exactitud oscila entre el 90,1 % y el 96,5 % (6,4 puntos), aunque el modelo y los datos son los mismos; solo cambia qué biopsias caen en la prueba. Un único resultado de prueba no es la verdad absoluta.

Prueba esto

  • Pon el control de proporción de prueba en un valor pequeño y luego mueve el control de semilla por varias posiciones. Observa cuánto cambia la exactitud de prueba aunque el modelo y los datos sigan siendo los mismos.
  • Ahora pon la proporción de prueba en un valor grande y repite el proceso con la semilla. ¿La exactitud de prueba salta más o menos que antes?
  • Deja la semilla fija y mueve la proporción de prueba de un extremo a otro. Fíjate en cómo se reduce el número de filas de entrenamiento a medida que crece el conjunto de prueba.
  • Busca la semilla que da la mejor exactitud de prueba y luego pregúntate si te estaría permitido publicar esa cifra.

La idea en pocas palabras

Casi todos los conjuntos de datos de este curso son una tabla. Cada fila es un ejemplo: un tumor, un paciente, un pasajero, un vino. Cada columna es una característica: una propiedad medida, como un radio, una presión arterial, una edad o un grado alcohólico. Una columna especial contiene la etiqueta, la respuesta que queremos que el modelo prediga, como «maligno» o «sobrevivió». Un modelo es una regla que lleva de las características de una fila a su etiqueta.

Antes de aprender nada, las filas se barajan y se dividen. La parte grande, el conjunto de entrenamiento, es de donde aprende el modelo. La parte pequeña, el conjunto de prueba, se guarda bajo llave y se usa una sola vez, al final, para estimar cómo le irá al modelo con filas que nunca ha visto. Hace el papel de las preguntas del cajón.

Piensa en una cocinera que crea una sopa nueva. La prueba constantemente mientras cocina: eso es el entrenamiento. Pero para saber si a los clientes les gustará, se la sirve a unas cuantas personas que nunca la han probado y no tienen ningún motivo para ser amables. Su veredicto es la puntuación de prueba. Si solo se preguntara a sí misma, siempre pensaría que la sopa es perfecta.

Por qué funciona

El conjunto de prueba solo sirve porque el modelo nunca lo vio. Mientras las filas de entrenamiento y de prueba vengan de la misma fuente y se hayan separado al azar, las filas de prueba se comportan como casos futuros, y la exactitud de prueba es una estimación justa de la exactitud futura.

Pero es solo una estimación, y esta es la parte que casi nadie le cuenta a quien empieza. La puntuación de prueba depende de qué filas cayeron en el conjunto de prueba. Baraja los datos con otra semilla aleatoria y obtendrás otro conjunto de prueba y otra puntuación, con exactamente el mismo modelo y los mismos datos. Con un conjunto de prueba pequeño, la puntuación puede saltar bastante, porque un puñado de filas raras pesa mucho en el porcentaje. La estadística da un tamaño aproximado para ese vaivén. Para una exactitud p medida en n filas de prueba, el error estándar es aproximadamente

EE ≈ √(p · (1 − p) / n)

así que cuadruplicar las filas de prueba solo reduce el vaivén a la mitad. Por eso una sola puntuación de prueba nunca es toda la verdad.

También hay un compromiso. Cada fila que pones en el conjunto de prueba es una fila de la que el modelo no puede aprender. Un conjunto de prueba enorme da una nota fiable a un modelo que aprendió de muy poco; uno diminuto da una nota poco fiable a un modelo bien entrenado. Lo habitual es dejar en el conjunto de prueba entre una quinta y una tercera parte de las filas, y las próximas lecciones mostrarán formas más ingeniosas de esquivar el dilema.

Error frecuente

El error más tentador es probar muchas particiones y quedarse con la que da la puntuación de prueba más bonita. El conjunto de prueba se ha usado entonces para tomar una decisión, y la puntuación publicada es optimista. Una versión más discreta del mismo error se llama fuga de datos: información de las filas de prueba se cuela en el entrenamiento, por ejemplo cuando calculas promedios para escalar o rellenar valores faltantes sobre toda la tabla antes de dividirla. La regla es estricta: primero divide y después haz todo lo demás usando solo las filas de entrenamiento.

Con una partición limpia en la mano por fin podemos construir un modelo de verdad. En la próxima lección ajustamos el más sencillo que existe: una recta que atraviesa una nube de puntos.

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. ¿Por qué el conjunto de prueba debe quedar intacto hasta el final?
Ver la respuesta

Respuesta correcta: Porque su puntuación solo vale si ninguna decisión se tomó mirándolo

En cuanto el conjunto de prueba ha influido en una elección, su puntuación deja de ser un sustituto honesto de los datos futuros.

2. Cambias solo la semilla aleatoria de la partición y la exactitud de prueba se mueve. ¿Qué demuestra esto?
Ver la respuesta

Respuesta correcta: Que la puntuación de prueba es una estimación y depende de la partición

Semillas distintas dan filas de prueba distintas, así que la puntuación varía por azar, y más aún con un conjunto de prueba pequeño.

3. ¿Qué cuesta hacer el conjunto de prueba muy grande?
Ver la respuesta

Respuesta correcta: El modelo dispone de menos filas de las que aprender

Cada fila que pasa al conjunto de prueba es una fila de la que el modelo no puede aprender, así que un conjunto de prueba mayor implica un modelo peor entrenado.

Ideas clave

  • Un conjunto de datos es una tabla: las filas son ejemplos, las columnas son características y una columna es la etiqueta.
  • Divide antes que nada; el modelo aprende con el conjunto de entrenamiento y se califica una sola vez con el de prueba.
  • Una puntuación de prueba es una estimación: otra partición aleatoria da otra cifra, sobre todo con pocas filas de prueba.
  • Elegir la partición con mejor puntuación, o preparar los datos sobre toda la tabla, filtra el conjunto de prueba al entrenamiento.

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

Las matemáticas

La exactitud de prueba es un promedio de n resultados de acierto o error. Si la exactitud verdadera es p, la puntuación que mides varía de una partición a otra con un error estándar SE ≈ √(p · (1 − p) / n).

  • n es el número de filas de prueba, no el tamaño de toda la tabla.
  • SE se reduce con √n: con cuatro veces más filas de prueba se reduce a la mitad.
  • Es máximo en p = 0.5 y disminuye cuando p se acerca a 0 o a 1.
  • Alrededor de dos tercios de las puntuaciones caen a menos de un SE de p, y alrededor del 95 % a menos de dos.
  • Este SE solo cubre la elección de las filas de prueba. No dice nada sobre un cambio entre los datos que tienes y los que encontrarás más adelante.
En código (Python)

La configuración del lab: regresión logística con las 10 variables «mean», el 30 % de las biopsias en el conjunto de prueba (171 filas), 20 particiones distintas:

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X = X.filter(like="mean ")  # las 10 variables "mean", como en el lab
accs = []
for seed in range(20):  # mismo modelo, 20 particiones distintas
    Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, stratify=y, random_state=seed)
    model = make_pipeline(StandardScaler(), LogisticRegression()).fit(Xtr, ytr)
    accs.append(model.score(Xte, yte))
n, p = len(yte), float(np.mean(accs))
print(f"test rows: {n}")
print(f"test accuracy: min {min(accs):.1%}, max {max(accs):.1%}")
print(f"standard error: {np.sqrt(p * (1 - p) / n):.1%} (n={n}), {np.sqrt(p * (1 - p) / (4 * n)):.1%} (n={4 * n})")

Resultado

test rows: 171
test accuracy: min 90.6%, max 97.1%
standard error: 1.8% (n=171), 0.9% (n=684)

scikit-learn mezcla de otra manera que el lab, así que el mínimo y el máximo difieren un poco de los 90,1 % y 96,5 % del lab. El 684 es hipotético: necesita más filas que las 569 de los datos, así que solo ilustra la fórmula. El mensaje es el mismo: la puntuación se mueve varios puntos con el modelo y los datos sin cambios, y cuadruplicar las filas de prueba reduce a la mitad el error estándar.

Para profesionales
  • Particiona primero y luego ajusta escaladores e imputadores solo con las filas de entrenamiento. Un Pipeline lo hace por ti y mantiene las filas de prueba fuera de cada paso ajustado.
  • Fija random_state para que el resultado se pueda repetir, pero elígelo una sola vez, antes de mirar las puntuaciones. Probar semillas hasta que una dé buen resultado es espiar el conjunto de prueba.
  • En clasificación pasa stratify=y, para que una clase rara no desaparezca de un conjunto de prueba pequeño.
  • Las filas que van juntas deben quedarse juntas. Varias filas de un mismo paciente deben ir al mismo lado, y los datos con orden temporal deben dividirse por tiempo, no al azar. Si no, el conjunto de prueba se contamina.
  • Informa la puntuación junto con el tamaño de la prueba y, con pocos datos, repite la partición o usa validación cruzada (lección 8) para mostrar la dispersión.

Profundiza en el Atlas

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