• Saltar a la navegación principal
  • Saltar al contenido principal
Logo Codificando Bits

Codificando Bits

  • Academia
    • Rutas
    • Cursos
    • Proyectos
    • Tutoriales
  • Acceder
  • Suscribirse

Guía Completa de la Ingeniería de Características (Feature Engineering) en Machine Learning

El éxito de un modelo de Machine Learning radica en la calidad de los datos con que lo estemos alimentando y esto resulta siendo más relevante muchas veces que incluso el mismo modelo.

Esto quiere decir que si usamos un modelo sofisticado pero no tenemos muy buenos datos, no podremos obtener muy buenas predicciones. Mientras que, si usamos un modelo relativamente sencillo pero hemos preparado adecuadamente los datos, muchas veces podremos obtener muy buenas predicciones.

Y entonces, la pregunta es: ¿cómo podemos garantizar que los datos con los que alimentamos el modelo son los adecuados? La respuesta a esto es un campo del Machine Learning que se conoce como la Ingeniería de Características (o Feature Engineering en Inglés), que se enfoca precisamente en esa preparación de los datos para que cuando los presentemos al modelo posteriormente podamos obtener las mejores predicciones posibles.

En este artículo les voy a compartir una guía completa de la Ingeniería de Características, una fase clave en cualquier proyecto de Machine Learning. Así que vamos a entender qué es la Ingeniería de Características, por qué resulta esencial en un proyecto de Machine Learning y cuáles son las principales técnicas que hacen parte de este feature engineering. Además, al final de este artículo van a encontrar el enlace de descarga de esta guía.

Conceptos básicos: las variables o características en un set de datos

Para entender qué es la ingeniería de características, tenemos que comenzar revisando un concepto básico que es el concepto de las variables o las características de un set de datos.

Cuando hablamos de la Ingeniería de Características, es importante tener en cuenta que estamos hablando de sets de datos estructurados o que vienen en formato tabular.

Por ejemplo, cuando los datos están almacenados en una tabla, las filas se conocen como los registros (cada uno de los datos que tenemos) y las columnas se conocen precisamente como las variables o características de nuestro set de datos:

Variables o características de un set de datos en formato tabular
Variables o características de un set de datos en formato tabular

Problemas comunes en los datos en bruto

¿Qué es lo que ocurre usualmente? Que cuando tenemos nuestro set de datos en bruto, los datos pueden tener diferentes tipos de problemas . Por ejemplo:

  1. Datos incompletos: podemos tener celdas dentro de la tabla donde no hay datos almacenados (datos faltantes)
  2. Diferentes escalas: si comparamos diferentes columnas, cada una puede contar con una escala numérica diferente o con un rango de valores diferente
  3. Distribuciones no normales: si hablamos de variables numéricas, podemos estar intentando usar un modelo que asume que los datos tienen una distribución Gaussiana o normal y la columna (o columnas) de interés no tienen una distribución normal.
  4. Variables irrelevantes: puede ser que algunas de estas columnas no sean relevantes para el modelo. Es decir, si introducimos esa variable al modelo, no va a ser una variable que va a tener un gran impacto en las predicciones (e incluso podría empeorarlas).
  5. Cantidad inadecuada de variables: puede ser que introduzcamos demasiadas variables o muy pocas al modelo y las predicciones no sean buenas.
  6. Datos categóricos en formato texto: puede ser que alguna o algunas de esas columnas contengan datos categóricos que no están en formato numérico. Todos los modelos de Machine Learning requieren que los datos tengan una representación numérica, así que tendremos que hacer algún tipo de conversión sobre esos datos categóricos.
  7. Valores extremos (outliers): puede ser que tengamos variables numéricas pero con valores extremadamente grandes o extremadamente pequeños que se salen del rango normal o típico de la mayor parte de los valores de esa variable. Estos son los valores extremos.

Todos estos pueden ser inconvenientes que pueden afectar el entrenamiento y las predicciones que genere el modelo.

¿Qué es la Ingeniería de Características?

Teniendo claro qué es una variable o característica y teniendo claros los problemas o los inconvenientes a los que nos podemos enfrentar en un problema real cuando tenemos que procesar esos datos con un modelo de Machine Learning, entendamos ahora qué es la ingeniería de características.

La ingeniería de características simplemente la podemos definir como ese conjunto de operaciones, procesos o transformaciones que hacemos sobre los datos en bruto para lograr extraer aquellas características que resulten relevantes para un modelo de Machine Learning, de tal manera que tras entrenarlo logremos generar las mejores predicciones posibles.

Esto resulta clave por lo que mencionamos en la introducción: podemos tener un modelo tan complejo como queramos, pero si los datos con los que lo alimentamos no son adecuados, pues no vamos a obtener buenas predicciones. Mientras que si tenemos un modelo (bien sea complejo o sencillo) pero los datos tienen la calidad adecuada, esas predicciones que generemos con el modelo van a ser, generalmente, muy buenas.

En esencia, lo que busca este feature engineering es garantizar esa calidad necesaria de los datos para obtener al final buenas predicciones.

Principales técnicas de Feature Engineering

A continuación, exploraremos los ocho grandes conjuntos de técnicas que conforman la ingeniería de características.

1. Manejo de Datos Faltantes

La idea básica de este primer conjunto de técnicas es muy sencilla. Como su nombre lo indica, cuando tenemos datos faltantes es porque nuestra tabla de datos tiene algunas celdas incompletas.

Entonces, estas técnicas permiten, dependiendo de las características de esos datos, completar esa información de alguna manera o eliminarla si es necesario. En esta familia tenemos dos grupos de técnicas:

  • El descarte: es la más sencilla y simplemente consiste en eliminar las filas del set de datos donde al menos una celda esté incompleta.
  • La imputación: consiste en asignar o estimar el valor de ese dato faltante haciendo uso de diferentes técnicas.

En el artículo guía completa para el manejo de datos faltantes, describo en detalle estas dos técnicas.

2. Codificación de variables categóricas

La idea en este segundo grupo de técnicas es también muy sencilla. Recordemos que una variable categórica es aquella donde tenemos almacenada información que corresponde precisamente a una categoría.

Por ejemplo, podemos tener en una columna nombres de ciudades o nombres de personas y esa información almacenada en dichas variables pertenece precisamente a las categorías.

Estas variables categóricas pueden ser de dos tipos:

  • Ordinales: donde la información que está allí almacenada nos indica categorías que tienen un orden específico o una jerarquía determinada. Un ejemplo son los grados de formación educativa (primaria, secundaria, universitaria, maestría, doctorado).
  • Nominales: son aquellas que intrínsecamente no tienen esa jerarquía allí almacenada (por ejemplo, nombres de ciudades, personas o animales).

El detalle es que estas variables categóricas usualmente están almacenadas en formato texto y por tanto, antes de llevarlas al modelo, tenemos que representarlas de alguna forma de manera numérica; es decir, debemos codificarlas.

Y para realizar esta codificación tenemos principalmente dos familias de técnicas:

  • Para variables nominales: podemos usar la codificación One-Hot o la codificación que se conoce como codificación de categorías (Label Encoding).
  • Para variables ordinales: en este caso podemos usar directamente la ténica Hablamos directamente de la técnica de Label Encoding.

En el artículo ¿cómo codificar datos categóricos? muestro en detalle cómo funcionan estos métodos.

3. Transformaciones matemáticas de distribución

En este tercer grupo de técnicas, lo que buscamos es aplicar transformaciones matemáticas para lograr que la distribución de nuestros datos se asemeje a la de una curva Gaussiana o una curva normal.

Tengamos en cuenta que una curva Gaussiana o normal representa la manera como muchas variables del mundo real están distribuidas. Y muchos métodos de Machine Learning parten del hecho de que dichas variables tienen precisamente una distribución Gaussiana.

Lo que ocurre es que cuando adquirimos nuestros datos, no siempre podremos garantizar ese comportamiento o ese tipo de distribución. Así que lo que buscan estos métodos es tomar esas distribuciones que se alejan de la forma Gaussiana y aplicar algún tipo de operación matemática para transformar esos datos para así obtener una distribución aproximadamente normal después de dicha transformación.

4. Discretización de variables numéricas

Este cuarto conjunto de técnicas busca tomar una variable numérica y convertirla en una variable categórica.

Supongamos el caso hipotético de que tenemos una variable donde estamos midiendo la edad de diferentes personas (una variable numérica continua). Lo que haría la discretización de esa variable numérica sería dividir esas edades en rangos. Por ejemplo:

  • De 0 a 12 años: «niños»
  • De 12 a 18 años: «jóvenes»
  • De 19 años hasta los 60: «adultos»
  • De los 61 años en adelante: «ancianos»

Es decir que lo que hacemos en este caso es tomar la variable numérica y definir unos rangos que corresponden a la nueva variable categórica.

Y para lograr esto existen diferentes técnicas, que dependen del tipo de datos que estemos procesando. Pero en el fondo la idea es que, en lugar de presentar los datos numéricos en bruto, los transformamos a variables categóricas. Esto, en ciertos casos, podría mejorar el desempeño del modelo.

5. Manejo de valores extremos (outliers)

Este quinto conjunto de técnicas se enfoca en el manejo de valores extremos. Los valores extremos son aquellos valores de la variable que se salen del rango típico de la mayor parte de los datos (es decir, valores numéricos que son o muy pequeños o extremadamente grandes).

Dependiendo del modelo que estemos construyendo, estos valores extremos pueden afectar de manera positiva o negativa las predicciones que haga ese modelo. Entonces, el manejo de valores extremos busca implementar técnicas que nos permitan, bien sea, eliminar o preservar esos valores extremos antes de llevarlos al modelo.

Y en esta familia tenemos cuatro grandes agrupaciones de técnicas:

  1. La eliminación: la más sencilla de todas. Si en nuestro set de datos detectamos un valor extremo demasiado grande o pequeño, simplemente eliminamos el registro completo (la fila completa) que contenga ese valor extremo.
  2. El recorte: consiste en tomar ese valor extremo y llevarlo o al límite inferior o al límite superior en el que se encuentran los valores típicos de esa variable.
  3. La comparación de desempeños: consiste en entrenar el modelo con outliers y verificar su desempeño. Luego, eliminamos esos valores extremos, entrenamos el modelo nuevamente, verificamos su desempeño y determinamos en cuál de los dos casos se obtiene el mejor resultado.
  4. No hacer nada: muchas veces los valores extremos contienen información relevante que puede hacer que el modelo genere mejores predicciones. Un caso puede ser precisamente la detección de anomalías (una anomalía es precisamente un dato atípico). En ese caso nos interesa no modificar esos valores atípicos porque allí es donde está la información clave, así que podemos optar por no eliminarlos.

En el artículo ¿cómo manejar valores extremos? explico en detalle varias de estas técnicas, mientras que en el curso Series de Tiempo – Preprocesamiento, muestro cómo usar Python para implementar varias de estas técnicas con aplicaciones a las Series de Tiempo.

6. Escalamiento de los datos

Cuando analizamos múltiples variables (o columnas de nuestro dataset), los valores numéricos no siempre están en el mismo rango. Por ejemplo, la variable «edad» en un set de datos puede estar entre 0 y 99 años, mientras que la variable altura tiene un rango de 140 a 195 cm.

Si alimentamos un modelo de Machine Learning con estas variables, sin prestar atención a que sus rangos son diferentes, al final podríamos tener un modelo que no generaría muy buenas predicciones.

Así que el escalamiento busca llevar llevar esos datos numéricos a un proceso de transformación de manera tal que a la salida tengamos un rango predefinido de valores.

Las técnicas de escalamiento más usadas son:

  • La estandarización: lo que se busca es tomar la columna que queremos escalar, calcular el promedio, restarle ese promedio a cada valor de la columna y dividir el resultado entre la desviación estándar de esa variable. Eso nos arroja una variable que va a tener una media igual a 0 y una desviación estándar igual a 1.
  • Escalamiento por mínimo y máximo: independientemente de cuáles sean los valores mínimo y máximo originales, tras este escalamiento vamos a garantizar que el mínimo y el máximo de esa variable escalada va a estar, por ejemplo, entre 0 y 1, o entre -1 y 1 (se logra por ejemplo con el método MinMaxScaler de la librería Scikit-Learn).
  • Escalamiento por rango inter-cuartiles: es similar a la estandarización, pero en lugar de calcular la media y la desviación estándar, se calculan la mediana y el rango intercuartiles. A cada dato se le resta la mediana y se divide entre el rango intercuartílico para obtener datos con una mediana de 0 y un rango intercuartiles igual a 1. Esta es una técnica más robusta frente a valores extremos comparada con la estandarización.

En el tutorial ¿por qué y cuándo escalar los datos? muestro de forma práctica cómo implementar varias de estas técnicas para un problema de Machine Learning.

7. Selección de características

Cuando vamos a entrenar un modelo, no necesariamente todas las variables que hacen parte de nuestro set de datos o todas las columnas contienen información relevante.

Si presentamos todas esas variables al modelo, en lugar de tener un buen desempeño, lo que podremos hacer es «confundir» al modelo y generar peores predicciones.

Así que, de alguna forma, tenemos que seleccionar las mejores características, las que tengan el mejor potencial para que posteriormente puedan generar las mejores predicciones posibles. Esto se conoce precisamente como selección de características.

En esta familia tenemos tres principales técnicas a utilizar:

  • Métodos de filtrado: analizan cada variable de manera individual y sin tener en cuenta el modelo de Machine Learning, asignándole un puntaje para definir si va a tener un impacto o no y si se la presentamos al modelo.
  • Métodos wrapper: analizan cada una de las características, pero en conjunto con el modelo, para definir cuáles de ellas son más relevantes para entrenar y generar predicciones.
  • Métodos embebidos: en la misma arquitectura del modelo se tiene un elemento que permite darle una puntuación a esas características y a su importancia tras el entrenamiento (un ejemplo de esto son los modelos basados en árboles de decisión, como árboles de regresión, árboles de clasificación o bosques aleatorios).

De hecho, en el curso Regresión Lineal vemos en detalle cómo aplicar varios métodos de selección de variables al momento de entrenar este tipo de modelos. Además, en el artículo selección de características en el Machine Learning explico más en detalle estos métodos.

8. Creación de nuevas características

El octavo y último conjunto de técnicas de feature engineering se conoce como la creación de características. Estas técnicas ya van a ser muy específicas y van a depender del problema que queramos resolver y un poco también de la experiencia que tengamos desarrollando modelos.

Acá la idea básica es, por ejemplo, tomar dos o más características y combinarlas en una sola de manera tal que tengan la información relevante que impacte de forma positiva las predicciones.

Por ejemplo, si estamos desarrollando un modelo y dos de las variables de entrada son el peso y la altura de un grupo de personas, podríamos pensar en combinar esas dos variables en un «índice de masa corporal» y verificar qué tan buenas son las predicciones que genera el modelo con esa nueva variable.

Enlace de descarga de la guía

▼ La guía en formato PDF

Conclusión

Acabamos de ver una guía completa sobre esta fase fundamental de cualquier proyecto de Machine Learning, que es la Ingeniería de Características.

En últimas, esta ingeniería es un conjunto de técnicas que busca modificar o transformar nuestros datos de manera tal que a la salida de este proceso obtengamos los mejores datos posibles, con la mejor calidad posible, para de esta forma entrenar un modelo de Machine Learning y lograr que este genere las mejores predicciones posibles.

© Codificando Bits, LLC | Blog | Contacto | Servicios | Acerca de | Políticas

¿Has olvidado la contraseña?
¿Has perdido tu contraseña? Por favor, introduce tu nombre de usuario o dirección de correo electrónico. Recibirás por correo electrónico un enlace para crear una nueva contraseña.
body::-webkit-scrollbar { width: 7px; } body::-webkit-scrollbar-track { border-radius: 10px; background: #f0f0f0; } body::-webkit-scrollbar-thumb { border-radius: 50px; background: #dfdbdb }