🎙 Episodio 59. ¿Qué es la ingeniería de características?

En el episodio de hoy de Un podcast ninja sobre Big Data hablamos de para qué sirve, cómo se hace y qué es la ingeniería de características.

¿Qué es una característica?

A estas alturas del podcast ya sabemos que un modelo de Machine Learning no es nada mágico sino que son operaciones matemáticas.

Muchas.

Muchísimas cuando el modelo es muy complejo.

Y por tanto, para hacer operaciones matemáticas necesitamos números.

Pero cuando estamos recogiendo datos para resolver un problema y vamos a utilizar inteligencia artificial, estos datos no tienen porqué ser números.

De hecho, en muchas ocasiones no lo son.

  • A veces son palabras
  • A veces imágenes
  • A veces son textos completos
  • A veces podrían ser también sonidos o archivos de audio. 

Bien.

Pues todas esas palabras, imágenes, textos, etc… se traducen a características, que son columnas de datos numéricos que pueden ser interpretados por los modelos de Inteligencia Artificial.

Es decir, las características son los datos que hemos recogido peeeero transformados para que puedan ser utilizados por los modelos de Machine Learning.

Y además, son esos datos en los que vamos a basar las predicciones del modelo por lo que tendrán que estar relacionadas con lo que queremos predecir.

Si no, no nos van a añadir más ruido, más que cualquier otra cosa, y nos van a perjudicar.

Por ejemplo, si estamos entrenando un modelo que predice si un cliente va a comprar o no y utilizamos como característica el nombre del cliente no estaremos introduciendo ninguna característica con valor predictivo para lo que queremos obtener.

Un cliente no va a comprar más por llamarse Pedro.

Así que, como veis, muchas veces más datos no tiene porqué significar mejor resultado del modelo,  especialmente si estos datos no están relacionados con nuestro objetivo.

También tenemos que tener claro que estas características tienen que estar disponibles en el momento en el que el modelo tenga que hacer la predicción.

Por ejemplo, nos dan un histórico con las ventas de una tienda en los últimos 3 meses para predecir la demanda de un determinado producto que utilizamos para entrenar un modelo.

Resulta que cuando usamos el modelo para predecir la demanda no tenemos los datos de ventas de los últimos tres meses porque tardan unas semanas en hacernos llegar los datos actualizados.

Entonces el modelo nunca funcionará bien en el mundo real porque contaba con tener los datos de los últimos 3 meses para predecir lo que va a pasar mañana y resulta que los datos del último mes aún no han llegado.

Y como decía antes las características tienen que ser numéricas.

Sin embargo la ingeniería de características no se limita simplemente a transformar o codificar los datos que tenemos a una forma numérica que pueda ser interpretada por un modelo de ML sino que va bastante más allá.

¿En qué consiste la ingeniería de características?

La ingeniería de características es… un arte.

El arte de manipular y transformar los datos de la manera más óptima posible para que el problema que queremos resolver quede perfectamente representado y el modelo de ML pueda obtener el máximo valor informacional de los datos que tenemos.

Y no sólo el valor informacional de los datos que tenemos sino de los conocimientos que a priori podemos tener sobre el tema en el que se encuadra el problema.

Por ejemplo, si estamos haciendo un modelo que predice las ventas de un supermercado a partir del historial de ventas y tenemos fechas con el producto vendido y el precio del producto y tal podemos crear una característica adicional a partir de la fecha que sea el día de la semana.

De esta manera, el modelo será capaz de detectar con más facilidad que los sábados es cuando la gente suele ir a comprar al super y que los domingos no hay ventas porque el super está cerrado.

Simplemente lo que hemos hecho es a partir de un dato quee ya teníamos, la fecha, hemos extraído el día de la semana al que corresponde esa fecha.

Hemos creado una característica nueva a partir de otra que ya teníamos, que es la fecha.

¡Eso es ingeniería de características!

Las características contienen la información que el modelo usa para separar las clases, si estamos ante un problema de clasificación o para estimar las predicciones.

Esto es algo que haremos de manera óptima cuando tengamos conocimiento sobre el campo en el que se enmarca el problema.

data centric vs Model centric

Normalmente se da mucha importancia al modelo de Machine Learning que se usa para resolver un problema.

Modelos de aprendizaje profundo con millones de parámetros y dominaremos el mundo.

Ponemos mucha fé en que si la arquitectura del  modelo es buena, los resultados también lo serán. 

Y no.

Si entrenamos el modelo más potente con los datos tal y cómo los hemos capturado, con las transformaciones mínimas para que el éste funcione, tendremos un modelo complejo, lento y costoso.

Será como intentar conducir un coche de fórmula 1 por un camino de tierra. Probablemente el coche no camine.

Mejor conducir un coche normal por una autopista bien asfaltada. La que conseguiremos con una buena ingeniería de características.

Llegaremos más cómodamente al destino y seguramente incluso gastando menos combustible.

Tiene sentido, ¿no?

Ingeniería de características en un proyecto de ML

Ahora que ya sabemos en qué consiste la ingeniería de características y cuál es su propósito vamos a ver un poco en dónde se encuadra en un proyecto de Machine Learning.

Hemos hablado mil veces de las etapas de un proyecto de Machine Learning.

Desde comenzar por definir el problema, obtener los datos, seleccionar y entrenar un modelo y luego desplegarlo y monitorizarlo.

La ingeniería de características iría antes de entrenar el modelo, evidentemente.

Hemos visto qué datos somos capaces de capturar y hemos construido nuestro primer conjunto de datos de entrenamiento.

Lo primero de todo es familiarizarnos con él mediante un análisis de datos exploratorio para ver con qué materia prima vamos a trabajar.

A partir de ahí ya sabremos de qué tipos de datos partimos: numéricos o no numéricos, si tenemos muchas filas y columnas con valores faltantes o con valores atípicos.

Y una vez hecho esto iría la ingeniería de características.

Tipos de características (con ejemplos)

Entonces, tras el análisis exploratorio de nuestros datos, vemos que éstos  entran dentro de alguno de estos tipos:

  • Pueden ser números continuos: Es decir, que este dato en cuestión es un número que puede tener como valor un número infinito de posibilidades.

Por ejemplo, podría ser una distancia, la distancia que ha recorrido un coche en toda su vida útil.

  • Puede que el dato sea una palabra que expresa una opción, es decir una variable categórica que puede tener 2 o más valores.

Por ejemplo, un color… El color del coche de antes.

  • Puede ser una variable categórica que únicamente puede tomar uno de dos posibles valores, como responder a una pregunta con sí o no.
  • Puede ser que el dato que tenemos entre manos sea un número peeeero en vez de estar representando una magnitud que puede tomar cualquier valor, como en el caso de los kilómetros, sólo pueda tener un númreo finito de valores. Y además, estas opciones finitas  se pueden ordenar.

Si seguimos con el ejemplo de los coches, este dato podría ser la cilindrada del motor. 

En la fábrica no se fabrican coches de cualquier cilindrada sino que los hay de 4 litros,  de 2.5, de 3 o de lo que sea… pero un número finito de cilindradads. Yo no puedo llegar a la fábrica y decir que quiero un coche de una cilindrada de 1.256 litros. 

Llamarían a seguridad y posiblemente me echarían de allí.

Bueno pues ahí, además hay un orden… podemos ordenar esos coches de ayor a menor cilindrada.

Pero, además, es que este tipo de dato no tiene por qué ser un número, también podría una respuesta a una encuesta de satisfacción.

Os pregunto… ¿os gusta este podcast? Y podéis responder Mucho, poco o nada. No son números, son palabras, pero podríamos transformar estas respuestas en números en un momento

¿Cuánto os gusta este podcast del 0 al 2? 0 es nada y 2 es a tope.

Bien.

Pues el primer paso una vez hemos identificado los tipos de datos con los que vamos a trabajar podemos comenzar nuestra ingeniería de características.

Tendremos distintas transformaciones para cada tipo de datos.

Ingeniería de datos numéricos

Para las variables numéricas las transformaciones más frecuente son el escalado y la discretización.

Escalado

Consiste en conseguir que los valores estén dentro de un rango.

Y que todas las características numéricas estén en el mismo rango.

Así conseguimos que algunos modelos de Machine Learning sensibles a la escala, converjan más rápido.

Es decir, que se entrenen más rápido.

Si tenemos una situación en la que estamos tratando valores, como puede ser el precio de una casa, con magnitudes de cientos de miles de euros con y en ese mismo dataset tenemos otras características como la superficie de esa casa en metros cuadrados, que igual es 100. Pues al modelo le cuesta más ajustar sus parámetros para poder combinar estas características si tienen magnitudes muy distintas a si las dos tienen valores entre cero y uno.

Otra transformación clásica de alguna variables numéricas es transformarlas en categóricas. Esta transformación se llama discretización.

Imaginad que tenemos una fábrica de pantalones, pero como no nos dedicamos a los pantalones a medida, no cogemos a cada cliente, le medimos y hacemos un traje sino que tenemos la talla S, la M y la L y sabemos que la talla S es para los que miden menos de 1.50, la M para los que miden entre 1.50 y 1.70 y la L para los que miden más de 1.70.

La altura de nuestros clientes es una variable numérica continua, pueden tener cualquier altura dentro de unos límites lógicos, peeeero a nuestro caso le va mejor discretizar esas variables numéricas continuas.

Peeeero seguimos necesitando números para los modelos de Machine Learning, que es lo que entienden.

Transformaciones de variables categóricas

Una transformación típica de variables categóricas a número es la codificación.

Codificación de Variables categóricas ordinales

Tenemos el ejemplo que os he puesto antes cuando os preguntaba cuánto os gusta este podcast y en vez de mucho, poco o nada pues sustituimos por un número que nos dé también una idea de cantidad 2, 1 o 0.

Codificación One-Hot-Encoding

Por otro lado tenemos las características categóricas que no implican ningún orden o magnitud como colores, por ejemplo.

En este caso, si tenemos tres colores o tres categorías, creamos una característica nueva para cada color y la observación que se corresponda con el color tendrá esa característica a uno y el resto de colores a cero. 

Es decir, en vez de tener una característica “color” tendríamos una característica “amarillo”, una “rojo” y una “azul” y dependiendo del color que fuera pues pondríamos un 1 en esa columna.

Esto se llama One Hot Encoding y es un tipo de codificación de variables categóricas, pero hay un montón de métodos más.

Codificación según la frecuencia

Podríamos contar cuantos coches amarillos hay en nuestro dataset y sustituir el color por el número de coches de ese color. 

Por eso decía que esto de la ingeniería de características es como un arte… podemos aplicar un montón de transformaciones…

¡Imaginación al poder!

Creación de nuevas características

Una vez hemos hecho estas primeras transformaciones, casi las mínimas para que el modelo pueda interpretar lo básico de las características podemos construir nuevas características.

Ingeniería de características manual

Y esto ya sí, depende 100% de los datos que tengamos y del contexto de nuestro problema.

  • Se pueden crear características nuevas a partir de operaciones matemáticas entre otras características. Por ejemplo si tenemos el precio de una casa y los metros cuadrados y creamos una nueva característica que nos diga el precio por metro cuadrado. ahí solo es dividir una por otra.
  •  Se pueden crear nuevas características extrayendo información de otras que ya teníamos. Por ejemplo cuando extraíamos el día de la semana a partir de la fecha.
  • Se pueden cruzar características. Por ejemplo si queremos calcular la demanda de taxis y creamos una característica que nos cruce la hora del día con el día de la semana. De ahí nos saldrán características del tipo "sábado a las 11 de la noche" con un valor predictivo muy alto para calcular la demanda.

De esta manera estamos resaltando la interacción entre otras características.

La idea en esta parte de la ingeniería de características en la que creamos nuevos atributos que nos permitan aumentar el conjunto de datos de entrenamiento es pasarle al modelo nuestra intuición o conocimiento sobre el contexto en el que se desarrolla el problema.

Aquí sí que imaginación al poder…

Caractereísticas aprendidas

Luego además de esta creación de características un poco artística a partir de nuestra intuición y conocimientos, también hay algoritmos que lo hacen de manera menos interpretable para nosotros.

Por ejemplo, el caso de los embeddings en el que transformamos textos en vectores de números incluyendo el significado semántico de la palabra o texto en el propio vector.

Este caso entraría dentro de las características aprendidas, porque estamos usando modelos intermedios a los que le pasamos el dataset de entrenamiento y aprenden cómo representar los datos y extraer nuevas características que podamos usar.

Selección de características

Con esto de la ingeniería de características se nos podría ir la imaginación un poco de las manos.

Podríamos terminar con tantas características que en vez de darle más poder de predicción al modelo acabáramos metiendo demasiado ruido.

Y entonces, el rendimiento del modelo disminuiría.

Para ello tenemos la muy necesaria etapa de seleccionar las características más útiles.

De esta manera podemos reducir la probabilidad de tener características muy dependientes de otras o de tener demasiadas para la cantidad de observaciones que tenemos.

Si estamos en este caso en el que tenemos que eliminar características hay varias técnicas estadísticas que se pueden aplicar.

O también se puede utilizar Machine Learning.

En el caso del modelo de ML, vamos entrenando un modelo y añadiendo una característica de prueba en cada iteración. Solo nos la quedamos  si mejora la métrica que estamos evaluando.

O al revés... empezamos entrenando el modelo con todas las características y vamos eliminando las menos relevantes.

Espero que el episodio de hoy os sea de provecho y que aprendáis algo de valor. 

Si es así, no olvidéis dejar una valoración de 5 estrellas del podcast en Apple podcasts, en Spotify, en Ivoox, en Google podcast o donde quiera que escuchéis el podcast. 

Recordad que si tenéis cualquier duda o pregunta podéis contactar conmigo a través del formulario de contacto o podemos seguir la conversación en Twitter.

Muchas gracias por estar ahí y os espero en el próximo episodio de Un Podcast Ninja sobre Big Data.

Boletín Ninja

Suscríbete a la newsletter y recibe la guía ninja del Big Data y la Inteligencia Artificial.

Guía ninja del Big Data
Copyright © 2023  Â· Datos 🥷 · Todos los derechos reservados