Saltar al contenido

lección 5

Selección de variables: cuándo sobran y cómo quitarlas

A veces las variables sobran: quitar las que no aportan hace el modelo mejor, más rápido y más fácil de explicar. Las tres familias de métodos.

⏱ 50 min

Existe la idea tentadora de que, cuantas más variables le des a un modelo, mejor: más información, más posibilidades de que acierte. Es falsa, y de las falsas que más caro salen. Una variable que no aporta señal no se queda neutral; estorba. Mete ruido que el modelo puede confundir con patrón, infla el riesgo de sobreajuste, hace el entrenamiento más lento y, lo que a menudo más importa, convierte el modelo en una caja más difícil de explicar. Acabas de aprender a crear variables; ahora toca lo contrario y es igual de importante: saber cuáles quitar.

Puede parecer una contradicción con lo que ya sabes, que crear buenas variables es de lo que más mejora un modelo. No lo es, y entender por qué encaja te ahorra confusión. Construir variables buenas y quitar variables inútiles son las dos caras de la misma moneda: las dos buscan que el modelo mire exactamente lo que importa, ni más ni menos. Crear añade señal que estaba escondida; seleccionar quita ruido que tapaba la señal que ya había. Un buen trabajo con variables hace las dos cosas, a menudo en el mismo proyecto: primero construyes unas cuantas candidatas con sentido, y luego te quedas solo con las que de verdad aportan. No se trata de tener muchas ni de tener pocas, sino de tener las adecuadas.

La selección de variables (en inglés feature selection) es el arte de quedarte con el subconjunto de columnas que de verdad aportan y descartar el resto. Los beneficios son concretos y se acumulan: menos ruido significa menos sobreajuste; menos columnas significa un modelo más rápido de entrenar y de poner en producción; y un modelo con pocas variables bien elegidas es muchísimo más fácil de explicar a quien tiene que confiar en él. En una profesión donde a menudo tienes que justificar por qué el modelo decidió lo que decidió, esa última ventaja no es menor.

Hay un fenómeno con nombre propio detrás de esto, la maldición de la dimensionalidad: a medida que añades variables, el espacio en el que viven tus datos crece tan deprisa que los puntos quedan cada vez más aislados unos de otros, y al modelo le cuesta más distinguir lo que es señal de lo que es casualidad. Dicho sin tecnicismos: con demasiadas columnas y no tantas filas, es fácil que el modelo encuentre patrones que solo existen por azar. Quitar las variables inútiles es, en parte, defenderse de eso.

Para que la idea de la maldición no quede abstracta, piénsala así. Con una sola variable, tus datos viven en una línea, y aunque tengas pocos puntos, cubren la línea razonablemente. Con dos variables viven en un plano, y los mismos puntos quedan más repartidos. Con veinte variables viven en un espacio de veinte dimensiones que es tan vasto que tus puntos, por muchos que sean, quedan como estrellas sueltas en el vacío, lejísimos unos de otros. Y cuando los puntos están tan aislados, cualquier patrón que el modelo crea ver entre ellos es sospechoso, porque hay tantísimo espacio vacío que siempre se puede trazar una frontera que separe lo que viste por pura casualidad. Más variables no es más información si esas variables no aportan señal: es más espacio donde perderse.

Conviene distinguir dos razones distintas por las que una variable puede sobrar, porque se tratan igual pero se entienden mejor por separado. Una variable sobra si es ruido puro, si no tiene ninguna relación con lo que quieres predecir: solo añade confusión. Y una variable sobra si es redundante, si dice casi lo mismo que otra que ya tienes: no es que no aporte señal, es que su señal ya está cubierta, así que tenerla por duplicado no suma y sí resta en simplicidad y velocidad. Dos columnas que miden casi lo mismo (la altura en centímetros y la altura en pulgadas, en el caso extremo) son el ejemplo de manual: una de las dos sobra entera. La selección de variables ataca los dos casos.

## Tres maneras de decidir qué se queda

Los métodos de selección se agrupan en tres familias, y lo que las separa no es un detalle técnico, es cuánto miran al modelo al decidir. Entenderlas por lo que hacen, y no como una lista de nombres, es lo que te permitirá elegir la adecuada en cada caso.

## Los filtros: mirar cada variable por su cuenta

Un filtro juzga cada variable por sí sola, sin entrenar ningún modelo, midiendo cuánta relación tiene con lo que quieres predecir. Preguntas de la familia: ¿esta columna correlaciona con la respuesta? ¿cuánta información comparte con ella? Para variables numéricas se usan medidas como la correlación o la información mutua (cuánto te dice conocer una variable sobre el valor de la otra); para variables de categorías, pruebas como la chi cuadrado. Ordenas todas las variables por esa medida y te quedas con las que más puntúan. Es rápido y barato, porque no entrena nada, pero tiene un punto ciego: mira cada variable aislada, así que puede descartar dos columnas que por separado dicen poco pero que juntas lo explican todo, o quedarse con dos que dicen lo mismo.

La correlación y la información mutua, las dos medidas de filtro más usadas con números, no son lo mismo y conviene no confundirlas. La correlación mide si dos cosas suben y bajan juntas en línea recta: es excelente para relaciones rectas y ciega para las que tienen curva. La información mutua es más general, porque mide cuánto reduce la incertidumbre sobre la respuesta conocer la variable, tenga la relación la forma que tenga, recta o no. Por eso, cuando sospechas que una variable puede importar de una manera que no sea una simple recta, la información mutua la detecta donde la correlación diría que no hay nada. Para datos reales, donde las relaciones rara vez son rectas perfectas, la información mutua suele ser el filtro más fiable de los dos.

Un filtro juzga A y B por separado y descartaría las dos por inútiles. Lo que no puede ver, y aquí sí se ve, es que juntas separan las clases a la perfección: ese es su punto ciego.

## Las envolventes: probar subconjuntos con el modelo

Una envolvente (en inglés wrapper) no mira las variables de una en una: prueba subconjuntos enteros entrenando el modelo con cada uno y viendo cuál rinde mejor. El método más conocido es la eliminación recursiva (RFE, de recursive feature elimination): entrena el modelo con todas las variables, mira cuál es la menos útil según el propio modelo, la quita, reentrena, y repite hasta quedarse con las que pides. Como usa el modelo de verdad para juzgar, suele acertar mejor que un filtro y capta combinaciones entre variables que el filtro no ve. El precio es el coste: entrenar el modelo muchas veces es caro, y con muchas variables se vuelve lento.

El nombre de envolvente viene precisamente de que el método envuelve a un modelo: no juzga las variables por una propiedad abstracta, sino por cómo le va al modelo concreto con ellas. Eso tiene una consecuencia que conviene entender: la selección que obtienes está hecha a medida de ese modelo. Las variables que una envolvente elige para un bosque no tienen por qué ser las mismas que elegiría para una regresión, porque cada modelo aprovecha la información de forma distinta. Esto es a la vez su virtud y su limitación: te da la mejor selección para el modelo que vas a usar, pero no una verdad universal sobre qué variables importan. Si cambias de modelo, en rigor deberías rehacer la selección.

Y conviene ser consciente del coste real, porque es fácil subestimarlo. La eliminación recursiva entrena el modelo una vez por cada variable que quita: si empiezas con cincuenta variables y quieres bajar a diez, son del orden de cuarenta reentrenamientos, y eso antes de meterlo dentro de una validación cruzada que lo multiplica por el número de pliegues. Con un modelo rápido y pocas variables es asequible; con un boosting pesado y cientos de variables puede convertirse en horas de cálculo. Por eso la envolvente se reserva para cuando el acierto importa de verdad y te puedes permitir el tiempo, no como primera criba de un problema con muchísimas columnas.

## Las integradas: el modelo selecciona al aprender

La tercera familia no añade un paso de selección: deja que el propio modelo elija mientras entrena. El ejemplo más limpio es Lasso, una regresión que, además de ajustar los pesos de las variables, empuja los menos útiles exactamente hasta cero. Una variable con peso cero no influye en nada: el modelo la ha descartado solo. El resultado es un modelo que ya viene con la selección hecha, y puedes leer qué variables sobrevivieron mirando cuáles conservan un peso distinto de cero. Los modelos con árboles hacen algo parecido con su importancia de variables, que ya conoces: las que nunca usan para decidir son, de hecho, candidatas a desaparecer. Es la opción más eficiente, porque la selección sale gratis con el entrenamiento, pero depende del modelo concreto que uses.

Vale la pena entender el truco por el que Lasso consigue poner pesos exactamente en cero, porque es ingenioso. Una regresión normal reparte peso entre todas las variables para ajustar lo mejor posible, y aunque una variable sea casi inútil le deja un pesito pequeño en lugar de cero. Lasso añade una penalización por tener pesos grandes: al modelo le cuesta cada unidad de peso que reparte, así que solo gasta peso en las variables que de verdad lo valen, y a las demás las deja secas, en cero. Es como darle a alguien un presupuesto limitado para repartir: en lugar de dar una miguita a todos, se la juega en lo que importa y a lo demás no le da nada. Cuanto más aprietas esa penalización, menos variables sobreviven. Ese apriete es un mando que tú controlas, y con él decides cómo de agresiva es la poda.

Que la selección salga gratis con el entrenamiento no significa que sea mágica ni infalible. Depende del modelo: Lasso solo poda bien relaciones de tipo recta, y la importancia de los árboles puede engañarte repartiendo el mérito de forma rara cuando dos variables dicen casi lo mismo. Son excelentes como primera lectura y como poda automática barata, pero conviene contrastar lo que descartan con lo que sabes del problema antes de dar por muerta una variable. La eficiencia de la selección integrada es su gran ventaja; su dependencia del modelo concreto es el precio, y como con todo en este oficio, lo sensato es conocer las dos caras.

Lo que separa a las tres familias es cuánto usan el modelo para decidir: el filtro no lo usa, la envolvente lo usa muchas veces, la integrada lo lleva dentro.

Puestas una al lado de otra se ve el intercambio que una lista no deja ver: a medida que te mueves del filtro a la envolvente, ganas precisión y capacidad de captar combinaciones, pero pagas en coste de cálculo. La integrada se escapa de ese eje porque no es un paso aparte: viene regalada con el entrenamiento, a cambio de atarte al tipo de modelo que la ofrece.

Un apunte sobre de dónde viene todo esto. Lasso lo propuso el estadístico Robert Tibshirani en 1996, y su nombre es un acrónimo inglés que viene a significar operador de contracción y selección: la palabra selección estaba en el bautizo porque la capacidad de poner pesos en cero, de seleccionar sola, era justo la novedad. No nació para el aprendizaje automático tal como lo conocemos, sino del mundo de la estadística clásica, donde explicar qué variables importan es tan central como predecir. Esa herencia explica por qué Lasso sigue tan vivo en terrenos donde hay que justificar decisiones, como la banca o la medicina: no solo predice, deja un modelo con pocas variables nombrables que se puede defender ante quien pregunte.

## Cuál usar

  • Si tienes muchísimas variables y quieres una criba rápida antes de nada, empieza por un filtro: descarta en segundos lo que claramente no se relaciona con la respuesta.
  • Si el acierto es lo que más te importa y puedes permitirte el tiempo de cálculo, una envolvente como la eliminación recursiva suele dar la mejor selección, porque juzga con el modelo de verdad.
  • Si ya vas a usar un modelo que selecciona solo (una regresión Lasso, un bosque o un boosting con su importancia de variables), aprovéchalo: la selección integrada no te cuesta un paso extra.
  • Y en la práctica se combinan: un filtro para una primera criba grande, y luego una envolvente o un método integrado sobre lo que quedó.
Las variables inútiles no se quedan neutrales: le dan al modelo sitios donde hallar patrones de azar, así que sube el acierto en entrenamiento y baja en prueba. Quitarlas cierra esa brecha.

La selección de variables también se hace solo con el entrenamiento. Si eliges qué columnas quedarse mirando todos los datos, incluida la prueba, la prueba ha influido en el modelo y su cifra ya no es honesta. Es la misma fuga de siempre: cualquier decisión que mire la respuesta se toma en el entrenamiento, nunca en la prueba. Lo correcto es meter la selección dentro de la validación cruzada, igual que hiciste con la búsqueda de hiperparámetros.

De todas las ventajas de quedarte con pocas variables, hay una que en el trabajo real pesa más de lo que parece: la de poder explicar el modelo. Un modelo con seis variables bien elegidas es algo que puedes poner delante de quien tiene que confiar en él y recorrer una por una: esta pesa, esta también, estas tres menos, esta casi nada. Un modelo con doscientas variables, muchas de ellas ruido, es una caja que nadie puede recorrer, y cuando te pregunten por qué decidió lo que decidió, no tendrás una respuesta que quepa en una conversación. En problemas donde las decisiones recaen sobre personas (un crédito, un diagnóstico, una contratación), esa capacidad de dar cuentas no es un lujo, a veces es un requisito legal. Quitar lo que sobra no solo mejora el modelo: lo hace defendible.

No persigas quitar variables como un fin en sí mismo. El objetivo no es tener pocas columnas, es tener las que aportan. A veces un filtro agresivo tira una variable que, combinada con otra, era valiosa, y el modelo empeora. Mide siempre el efecto de la selección contra tu validación: si quitar columnas no mejora (o al menos no empeora) el acierto honesto, y a cambio ganas simplicidad y velocidad, ha merecido la pena.

Una advertencia final para que no te pases de frenada en la dirección contraria. Quitar variables tiene su propio riesgo si se hace a ciegas: puedes tirar una columna que parecía inútil por su cuenta pero que, combinada con otra, era valiosa, exactamente el punto ciego del filtro que viste en el diagrama. Por eso la selección no es un botón que se pulsa y se olvida, sino una decisión que se comprueba. La regla sana es: toda selección se mide contra la validación honesta antes y después, y solo se da por buena si el modelo con menos variables acierta igual o mejor en datos nuevos. Si quitar columnas empeora la cifra honesta, has recortado músculo en vez de grasa, y toca devolver lo que no debías haber quitado.

## El cierre: quitar una por una, o comprimirlas todas

La selección de variables quita columnas enteras: esta se queda, esta se va. Pero hay otra forma de reducir el número de variables que no elige entre ellas, sino que las comprime todas en unas pocas combinaciones nuevas. Esa técnica puede ayudar mucho cuando tienes montones de variables que se solapan, y puede destruir algo que esta profesión valora por encima de casi todo: la capacidad de explicar qué mira el modelo. Vale la pena entender exactamente cuándo ayuda y cuándo hace más daño que bien, y eso es lo que viene a continuación.

Regístrate para guardar tu progreso.