# Creación de atributos

La creación de atributos, ingeniería de atributos, extracción de atributos o descubrimiento de atributos es el proceso de utilizar el conocimiento del dominio para extraer atributos (rasgos, propiedades, atributos) de los datos brutos. La motivación es utilizar estos atributos adicionales para mejorar la calidad de los resultados de un proceso de aprendizaje automático, en comparación con el suministro de sólo los datos brutos al proceso de aprendizaje automático.

## Proceso

El proceso de ingeniería de atributos es:
* Lluvia de ideas o pruebas de atributos
* Decidir qué atributos crear
* Crear atributos
* Probar el impacto de los atributos identificados en la tarea
* Mejorar los atributos si es necesario
* Repetir

### Funciones típicas de ingeniería

La siguiente lista ofrece algunas formas típicas de diseñar funciones útiles:
* Transformaciones numéricas (como tomar fracciones o escalar)
* Codificador de categorías, como codificador de un punto u objetivo (para datos categóricos).
* Agrupación
* Agrupación de valores agregados
* Análisis de componentes principales (para datos numéricos)
* Construcción de atributos: construcción de nuevos parámetros "físicos", basados en el conocimiento, relevantes para el problema. Por ejemplo, en física, construcción de números adimensionales como el número de Reynolds en dinámica de fluidos, el número de Nusselt en transferencia de calor, el número de Arquímedes en sedimentación, construcción de primeras aproximaciones de la solución como las soluciones analíticas de resistencia de materiales en mecánica, entre otros.

## Relevancia

Los atributos varían en importancia. Incluso atributos relativamente insignificantes pueden contribuir a un modelo. La selección de atributos puede reducir el número de atributos para evitar que un modelo se vuelva demasiado específico para el conjunto de datos de formación (sobreajuste).

## Explosión

La explosión de atributos se produce cuando el número de atributos identificados crece de forma inadecuada. Las causas más comunes son:
* Plantillas de atributos : aplicación de plantillas de atributos en lugar de codificar atributos nuevos.
* Combinaciones de atributos: combinaciones que no pueden representarse mediante un sistema lineal.
La explosión de atributos puede limitarse mediante técnicas como la regularización, los métodos de kernel y la selección de atributos.

## Automatización

La automatización de la ingeniería de atributos es un tema de investigación que se remonta a la década de 1990. El software de aprendizaje automático que incorpora la ingeniería de atributos automatizada está disponible comercialmente desde 2016. La literatura académica relacionada puede dividirse en dos tipos:
* El aprendizaje de árboles de decisión multirrelacional (en inglés: multi-relational decision tree learning, MRDTL) utiliza un algoritmo supervisado que es similar a un árbol de decisión.
* Deep Feature Synthesis utiliza métodos más simples.

### Aprendizaje de árboles de decisión multirrelacional (MRDTL)

MRDTL genera atributos en forma de consultas SQL añadiendo sucesivamente cláusulas a las consultas. [Por ejemplo, el algoritmo puede empezar con
   SELECT COUNT(*) FROM ATOM t1 LEFT JOIN MOLECULE t2 ON t1.mol_id = t2.mol_id GROUP BY t1.mol_id
A continuación, la consulta puede refinarse sucesivamente añadiendo condiciones, como "WHERE t1.charge <= -0.392".
Sin embargo, la mayoría de los estudios MRDTL basan sus implementaciones en bases de datos relacionales, lo que da lugar a muchas operaciones redundantes. Estas redundancias pueden reducirse utilizando técnicas como la propagación de id de tupla. La eficiencia puede aumentarse utilizando actualizaciones incrementales, que eliminan las redundancias.

### Implementaciones de código abierto

Existen varias bibliotecas y herramientas de código abierto que automatizan la ingeniería de atributos en datos relacionales y series temporales:
* featuretools es una biblioteca de Python para transformar series temporales y datos relacionales en matrices de atributos para el aprendizaje automático.
* OneBM o One-Button Machine combina transformaciones de atributos y selección de atributos en datos relacionales con técnicas de selección de atributos.
   [OneBM] ayuda a los científicos de datos a reducir el tiempo de exploración de datos permitiéndoles probar y errar muchas ideas en poco tiempo. Por otro lado, permite a los no expertos, que no están familiarizados con la ciencia de datos, extraer rápidamente valor de sus datos con poco esfuerzo, tiempo y coste.
* getML community es una herramienta de código abierto para la ingeniería automatizada de atributos en series temporales y datos relacionales. Está implementada en C/C++ con una interfaz en Python. Se ha demostrado que es al menos 60 veces más rápida que tsflex, tsfresh, tsfel, featuretools o kats.
* tsfresh es una biblioteca de Python para la extracción de atributos de datos de series temporales. Evalúa la calidad de las atributos mediante pruebas de hipótesis.
* tsflex es una biblioteca Python de código abierto para la extracción de atributos a partir de datos de series temporales. A pesar de estar escrita al 100% en Python, ha demostrado ser más rápida y eficiente en memoria que tsfresh, seglearn o tsfel.
* seglearn es una extensión para datos multivariantes y secuenciales de series temporales de la biblioteca scikit-learn de Python.
* tsfel es un paquete de Python para la extracción de atributos de datos de series temporales.
* kats es un conjunto de herramientas de Python para analizar datos de series temporales.

### Síntesis profunda de atributos

El algoritmo de síntesis profunda de rasgos (en inglés: deep feature synthesis, DFS) venció a 615 de 906 equipos humanos en una competición.

## Almacenes de atributos

El almacén de atributos es donde se almacenan y organizan los atributos con el propósito explícito de que se utilicen para formar modelos (por parte de los científicos de datos) o para realizar predicciones (por parte de las aplicaciones que tienen un modelo formado). Se trata de una ubicación central en la que se pueden crear o actualizar grupos de atributos creados a partir de múltiples fuentes de datos diferentes, o crear y actualizar nuevos conjuntos de datos a partir de esos grupos de atributos para formar modelos o para su uso en aplicaciones que no desean calcular los atributos, sino simplemente recuperarlos cuando las necesitan para hacer predicciones.
Un almacén de atributos incluye la capacidad de almacenar el código utilizado para generar atributos, aplicar el código a los datos sin procesar y servir esos atributos a los modelos que lo soliciten. Entre las funciones útiles se incluyen el control de versiones y las políticas que rigen las circunstancias en las que se pueden utilizar las funciones.
Los almacenes de atributos pueden ser herramientas de software independientes o estar integrados en plataformas de aprendizaje automático.

## Alternativas

La ingeniería de atributos puede ser un proceso largo y propenso a errores, ya que requiere conocimientos especializados y a menudo implica ensayo y error. Los algoritmos de aprendizaje profundo pueden utilizarse para procesar un gran conjunto de datos en bruto sin tener que recurrir a la creación de atributos. Sin embargo, es importante tener en cuenta que los algoritmos de aprendizaje profundo siguen requiriendo un preprocesamiento y una limpieza minuciosos de los datos de entrada. Además, elegir la arquitectura, los hiperparámetros y el algoritmo de optimización adecuados para una red neuronal profunda puede ser un proceso difícil e iterativo.