1 usuario conectado
Aprendizaje automático en Python.Ingeniería de características
Aprendizaje automático en Python.Ingeniería de características
Una vez que hemos explorado los modelos, un paso
crucial que a menudo tiene un impacto significativo en el rendimiento del modelo
es la ingeniería de características (Feature Engineering).
¿Qué es la Ingeniería de Características?
La ingeniería de características es el proceso de
seleccionar, transformar y crear nuevas características (variables de entrada) a
partir de los datos brutos, con el objetivo de mejorar el rendimiento de los
modelos de aprendizaje automático. Un buen conjunto de características puede
hacer que los modelos sean más precisos, más fáciles de interpretar y requieran
menos datos para entrenar.
¿Por Qué es Importante la Ingeniería de
Características?
- Mejora el Rendimiento del Modelo:
Las características bien diseñadas pueden revelar patrones ocultos en los
datos que los algoritmos pueden aprender más fácilmente.
- Simplifica los Modelos: Un
buen conjunto de características puede permitir el uso de modelos más
simples y eficientes.
- Mejora la Interpretabilidad:
Las características significativas y comprensibles pueden hacer que las
predicciones del modelo sean más fáciles de entender y justificar.
- Aborda Problemas Específicos del
Dominio: La ingeniería de características a menudo requiere un
conocimiento profundo del dominio del problema para crear características
relevantes.
- Maneja Datos Faltantes y Atípicos:
Las técnicas de ingeniería de características pueden incluir estrategias
para imputar valores faltantes o transformar valores atípicos de manera
informativa.
Técnicas Comunes de Ingeniería de
Características:
-
Manejo de Variables Categóricas:
- Codificación One-Hot (One-Hot
Encoding): Crea columnas binarias para cada categoría de la
variable. Útil para variables nominales (sin orden inherente).
- Codificación de Etiquetas
(Label Encoding): Asigna un entero único a cada categoría.
Adecuado para variables ordinales (con un orden inherente) o como paso
previo a otras codificaciones.
- Codificación Binaria (Binary
Encoding): Convierte cada categoría en un número binario y
luego crea una columna para cada bit. Puede ser más eficiente que
one-hot encoding para variables con muchas categorías.
- Codificación de Frecuencia
(Frequency Encoding): Reemplaza cada categoría con su
frecuencia en el dataset. Útil cuando la frecuencia de una categoría es
informativa.
- Codificación Basada en el
Objetivo (Target Encoding): Reemplaza cada categoría con la
media (para regresión) o la probabilidad (para clasificación) de la
variable objetivo para esa categoría. Puede ser poderoso pero corre el
riesgo de overfitting si no se aplica con cuidado (por ejemplo, con
validación cruzada).
-
Manejo de Variables Numéricas:
- Escalado:
- Normalización (Min-Max
Scaling): Escala los valores a un rango entre 0 y 1.
- Estandarización (Standard
Scaling): Escala los valores para que tengan una media de 0
y una desviación estándar de 1.
- Escalado Robusto (Robust
Scaling): Utiliza la mediana y el rango intercuartílico, lo
que lo hace menos sensible a los valores atípicos.
- Transformaciones:
- Transformación Logarítmica:
Útil para reducir la asimetría en distribuciones sesgadas.
- Transformación de Potencia
(Box-Cox, Yeo-Johnson): Familias de transformaciones para
hacer que los datos sean más gaussianos.
- Transformaciones
Recíprocas, Cuadradas, Cúbicas, etc.: Aplicar funciones
matemáticas a las características.
- Discretización (Binning):
Convertir variables numéricas en categorías (bins). Puede ayudar a
capturar relaciones no lineales.
- Creación de Términos de
Interacción: Combinar dos o más características para crear una
nueva que capture su interacción (por ejemplo, multiplicar la edad por
los ingresos).
- Características Polinomiales:
Crear nuevas características elevando las características existentes a
diferentes potencias (por ejemplo, si tienes una característica
puedes
crear X2, X3,
etc.).
- Extracción de Características de
Fechas y Horas: Extraer componentes como el día de la semana,
el mes, el año, la hora del día, si es fin de semana, etc.
-
Manejo de Datos de Texto:
- Bag of Words (BoW):
Representa el texto como la frecuencia de cada palabra en el documento.
- TF-IDF (Term Frequency-Inverse
Document Frequency): Pondera las palabras en función de su
frecuencia en un documento y su rareza en todo el corpus.
- Word Embeddings (Word2Vec,
GloVe, FastText): Representaciones vectoriales densas de
palabras que capturan su significado semántico.
- Extracción de Características
Sintácticas: Contar el número de sustantivos, verbos, etc.
- Análisis de Sentimiento:
Extraer una puntuación de sentimiento del texto.
-
Manejo de Datos Espaciales:
- Extracción de Coordenadas:
Latitud, longitud.
- Cálculo de Distancias:
Distancia a puntos de interés.
- Creación de Regiones o
Agrupaciones Espaciales.
-
Manejo de Datos de Series de Tiempo:
- Características de Retraso (Lag
Features): Utilizar valores pasados de la serie como
características.
- Características de Ventana
Móvil (Rolling Statistics): Calcular estadísticas (media,
mediana, desviación estándar) en ventanas de tiempo.
- Características de Tendencia y
Estacionalidad: Descomponer la serie de tiempo para extraer
componentes de tendencia y estacionalidad.
Proceso de Ingeniería de Características:
- Entender los Datos:
Analizar los tipos de variables, sus distribuciones, valores faltantes,
valores atípicos y relaciones con la variable objetivo.
- Brainstorming de Características:
Generar ideas para nuevas características basadas en el conocimiento del
dominio, la intuición y la exploración de datos.
- Implementar las Características:
Escribir código para crear las nuevas características y transformar las
existentes.
- Seleccionar las Mejores
Características: Evaluar el impacto de las nuevas características
en el rendimiento del modelo utilizando técnicas de selección de
características.
- Iterar: La ingeniería de
características es un proceso iterativo. Es posible que necesites volver a
los pasos anteriores varias veces para refinar tus características.
Herramientas de Python para la Ingeniería
de Características:
- Pandas: Fundamental para
manipular y crear nuevas columnas en DataFrames.
- NumPy: Para operaciones
numéricas eficientes en arrays.
- Scikit-learn: Proporciona
muchas herramientas para el escalado, la codificación y la creación de
características polinomiales.
- Feature-engine: Una
librería de Python diseñada específicamente para la ingeniería de
características.
- Librerías específicas para el
dominio: Por ejemplo, NLTK y SpaCy para procesamiento de texto,
GeoPandas para datos espaciales, etc.
La ingeniería de características es a menudo una
de las partes más importantes y que consume más tiempo en un proyecto de
aprendizaje automático, pero puede tener un impacto enorme en el éxito del
modelo. Requiere una combinación de conocimiento técnico y creatividad.