SenseiTeoría desde cero0/21

1 · Lo básico de MLLección 3 de 8

Datos, ejemplos, features y etiquetas

Data, examples, features and labels

Con qué aprende un modelo, cómo se vuelve todo números, cómo se reparte el material para examinarlo, de dónde salen las etiquetas y las trampas que hacen que el examen mienta.

⏱ 52 min lo esencial · 67 min todo24 conceptos nuevos2 calculadoras9 ejerciciosDatos
Secciones14
  1. 01Un ejemplo: lo que entra y la respuesta
  2. 02Convertir todo en números
  3. 03Tres montones: train, validación y test
  4. 04Leakage: cuando el examen se filtra
  5. 05Repartir en código: por tiempo, por grupo y sin copias extra
  6. 06Etiquetas: de dónde salen y cuánto cuestan
  7. 07Acuerdo y ruido, con números extra
  8. 08Clases desbalanceadas y la cola larga extra
  9. 09Errores comunes
  10. 10En la vida real extra
  11. 11Ejercicios
  12. 12Lo que sigue
  13. 13Palabras que vas a oír
  14. 14Chequeo
La pregunta

¿Qué le das exactamente a un modelo para que aprenda, y cómo sabes que no se aprendió las respuestas de memoria?

01

Un ejemplo: lo que entra y la respuesta

Esencial

One example: input and answer

Un ejemplo es un caso del que ya sabes la respuesta. Tiene dos partes: la entrada, que es lo que el modelo va a ver, y la etiqueta, que es la respuesta correcta. En C01, un ejemplo es la foto de una publicación junto con su categoría: la foto de los tenis de Ana y «Calzado › Tenis».

A aprender de ejemplos que ya traen su respuesta, como una tarea ya calificada, se le llama aprendizaje supervisado (supervised learning). Casi todo lo que vas a ver en la Ronda es de este tipo, empezando por C01, que es una clasificación: elegir una categoría entre 500.

Features: la entrada, en datos sueltos

Cada dato de la entrada que el modelo usa para decidir es una feature. En español a veces se dice «característica» o «variable», pero en el trabajo casi todo el mundo dice feature.

Datos en tabla. En C09, un modelo decide si un pago con tarjeta es fraude mientras se cobra. En C15, un sitio de noticias predice si le darán clic a un anuncio. Su entrada es una fila de datos sueltos, cada uno con nombre, y a los datos que caben así se les llama tabulares:

Fraude en pagos (C09)Clics en anuncios (C15)
La pregunta¿Este pago es fraude?¿Le darán clic a este anuncio?
Las features de un ejemplomonto US$45 · giro del comercio «videojuegos» · hora 03:12 · 4 intentos de la tarjeta en el último minutosección «deportes» · dispositivo «android» · hora 21 · anuncio de «autos» · lugar en la página «arriba»
La etiqueta y de dónde salefraude sí o no: llega como contracargo, cuando el dueño de la tarjeta desconoce el cargo, semanas despuésclic sí o no, en los 30 minutos siguientes
Qué tan rara es la respuesta «sí»≈ 0.08 %: 1 de cada 1,250 pagos≈ 0.35 %: 1 de cada ≈ 286 anuncios mostrados

Fíjate en tres cosas. Unas features son números (el monto) y otras, categorías (el giro), que hay que convertir en números porque un modelo solo hace cuentas. La etiqueta no siempre la pone una persona: aquí la escribe lo que pasó después. Y la respuesta «sí» es rarísima, lo que complica medir: un modelo que dijera siempre «no» acertaría 99.92 % de los pagos sin atrapar un solo fraude.

Imágenes. En una foto no hay columnas con nombre. La entrada son los píxeles: una foto de 224 × 224 píxeles, con 3 números por píxel (cuánto rojo, cuánto verde y cuánto azul), son 224 × 224 × 3 = 150,528 números. Ninguno significa nada por sí solo: el número 10,000 no es «tiene agujetas». Un modelo para imágenes recibe los píxeles crudos y aprende por dentro sus propias features útiles: primero bordes, luego formas y luego cosas como «suela». Lo verás en la lección de redes neuronales.

Datos en tablaImágenes
Qué es una featureUna columna con nombre: monto, giro, horaUn píxel; las features útiles las arma el modelo por dentro
Quién elige las featuresUna persona (a eso se le llama feature engineering)El modelo, mientras aprende
Cuántos números por ejemploDecenas o cientos150,528 en una foto de 224 × 224
En la RondaFraude (C09), pronóstico de ventas (C14), clics en anuncios (C15)C01, video (C02), inspección de piezas (C03)

El modelo de C01 solo mira la foto. Pero la publicación trae más cosas: el precio, el título, la historia del vendedor. Son features posibles. Usarlas o no es una decisión de diseño: un precio de 30 pesos casi descarta «Refrigeradores», pero Ana sube la foto antes de terminar de escribir, así que en ese momento el precio todavía no existe y el modelo no puede contar con él.

El dataset es una tabla

Un dataset junta muchos ejemplos. Piénsalo como una tabla: cada fila es un ejemplo, cada columna una feature y la última columna, la etiqueta.

Un dataset como tabla. Cada fila es un ejemplo y cada columna una feature, y la última columna es la etiqueta. Fila 1: foto de unos tenis, precio 1,200 pesos, 14 ventas del vendedor, etiqueta Calzado › Tenis. Fila 2: botas, 950 pesos, 3 ventas, Calzado › Botas. Fila 3: playera, 250 pesos, 120 ventas, Ropa › Playeras. Fila 4: licuadora, 800 pesos, 7 ventas, Hogar › Cocina. Para el modelo, la foto son 150,528 números FEATURES · LO QUE ENTRA ETIQUETA Foto Precio Ventas La respuesta correcta $1,200 14 Calzado › Tenis $950 3 Calzado › Botas $250 120 Ropa › Playeras $800 7 Hogar › Cocina Una fila = un ejemplo Cada columna es una feature, y la última es la etiqueta. Para el modelo, la foto son 150,528 números. El modelo de C01 solo usa la foto.
Cuatro filas de un dataset. En C01 la columna «foto» no guarda la imagen misma, sino dónde está guardada; así se puede tener una versión fija de cada mes sin copiar cientos de gigabytes.

La última columna es la más cara: de dónde sale lo ves en «Etiquetas», más abajo.

02

Convertir todo en números

Esencial

Encoding, missing values and scaling

Un modelo solo multiplica y suma, así que todo le tiene que llegar como número, y bien: sin relaciones inventadas, sin huecos y en escalas comparables. Son tres decisiones de casi cualquier dataset de tabla. En las tres vas a leer dos palabras que la sección siguiente explica a fondo: train, la parte de los datos con la que el modelo aprende, y test, la que se guarda para examinarlo al final.

Categorías: por qué no 1, 2 y 3

El giro del comercio no es un número: es «supermercado», «gasolinera» o «videojuegos». Convertirlo en números se llama codificación (encoding). Numerarlos 1, 2 y 3 es la peor forma, porque inventa un orden (videojuegos, el 3, sería «más» que supermercado) y una distancia (gasolinera, el 2, quedaría a la mitad).

La solución más común es el one-hot: una columna por cada valor posible, con 1 en la del valor que tiene el ejemplo y 0 en las demás.

PagoGiro¿supermercado?¿gasolinera?¿videojuegos?
1supermercado100
2videojuegos001
3gasolinera010
4videojuegos001

Ahora cada giro tiene su propio peso: el modelo puede aprender que videojuegos sube mucho el riesgo y gasolinera casi nada, y ningún giro queda «más grande» ni «a la mitad» de otro. Tres detalles:

  • Cuando el orden sí existe, numerar está bien: en las tallas chica, mediana y grande, el orden 1, 2 y 3 es verdadero. Que de una talla a la siguiente haya la misma distancia sigue siendo una suposición, pero razonable.
  • Un valor que no se vio al entrenar no tiene columna. Se reserva una columna «otro» para lo nuevo.
  • Con muchísimos valores, one-hot se vuelve enorme. En C15 varias features son combinaciones de dos, como «sección deportes y anuncio de autos» o «región y anunciante», y entre todas pueden sumar cientos de miles de valores distintos: una columna por cada uno, casi todas en 0, y una lista que habría que mantener al día. Ahí se usa hashing: una fórmula fija manda cada valor a una de un número fijo de casillas, sin lista. C15 usa 2²⁴ = 16,777,216 casillas con un peso cada una: 2²⁴ × 4 bytes ≈ 67 MB, y un anuncio nuevo cae en sus casillas desde que aparece. La otra salida es aprender una lista de números por valor, un embedding, que ves en su propia lección.

Valores faltantes

A veces una feature no tiene valor: el pago llegó sin el programa que identifica al dispositivo (el SDK), o la tienda no subió sus ventas. Es un valor faltante (missing value), y hay que decidir qué hacer con él antes de entrenar, y hacer lo mismo al servir. Hay tres salidas:

  1. 1

    Quitar

    Borrar los ejemplos con huecos, o la columna si casi siempre falta. Es lo más fácil y a veces lo peor: si lo que falta no falta al azar, quitas justo un tipo de caso. En C09, sin los pagos que no traen dispositivo, el modelo no sabe qué hacer cuando llega uno.

  2. 2

    Rellenar (imputar)

    Poner un valor razonable: la mediana de train (el valor de en medio cuando los ordenas) o una regla del negocio. C14, que pronostica ventas de supermercado, rellena a la tienda que no reportó con sus ventas del mismo día de la semana anterior, y marca esas filas (imputed_input) para medirlas aparte.

  3. 3

    Dejarlo como «no sé»

    Guardar el hueco como un valor especial, NaN (not a number, «no es un número»), para un modelo que lo sabe usar. Los de C09 y C14 suman muchos árboles de decisión, cadenas de preguntas como «¿monto mayor que 100?», y a esa técnica se le llama gradient boosting; sus librerías (LightGBM, XGBoost) aprenden por qué rama mandar los NaN. En una categoría se agrega el valor «desconocido» con su propio peso, como hace C15 cuando no sabe qué lee una persona.

Escalas

Las features de tabla vienen en escalas muy distintas: el monto va de centavos a miles de dólares; la hora, de 0 a 23. Para un modelo que suma peso × feature y aprende moviendo sus pesos a pasitos (lo ves en «Cómo aprende un modelo»), la feature en miles domina y el aprendizaje avanza a tirones. Por eso se hace escalamiento (feature scaling): llevarlas a una escala parecida.

La forma más común es estandarizar: restarle a cada valor el promedio y dividir entre la desviación estándar, que mide qué tan lejos del promedio suelen caer los valores.

z = (x − promedio) ÷ desviación estándar

Dos reglas, y las dos vienen de errores reales:

  • El promedio y la desviación se calculan solo con train, y se guardan. Si los sacas con todo el dataset antes de repartir, el train ya «sabe» algo del test: es una forma discreta de leakage.
  • Al servir se usan los mismos 35 y 10, guardados junto al modelo. Si se recalcularan con lo que llega, con un solo pago la desviación sería 0 y la cuenta ni se podría hacer; y si cambian un poco, el modelo recibe números distintos a los que aprendió sin que nada truene. La Ronda lo llama training-serving skew.

A un árbol de decisión le da igual la escala: solo compara cada feature contra un corte. Y en imágenes ya lo viste con otro nombre: la normalización de la lección anterior es esta cuenta, por canal, con el promedio y la desviación de ImageNet.

03

Tres montones: train, validación y test

Esencial

Train, validation and test

La pregunta importante no es si el modelo acierta. Es si acierta con fotos que nunca vio, como la de Ana. Un modelo con 24.5 millones de parámetros tiene perillas de sobra para aprenderse de memoria cada foto de su entrenamiento. Si lo examinas con esas mismas fotos, puede sacar casi 100 % y fallar con la primera foto nueva. A que le vaya bien con datos nuevos se le llama generalización, y es lo único que importa en producción.

Por eso, antes de entrenar, el dataset se reparte en tres partes que no se mezclan. A eso se le llama hacer el split:

  1. 1

    Train

    El train es con lo que el modelo aprende: sus perillas se ajustan para acertarles a estas fotos. Es la parte más grande.

  2. 2

    Validación

    El validación no se usa para aprender. Lo miras tú mientras desarrollas, para decidir: cuándo parar de entrenar, qué ajustes usar, cuál de dos versiones es mejor.

  3. 3

    Test

    El test se guarda bajo llave y se usa al final, una vez, con el modelo ya elegido. Ese número es tu mejor estimación de cómo le irá en producción.

Las tres partes del dataset y quién usa cada una · Toca cada caja para ver por qué está ahí, o sigue los dos recorridos.
  • Dataset · 50,000 fotos con etiqueta
    Es el material de partida: todas las fotos con su etiqueta. Antes de repartir se quitan las copias exactas y los casi duplicados, porque si la misma foto queda en dos partes el examen se filtra (leakage).
  • Split · sin copias, por vendedor
    Está aquí para que el examen sea honesto: el split reparte las fotos en tres partes que no se mezclan. Las fotos de un mismo vendedor van juntas a un solo lado (split por grupo), así que las partes salen cerca de 80/10/10, no exactas; dentro de eso se cuida que cada categoría quede en una proporción parecida (split estratificado).
  • Train · 40,000 · 80 %
    El train: está aquí para que el modelo aprenda. Sus perillas se ajustan para acertarles a estas fotos.
  • Validación · 5,000 · 10 %
    El validación: está aquí para que puedas decidir sin gastar el examen final. El modelo no aprende de estas fotos; tú las miras mientras desarrollas.
  • Test · 5,000 · 10 %
    El test: está aquí para tener un número honesto al final, así que se guarda bajo llave. En C01 este papel lo hace el golden set, que se arma aparte y no cambia de un mes a otro.
  • Entrenamiento · las perillas se mueven
    El entrenamiento solo ve las fotos de train. Lo vemos paso a paso en la lección siguiente.
  • Tú decides · qué versión, qué ajustes
    Está aquí porque desarrollar es decidir: con el resultado en validación eliges cuándo parar, qué ajustes usar y cuál de dos versiones es mejor. Y vuelves a entrenar.
  • Examen final · una sola vez
    Al final, una vez, el modelo elegido se examina con el test. Ese número es la mejor estimación de cómo le irá con fotos que nunca vio.

¿Cuánto va a cada parte?

Depende del tamaño. Con 1,000 fotos, 10 % de validación son 100 fotos: muy pocas para medir bien, y tal vez convenga 20 %. Con millones, un porcentaje chico ya es muchísimo. En C01, el dataset de septiembre de la Ronda trae 1,840,211 fotos en train y 92,417 en validación:

  • Total: 1,840,211 + 92,417 = 1,932,628 fotos.
  • Validación: 92,417 ÷ 1,932,628 ≈ 0.048, o sea ≈ 5 %.

Al azar o estratificado

La forma más simple de repartir es al azar: cada foto se sortea por separado, con 10 % de probabilidad de ir a validación, 10 % a test y 80 % a train. Con categorías grandes funciona bien. Con categorías chicas, la suerte pesa mucho.

Una categoría de 20 fotos, repartida de dos formasLa cuenta
Fotos de «Máquinas de escribir»
en el dataset
20
Al azar: esperadas en validacióncada foto tiene 10 % de probabilidad
20 × 0.1
2, en promedio
Al azar: que no caiga ningunacada una se queda fuera con 0.9
0.9²⁰
≈ 0.12
Al azar: que caigan justo 2hay 20 × 19 ÷ 2 = 190 parejas posibles
190 × 0.1² × 0.9¹⁸
≈ 0.285
Al azar: que caigan 0 o 1
0.9²⁰ + 20 × 0.1 × 0.9¹⁹
≈ 0.39
Estratificado: train, validación y test
20 × 0.8, 20 × 0.1 y 20 × 0.1
16, 2 y 2, siempre
Resultado
Al azar, unas 12 de cada 100 veces validación se queda sin ninguna máquina de escribir, y 39 de cada 100 tiene una o ninguna: esa categoría no se puede medir. Solo ≈ 29 de cada 100 veces sale el reparto «justo».

El arreglo es un split estratificado: repartir cada categoría por separado en la misma proporción, así las 20 máquinas de escribir quedan siempre en 16, 2 y 2. Se puede estratificar por cualquier cosa que deba salir bien representada: la categoría, o si la foto vino del celular o de la web.

Dividir un datasetCalculadora

Mueve el total y los porcentajes. Abajo, una categoría rara: cuántas fotos suyas le tocan a validación si estratificas, y qué tan seguido se queda sin ninguna si repartes al azar.

Train40,000
Validación5,000
Test5,000
Rara en validación, estratificadoel mismo número en cada reparto2
Rara en validación, al azaren promedio; cada reparto da otra cosa2.0
Al azar: validación sin ninguna12.2 %
Al azar: con una o ninguna39.2 %

Estratificar fija cuántas fotos de cada categoría van a cada lado; el sorteo solo decide cuáles. Con una categoría muy chica ni así alcanza: 1 o 2 fotos en validación no miden nada.

Sube las fotos de la categoría rara a 50 y mira cómo baja el riesgo; luego baja la validación a 5 % y mira cómo vuelve a subir.

El test de C01: el golden set

Cada mes C01 entrena un modelo nuevo, y para saber si es mejor que el de producción hay que examinarlos con exactamente las mismas fotos: si el examen cambia, no sabes si la diferencia es del modelo o del examen. Para eso está el golden set, un conjunto de evaluación de la mejor calidad que se arma una vez y se congela. El de C01, según la Ronda:

  • ≈ 50 mil imágenes, cada una etiquetada por dos personas; si no coinciden, alguien con más experiencia decide.
  • Estratificado: al menos ≈ 50 por categoría, para que la cola larga tenga con qué medirse, y repartido entre fotos de celular y de web.
  • Congelado y jamás usado para entrenar. Si se entrenara con él, el modelo se lo sabría y dejaría de medir.
  • Cuesta ≈ US$5–10 mil, una sola vez. La cuenta está en «Etiquetas», y ahí verás también por qué no sirve de examen la categoría que eligió quien vende.
04

Leakage: cuando el examen se filtra

Esencial

Data leakage

El leakage (fuga de datos) es cuando el entrenamiento o la evaluación tienen información que no va a existir en el momento de predecir, o cuando el test se parece demasiado al train. El nombre lo dice: es un examen filtrado. El síntoma típico: un resultado sospechosamente bueno antes de producción que se derrumba en producción.

Es de lo más importante de esta lección porque no da ningún error: todo corre, los números se ven increíbles y nadie se entera hasta producción. Tres formas muy comunes:

1 · La misma foto en train y en test

En un marketplace la misma foto aparece una y otra vez: el vendedor sube la misma foto en tres publicaciones, o fotografía todo sobre la misma mesa con la misma luz. Si repartes al azar por publicación, las copias pueden quedar separadas: una en train y su gemela en test. El modelo no necesita entender nada para «acertarle»: ya la vio.

La defensa tiene dos partes. Primero, quitar copias antes de repartir: a cada archivo se le calcula un hash, una huella digital corta que sale del contenido; dos archivos idénticos tienen la misma huella. Para fotos recortadas o vueltas a comprimir, los casi duplicados, hay huellas «perceptuales» que se parecen si las imágenes se parecen. Segundo, repartir por grupo: en C01 todas las fotos de un vendedor van al mismo lado, así que reconocer «la mesa de este vendedor» ya no sirve para acertar en validación. Eso es un split por grupo; las dos defensas, en código, están en la sección siguiente.

2 · Una feature que trae escondida la respuesta

A veces una columna de la tabla contiene la etiqueta disfrazada. Por ejemplo, un campo «re-categorizada por un moderador» o «estado final de la publicación». Se llenan después de que se publicó, a veces justo porque la categoría estaba mal. En el dataset histórico están llenos, y el modelo aprende a usarlos. En producción, cuando Ana sube su foto, ese campo todavía está vacío.

En fraude pasa con «contracargos de la tarjeta en los últimos 90 días», calculada hoy para todo el historial: un pago fraudulento del 1 de septiembre cuyo contracargo llegó el 20 queda con la feature en 1, y ese 1 es su propia etiqueta. En el examen, el modelo se ve casi perfecto.

La prueba es una pregunta, columna por columna: ¿este dato ya existía en el instante en que el modelo tiene que responder? Si la respuesta es no, fuera.

3 · Información del futuro

Imagina una feature «ventas del vendedor en los últimos 90 días» que alguien calcula hoy, 1 de junio, para todas las publicaciones, también para una del 1 de marzo. Esos 90 días van de marzo a junio: ventas que el 1 de marzo todavía no habían pasado. El modelo aprende con un dato que en producción nunca va a tener.

Lo mismo pasa al repartir: si el modelo va a predecir el futuro, el examen tiene que venir del futuro. Es un split temporal: si entrenas con datos hasta el 5 de enero, evalúas desde el 6. Al azar, el modelo «ya conoce» las modas de diciembre cuando lo examinas con noviembre.

Tres formas de repartir las mismas 12 fotos de tres vendedores, A, B y C, ordenadas de enero a marzo. Al azar: tres fotos van a test, una de cada vendedor, y los tres vendedores quedan en train y en test. Por tiempo: las tres fotos más recientes, después de un corte, van a test. Por grupo: las cuatro fotos del vendedor C van a test y las de A y B, a train. 12 FOTOS · 3 VENDEDORES · ENE → MAR vendedor A vendedor B vendedor C Al azar A, B y C quedan en los dos lados TRAIN TEST Por tiempo test es lo que vino después TRAIN TEST CORTE Por grupo C entero en test; A y B en train TRAIN TEST
Las mismas 12 fotos, de tres vendedores, repartidas de tres formas. Solo la del medio respeta el tiempo y solo la de abajo deja a cada vendedor entero de un lado. Se pueden combinar: por vendedor y, además, por fecha.
05

Repartir en código: por tiempo, por grupo y sin copias

Extra

Splitting in code: by time, by group and without copies

La regla de la sección anterior cabe en una frase: parte por lo que va a ser nuevo en producción, sea el futuro o un vendedor, y antes de todo quita las copias. Aquí va con números y en Python que puedes correr tal cual.

El split estratificado

Primero, las máquinas de escribir de «Tres montones». Este programa reparte 1,000 fotos (980 de tenis y 20 de máquinas de escribir) en 80 / 10 / 10. Revuelve con una semilla fija, el número con el que arranca el generador de números al azar, para que el sorteo salga igual cada vez.

python
import random

# 1,000 fotos: 980 de tenis y 20 de máquinas de escribir
fotos = [("tenis", i) for i in range(980)] + [("maquina", i) for i in range(20)]

def al_azar(datos, semilla):
    d = list(datos)                     # una copia: el original no se toca
    random.Random(semilla).shuffle(d)   # revolver; con la misma semilla, el mismo orden
    n = len(d)
    return d[:int(n * 0.8)], d[int(n * 0.8):int(n * 0.9)], d[int(n * 0.9):]

def maquinas(parte):
    return sum(clase == "maquina" for clase, _ in parte)

train, val, test = al_azar(fotos, semilla=17)
print(len(train), len(val), len(test))
print("máquinas en train, val y test:", maquinas(train), maquinas(val), maquinas(test))

# el mismo reparto con 1,000 semillas distintas
vacios = sum(maquinas(al_azar(fotos, s)[1]) == 0 for s in range(1000))
print("repartos con validación sin máquinas:", vacios, "de 1000")
Salida
800 100 100
máquinas en train, val y test: 17 0 3
repartos con validación sin máquinas: 124 de 1000

Con la semilla 17 salió justo el caso malo: ninguna máquina en validación. De 1,000 sorteos, 124 (12.4 %) quedan igual, cerca del 12 % de la cuenta. No sale idéntico porque 1,000 sorteos también tienen suerte: con otras 1,000 semillas saldría otro número, casi siempre entre 10 % y 14 %. (Que aquí vayan exactamente 100 fotos a validación, en vez de sortear cada foto, lo baja un poquito: la cuenta exacta da 11.9 %.) Ahora, estratificado:

python
import random

fotos = [("tenis", i) for i in range(980)] + [("maquina", i) for i in range(20)]

def al_azar(datos, semilla):
    d = list(datos)
    random.Random(semilla).shuffle(d)
    n = len(d)
    return d[:int(n * 0.8)], d[int(n * 0.8):int(n * 0.9)], d[int(n * 0.9):]

def estratificado(datos, semilla):
    por_clase = {}
    for foto in datos:                          # juntar las fotos de cada clase
        por_clase.setdefault(foto[0], []).append(foto)
    train, val, test = [], [], []
    for clase in sorted(por_clase):             # y repartir cada clase por separado
        tr, va, te = al_azar(por_clase[clase], semilla)
        train += tr; val += va; test += te
    return train, val, test

for s in (17, 18, 19):
    train, val, test = estratificado(fotos, semilla=s)
    print(s, [sum(c == "maquina" for c, _ in parte) for parte in (train, val, test)])
print(len(train), len(val), len(test))
Salida
17 [16, 2, 2]
18 [16, 2, 2]
19 [16, 2, 2]
800 100 100

Con cualquier semilla: 16, 2 y 2. El sorteo decide cuáles máquinas van a cada lado, pero ya no cuántas.

Por tiempo: C14 y las etiquetas que tardan

C14 pronostica cada noche las ventas de los próximos 14 días para ≈ 4.8 millones de combinaciones tienda × producto (≈ 400 tiendas con ≈ 12,000 productos cada una). Con un split al azar, el martes podría quedar en evaluación y el lunes y el miércoles en entrenamiento: el modelo interpola (adivina el martes con los días de al lado) en vez de pronosticar, y su número sale mejor que en la vida real, donde el miércoles todavía no existe.

El split correcto es temporal: entrenar con lo que se sabía hasta una fecha de corte y evaluar los 14 días siguientes. Como una semana puede ser rara (una quincena, un feriado), C14 lo repite con 8 cortes semanales y promedia. Eso es un backtest: examinar al modelo como si hubiera vivido cada una de esas semanas.

En fraude aparece una vuelta más: la etiqueta llega tarde.

Por grupo: cada vendedor, entero de un lado

C01 lo resuelve con un hash del id del vendedor: un número que sale del texto «vend-00024» con una fórmula fija, siempre el mismo. Si su residuo al dividir entre 100 (el módulo 100) es menor que 95, el vendedor entero va a train; si no, a validación. La Ronda lo escribe así en la tarjeta del dataset de septiembre: «por seller_id (hash mod 100 < 95 → train)».

python
import hashlib

def lado(vendedor):
    # la huella del id: el mismo texto da siempre el mismo número
    h = int(hashlib.sha256(vendedor.encode()).hexdigest(), 16)
    return "train" if h % 100 < 95 else "val"

for v in ["vend-00021", "vend-00022", "vend-00023", "vend-00024", "vend-00025"]:
    print(v, lado(v))

vendedores = [f"vend-{i:05d}" for i in range(10_000)]
en_val = sum(lado(v) == "val" for v in vendedores)
print("vendedores en validación:", en_val, "de", len(vendedores))
Salida
vend-00021 train
vend-00022 train
vend-00023 train
vend-00024 val
vend-00025 train
vendedores en validación: 487 de 10000

Dos cosas salen gratis: el mismo vendedor cae siempre del mismo lado, mes tras mes, sin guardar ninguna lista; y como la fórmula reparte parejo, ≈ 5 % va a validación (487 de 10,000).

Otros casos hacen lo mismo. C04, que marca tumores en imágenes de patología, reparte por paciente: una lámina produce ≈ 3,000 pedacitos de imagen casi idénticos entre vecinos, y un paciente puede tener varias. C02, que vigila video, reparte por cámara y por fecha.

Casi duplicados y huellas perceptuales

Un hash como sha256 sirve para copias exactas, pero cambia por completo si cambia un solo byte: una foto vuelta a comprimir ya tiene otra huella. Para los casi duplicados se usa una huella perceptual, que se calcula sobre la imagen «vista de lejos». La más sencilla, el average hash, hace esto:

  1. 1

    Achicar

    Llevar la foto a una cuadrícula diminuta en gris: 8 × 8 = 64 píxeles en la vida real; aquí, 4 × 4 = 16 para seguirlo a mano.

  2. 2

    Comparar con el promedio

    Cada píxel arriba del promedio de la cuadrícula es un 1; abajo, un 0. Esos bits son la huella.

  3. 3

    Contar diferencias

    Dos fotos son casi duplicadas si sus huellas difieren en pocos bits. Contar los bits distintos se llama distancia de Hamming.

python
import hashlib

def huella(gris):            # gris: los 16 píxeles de la foto achicada a 4 × 4
    prom = sum(gris) / len(gris)
    return "".join("1" if g > prom else "0" for g in gris)

def distintos(h1, h2):       # cuántos bits no coinciden
    return sum(a != b for a, b in zip(h1, h2))

tenis     = [200, 190, 60, 50, 210, 180, 70, 40, 90, 112, 30, 20, 220, 230, 80, 60]
recompri  = [198, 193, 62, 49, 207, 183, 68, 44, 94, 117, 33, 21, 219, 227, 83, 58]
mas_clara = [g + 25 for g in tenis]
otra_foto = [40, 60, 200, 210, 50, 70, 220, 190, 30, 90, 180, 200, 20, 40, 60, 230]

print("huella de los tenis:", huella(tenis))
for nombre, foto in [("recomprimida", recompri), ("más clara", mas_clara), ("otra foto", otra_foto)]:
    print(f"{nombre:12} bits distintos: {distintos(huella(tenis), huella(foto))} de 16")

print("sha256 de los tenis:  ", hashlib.sha256(bytes(tenis)).hexdigest()[:16])
print("sha256 recomprimida:  ", hashlib.sha256(bytes(recompri)).hexdigest()[:16])
Salida
huella de los tenis: 1100110000001100
recomprimida bits distintos: 1 de 16
más clara    bits distintos: 0 de 16
otra foto    bits distintos: 13 de 16
sha256 de los tenis:   53b7a26d1293f19c
sha256 recomprimida:   29515c5130af0803

La recomprimida cambia 1 bit de 16; la más clara, ninguno, porque el promedio sube lo mismo que cada píxel; la otra foto, 13. Sus sha256, en cambio, no se parecen en nada. pHash, la huella que menciona la Ronda, es una versión más robusta de la misma idea. Otra forma es comparar los embeddings de dos fotos, listas de números que resumen lo que muestran, con la similitud coseno, que da cerca de 1 cuando las dos listas apuntan casi en la misma dirección.

¿Importa? Barz y Denzler (2020) revisaron CIFAR-10 y CIFAR-100, dos datasets clásicos de fotos chicas: el 3.3 % y el 10 % de sus imágenes de test tenían un casi duplicado en train. Si pasa en los datasets con que todo el mundo compara modelos, en los tuyos también.

06

Etiquetas: de dónde salen y cuánto cuestan

Esencial

Labels: where they come from and what they cost

La etiqueta es el dato más caro por unidad y el techo de todo lo demás: un modelo difícilmente va a ser más consistente que sus etiquetas, y con etiquetas malas ni siquiera lo puedes medir. Si dos personas no se ponen de acuerdo en si una foto es «Tenis» o «Calzado deportivo», el modelo tampoco va a poder.

No todas valen lo mismo

En C01 salen de tres lugares. Los porcentajes son los del dataset de septiembre en la Ronda:

FuenteQué parte del datasetQué tan buena
La categoría que eligió quien vende72 %, ya filtradaAbundante pero ruidosa. Y está contaminada: la gente suele aceptar lo que el modelo le sugirió, así que el modelo terminaría aprendiendo a imitarse a sí mismo
Correcciones de moderadores7 %Muy buena, pero solo de las publicaciones que alguien revisó
Personas que etiquetan a mano21 %La mejor y la más cara; hoy se suman unas 5 mil fotos al mes, elegidas a propósito

En otros casos la etiqueta la escribe lo que pasó después: el contracargo en C09, el clic en C15, lo vendido en C14. Cada fuente trae su sesgo, y conviene poder decirlo en una frase: la de quien vende está influida por la sugerencia; la de moderación solo existe para lo revisado; el contracargo tarda semanas.

Etiquetar es un proceso

Etiquetar no es solo poner respuestas. Tiene cuatro piezas:

  • Quién. Un proveedor (escala rápido, pero sabe poco de tu tema), un equipo propio, expertos para los casos difíciles, o la gente dentro de su trabajo, como los moderadores de C01.
  • Una guía escrita. Qué es cada clase, con ejemplos y contraejemplos; los casos límite decididos por escrito («¿un celular con funda va en celulares o en fundas?»); una salida para «no sé», para no obligar a inventar; y una versión, para saber con qué reglas se hizo cada etiqueta.
  • Control de calidad. Una parte la etiquetan dos personas sin saberlo (en C01, el 10 %), se mide cuánto coinciden y un experto decide los desacuerdos. Lo que se resuelve entra a la guía. Ojo: el porcentaje de coincidencia engaña cuando casi todo es de una clase, porque coincidir en lo fácil no cuesta nada. Por eso se mide con kappa de cohen, que descuenta lo que coincidirían por puro azar; la cuenta está en «Acuerdo y ruido».
  • Un costo, que se calcula antes de empezar.
Lo que cuesta etiquetar en C01La cuenta
Fotos al meselegidas a propósito
la cola del mes
≈ 5,000
Con 10 % de doble anotación
5,000 × 1.1
5,500 anotaciones
Tiempo20–30 s por foto, con 500 categorías
5,500 × 20–30 s
≈ 31–46 h al mes
Costo al mesmás ≈ US$25–50 por la doble anotación
5,000 × US$0.05–0.10
≈ US$250–500
Golden set, una sola veztodas con doble anotación
50,000 × 2
100,000 anotaciones
Su costo
100,000 × US$0.05–0.10
≈ US$5–10 mil
Su tiempo
100,000 × 20–30 s
≈ 560–830 h
Resultado
La cola del mes es menos de media persona. El golden set son ≈ 3.5–5 personas-mes, una sola vez: por eso se congela y se cuida. Los precios por etiqueta cambian mucho por tarea y proveedor.
Cuánto cuesta etiquetarCalculadora

Los valores iniciales son la cola mensual de C01 con el precio más bajo de la Ronda. Para el golden set, pon 50,000 fotos y 100 % de doble anotación.

Anotacioneslas fotos dobles cuentan dos veces5,500
Costo en dólares275
Horas de trabajo38
Personas de tiempo completo durante un messi una persona etiqueta ≈ 160 horas al mes0.24

El precio y el tiempo por etiqueta cambian mucho por tarea y proveedor; se miden con un piloto antes de comprometerse. En C01, la cola del mes ya cuesta más que reentrenar el modelo, que son unas horas de una GPU. El Dojo usa 20 % de doble anotación porque con 10 % de 800 fotos serían solo 80 dobles, muy pocas para medir el acuerdo de cada clase.

Prueba también la cola del Dojo: 800 fotos al mes, con 20 % de doble anotación.

Etiquetar lo que más enseña

Con 5,000 etiquetas al mes y millones de fotos, la pregunta es cuáles. Al azar, casi todas serían fotos que el modelo ya acierta sin dudar: dinero que no enseña nada. El active learning elige las que más enseñan:

  • Las dudosas. En C01, las fotos cuyo primer lugar tiene confianza menor que 0.3, o en las que el primero y el segundo casi empatan.
  • Los desacuerdos. Quien vende eligió una categoría fuera de las 5 sugeridas, o moderación corrigió.
  • Lo nuevo. Una categoría que el negocio acaba de agregar se llena a mano hasta tener ≈ 200–500 fotos.
  • Una parte al azar, el 20–30 % del presupuesto. Parece desperdicio y es lo más importante: es lo único que dice cuánto se equivoca el modelo con el tráfico de verdad.
El ciclo de las etiquetas de C01 · De la foto de Ana al examen del modelo siguiente; los números siguen el primer recorrido. Toca cada caja.
  • Moderadores · corrigen lo reportado
    Sus correcciones son etiquetas buenas, pero solo existen para lo que alguien reportó o revisó: no son una muestra del tráfico. En el dataset de septiembre son el 7 %.
  • Señales del mes · sugerencias y elecciones
    Lo que deja cada publicación: las 5 sugerencias con su confianza, la categoría que eligió quien vende y si moderación la corrigió. Con esto se arma la cola y se filtran las etiquetas débiles.
  • Ana publica · el modelo sugiere 5
    Ana sube la foto y el modelo le sugiere 5 categorías. Lo que ella elige es la etiqueta más abundante, ≈ 2.5 M al día, y la más contaminada: la gente tiende a aceptar la primera sugerencia.
  • Elegir qué etiquetar · ≈ 5k: dudas y azar
    Aquí se decide en qué se gasta el presupuesto. Es el active learning: baja confianza, desacuerdos con quien vende, categorías nuevas y 20–30 % al azar, la única parte que mide el error real.
  • Anotadores · con guía · 10 % doble
    Personas con una guía escrita y versionada: qué es cada categoría, con ejemplos y contraejemplos, y una salida para «no sé». El 10 % lo etiquetan dos personas sin saberlo. Cuesta ≈ US$0.05–0.10 por foto.
  • Acuerdo · kappa · un experto decide
    Mide si la guía funciona: kappa de cohen por clase, no el porcentaje de acuerdo, que engaña cuando una clase domina. Un experto decide cada desacuerdo y lo que se aprende entra a la guía.
  • Dataset del mes · sin copias · por vendedor
    Junta las etiquetas humanas, las correcciones y las elecciones filtradas de quien vende. Quita copias por sha256 y casi copias por huella perceptual (casi duplicado), y reparte por vendedor: hash mod 100 < 95 va a train (split por grupo).
  • Entrenar · train y validación
    El modelo aprende solo con train; con validación se decide cuándo parar y qué versión queda. Ninguna foto del golden set puede estar aquí.
  • Golden set · 50k · congelado
    El golden set: ≈ 50 mil fotos, cada una con dos etiquetas humanas, al menos ≈ 50 por categoría, de celular y de web. El mismo examen cada mes. Costó ≈ US$5–10 mil, una vez.
  • Examen · el nuevo contra el actual
    El modelo nuevo y el que está en producción responden las mismas fotos. El nuevo sale solo si no es peor en el total, en la cola larga ni en ningún slice.

Etiquetas con ruido

Aun así, algunas etiquetas quedan mal. Es el ruido en las etiquetas, y hace dos daños. En train, le enseña cosas falsas al modelo. En evaluación, el modelo «falla» donde la etiqueta estaba mal, y el número mide en parte el ruido. Cuánto hay, en la sección siguiente.

07

Acuerdo y ruido, con números

Extra

Agreement and label noise, with numbers

97 % de acuerdo que vale poco

Medir la calidad con el porcentaje de veces que dos personas coinciden engaña cuando una clase domina, porque coincidir en lo fácil no cuesta nada. La Ronda lo muestra con C03, que revisa piezas en una fábrica: dos inspectores revisan las mismas 1,000 piezas, casi todas buenas.

97 % de acuerdo que vale pocoLa cuenta
Los dos dicen «buena» / los dos dicen «defecto»
conteo
960 / 10
DesacuerdosA dice defecto y B no, y al revés
conteo
15 / 15
Acuerdo observado, pₒ
(960 + 10) ÷ 1,000
0.97
Cada inspector marca defecto en
(10 + 15) ÷ 1,000
2.5 %
Acuerdo esperado por puro azar, pₑsi cada uno marcara al azar con su 2.5 %
0.025 × 0.025 + 0.975 × 0.975
0.95125
Kappa
(0.97 − 0.95125) ÷ (1 − 0.95125)
≈ 0.38
Resultado
De las 40 piezas que alguno marcó como defecto, coinciden en 10. El 97 % venía casi todo de las piezas buenas.

Esa corrección es la kappa de cohen de Cohen: κ = (pₒ − pₑ) ÷ (1 − pₑ). Arriba, lo que coincidieron por encima del azar; abajo, lo más que podían coincidir por encima del azar. 1 es acuerdo perfecto y 0, lo mismo que el azar. Una escala muy citada (Landis y Koch, 1977), que es una convención y no una ley, llama «moderado» a 0.41–0.60, «sustancial» a 0.61–0.80 y «casi perfecto» a más de 0.80. En la Ronda, al aclarar la guía, el acuerdo sube a 99 % y kappa a ≈ 0.79: dos puntos más de acuerdo duplican kappa.

Cuánto ruido hay

Northcutt, Athalye y Mueller (2021) revisaron los test sets de 10 datasets muy usados y estimaron, en promedio, al menos 3.3 % de etiquetas erróneas, y ≈ 6 % en la validación de ImageNet. Si los datasets famosos tienen eso, el tuyo también. Dos consecuencias:

  • Un techo en lo que puedes medir. Si 6 de cada 100 etiquetas del examen están mal y el modelo da la respuesta verdadera, el examen se las cuenta como errores: un modelo perfecto mediría ≈ 94 %. No es exacto, porque un modelo real a veces coincide con la etiqueta mala, pero da la idea.
  • Comparaciones que se mueven solas. El examen automático que decide si un modelo nuevo sale (el gate) puede cambiar de opinión por etiquetas mal puestas, no por el modelo.

Qué se hace: marcar como sospechosas las fotos donde el modelo contradice la etiqueta con mucha seguridad (técnicas como confident learning, de la librería cleanlab) y mandarlas a revisión humana. No se borran solas: un «error» seguro del modelo puede ser justo el caso difícil que necesitas.

Active learning, con cuidado

Dos trampas, y las dos están en la Ronda:

  • Evaluar con lo que eligió. Un conjunto armado con las fotos más dudosas es, a propósito, más difícil que el tráfico real: el porcentaje de aciertos medido ahí sale más bajo de lo que vive la gente. Se entrena con todo lo etiquetado, pero se evalúa con el golden set y con la parte al azar.
  • El modelo que se imita a sí mismo. Si quien vende acepta casi siempre la primera sugerencia, entrenar con su elección enseña al modelo a repetir sus propios errores, y la métrica medida con esas etiquetas sube aunque nada mejore. C01 guarda un grupo aparte: ≈ 1 % de los vendedores no ve sugerencias y elige a mano. Sus etiquetas son las únicas que el modelo no influyó.
08

Clases desbalanceadas y la cola larga

Extra

Class imbalance and the long tail

Casi nunca hay el mismo número de ejemplos de cada categoría. A eso se le llama desbalance de clases, y engaña de una forma muy concreta.

Por eso, con clases desbalanceadas, el porcentaje de aciertos total (accuracy) no basta. Hay que medir cada clase por separado: de las botas que había, ¿cuántas reconoció? Eso se llama recall, y lo ves a fondo en la lección «¿Aprendió de verdad?».

La cola larga de C01

Con 500 categorías el desbalance tiene una forma típica: la cola larga. Unas cuantas categorías tienen decenas de miles de fotos, muchas tienen unos cientos o miles, y algunas apenas decenas. Si las ordenas de la más grande a la más chica, la gráfica cae rápido y luego sigue, baja y larga: esa es la «cola».

La cola larga, con números ilustrativos. Las 500 categorías ordenadas de la más grande a la más chica: la número 1, Ropa › Playeras, tiene 62,000 fotos; la 2, Calzado › Tenis, 48,000; la 3, Celulares, 35,000; la 50, Audífonos, 6,000; la 250, Relojes de pared, 900; y la 500, Monedas antiguas, apenas 40. Las barras de las últimas casi no se ven 500 CATEGORÍAS, DE MAYOR A MENOR fotos de entrenamiento · números ilustrativos #1 · Ropa › Playeras 62,000 #2 · Calzado › Tenis 48,000 #3 · Celulares 35,000 ⋮ #50 · Audífonos 6,000 ⋮ #250 · Relojes de pared 900 #500 · Monedas antiguas 40 · casi no se ve
Los números son ilustrativos, pero la forma es la de C01: las barras de la cola casi no se ven.

Una cuenta para dimensionarlo. C01 tiene ≈ 1.84 millones de fotos de entrenamiento y 500 categorías:

  • Si se repartieran parejo: 1,840,000 ÷ 500 = 3,680 fotos por categoría.
  • Pero casi ninguna está cerca de ese promedio. En la figura, la primera tiene 62,000 (17 veces el promedio) y la última, 40 (92 veces menos).

La Ronda lo dice así para C01: con 500 categorías, el promedio lo dominan unas 50 categorías grandes, y la cola puede estar rota sin que se note. Por eso C01 mide aparte la cabeza (head, las 100 categorías con más tráfico) y la cola.

Qué se hace con el desbalance

  • Medir por clase. Lo primero, porque sin eso ni sabes que hay un problema. Un promedio que le da el mismo peso a cada categoría, sin importar su tamaño, es el macro-promedio.
  • Estratificar el split, para que cada categoría chica llegue a validación y a test.
  • Etiquetar más donde hay poco. Cuando el negocio agrega una categoría, C01 la llena a mano hasta tener unas 200 a 500 fotos.
  • Mostrar más seguido las fotos raras (oversampling). Cuidado: 40 fotos repetidas muchas veces se aprenden de memoria (overfitting).
  • Que equivocarse en una clase rara cueste más. Se hace en la pérdida, el número que mide el error al entrenar y que ves en la siguiente lección.

Data augmentation: variaciones que no cambian la respuesta

Unos tenis volteados como espejo, un poco más oscuros o recortados un poco más a la izquierda siguen siendo tenis. La data augmentation aprovecha eso: al entrenar, a cada foto se le aplican cambios al azar que no cambian su etiqueta (voltearla, recortar un pedazo distinto con un crop al azar, cambiar el brillo, girarla unos grados), y así el modelo aprende que esos cambios no importan. Como el cambio es al azar en cada pasada, casi nunca ve dos veces la misma imagen: en C01 cada foto de train pasa 8 veces por el modelo al entrenar, y cada vez llega un poquito distinta.

Y su límite: la augmentation no inventa información. Si de una categoría tienes 40 fotos de las mismas 3 monedas, todas sus variaciones siguen siendo 3 monedas. Para la cola larga ayuda, pero no reemplaza etiquetar más.

Slices: el promedio esconde cosas

Un slice es un pedazo de los datos de evaluación que comparte algo y se mide por separado: fotos de celular contra fotos de web, fotos con poca luz, imágenes muy chicas. Es medir por clase, aplicado a cualquier grupo.

09

Errores comunes

Esencial

Common mistakes

Las trampas que más se repiten al armar un dataset, y cómo evitar cada una.

  1. Repartir al azar lo que viene en familias. Fotos repetidas, el mismo vendedor, días seguidos: el examen sale alto y se cae en producción. Cómo evitarla: pregunta qué va a ser nuevo en producción (el futuro, un vendedor, un paciente) y parte por eso; quita copias y casi copias antes de repartir.
  2. Sacar cuentas con todo el dataset antes de repartir. El promedio para escalar, la mediana para rellenar, la lista de categorías para el one-hot. Cómo evitarla: calcula todo solo con train, guárdalo junto al modelo y úsalo igual en validación, en test y en producción.
  3. Numerar categorías que no tienen orden. 1, 2 y 3 para giros o colores inventan un orden y una distancia. Cómo evitarla: one-hot con una columna «otro»; con millones de valores, hashing o embeddings.
  4. Rellenar huecos con 0. «Cero compras» y «no sé cuántas» se vuelven lo mismo. Cómo evitarla: NaN para un modelo que lo entienda, o la mediana de train más una columna que marque el relleno.
  5. Decidir con el test. Mirarlo, cambiar algo y volverlo a mirar lo convierte en validación. Cómo evitarla: decide con validación; el test, o el golden set, se usa al final para el número que reportas.
  6. Evaluar con etiquetas sesgadas. La elección de quien vende, influida por el modelo, o lo que eligió el active learning, más difícil que lo normal. Cómo evitarla: evalúa con el golden set y con una muestra al azar; con el resto, entrena.
  7. Repartir por grupo con hash() de Python. Cambia cada vez que arranca el programa, y los vendedores saltan de lado. Cómo evitarla: hashlib (por ejemplo sha256), que da lo mismo siempre.
10

En la vida real

Extra

In real life

Las mismas ideas, en seis lugares distintos. Fíjate en que la columna «cómo se reparte» nunca dice «al azar».

DóndeEl ejemplo y su etiquetaCómo se reparteLa trampa típica
C01 · categoría de una fotoUna foto; su categoría, de quien vende, de moderación o de una personaPor vendedor y sin copias; el examen es el golden setEntrenar y examinar con la elección de quien vende, que el modelo influyó
C09 · fraude en pagosUn pago; fraude o no, por un contracargo semanas despuésPor tiempo, solo con cohortes madurasUna feature calculada hoy que ya cuenta el contracargo
C14 · ventas de supermercadoTienda × producto × día; lo que se vendióPor tiempo, con 8 fechas de corteTomar un día agotado como demanda de cero
C15 · clics en anunciosUn anuncio mostrado; clic o no en 30 minutosEntrenar con días pasados y examinar con el día siguienteMedir accuracy con 1 clic de cada ≈ 286 anuncios
C04 · patologíaUn pedacito de una lámina; la región que marcó un especialistaPor pacientePedacitos vecinos de la misma lámina, a los dos lados
Fuera de ML · un examen de admisiónUna pregunta; su respuesta correctaPreguntas nuevas, no las del banco con que se estudióPracticar con el examen real: el puntaje mide memoria, no lo que sabes
11

Ejercicios

Esencial

Exercises

Resuélvelos con lápiz antes de abrir la solución. Para los de números, las calculadoras de arriba sirven para comprobar.

  1. 1Fácil

    Tienes 120,000 fotos y las repartes 85 / 10 / 5. ¿Cuántas van a cada parte? Si estratificas, ¿cuántas fotos de una categoría con 300 van a test?

    Ver la solución paso a paso
    • Train: 120,000 × 0.85 = 102,000.
    • Validación: 120,000 × 0.10 = 12,000.
    • Test: 120,000 × 0.05 = 6,000. Suman 120,000.

    Estratificado, la categoría se reparte igual: 300 × 0.05 = 15 a test (30 a validación y 255 a train).

  2. 2Fácil

    Codifica con one-hot el dispositivo de cuatro anuncios de C15: android, web, iphone y android. ¿Cuántas columnas usas? Después llega uno visto en una tablet, que nunca apareció en train: ¿qué le das?

    Ver la solución paso a paso

    Tres valores (android, iphone y web) más una columna «otro»: cuatro.

    • android = [1, 0, 0, 0] · web = [0, 0, 1, 0] · iphone = [0, 1, 0, 0] · android = [1, 0, 0, 0]

    La tablet va a «otro»: [0, 0, 0, 1]. Sin esa columna quedaría en puros ceros, una combinación que el modelo nunca vio.

  3. 3Fácil

    En train, el monto tiene promedio 35 y desviación estándar 10. Estandariza 25, 35 y 62. En producción llega un pago de 35: ¿cuál es su z?

    Ver la solución paso a paso
    • (25 − 35) ÷ 10 = −1.0 · (35 − 35) ÷ 10 = 0 · (62 − 35) ÷ 10 = 2.7

    El de producción también da 0: se usan el promedio y la desviación de train, guardados con el modelo.

  4. 4Fácil

    Un día de C15 trae 200,000 anuncios mostrados y 700 clics. ¿Qué accuracy saca un «modelo» que siempre dice «no clic»? ¿Cuántos clics atrapa?

    Ver la solución paso a paso
    • Aciertos: los 200,000 − 700 = 199,300 sin clic. 199,300 ÷ 200,000 = 99.65 %.
    • Clics que atrapa: 0 de 700.

    Un 99.65 % que no sirve para nada. Por eso, con una clase tan rara, se mide cada clase por separado: de los 700 clics, ¿cuántos vio venir? Eso es el recall, y aquí vale 0.

  5. 5Medio

    Una categoría tiene 30 fotos y repartes al azar 90 / 5 / 5. ¿Qué probabilidad hay de que validación se quede sin ninguna? ¿Lo arregla estratificar?

    Ver la solución paso a paso

    Cada foto se queda fuera de validación con probabilidad 0.95; las 30 a la vez, 0.95³⁰ ≈ 0.21: una de cada cinco veces.

    Estratificar no alcanza: 30 × 0.05 = 1.5, así que validación tendría 1 o 2 fotos, que no miden nada. Hace falta juntar más (el golden set de C01 exige al menos ≈ 50 por categoría) o, con muy pocos datos, la validación cruzada de «¿Aprendió de verdad?»: repartir varias veces, de modo que cada foto esté en validación una vez, y promediar.

  6. 6Medio

    Un proveedor cobra US$0.08 por etiqueta y tarda 25 s por foto. Quieres 8,000 fotos al mes con 15 % de doble anotación. ¿Cuántas anotaciones, cuánto dinero y cuántas horas son?

    Ver la solución paso a paso
    • Anotaciones: 8,000 × 1.15 = 9,200.
    • Costo: 9,200 × US$0.08 = US$736.
    • Tiempo: 9,200 × 25 s = 230,000 s; ÷ 3,600 ≈ 64 horas al mes, menos de media persona de tiempo completo.
  7. 7Medio

    Para un modelo de fraude te proponen: (a) el monto; (b) «cuenta bloqueada», que se marca cuando se confirma un fraude; (c) «contracargos de la tarjeta en 90 días», calculada hoy para todo el historial; (d) intentos de la tarjeta en el minuto anterior al pago; (e) el giro del comercio. ¿Cuáles son leakage?

    Ver la solución paso a paso

    La pregunta para cada una: ¿existía en el instante de decidir?

    • (a), (d) y (e) sí. Ojo con (d): el minuto anterior, sin contar el pago que se decide.
    • (b) es leakage: se llena después, justo al confirmar el fraude. Es la etiqueta disfrazada.
    • (c) también, tal como está: cuenta contracargos que llegaron después del pago, incluido el suyo. Bien hecha, cuenta solo los que habían llegado antes.
  8. 8Reto

    Dos personas etiquetan 200 fotos como «Tenis» o «No tenis». Coinciden en tenis en 150 y en no tenis en 20; A dice tenis y B no en 18; A dice no y B tenis en 12. Calcula el acuerdo y kappa, como en la cuenta de «Acuerdo y ruido».

    Ver la solución paso a paso
    • Acuerdo observado: (150 + 20) ÷ 200 = 0.85.
    • A dice tenis en (150 + 18) ÷ 200 = 0.84; B, en (150 + 12) ÷ 200 = 0.81.
    • Por azar: 0.84 × 0.81 + 0.16 × 0.19 = 0.6804 + 0.0304 = pₑ = 0.7108.
    • κ = (0.85 − 0.7108) ÷ (1 − 0.7108) = 0.1392 ÷ 0.2892 ≈ 0.48: «moderado».

    El 85 % sonaba bien, pero mucho venía de que casi todo es tenis. Toca revisar los 30 desacuerdos, escribir esos casos en la guía y volver a medir.

  9. 9Reto

    Te piden entrenar el modelo de C09 «con los datos más frescos»: los pagos de los últimos 30 días, con su etiqueta de hoy. ¿Qué pasa con las etiquetas? ¿Qué propones?

    Ver la solución paso a paso

    A los 30 días solo ha llegado ≈ 60 % de los contracargos (la suposición de la Ronda), y en los pagos de ayer casi ninguno. Aun en el día más viejo, ≈ 3,200 de los ≈ 8,000 fraudes seguirían marcados como pagos buenos: ruido siempre hacia el mismo lado, que enseña que muchos fraudes son normales.

    • Entrenar solo con cohortes maduras, de hace 60 a 90 días o más, y quitar las filas que no han madurado en vez de marcarlas como «no fraude».
    • Partir por tiempo: entrenar antes de un corte y examinar después, también con etiquetas maduras.
    • Vigilar con señales tempranas (reportes del banco, revisión manual) mientras maduran, sin usarlas como etiqueta final.
12

Lo que sigue

Esencial

What comes next

  • M09 · Datos y features desarrolla todo esto con números de producción: la sección de data leakage (repartir por tiempo y por vendedor, copias exactas y casi copias, el atajo por la fuente de la foto), la de etiquetado (la guía, la doble anotación, el kappa de los inspectores de C03, el costo de la cola y del golden set de C01, el active learning) y la tarjeta del dataset de septiembre de C01, con su reparto por hash del vendedor.
  • C09, C14 y C15 usan las features de tabla: NaN en vez de 0 y cohortes maduras (C09), cero contra agotado contra sin dato y el backtest con 8 cortes (C14), hashing en 2²⁴ casillas y un clic de cada ≈ 286 anuncios (C15).
  • M10 · MLOps usa el golden set y los slices en el gate de evaluación, el examen automático que decide si un modelo nuevo puede salir a producción: solo pasa si no empeora en el golden set, ni en la cola larga, ni en ningún slice.
  • M01 · El mapa y la entrevista ya usa dos palabras de esta lección desde el ciclo de vida: «evaluar offline en un golden set fijo» y «el promedio oculta un slice roto (fotos nocturnas)». Ahora sabes qué son.
  • En el Dojo, la estación 1, «Datos y etiquetas», te pone a armar las etiquetas de un mes de C01: juntar las señales, filtrar lo que eligió quien vende, elegir la cola por duda, desacuerdo y azar, mandar una parte a doble anotación, medir kappa y decidir los desacuerdos.
  • Las lecciones que siguen: «Cómo aprende un modelo» (qué hace el entrenamiento con train), «¿Aprendió de verdad?» (overfitting, recall y macro-promedio, medidos en validación y test), «Ruido, muestras y pruebas A/B» (la varianza y la desviación estándar a fondo) y «Tiempo, hashes e identificadores» (cómo funciona un hash por dentro).
13

Palabras que vas a oír

Esencial

Words you will hear

Estos son los conceptos que presentó esta lección.

Ejemploexample · sample · instanceUn caso del que ya sabes la respuesta: la entrada (lo que ve el modelo) junto con su etiqueta (la respuesta correcta).Más

Un modelo aprende de muchos ejemplos. En un dataset cada ejemplo es una fila: sus features y su etiqueta. A aprender de ejemplos que ya traen su respuesta se le llama aprendizaje supervisado.

Ejemplo. La foto de los tenis de Ana junto con «Calzado › Tenis» es un ejemplo. El dataset de septiembre de C01 trae casi 2 millones. En C09, un ejemplo es un pago con su respuesta: fue fraude o no.

Ver en el glosario →

Featurefeature · característica · variableCada dato de la entrada que el modelo usa para decidir. En una tabla, una columna; en una foto, cada píxel.Más

En datos tabulares las features las elige una persona (el monto, el giro del comercio, la hora); a eso se le llama feature engineering. Pueden ser números o categorías, y las categorías hay que convertirlas en números (codificación). En imágenes la entrada son los píxeles crudos y el modelo arma por dentro sus propias features útiles. Una feature solo sirve si existe en el momento de predecir; si no, es leakage.

Ejemplo. Un pago de C09: monto US$45, giro «videojuegos», hora 03:12 y 4 intentos de la tarjeta en el último minuto. Son cuatro features.

Ver en el glosario →

CodificaciónencodingConvertir un dato que no es un número (una categoría, un texto) en números que el modelo pueda usar, sin inventarle relaciones que no tiene.Más

Un modelo solo multiplica y suma, así que todo le tiene que llegar como número. Para una categoría hay varias formas: one-hot (una columna de 0 y 1 por valor), números en orden (solo si el orden existe de verdad, como las tallas chica, mediana y grande), hashing (una fórmula fija manda cada valor a una de un número fijo de casillas, útil cuando hay millones de valores) y embeddings (una lista de números aprendida para cada valor). La codificación se decide con train y se usa idéntica al servir.

Ejemplo. El giro del comercio en C09: supermercado = [1, 0, 0], gasolinera = [0, 1, 0], videojuegos = [0, 0, 1]. En C15, el id de cada anuncio cae por hashing en una de 2²⁴ = 16,777,216 casillas.

Ver en el glosario →

One-hotone-hot encodingUna forma de codificar una categoría: una columna por cada valor posible, con 1 en la del valor que tiene el ejemplo y 0 en todas las demás.Más

Evita inventar un orden o una distancia: con 1, 2 y 3, el modelo tendría un solo peso para la feature y el efecto del valor 3 quedaría obligado a ser el triple que el del 1. Con one-hot cada valor tiene su propio peso. Su costo: una columna por valor, así que con miles o millones de valores (ids de anuncios o de productos) se vuelve enorme y casi toda de ceros; ahí se usa hashing o embeddings. Un valor que no se vio al entrenar no tiene columna, así que se reserva una para «otro».

Analogía. Un formulario con casillas para marcar una sola opción: no se escribe el número de la opción, se marca su casilla. Se rompe con millones de opciones: un formulario así no cabría en ninguna hoja y habría que reimprimirlo con cada opción nueva. Para eso existe el hashing: un número fijo de casillas, y una fórmula decide cuál marcar.

Ejemplo. Tres giros de comercio: supermercado = [1, 0, 0], gasolinera = [0, 1, 0] y videojuegos = [0, 0, 1]. Cada fila suma exactamente 1.

Ver en el glosario →

Valor faltantemissing value · NaNUn dato que debía estar y no está: la feature quedó vacía para ese ejemplo. Antes de entrenar hay que decidir qué hacer con ella, y hacer lo mismo al servir.Más

Tres salidas: quitar el ejemplo o la columna (fácil, pero si lo que falta no falta al azar, quitas justo un tipo de caso), rellenar o imputar (con la mediana de train o una regla del negocio, y marcar la fila con una columna «rellenado») o dejarlo como «no sé», NaN (not a number), para un modelo que lo sepa usar, como los de árboles de decisión con gradient boosting. Nunca rellenar con 0 si 0 significa otra cosa: «cero compras» es un dato; «no sé cuántas», otro.

Ejemplo. C09: si un pago llega sin el SDK que identifica al dispositivo, sus features de dispositivo valen NaN, no 0. C14: un producto sin ventas ayer pudo haber vendido cero, estar agotado o no tener dato, y son tres cosas distintas.

Ver en el glosario →

Escalamientofeature scaling · standardizationLlevar features con rangos muy distintos (un monto en miles, una hora de 0 a 23) a una escala parecida. Lo más común es estandarizar: restar el promedio y dividir entre la desviación estándar.Más

z = (x − promedio) ÷ desviación estándar. Una feature estandarizada queda con promedio 0 y desviación 1, y z dice a cuántas desviaciones del promedio está cada valor. Ayuda a los modelos que suman features con pesos y aprenden con descenso de gradiente, y a los que miden distancias; a los árboles de decisión les da igual. El promedio y la desviación se calculan solo con train y se guardan con el modelo: al servir se usan los mismos, o hay leakage al entrenar y diferencias silenciosas al servir. En imágenes, esta misma cuenta por canal se llama normalización.

Ejemplo. Cinco montos de train: 20, 30, 35, 40 y 50 dólares. Promedio 35 y desviación 10. El de 50 queda en z = (50 − 35) ÷ 10 = 1.5; un pago nuevo de 90, en 5.5: muy lejos de lo normal.

Ver en el glosario →

Splitdata split · particiónRepartir el dataset en partes que no se mezclan: una para aprender (train), una para decidir (validación) y una para el examen final (test).Más

No basta con la proporción (80/10/10, por ejemplo). Importa la unidad: si las fotos vienen en familias (del mismo vendedor, o la misma foto en varias publicaciones), la familia entera va a un solo lado (split por grupo); si el modelo va a predecir el futuro, se reparte por fecha (split temporal). Si no, hay leakage.

Ejemplo. C01 reparte por vendedor: ≈ 95 % a train y ≈ 5 % a validación (1,840,211 y 92,417 fotos en el dataset de septiembre). El examen final es el golden set, que se arma aparte.

Ver en el glosario →

Traintraining set · conjunto de entrenamientoLa parte del dataset con la que el modelo aprende: sus parámetros se ajustan para acertarles a estos ejemplos.Más

Es la parte más grande, de 70 % a 95 % según el tamaño del dataset. Que el modelo acierte aquí no prueba gran cosa: con millones de parámetros se puede aprender estas fotos de memoria. Todo lo que se calcula a partir de los datos (el promedio para escalar, la mediana para rellenar huecos) se calcula solo con train.

Ejemplo. Con 50,000 fotos y un reparto 80/10/10, train son 50,000 × 0.80 = 40,000 fotos. En el dataset de septiembre de C01 son 1,840,211, ≈ 95 % del total.

Ver en el glosario →

Validaciónvalidation set · dev setUna parte del dataset de la que el modelo no aprende y que tú miras mientras desarrollas, para decidir: cuándo parar, qué ajustes usar, qué versión es mejor.Más

Como con ella tomas decisiones, poco a poco su resultado se vuelve optimista: elegiste justo lo que mejor le fue ahí. Por eso hace falta además un test que no se toca.

Ejemplo. En el dataset de septiembre de C01 son 92,417 fotos, ≈ 5 % del total.

Ver en el glosario →

Testtest set · held-out setLa parte que se guarda bajo llave y se usa al final, una vez, para estimar qué tan bien le irá al modelo con datos que nunca vio.Más

Si miras el test, cambias algo y vuelves a mirar, el test se convirtió en validación y ya no tienes un número honesto. En C01 el papel del test lo hace el golden set.

Ejemplo. Con 50,000 fotos y un reparto 80/10/10, test son 5,000 fotos que nadie mira hasta el final. Si pruebas 40 variantes y reportas la mejor en test, ese número ya no es honesto.

Ver en el glosario →

Split estratificadostratified splitRepartir cada grupo (cada categoría, por ejemplo) por separado y en la misma proporción, para que train, validación y test tengan la misma mezcla.Más

Al azar, una categoría chica puede quedarse sin ningún ejemplo en validación, y entonces no se puede medir. Estratificar fija cuántos van a cada lado; el sorteo solo decide cuáles. No hace milagros: con 30 fotos y 5 % de validación quedan 1 o 2, que no miden nada.

Ejemplo. Una categoría con 20 fotos y un split 80/10/10: estratificado, quedan exactamente 16, 2 y 2. Al azar, unas 12 de cada 100 veces validación se queda sin ninguna (0.9 multiplicado por sí mismo 20 veces ≈ 0.12).

Ver en el glosario →

Golden setgolden setUn conjunto de evaluación de la mejor calidad: etiquetado con cuidado por personas, congelado y que jamás se usa para entrenar. Es la regla fija con la que se comparan los modelos.Más

Congelado quiere decir que no cambia: dos modelos de meses distintos se examinan con exactamente las mismas fotos, así que la diferencia es del modelo y no del examen. Si hay que cambiarlo (porque llegaron categorías nuevas), se hace una versión nueva y se vuelve a examinar ahí al modelo que está en producción. Cada dataset nuevo se revisa por hash contra él, para que ninguna de sus fotos se cuele al entrenamiento.

Ejemplo. En C01: ≈ 50 mil imágenes, cada una etiquetada por dos personas, con al menos ≈ 50 por categoría y repartidas entre fotos de celular y de web. Cuesta ≈ US$5–10 mil, una sola vez.

Ver en el glosario →

Leakagedata leakage · fuga de datosCuando el entrenamiento o la evaluación tienen información que no existirá en el momento de predecir, o cuando el test se parece demasiado al train. El examen se filtró.Más

El síntoma es siempre el mismo: un resultado sospechosamente bueno antes de producción que se derrumba en producción. Formas comunes: la misma foto (o casi) en train y en test (casi duplicado), una feature que trae escondida la respuesta, datos del futuro, ejemplos de un mismo grupo a los dos lados, y cuentas (como el promedio para escalar) hechas con todo el dataset antes de repartir.

Ejemplo. Un vendedor sube la misma foto en tres publicaciones. Con un split al azar 80/20 por publicación, ≈ 98 de cada 100 veces que esa foto aparece en test, otra copia suya está en train: el modelo la reconoce de memoria.

Ver en el glosario →

Split temporaltemporal split · time-based splitRepartir por fecha: entrenar con lo que pasó antes de un corte y evaluar con lo que pasó después. Es obligatorio cuando el modelo va a predecir el futuro.Más

Un split al azar mezcla días: el modelo ve el lunes y el miércoles y lo examinas con el martes, así que interpola en vez de predecir. Con un corte, el examen se parece a producción: el modelo solo sabe lo que se sabía en esa fecha. Si las etiquetas tardan en llegar (un contracargo puede tardar meses), además hay que esperar a que maduren. Repetir el corte en varias fechas y promediar se llama backtest.

Ejemplo. C14 entrena con las ventas hasta una fecha de corte y evalúa los 14 días siguientes, en 8 cortes semanales. La regla de la Ronda: si entrenas con datos hasta el 5 de enero, evalúa desde el 6.

Ver en el glosario →

Split por grupogroup split · entity splitRepartir por grupos completos (vendedor, cliente, cámara, paciente) en vez de por ejemplos sueltos, para que todos los ejemplos de un grupo queden del mismo lado.Más

Si los ejemplos de un grupo se parecen entre sí (el mismo fondo, la misma luz, el mismo cliente), repartirlos al azar deja gemelos en train y en test, y el modelo aprende a reconocer el grupo en vez de la tarea. Un truco común: calcular un hash del id del grupo y decidir con él (por ejemplo, hash mod 100 < 95 → train). Así el mismo grupo cae siempre del mismo lado, mes tras mes, sin guardar ninguna lista. El hash tiene que ser estable, como sha256 de hashlib, no el hash() de Python.

Ejemplo. C01 reparte por vendedor: hash(seller_id) mod 100 < 95 va a train y el resto a validación. Un vendedor con 400 fotos sobre la misma mesa queda entero de un lado. C04, en patología, reparte por paciente.

Ver en el glosario →

Casi duplicadonear-duplicateDos ejemplos que no son el mismo archivo pero muestran lo mismo: la misma foto recortada, vuelta a comprimir o más clara. Un hash normal no los detecta; una huella perceptual o una comparación de embeddings, sí.Más

Si un casi duplicado queda en train y su gemelo en test, el modelo acierta de memoria: es leakage. Para copias exactas basta un hash del archivo, como sha256, que cambia por completo si cambia un solo byte. Para casi copias se usa una huella perceptual (el average hash, pHash y parientes): se calcula sobre una versión diminuta de la imagen, en gris, y cambia poco si la imagen cambia poco. Dos fotos son casi duplicadas si sus huellas difieren en pocos bits. También se pueden comparar sus embeddings con similitud coseno.

Ejemplo. Barz y Denzler (2020) encontraron que el 3.3 % de las imágenes de test de CIFAR-10 y el 10 % de las de CIFAR-100 tenían un casi duplicado en train. En C01, la misma foto en tres publicaciones.

Ver en el glosario →

Etiquetadolabeling · annotationEl proceso de ponerle a cada ejemplo su respuesta correcta: quién etiqueta, con qué guía, cómo se revisa la calidad y cuánto cuesta. La etiqueta es el dato más caro por unidad.Más

Lo hacen proveedores, un equipo propio, expertos para los casos difíciles, o la gente dentro de su trabajo (moderadores, inspectores). Se apoya en una guía escrita y versionada, con ejemplos y contraejemplos de cada clase, los casos límite decididos por escrito y una salida para «no sé». La calidad se mide con doble anotación: una parte la etiquetan dos personas, se mide su acuerdo (kappa de cohen) y un experto decide los desacuerdos. Qué ejemplos etiquetar lo decide el active learning.

Ejemplo. C01: ≈ 5,000 fotos al mes a US$0.05–0.10 cada una, con 10 % de doble anotación: ≈ US$250–500 al mes, más ≈ US$25–50 por la doble. El golden set, 50,000 fotos con doble anotación, cuesta ≈ US$5–10 mil una sola vez.

Ver en el glosario →

Active learningactive learningElegir qué ejemplos etiquetar en vez de etiquetar al azar: sobre todo los que el modelo tiene más dudosos, porque son los que más le enseñan por cada etiqueta pagada.Más

Estrategias: incertidumbre (la confianza del primer lugar es baja, o el primero y el segundo casi empatan), desacuerdo (una persona eligió otra cosa que el modelo), diversidad (cubrir tipos distintos de fotos) y categorías nuevas. Siempre se guarda una parte al azar: es lo único que dice cuánto se equivoca el modelo en el tráfico real. Se entrena con todo lo etiquetado, pero se evalúa con el golden set y con la parte al azar, nunca con lo que eligió el active learning, que es a propósito más difícil que lo normal.

Ejemplo. C01: fotos con top-1 menor que 0.3 o con margen chico entre el primero y el segundo, desacuerdos con quien vende y 20–30 % al azar, ≈ 5,000 al mes.

Ver en el glosario →

Ruido en las etiquetaslabel noiseEtiquetas equivocadas dentro del dataset. Siempre hay algunas: por cansancio, por una guía ambigua o porque la fuente automática se equivoca o llega tarde.Más

En train, el ruido le enseña cosas falsas al modelo. En evaluación es peor: el modelo «falla» donde la etiqueta estaba mal y la métrica mide parte del ruido, así que pone un techo a lo que puedes medir. Northcutt, Athalye y Mueller (2021) estimaron al menos 3.3 % de etiquetas erróneas en promedio en los test sets de 10 datasets conocidos, y ≈ 6 % en la validación de ImageNet. Lo sospechoso (donde el modelo contradice la etiqueta con mucha seguridad) se manda a revisión humana; no se borra automáticamente.

Ejemplo. C09: según la suposición de la Ronda, a los 30 días solo ha llegado ≈ 60 % de los contracargos. En los pagos de hace 30 días, ≈ 4 de cada 10 fraudes todavía están etiquetados como pagos buenos; en los de la semana pasada, muchos más.

Ver en el glosario →

Kappa de CohenCohen's kappa · κUn número que mide qué tanto coinciden dos personas al etiquetar, descontando lo que coincidirían por puro azar. 1 es acuerdo perfecto; 0, lo mismo que el azar.Más

κ = (pₒ − pₑ) ÷ (1 − pₑ), donde pₒ es la fracción de ejemplos en que coincidieron y pₑ la que esperarías si cada quien etiquetara al azar con sus propias proporciones. Importa cuando una clase domina: dos personas que casi siempre dicen «bueno» coinciden mucho sin ponerse de acuerdo en lo difícil. Una escala muy citada (Landis y Koch, 1977) llama «moderado» a 0.41–0.60, «sustancial» a 0.61–0.80 y «casi perfecto» a más de 0.80. Con más de dos personas se usan parientes suyos, como la kappa de Fleiss.

Ejemplo. Dos inspectores de C03 coinciden en 970 de 1,000 piezas (97 %), pero casi todas son buenas y el azar ya daba 95.125 %: κ = (0.97 − 0.95125) ÷ (1 − 0.95125) ≈ 0.38.

Ver en el glosario →

Desbalance de clasesclass imbalanceCuando unas clases tienen muchísimos más ejemplos que otras. El modelo tiende a favorecer a las grandes, y el promedio esconde que falla en las chicas.Más

La accuracy engaña: un modelo que siempre dice la clase grande acierta mucho sin aprender nada. Se mide cada clase por separado (recall por clase, macro-promedio), se estratifica el split y se etiqueta más donde hay poco.

Ejemplo. 950 fotos de tenis y 50 de botas: un modelo que siempre dice «tenis» acierta 95 % y nunca reconoce unas botas. En C09, 1 pago de cada 1,250 es fraude: decir siempre «no» acierta 99.92 %.

Ver en el glosario →

Cola largalong tailCuando hay muchas categorías y la mayoría tiene pocos ejemplos: unas cuantas tienen decenas de miles y muchas, apenas cientos o decenas. Ordenadas de mayor a menor, forman una gráfica con una «cola» baja y larga.Más

El nombre viene de la gráfica: si ordenas las categorías de la más grande a la más chica, la curva cae rápido y luego sigue, baja y larga. Las grandes son la cabeza (head). En la Ronda se miden la cabeza y la cola por separado, porque un modelo nuevo suele ganar en una y perder en la otra.

Ejemplo. C01 tiene 500 categorías y ≈ 1.84 M fotos de entrenamiento: 3,680 por categoría si se repartieran parejo, pero casi ninguna está cerca de ese promedio.

Ver en el glosario →

Data augmentationdata augmentation · aumento de datosHacer variaciones de las fotos de entrenamiento que no cambian su etiqueta (voltearla como espejo, recortar un poco distinto, cambiar el brillo) para que el modelo aprenda que esos cambios no importan.Más

Se aplica solo en train y al azar en cada pasada, así que el modelo casi nunca ve dos veces la misma imagen exacta. Validación y test van sin cambios. No inventa información: 40 fotos de las mismas 3 monedas siguen siendo 3 monedas.

Ejemplo. Unos tenis volteados como espejo siguen siendo tenis. Un 6 de cabeza es un 9: para leer texto, esa variación cambia la respuesta.

Ver en el glosario →

Sliceslice · rebanadaUn pedazo de los datos de evaluación que comparte algo (fotos de celular, fotos con poca luz, una categoría) y que se mide por separado, porque el promedio general puede esconder que ahí el modelo empeoró.Más

Es la misma idea que medir cada clase por separado, aplicada a cualquier grupo: fotos de celular contra web, con poca luz, muy chicas, de una región. Un promedio pesa más a los grupos grandes, así que un grupo chico puede empeorar mucho sin mover el total. Por eso el examen de un modelo nuevo exige que no empeore en ningún slice importante, no solo en el promedio.

Ejemplo. Un modelo nuevo sube de 85.0 % a 85.2 % en general, pero en el 5 % de fotos con poca luz baja de 77.4 % a 70.0 %. Solo el slice lo muestra.

Ver en el glosario →

14

Chequeo

Esencial

Check

Intenta responder en tu cabeza antes de abrir cada respuesta.

  1. 1Tu modelo saca 99 % en validación y 70 % con fotos reales de producción. ¿Qué revisas primero?Ver respuesta

    Leakage: copias o casi copias entre train y validación, features que traen la respuesta o vienen de después de predecir, y un reparto que no respeta el tiempo ni los grupos. Un número demasiado bueno es una alarma, no un logro.

  2. 2¿Por qué no basta con dos partes, train y test?Ver respuesta

    Porque mientras desarrollas tomas decisiones (cuándo parar, qué ajustes, qué versión), y si las tomas mirando el test lo vas «gastando»: su número sale optimista. Validación es para decidir; el test, para el número final.

  3. 3¿Por qué no codificar el giro del comercio como 1, 2 y 3?Ver respuesta

    Porque inventa un orden y una distancia: con un solo peso, el efecto del giro 3 sería por fuerza el triple que el del 1. Con one-hot cada giro tiene su columna y su peso.

  4. 4¿Qué tiene de malo rellenar con 0 un valor que falta?Ver respuesta

    Que 0 casi siempre es un dato: «cero compras en 24 horas» es un cliente tranquilo, y «no sé cuántas» no dice nada. Se deja como NaN para un modelo que lo entienda, o se rellena con la mediana de train y se marca la fila.

  5. 5Un modelo acierta 95 % y alguien dice que es excelente. ¿Qué preguntas?Ver respuesta

    Cómo están repartidas las clases y cómo le va a cada una. Si el 95 % de las fotos son de una clase, decir siempre esa clase ya da 95 %. Hay que ver el recall por clase, o un promedio que pese igual a todas.

  6. 6Dos personas coinciden en 97 % de las etiquetas. ¿Es buena señal?Ver respuesta

    Depende de cuánto coincidirían por azar. Si una clase domina, coincidir en lo fácil no cuesta nada: en el ejemplo de la Ronda, 97 % de acuerdo era una kappa de ≈ 0.38.

  7. 7¿Qué es el golden set de C01 y por qué nunca se usa para entrenar?Ver respuesta

    ≈ 50 mil fotos con dos etiquetas humanas cada una, estratificadas por categoría y por origen, y congeladas: el mismo examen para modelos de meses distintos. Si se entrenara con él, el modelo se lo sabría y el examen dejaría de medir.

Sigue · 04Cómo aprende un modeloLo básico de ML Léelo en la RondaM01 · El mapa y la entrevistaLo que acabas de leer, con el ojo del entrevistador. ← 02 · Una foto, vista por un modelo