Seguramente habrás escuchado el dicho "basura entra, basura sale". De hecho, este dicho es aplicable al entrenar modelos de aprendizaje automático. Si entrenamos modelos de aprendizaje automático utilizando datos irrelevantes, ni siquiera los mejores algoritmos de aprendizaje automático serán de gran ayuda. Por el contrario, el uso de funciones significativas bien diseñadas puede lograr un rendimiento superior incluso con un simple algoritmo de aprendizaje automático. Entonces, ¿cómo podemos crear estas características significativas que maximizarán el rendimiento de nuestro modelo? La respuesta es la ingeniería de características. Trabajar en ingeniería de características es especialmente importante cuando se trabaja con algoritmos tradicionales de aprendizaje automático, como regresión, árboles de decisión, máquinas de vectores de soporte y otros que requieren entradas numéricas. Sin embargo, crear estas entradas numéricas no se trata solo de habilidades con los datos. Es un proceso que exige creatividad y conocimiento del dominio y tiene tanto arte como ciencia.
En términos generales, podemos dividir la ingeniería de funciones en dos componentes: 1) crear nuevas funciones y 2) procesar estas funciones para que funcionen de manera óptima con el algoritmo de la máquina en consideración. En este artículo, analizaremos estos dos componentes de la ingeniería de características para conjuntos de datos transversales, estructurados y que no son PNL.
La recopilación de datos sin procesar puede resultar agotadora y, al final de esta tarea, es posible que estemos demasiado cansados para invertir más tiempo y energía en crear funciones adicionales. Pero aquí es donde debemos resistir la tentación de sumergirnos directamente en el entrenamiento modelo. ¡Te prometo que valdrá la pena! En este cruce, deberíamos hacer una pausa y preguntarnos: "Si tuviera que hacer las predicciones manualmente en función de mi conocimiento del dominio, ¿qué funciones me habrían ayudado a hacer un buen trabajo?" Hacer esta pregunta puede abrir posibilidades para crear nuevas características significativas que nuestro modelo podría haber pasado por alto de otro modo. Una vez que hayamos considerado de qué funciones adicionales podríamos beneficiarnos, podemos aprovechar las técnicas siguientes para crear nuevas funciones a partir de los datos sin procesar.
Como sugiere el nombre, esta técnica nos ayuda a combinar múltiples puntos de datos para crear una visión más holística. Normalmente aplicamos agregaciones en datos numéricos continuos utilizando funciones estándar como recuento, suma, promedio, mínimo, máximo, percentil, desviación estándar y coeficiente de variación. Cada función puede capturar diferentes elementos de información y la mejor función a utilizar depende del caso de uso específico. A menudo, podemos aplicar la agregación en un tiempo o ventana de evento particular que sea significativo en el contexto de ese problema.
Tomemos un ejemplo en el que queremos predecir si una determinada transacción con tarjeta de crédito es fraudulenta. Para este caso de uso, sin duda podemos usar funciones específicas de transacciones, pero además de esas funciones, también podemos beneficiarnos de la creación de funciones agregadas a nivel de cliente como:
Recuento de veces que el cliente ha sido víctima de fraude en los últimos cinco años: un cliente que ha sido víctima de fraude varias veces anteriormente puede tener más probabilidades de volver a ser víctima de fraude. Por lo tanto, el uso de esta vista agregada a nivel de cliente puede proporcionar señales de predicción adecuadas.
Mediana de los montos de las últimas cinco transacciones: a menudo, cuando una tarjeta de crédito se ve comprometida, los estafadores pueden intentar múltiples transacciones de bajo valor para probar la tarjeta. Ahora bien, una sola transacción de bajo valor es muy común y puede no ser un signo de fraude, pero si vemos muchas transacciones de este tipo en corta sucesión, puede indicar una tarjeta de crédito comprometida.
En muchos tipos de problemas, el cambio en un patrón establecido es una señal valiosa para la predicción o detección de anomalías. Las diferencias y proporciones son técnicas eficaces para representar cambios en características numéricas. Al igual que la agregación, también podemos aplicar estas técnicas durante un período de tiempo significativo en el contexto de ese problema.
Ejemplos:
Diferencia entre el porcentaje de nuevas transacciones comerciales en la última hora y el porcentaje de nuevas transacciones comerciales en los últimos 30 días: un alto porcentaje de nuevas transacciones comerciales en rápida sucesión podría indicar riesgo de fraude en sí mismo, pero cuando vemos que este comportamiento ha cambiado en comparación con el comportamiento histórico del cliente, se convierte en una señal aún más evidente.
Relación entre el recuento de transacciones del día actual y el recuento medio de transacciones diarias de los últimos 30 días: cuando una tarjeta de crédito se ve comprometida, es probable que tenga muchas transacciones en un corto período de tiempo, lo que puede no ajustarse al uso anterior de la tarjeta de crédito. Una proporción significativamente alta del recuento de transacciones del día actual con respecto a la mediana del recuento de transacciones diarias de los últimos 30 días puede indicar patrones de uso fraudulentos.
Podemos utilizar la técnica de cálculo de edad para convertir las características de fecha o marca de tiempo en características numéricas tomando la diferencia entre dos marcas de tiempo o fechas. También podemos utilizar esta técnica para convertir ciertas características no numéricas en características numéricas significativas si la tenencia asociada con los valores de las características puede ser una señal valiosa para la predicción.
Ejemplos:
El indicador o las características booleanas tienen valores binarios {1, 0} o {Verdadero, Falso}. Las características de los indicadores son muy comunes y se utilizan para representar varios tipos de información binaria. En algunos casos, es posible que ya tengamos dichas características binarias en forma numérica, mientras que en otros casos, es posible que tengan valores no numéricos. Para utilizar las funciones binarias no numéricas para el entrenamiento de modelos, todo lo que tenemos que hacer es asignarlas a valores numéricos.
Más allá de estas ocurrencias y usos comunes de las características de los indicadores, podemos aprovechar la codificación de indicadores como una herramienta para representar una comparación entre puntos de datos no numéricos. Este atributo lo hace particularmente poderoso ya que crea una forma de medir los cambios en características no numéricas.
Ejemplos:
Verificación fallida durante un evento de inicio de sesión reciente: un evento de inicio de sesión fallido reciente puede estar asociado con un mayor riesgo de transacciones fraudulentas. En este caso, los datos sin procesar pueden tener valores Sí o No para esta característica; todo lo que tenemos que hacer aquí es asignar estos valores a 1 o 0.
Cambio en la ubicación del país desde la última transacción: un cambio en la ubicación del país puede indicar una tarjeta de crédito comprometida. Aquí, la creación de una característica indicadora que represente un cambio en la característica no numérica 'ubicación del país' capturará la información de cambio de este país.
Esta técnica se puede aplicar si nuestros datos de características están en forma categórica, ya sea numérica o no numérica. La forma numérica-categórica se refiere a datos numéricos que contienen datos no continuos o que no son de medición, como códigos de región geográfica, ID de tienda y otros tipos de datos similares. Una técnica de codificación en caliente puede convertir dichas características en un conjunto de características indicadoras que podemos usar en el entrenamiento de modelos de aprendizaje automático. La aplicación de una codificación activa en una característica categórica creará una nueva característica binaria para cada categoría en esa variable categórica. Dado que la cantidad de funciones nuevas aumenta a medida que aumenta la cantidad de categorías, esta técnica es adecuada para funciones con una cantidad baja de categorías, especialmente si tenemos un conjunto de datos más pequeño. Una de las reglas generales estándar sugiere aplicar esta técnica si tenemos al menos diez registros por categoría.
Ejemplos:
Esta técnica se aplica al mismo tipo de funciones a las que aplicaríamos la codificación one-hot, pero tiene algunas ventajas y desventajas sobre la codificación one-hot. Cuando el número de categorías es alto (alta cardinalidad), el uso de codificación one-hot aumentará indeseablemente el número de características, lo que puede provocar un sobreajuste del modelo. La codificación de objetivos puede ser una técnica eficaz en tales casos, siempre que estemos trabajando en un problema de aprendizaje supervisado. Es una técnica que asigna el valor de cada categoría al valor esperado del objetivo para esa categoría. Si trabaja con un problema de regresión con un objetivo continuo, este cálculo asigna la categoría al valor objetivo medio para esa categoría. En el caso de un problema de clasificación con un objetivo binario, la codificación del objetivo asignará la categoría a la probabilidad de evento positivo de esa categoría. A diferencia de la codificación one-hot, esta técnica tiene la ventaja de no aumentar la cantidad de funciones. Una desventaja de esta técnica es que sólo se puede aplicar a problemas de aprendizaje supervisado. La aplicación de esta técnica también puede hacer que el modelo sea susceptible de sobreajuste, particularmente si el número de observaciones en algunas categorías es bajo.
Ejemplos:
Una vez que hayamos creado las nuevas funciones a partir de los datos sin procesar, el siguiente paso es procesarlas para lograr un rendimiento óptimo del modelo. Logramos esto a través del procesamiento de características como se analiza en la siguiente sección.
El procesamiento de características se refiere a una serie de pasos de procesamiento de datos que garantizan que los modelos de aprendizaje automático se ajusten a los datos según lo previsto. Si bien algunos de estos pasos de procesamiento son necesarios cuando se utilizan ciertos algoritmos de aprendizaje automático, otros garantizan que logremos una buena química de trabajo entre las funciones y el algoritmo de aprendizaje automático que se está considerando. En esta sección, analicemos algunos pasos de procesamiento de funciones comunes y por qué los necesitamos.
Varios algoritmos de aprendizaje automático, especialmente los paramétricos, como los modelos de regresión, se ven gravemente afectados por los valores atípicos. Estos algoritmos de aprendizaje automático intentan adaptarse a los valores atípicos, lo que afecta gravemente a los parámetros del modelo y compromete el rendimiento general. Para tratar los valores atípicos, primero debemos identificarlos. Podemos detectar valores atípicos para una característica específica aplicando ciertas reglas generales, como tener un valor absoluto mayor que la media más tres desviaciones estándar o un valor fuera del valor del bigote más cercano (valor del cuartil más cercano más 1,5 veces el valor del rango intercuartil). Una vez que hayamos identificado los valores atípicos en una característica específica, podemos utilizar algunas de las técnicas siguientes para tratar los valores atípicos:
Tenga en cuenta que existen técnicas para detectar observaciones que son valores atípicos multivariados (valores atípicos con respecto a múltiples características), pero son más complejas y generalmente no agregan mucho valor en términos de entrenamiento de modelos de aprendizaje automático. Tenga en cuenta también que los valores atípicos no son una preocupación cuando se trabaja con la mayoría de los modelos de aprendizaje automático no paramétrico, como máquinas de vectores de soporte y algoritmos basados en árboles, como árboles de decisión, bosques aleatorios y XGBoost.
Los datos faltantes son muy comunes en conjuntos de datos del mundo real. La mayoría de los algoritmos de aprendizaje automático tradicionales, excepto algunos como XGBoost, no permiten valores faltantes en los conjuntos de datos de entrenamiento. Por lo tanto, corregir los valores faltantes es una de las tareas rutinarias en el modelado de aprendizaje automático. Existen varias técnicas para tratar los valores perdidos; sin embargo, antes de implementar cualquier técnica, es importante comprender la causa de los datos faltantes o, al menos, saber si los datos faltan al azar. Si los datos no faltan al azar, lo que significa que es más probable que a ciertos subgrupos les falten datos, imputar valores para ellos puede resultar difícil, especialmente si hay pocos o ningún dato disponible. Si faltan datos al azar, podemos utilizar algunas de las técnicas de tratamiento comunes que se describen a continuación. Todos tienen pros y contras, y depende de nosotros decidir qué método se adapta mejor a nuestro caso de uso.
A menudo, las funciones que utilizamos en los modelos de aprendizaje automático tienen diferentes rangos. Si los usamos sin escalar, las características con valores absolutos grandes dominarán el resultado de la predicción. En cambio, para brindar a cada característica una oportunidad justa de contribuir al resultado de la predicción, debemos poner todas las características en la misma escala. Las dos técnicas de escalado más comunes son:
Tenga en cuenta que los algoritmos basados en árboles, como los árboles de decisión, el bosque aleatorio, XGBoost y otros, pueden funcionar con datos sin escalar y no necesitan escalar cuando se utilizan estos algoritmos.
Hoy en día, tenemos una enorme cantidad de datos y podemos crear una amplia colección de funciones para entrenar nuestros modelos. Para la mayoría de los algoritmos, tener más funciones es bueno ya que proporciona más opciones para mejorar el rendimiento del modelo. Sin embargo, esto no es cierto para todos los algoritmos. Los algoritmos basados en métricas de distancia sufren la maldición de la dimensionalidad: a medida que el número de características aumenta sustancialmente, el valor de la distancia entre las dos observaciones deja de tener sentido. Por lo tanto, para utilizar algoritmos que se basan en métricas de distancia, debemos asegurarnos de no utilizar una gran cantidad de funciones. Si nuestro conjunto de datos tiene una gran cantidad de características y no sabemos cuáles conservar y cuáles descartar, podemos utilizar técnicas como el análisis de componentes principales (PCA). PCA transforma el conjunto de funciones antiguas en un conjunto de funciones nuevas. Crea nuevas funciones de modo que la que tiene los valores propios más altos captura la mayor parte de la información de las funciones antiguas. Luego podemos conservar solo las principales funciones nuevas y descartar las restantes.
Se pueden utilizar otras técnicas estadísticas, como el análisis de asociación y los algoritmos de selección de características, en problemas de aprendizaje supervisado para reducir la cantidad de características. Sin embargo, generalmente no capturan el mismo nivel de información que PCA con la misma cantidad de funciones.
Este paso es una excepción porque solo se aplica al objetivo y no a las funciones. Además, la mayoría de los algoritmos de aprendizaje automático no tienen restricciones en la distribución del objetivo, pero algunos, como la regresión lineal, requieren que el objetivo se distribuya normalmente. La regresión lineal supone que los valores de error son simétricos y se concentran alrededor de cero para todos los puntos de datos (al igual que la forma de la distribución normal), y una variable objetivo distribuida normalmente garantiza que se cumpla este supuesto. Podemos entender la distribución de nuestro objetivo trazando un histograma. Las pruebas estadísticas como la prueba de Shapiro-Wilk nos informan sobre la normalidad al probar esta hipótesis. En caso de que nuestro objetivo no tenga una distribución normal, podemos probar varias transformaciones, como la transformación logarítmica, la transformación cuadrada, la transformación de raíz cuadrada y otras, para comprobar qué transformaciones hacen que la distribución objetivo sea normal. También hay una transformación Box-Cox que prueba múltiples valores de parámetros y podemos elegir el que mejor transforme la distribución de nuestro objetivo a normal.
Nota: Si bien podemos implementar los pasos de procesamiento de funciones en cualquier orden, debemos considerar detenidamente la secuencia de su aplicación. Por ejemplo, el tratamiento de valores faltantes mediante sustitución de valores medios se puede implementar antes o después de la detección de valores atípicos. Sin embargo, el valor medio utilizado para la sustitución puede diferir dependiendo de si tratamos los valores faltantes antes o después del tratamiento de los valores atípicos. La secuencia de procesamiento de funciones descrita en este artículo trata los problemas en el orden del impacto que pueden tener en los pasos de procesamiento sucesivos. Por lo tanto, seguir esta secuencia debería ser generalmente eficaz para abordar la mayoría de los problemas.
Como se mencionó en la introducción, la ingeniería de características es una dimensión del aprendizaje automático que nos permite controlar el rendimiento del modelo en un grado excepcional. Para aprovechar todo el potencial de la ingeniería de funciones, en este artículo aprendimos varias técnicas para crear nuevas funciones y procesarlas para que funcionen de manera óptima con modelos de aprendizaje automático. Independientemente de los principios y técnicas de ingeniería de características de este artículo que elija utilizar, el mensaje importante aquí es comprender que el aprendizaje automático no se trata solo de pedirle al algoritmo que descubra los patrones. Se trata de que permitamos que el algoritmo haga su trabajo de manera efectiva al proporcionar el tipo de datos que necesita.