Dónde estás
el mapaEn C01 el clasificador de categorías ya está en producción, pero el catálogo cambia y un modelo congelado se degrada. Esta estación convierte lo que pasa en producción en los labels del mes: junta lo que registró el gateway con lo que hicieron quienes venden y moderación, decide qué labels gratis sirven, elige qué fotos vale la pena pagar por etiquetar, las etiqueta con una guía y mide si las personas están de acuerdo. Todo sin tocar el golden set ni el holdout, que son los únicos que miden sin sesgo.
- logs de predicción del gateway (Parquet, una fila por request)
- la categoría que eligió quien vende y cómo la eligió
- las correcciones de moderación
- las fotos originales, con EXIF
- labels débiles filtrados (gratis, con su fuente)
- labels del mes, etiquetados por personas y adjudicados
- fotos de la cola sin metadatos, en un bucket restringido que vence solo
- kappa por clase y un reporte de exactitud por fuente
| En C01 | En el dojo | |
|---|---|---|
| Tráfico | ≈ 2.5 M publicaciones al día | 400 al día durante 60 días: 24 000 requests |
| Modelo en producción | CNN de 500 categorías servida con Triton | regresión logística sobre Fashion-MNIST, 9 categorías (no conoce «bolsas») |
| Cola de etiquetado | ≈ 5k imágenes al mes | 800 |
| Doble anotación | 10 % ≈ 500 al mes | 20 % = 160: con 10 % serían 80, muy pocas para un kappa por clase estable |
| Umbral de incertidumbre | top-1 < 0.3 o margen chico | top-1 < 0.5 o margen < 0.15: los umbrales se calibran con la distribución de scores de tu modelo |
| Golden set | ≈ 50k, piso de ≈ 50 por categoría | 500: 50 por categoría |
| Holdout sin sugerencias | ≈ 1 % de las cuentas | 1 % de las cuentas: 253 publicaciones |
| Almacenamiento y etiquetado | Amazon S3; Label Studio o un proveedor gestionado | RustFS (S3 local en Docker); un proveedor simulado y tú adjudicando en Label Studio |
La estación completa, con su lugar en el mapa: cheat sheet «Del dato a producción».
Por dónde ir
3 caminos, en ordenEsta estación pasa en dos momentos: antes de producción, cuando se arma el primer dataset, y en producción, el ciclo de cada mes con el modelo ya atendiendo. Las prácticas desde cero los recorren con tus propias manos y sin kit; el proyecto con kit repite el mes en producción a más escala, en las cuatro rondas.
- 1Antes de producciónSin kit · carpeta vacía
Práctica 1 · Antes de producción: tu primer dataset
De 10 fotos sueltas a un dataset versionado, con un contrato que lo protege y un primer modelo que sabe con qué datos se entrenó.10 fotos2 clases≈ 2 horasAbrir la práctica → - 2En producciónSin kit · la carpeta de la práctica 1
Práctica 2 · En producción: el reentrenamiento
Un mes de publicaciones reales: qué etiquetar con un presupuesto, una clase nueva, dataset-v2 sin mover el test y modelo-v2 comparado con el mismo examen.11 publicaciones8 labels1 clase nueva≈ 2 horasAbrir la práctica → - 3En producciónCon kit · 4 rondas
El proyecto con kit
El kit trae una empresa ficticia funcionando: un marketplace que lleva 60 días con el clasificador en producción. Tú no escribes el mundo; lo corres y construyes encima el pipeline de la estación.8 pasos12 checks10 fallaskit 54 KBAbrir el proyecto →
La práctica 2 y este proyecto son el mismo momento: el mes con el modelo ya en producción. En la práctica 2 lo escribes todo tú con 11 publicaciones y sin nada armado; aquí el mundo ya existe, es más grande y además se rompe.
Conceptos exprés
16Una línea para entenderlo; abre la tarjeta para la analogía, por qué importa y la trampa.
Label débilweak label / weak supervisionUn label que sale gratis de lo que hace la gente (elegir, buscar, corregir), no de alguien que etiqueta a propósito. Es abundante pero ruidoso.Analogía, por qué importa y la trampa ↓
AnalogíaLas reseñas de una app: hay millones y casi siempre dicen algo útil, pero no son un examen controlado.
Por qué importaEn C01 son millones al mes contra ≈ 5k humanos. Con un buen filtro dan volumen para entrenar casi sin costo.
TrampaUsarlos sin filtro, o peor, para evaluar: heredan los sesgos de cómo se generaron.
Bucle de retroalimentaciónfeedback loopCuando las predicciones del modelo influyen en los datos con los que lo vuelves a entrenar y a medir.Analogía, por qué importa y la trampa ↓
AnalogíaUn maestro que dicta la respuesta y luego califica el examen con lo que escribieron los alumnos: todos sacan 10.
Por qué importaLa categoría elegida casi siempre es tu primera sugerencia. Si la tratas como verdad, el modelo aprende a imitarse y la métrica offline sube sin que el producto mejore.
TrampaCelebrar que la exactitud contra los labels débiles subió. Mírala siempre junto al holdout y al golden set.
Holdout sin sugerenciasholdout / control groupUna porción fija de cuentas (≈ 1 %) que nunca ve sugerencias: elige la categoría a mano.Analogía, por qué importa y la trampa ↓
AnalogíaEl grupo de control de un experimento médico: no recibe el tratamiento, por eso sirve de comparación.
Por qué importaDa labels que tu modelo no influyó. Es el termómetro del feedback loop y mide cuánto aporta el sistema.
TrampaMezclarlo con el entrenamiento o etiquetarlo en la cola: deja de ser un control.
Log de predicción y llave de uniónprediction log / join keyEl registro que deja el gateway por cada request: qué modelo respondió, el top-k con scores y un hash de la imagen. El request_id lo une con todo lo demás.Analogía, por qué importa y la trampa ↓
AnalogíaEl número de guía de un paquete: con él juntas lo que pasó en cada oficina por la que pasó.
Por qué importaSin log de predicción no hay muestreo por incertidumbre, ni monitoreo, ni forma de saber qué vio el modelo.
TrampaQue dos sistemas escriban la llave distinto (mayúsculas, prefijos): el join no falla, solo pierde filas en silencio.
Parquet particionadoParquet / Hive partitioningFormato de archivo por columnas, comprimido y con esquema. Partirlo en carpetas como fecha=2026-10-01/ deja leer solo los días que necesitas.Analogía, por qué importa y la trampa ↓
AnalogíaUn archivero con un cajón por día y, dentro, una carpeta por columna: sacas solo lo que vas a leer.
Por qué importaEs el formato estándar de los logs en S3. DuckDB, pandas, Spark y Athena lo leen directo.
TrampaDar por hecho el tipo de una columna. El esquema viaja con el archivo: revísalo con DESCRIBE cuando algo no cuadre.
Join y cardinalidadjoin / cardinalityCuántas filas de un lado corresponden a cuántas del otro (1 a 1, 1 a muchos). Define si el join conserva, pierde o multiplica filas.Analogía, por qué importa y la trampa ↓
AnalogíaPegar dos listas de asistencia por nombre: si alguien aparece dos veces en una, también sale dos veces en la unión.
Por qué importaModeración puede corregir dos veces el mismo anuncio. Si no te quedas con la última corrección, duplicas requests y cuentas doble.
TrampaUsar JOIN (inner) donde querías LEFT JOIN, o al revés, y no contar filas antes y después.
Zona horaria y ventanas de tiempoTIMESTAMP vs TIMESTAMPTZ / UTCTIMESTAMPTZ es un instante (se guarda en UTC). TIMESTAMP sin zona es solo una hora de reloj: no dice de dónde.Analogía, por qué importa y la trampa ↓
Analogía«Nos vemos a las 3» sin decir en qué ciudad: en CDMX y en Madrid son momentos distintos.
Por qué importaLa regla «no corregida en 30 días» depende de restar fechas. Una hora local leída como UTC corre la ventana 6 horas y mete o saca labels en el borde.
TrampaQue el resultado dependa de la zona de tu laptop. Fija la sesión en UTC y convierte explícitamente lo que venga sin zona.
Muestreo por incertidumbreactive learning / uncertainty samplingElegir para etiquetar los ejemplos donde el modelo duda: top-1 bajo o margen chico entre el top-1 y el top-2.Analogía, por qué importa y la trampa ↓
AnalogíaEstudiar para el examen los temas que más fallas, no los que ya dominas.
Por qué importaCada label humano cuesta. Uno donde el modelo ya acierta con 0.99 enseña poco; uno donde duda enseña mucho.
TrampaCopiar umbrales de otro modelo. «top-1 < 0.3» tiene sentido con 500 clases; con 9 casi nunca pasa. Calíbralos con tu distribución de scores.
Muestra aleatoriarandom sampleUna parte de la cola (20–30 %) elegida al azar de todo el tráfico, sin ningún criterio.Analogía, por qué importa y la trampa ↓
AnalogíaEn una encuesta, además de entrevistar a quienes se quejaron, preguntas a gente al azar: si no, solo oyes quejas.
Por qué importaEs la única parte de la cola que se parece a la realidad: con ella mides sin sesgo y detectas errores que el modelo no sabe que comete.
TrampaRecortarla para «ahorrar». La cola queda llena de casos difíciles y la exactitud medida ahí sale baja y engaña.
Categoría nuevanew class / class cold startUna clase que negocio agrega cuando el modelo ya está entrenado. El modelo no la puede predecir porque nunca la vio.Analogía, por qué importa y la trampa ↓
AnalogíaUn cartero al que le agregan una colonia nueva al mapa: no le va a llegar correo para ella hasta que alguien le enseñe dónde queda.
Por qué importaSin ejemplos no hay forma de aprenderla, y la incertidumbre no los encuentra: el modelo suele equivocarse con seguridad.
TrampaEsperar a que aparezcan solos. Hay que sembrarlos a propósito (por búsqueda de texto en el título) hasta tener ≈ 200–500.
Metadatos y datos personalesEXIF / PII / data minimizationEXIF es la información que el teléfono guarda dentro de la foto: modelo, fecha y a veces la ubicación GPS. Puede ser dato personal (PII): el GPS, unido a una cuenta, dice dónde vive alguien.Analogía, por qué importa y la trampa ↓
AnalogíaMandar una carta con tu dirección escrita por dentro del sobre sin darte cuenta.
Por qué importaLas fotos salen del producto hacia gente que etiqueta. Solo copias las que se etiquetan, sin metadatos, y el resto se referencia por request_id y hash.
TrampaConfiar en que «guardar de nuevo» borra todo. Reconstruye la imagen desde los píxeles y verifica que no quede EXIF.
Bucket restringidoS3 bucket / Block Public Access / bucket policy / lifecycle ruleUn bucket privado con el bloqueo de acceso público completo y una regla de ciclo de vida que borra las copias a los 90 días.Analogía, por qué importa y la trampa ↓
AnalogíaUn archivero con llave en el que cada carpeta se tritura sola a los tres meses.
Por qué importaLas copias para etiquetar son datos personales fuera de su lugar original: deben ser privadas y temporales por diseño, no por disciplina.
TrampaAbrirlo «un momento» con una política Principal: * para una demo. Para compartir una foto existen las URL prefirmadas, que vencen. Y si el bucket tiene versionado, la expiración solo pone un delete marker: agrega NoncurrentVersionExpiration o las versiones viejas se quedan.
Guía de etiquetado versionadalabeling guidelinesEl documento que define cada categoría y decide por escrito los casos límite. Cada label guarda con qué versión se hizo.Analogía, por qué importa y la trampa ↓
AnalogíaEl reglamento de un deporte: sin él, cada árbitro marca distinto la misma jugada.
Por qué importaLa mayoría de los desacuerdos no son descuidos: son preguntas que la guía no contesta. Una regla escrita sube el acuerdo más que cualquier otra cosa.
TrampaMandar al proveedor una guía vieja (sin la categoría nueva ni los casos límite) y no notarlo porque los labels llegan a tiempo.
Acuerdo entre anotadores y kappainter-annotator agreement / Cohen's kappaKappa mide cuánto coinciden dos personas por encima de lo que coincidirían por azar: 1 es acuerdo perfecto y 0, lo mismo que el azar.Analogía, por qué importa y la trampa ↓
AnalogíaDos jueces que aprueban a casi todos coinciden en 9 de cada 10 casos aunque decidan sin mirar: coincidir mucho no demuestra que sepan juzgar.
Por qué importaPor clase te dice dónde la guía falla. Con muy pocos ejemplos por clase es ruidoso: por eso se mide sobre suficientes dobles.
TrampaMirar solo el acuerdo bruto: cuando una clase domina, sale alto aunque la frontera difícil esté mal. Los cortes tipo «arriba de 0.6 = sustancial» (Landis y Koch) son convención, no ley.
AdjudicaciónadjudicationUna persona experta decide los casos donde los anotadores no coincidieron, y cada decisión difícil vuelve a la guía.Analogía, por qué importa y la trampa ↓
AnalogíaEl VAR del fútbol: solo revisa las jugadas dudosas, y sus decisiones se vuelven criterio para el resto.
Por qué importaConvierte el desacuerdo en un label confiable y en una regla nueva para el mes que viene.
TrampaLeer el export de la herramienta sin fijar el formato: JSON y JSON_MIN de Label Studio tienen formas distintas.
Golden setgolden set / evaluation set / data leakageUn conjunto etiquetado y revisado por personas, estratificado por categoría y congelado. Solo sirve para evaluar, nunca para entrenar.Analogía, por qué importa y la trampa ↓
AnalogíaEl examen final que el profesor guarda bajo llave: si los alumnos lo ven antes, la calificación ya no mide nada.
Por qué importaEs la única medida estable mes a mes. Se identifica por un hash del contenido calculado al entrar (no del archivo), y ese hash viaja con cada copia: así una copia sin EXIF sigue siendo «la misma foto».
TrampaQue se cuele al entrenamiento (fuga, leakage). Y cambiarlo sin versionarlo: un golden nuevo es una versión nueva.
Repaso
para el celular- La cola del mes tiene sus 800 imágenes con la mezcla acordada: nuevas, desacuerdos, incertidumbre y 20–30 % al azar.
- La doble anotación tiene su kappa por clase y los desacuerdos están adjudicados.
- Solo se copiaron las fotos que se etiquetan, sin EXIF, a un bucket privado que vence solo; el resto se referencia por request_id y hash.
- Los labels débiles entran filtrados, con su fuente, y nunca como única evaluación: el reporte los compara con el holdout y el golden.
- El golden set sigue congelado y fuera de todo lo que se entrena.
Así te lo pueden preguntar en una entrevista
Tienes millones de categorías elegidas por los usuarios. ¿Las usas como labels?
Para entrenar sí, filtradas por una señal de confianza: corrección de moderación, búsqueda en vez de aceptar la sugerencia, o 30 días sin corrección. Para evaluar no, porque están contaminadas por el propio modelo (feedback loop). Evalúo con un golden set congelado y con un holdout de ≈ 1 % de cuentas que no ven sugerencias.
Tienes presupuesto para etiquetar 5 000 imágenes al mes. ¿Cuáles eliges?
Una mezcla: categorías nuevas que hay que sembrar, desacuerdos entre el modelo y las personas, incertidumbre (top-1 bajo o margen chico, con umbrales calibrados para mi modelo) y 20–30 % al azar. El azar es lo que me deja medir sin sesgo y encontrar errores de los que el modelo está seguro.
¿Cómo sabes si tus etiquetadores son confiables?
Doble anotación en ≈ 10 % y kappa por clase, no solo el acuerdo bruto, que engaña cuando una clase domina. Donde el kappa es bajo casi siempre falta una regla en la guía: los desacuerdos van a adjudicación y la decisión se escribe en una versión nueva de la guía.
¿Qué cuidas al mandar fotos de usuarios a un proveedor de etiquetado?
Minimizar: copio solo las que se van a etiquetar, sin EXIF (puede traer GPS), a un bucket privado con bloqueo de acceso público y vencimiento a 90 días. El resto se referencia por request_id y hash. Si hay que compartir, URL prefirmadas que vencen.
Versión del contenido: 3 de noviembre de 2026.