Adónde fue a parar el 99 % de mi conjunto de datos

Me propuse construir un conjunto de datos de unos cuantos millones de ejemplos de entrenamiento. Cuando la canalización terminó, me entregó un par de por ciento de esa cifra — una fracción tan pequeña que parecía un error de tipeo. Nada se había caído. No saltó ningún error. Los datos no habían fallado al generarse; sencillamente habían tirado a la basura casi todo de sí mismos, en silencio, y luego reportaron éxito.

El número que era demasiado pequeño para ser correcto

Lo extraño de este tipo de error es que no se anuncia a sí mismo. Una canalización que se cae es ruidosa. Una canalización que produce silenciosamente demasiado poco simplemente termina, te entrega un archivo y espera a que tú lo notes. Si no me hubiera dado la casualidad de recordar más o menos cuántos ejemplos esperaba, podría haber entrenado con los supervivientes y nunca haber sabido que el resto había desaparecido.

El único síntoma fue un conteo equivocado por casi dos órdenes de magnitud. Y un conteo equivocado es uno de los síntomas más fáciles del mundo de pasar por alto, porque un número más pequeño de lo esperado sigue pareciendo un número real. No se siente como un error. Se siente como un resultado.

”¿Por qué hay tan poco?” es una clase real de error

Estamos entrenados para depurar cosas que se rompen. Somos mucho peores depurando cosas que simplemente están ausentes — datos que deberían existir y no existen, ejemplos que deberían haberse creado y nunca lo fueron. No hay un rastro de pila para un camino no tomado. La canalización hizo exactamente lo que le dije; resultó que lo que le había dicho que hiciera descartaba la mayor parte de la entrada por el camino.

Adónde fueron a parar los datos

La causa era casi vergonzosamente mundana. En algún punto del proceso, yo recorría la línea temporal a grandes zancadas — mirando un instante, luego saltándome un largo tramo hasta el siguiente, y luego saltando de nuevo. Cada posición que me saltaba era un ejemplo potencial que nunca se examinó y nunca se creó. Había fijado esa zancada al principio, por una razón que ya no recuerdo, y luego olvidé que estaba ahí.

Así que el conjunto de datos no estaba corrupto, ni filtrado, ni depurado. Sencillamente nunca se había mirado por completo. La inmensa mayoría de los datos disponibles quedaba a un paso de distancia de la zancada del bucle, intacta, mientras la canalización pasaba marchando de largo y reportaba que había terminado.

La pérdida silenciosa es la clase peligrosa

Esta es la parte a la que sigo regresando. Un fallo ruidoso es un regalo: te detiene, se señala a sí mismo y exige atención. Una pérdida silenciosa no te da nada de eso. Produce una salida que parece plausible, corre sin quejarse y cambia silenciosamente la base sobre la que se construye todo lo que viene después. Puedes entrenar un modelo, evaluarlo y sacar conclusiones a partir de él, todo encima de un conjunto de datos que en secreto es una astilla diminuta y no representativa de lo que creías tener.

El peligro no es solo que el número sea erróneo. Es que el número es erróneo y el sistema está contento con ello — todo en verde, todo corriendo, todo construido sobre una base que te traicionó en el primerísimo paso.

La solución: examinarlo todo y luego elegir qué conservar

La reparación consistió en dejar de saltar. En lugar de avanzar a zancadas por la línea temporal e inspeccionar solo los puntos en los que me daba la casualidad de aterrizar, hice que el proceso considerara cada posición por turno — y luego convertí la decisión sobre qué conservar en un filtro explícito y deliberado en lugar de un subproducto accidental de un paso de muestreo. Los datos que descarté, ahora los descartaba a propósito, por una razón que podía enunciar en voz alta. Los datos que conservé, los conservé porque realmente los había mirado.

El conjunto de datos volvió a quedar cerca del tamaño que debía tener. Nada ingenioso hizo que eso ocurriera. Simplemente había dejado de tirar datos a la basura sin querer.

La verificación más barata en el trabajo con datos

La lección es casi demasiado simple para sentirse como tal: compara el tamaño que esperabas con el tamaño que obtuviste. Es una comprobación de cordura barata que yo había desaprovechado gravemente, y habría detectado esto en segundos. Una gran diferencia entre cuántos datos creía tener y cuántos datos existen realmente merece tratarse como un error — incluso, sobre todo, cuando nada se cayó para avisarte.

Ahora, lo primero que hago con cualquier conjunto de datos no es mirar su contenido. Es mirar su conteo y preguntarme si ese número es siquiera plausible. Muchos de los peores problemas de datos que he tenido no corrompieron los datos. Simplemente produjeron en silencio menos de lo que yo creía, y me dejaron construir sobre la diferencia.

Una canalización que pierde la mayor parte de tus datos sin alzar la voz no se está cayendo — está corriendo exactamente como fue escrita, y aun así haciendo lo incorrecto. El error nunca fue una falla en la máquina. Estaba en la brecha entre lo que yo asumía y lo que me molesté en verificar.

— Sin señales, sin retornos, esto no es asesoramiento de inversión.