El preprocesamiento descartó la señal sin que nadie se diera cuenta
Hay un paso en este tipo de trabajo que casi todo el mundo trata como una tarea de limpieza aburrida: el preprocesamiento, es decir, la limpieza, el escalado y la reestructuración de los datos antes de que lleguen a la parte que realiza el aprendizaje de verdad. Yo lo trataba exactamente así, como una tarea neutral que había que despachar antes de que empezara el trabajo de verdad. No es neutral, y tratarlo como si lo fuera me salió muy caro. Una transformación rutinaria que apliqué, sin pensarlo dos veces, descartó en silencio justo la información que más necesitaba, y luego pasé semanas desconcertado preguntándome por qué el sistema parecía ciego ante algo que estaba obviamente ahí.
Todo ese tiempo estuve buscando en el lugar equivocado. No paraba de interrogar las partes sofisticadas, convencido de que el fallo vivía en algún punto del ingenio. El fallo había ocurrido mucho antes, en la parte que ni siquiera me había molestado en considerar como una decisión.
El preprocesamiento parece neutral. No lo es.
Cuando normalizas, escalas, suavizas o reestructuras datos, realmente da la sensación de ser limpieza, como pasar un trapo por la encimera antes de empezar a cocinar. Neutral, higiénico, obviamente correcto. Esa sensación es la trampa, porque cada una de esas operaciones es, de hecho, una decisión: una decisión sobre qué información conservar y qué información descartar.
El preprocesamiento “estándar” es especialmente seductor aquí, porque la palabra estándar hace que suene como un valor predeterminado neutral y asentado en lugar de una elección. Pero una transformación estándar no es más que un conjunto de valores predeterminados que alguien, en algún lugar, eligió para un caso genérico. En cada una hay incrustada una suposición sobre lo que importa y lo que no, y esas suposiciones, perfectamente razonables en general, pueden ser rotunda y catastróficamente erróneas para tu problema concreto. Heredas la suposición sin que nadie te la muestre nunca, porque llega disfrazada de rutina.
La transformación que borró el significado
En mi caso —y lo mantendré general a propósito— un paso de normalización completamente rutinario tuvo el efecto de aplanar y eliminar un tipo de información que, para mi problema concreto, resultaba ser justamente la parte significativa. La transformación en sí era correcta. Era estándar. Era de esas que todos los tutoriales recomiendan como algo natural. Y para mi problema, estaba borrando la señal mientras preservaba fielmente el ruido.
Descubrirlo fue algo genuinamente humillante, porque significaba que el modelo nunca había estado fallando en aprender. Lo habían cegado antes de que los datos llegaran siquiera. Yo, con mis propias manos, había eliminado la distinción relevante durante la limpieza, y luego senté al sistema delante del resultado pulcramente fregado y me pregunté por qué no veía lo que ya no estaba ahí.
No puedes aprender lo que no puedes ver
Este es el principio que debería haber sido obvio y no lo fue: el modelo solo puede trabajar con lo que sobrevive al preprocesamiento. Todo lo que tus transformaciones eliminen antes de que lleguen los datos simplemente desaparece, de forma permanente, en lo que respecta a todo lo que viene después. Ninguna sofisticación posterior puede recuperar información que se borró antes. No puedes razonar tu camino de vuelta hasta una distinción que ya has eliminado.
Así que tenía todo el esfuerzo al revés. No paraba de intentar hacer el modelo más inteligente, darle más capacidad, ayudarlo a encontrar el patrón, cuando el problema real era que había descartado el patrón aguas arriba y ahora le pedía al modelo que redescubriera algo que yo mismo había eliminado. Es una forma extraña de crueldad exigir que un sistema encuentre lo que ya has retirado de su alcance, y luego juzgarlo por fracasar.
Toda transformación pierde información y tiene una opinión
La verdad general que subyace a esto es que no existe tal cosa como una transformación neutral. Toda reestructuración de datos privilegia algunos de sus aspectos y suprime otros; eso es precisamente lo que es transformar datos. Escalar, en efecto, declara que la magnitud absoluta no importa. Suavizar declara que el detalle a corto plazo no importa. Cada una es una opinión sobre tu problema —una afirmación sobre qué es señal y qué es ruido— y cada una se afirma en silencio, como valor predeterminado, antes de que hayas tenido oportunidad alguna de estar de acuerdo o en desacuerdo.
Ese silencio es la parte peligrosa. Los valores predeterminados son traicioneros precisamente porque no los experimentas como elecciones. Una decisión presentada como una tarea rutinaria no recibe el escrutinio que una decisión merece. Nunca aceptarías “esta parte no importa” como una afirmación casual sobre tu problema, pero eso es exactamente lo que aceptas, sin examinarlo, cada vez que aplicas una transformación estándar sin preguntarte qué da por supuesto.
Mira los datos antes y después
La disciplina que salió de esto es casi vergonzosamente básica: mira de verdad lo que tu preprocesamiento les hace a los datos. Compáralos antes y después de cada paso. Observa, de forma concreta, qué cambió y qué desapareció. Pregúntate, para cada transformación: “¿qué acaba de eliminar esto, y puedo de verdad permitirme perderlo?”.
Es un trabajo tedioso, y da la clara sensación de estar por debajo de la dignidad del problema interesante. Pero esta comparación sosa y poco glamorosa es donde algunas de las decisiones más trascendentales de toda la canalización se toman en silencio: por defecto, por inercia, por la recomendación de un tutorial, sin que nadie decida nada en realidad. Elegir mirar es elegir convertir esos valores predeterminados silenciosos de nuevo en elecciones visibles y examinables.
Las partes que parecen baratas esconden los errores caros
A estas alturas del proyecto, esto se había endurecido en un patrón que veía por todas partes. Los pasos que parecen baratos y aburridos —el preprocesamiento, la configuración, los humildes valores predeterminados— son exactamente donde se acumulan los errores caros e invisibles, precisamente porque su aparente baratura es lo que los exime del escrutinio. Las partes glamorosas y difíciles reciben toda la atención cuidadosa. A la fontanería le tocan suposiciones y un encogimiento de hombros.
Y la fontanería es por donde va el agua en realidad. Un valor predeterminado erróneo en un paso aburrido no se anuncia como importante; simplemente envenena en silencio todo lo que viene después mientras todas las miradas están puestas en la maquinaria emocionante de arriba. El desajuste entre dónde viven los problemas y hacia dónde va la atención es, ahora estoy convencido, una de las fuentes más fiables de meses desperdiciados en toda esta empresa.
La lección más profunda: desconfía de la palabra “solo”
Con lo que acabé quedándome, en última instancia, fue con una profunda sospecha hacia una palabra pequeña: solo. Es solo normalización. Es solo limpiar los datos. Es solo una transformación estándar, solo preprocesamiento, solo rutina. Esa palabra, “solo”, es precisamente donde se esconde el peligro. Es el marcador lingüístico de un paso que has decidido de antemano no pensar, una bandera que clavas en el suelo para decirte a ti mismo que aquí no hay nada que valga la pena examinar.
Muy a menudo sí hay algo ahí que vale la pena examinar. Ahora, cuando algo falla de una manera que no tiene sentido, una de mis primeras preguntas ya no es sobre la parte ingeniosa en absoluto. Es: ¿qué le hice a estos datos, allá en los pasos aburridos, antes de que la parte interesante llegara siquiera a verlos? Más de una vez, la respuesta ha sido que descarté justo aquello que estaba buscando, y etiqueté el acto como “solo limpieza”.
— Sin señales, sin retornos, esto no es asesoramiento de inversión.