TÉCNICAS DE ESCALADO

El escalado (también llamado normalización) es un paso de preprocesamiento esencial en el trabajo con modelos de machine learning que se realiza con el objetivo de ajustar las escalas de los atributos (variables) de tal manera que varíen todas en el mismo rango.

TÉCNICAS DE ESCALADO

Los algoritmos de machine learning predictivo tienden a darle más importancia a aquellos atributos que varían en un rango más amplio, anque no sean los más informativos o decisivos a la hora de poner en marcha su capacidad predictiva.

Escalar los datos previo al entrenamiento del modelo puede ayudarnos a evitar este problema, conduciendo así a mejoras significativas en la precisión de sus predicciones en relación a utilizar datos no escalados.

ESCALADO DE DATOS

Las técnicas más comunes de escalado incluyen dos componentes: un término traslacional (T) y un factor de escalado (S):

\[x'_i = \frac{x_i - T}{S}\] El término traslacional opera moviendo los datos a lo largo del eje \(X\), mientras que el factor de escalado hace que los datos estén más concentrados o más dispersos horizontalmente.

ESCALADO DE DATOS

Vamos a analizar el efecto de las técnicas de escalado más comunes sobre tres conjuntos de datos de dos variables cuantitativas continuas \(X_1\) y \(X_2\):

Los mismos reflejan diferentes distribuciones para las variables (normal, uniforme), así como presencia/ausencia de outliers.

ESCALADO DE DATOS1

Podemos simular estos conjuntos en Python utilizando el siguiente código, basado en el uso de las librerías random, numpy y pandas:

random.seed(2023)
datos = pd.DataFrame({'x1_ej1' : np.random.normal(10, 4, 1000), 'x2_ej1' : np.random.normal(-10, 4, 1000), 'x1_ej2' : np.random.normal(10, 4, 1000), 'x2_ej2' : np.concatenate([np.random.normal(50, 4, 975), np.random.normal(100, 4, 25)]), 'x1_ej3' : np.random.normal(10, 4, 1000), 'x2_ej3' : np.random.uniform(-3, 5, 1000)})

ESCALADO ESTÁNDAR (Z-SCORE)

A cada valor de la variable se le resta la media (\(\bar{x}\)) y se divide el resultado por la desviación estándar (\(s_x\)), resultando en una distribución con media cero y variancia unitaria:

\[x'_i = \frac{x_i - \bar{x}}{s_x}\]

ESCALADO ESTÁNDAR (Z-SCORE)

Una ventaja de esta técnica es que transforma tanto valores positivos como negativos a distribuciones similares.

Sin embargo, en presencia de outliers, la distribución de los valores no atípicos resulta demasiado concentrada en relación a la de una variable sin outliers. En este caso, los resultados del escalado pueden no ser apropiados.

ESCALADO ESTÁNDAR (Z-SCORE)

El Escalado Pareto y el Variable Stability (Vast) scaling son variaciones a esta técnica que alteran el factor de escalado, haciendo que la distribución resultante sea más dispersa. De esta manera, reducen la importancia de los outliers, pero no son completamente “inmunes” a ellos.

Escalado Pareto: \(x'_i = \frac{x_i - \bar{x}}{\sqrt{n}}\)

Variable Stability (Vast) scaling: \(x'_i = \frac{x_i - \bar{x}}{s_x}\frac{\bar{x}}{s_x}\)

ESCALADO MIN-MAX

Este enfoque altera la escala de la variable y desplaza sus valores a lo largo del eje \(X\), con el resultado de que el atributo transformado se encuentra dentro del rango [0,1].

\[x'_i = \frac{x_i - x_{min}}{x_{max} - x_{min}}\]

ESCALADO MIN-MAX

En esta técnica, el factor de escalado es el rango, y el término traslacional es el valor mínimo de la variable. De esta forma, los datos transformados pasan a ubicarse en el rango [0,1].

Para aquellos atributos que no presentan outliers la técnica tiene un efecto similar al del Z-Score, aunque en este último caso la distribución resultante se encuentra en un rango menos acotado.

Sin embargo, cuando los datos presentan outliers, la técnica falla en ecualizar tanto las medias como las variancias de las distribuciones, lo que la hace inadecuada en una pipeline de machine learning.

GENERALIZACIÓN DEL ESCALADO MIN-MAX

El escalador min-max puede ser definido a través de una expresión matemática más general, de manera de permitir la definición del rango resultante como [a,b], en lugar de [0,1]:

\[x'_i = a + \frac{(x_i - x_{min}) (b - a)}{x_{max} - x_{min}}\]

ESCALADO MÁXIMO ABSOLUTO

Esta técnica modifica la escala de un atributo dividiendo cada observación por el máximo en valor absoluto:

\[x'_i = \frac{x_i}{max(|{x}|)}\]

ESCALADO MÁXIMO ABSOLUTO

Como se observa, esta técnica es sensible a los outliers, dando como resultado distribuciones mucho más compactas que en ausencia de valores atípicos.

Por otra parte, dado que no incluye un término traslacional, no es capaz de ecualizar las medias de los atributos.

¿Y LOS OUTLIERS?

Las tres técnicas de escalado que mencionamos hasta el momento son muy sensibles a la presencia de outliers porque todas dependen de medidas resumen que suelen estar muy afectadas por la existencia de valores atípicos en los datos con los que trabajamos.

¿Y si hacemos algunas modificaciones sobre alguna de ellas para lograr un escalado más robusto en estas situaciones?

ESCALADO ROBUSTO

Esta técnica busca mitigar los efectos indeseados de los outliers utilizando como término traslacional a la mediana (\(Q_2\)) y escalando los datos de acuerdo al rango intercuartil (RI):

\[x_i' = \frac{x_i - Q_2(x)}{Q_3(x) - Q_1(x)}\]

ESCALADO ROBUSTO

Esta técnica es efectiva para ecualizar las variancias entre los conjuntos de datos para diferentes atributos o variables, aún cuando haya uno que presenta outliers.

REALIZAR OPERACIONES DE SCALING

En la práctica, podemos implementar estas técnicas de escalado de diversas maneras:

  • “A mano”, es decir, creando una función que aplique la operación matemática correspondiente a cada una de las columnas del DataFrame empleando métodos de Pandas.

  • O utilizando elementos de la biblioteca Scikit-learn.

REALIZAR OPERACIONES DE SCALING

El flujo de trabajo utilizando el enfoque de Scikit-learn implica:

  • Importar el scaler desde el módulo sklearn.preprocessing, según el caso: StandardScaler, MinMaxScaler, MaxAbsScaler o RobustScaler.

  • Crear el objeto correspondiente (por ejemplo, StandardScaler()), el cual almacena las instrucciones para escalar los datos según el método elegido.

  • Aplicar el escalado a los datos utilizando fit_transform().

SELECCIONAR EL ESCALADO ÓPTIMO

Como vimos, hay varias alternativas de escalado que pueden ser aplicadas a un dataset, y la selección de la estrategia a utilizar es una decisión metodológica importante en el curso de un análisis de datos.

Hay estudios que muestran que elegir una técnica no muy adecuada para los datos con los que contamos puede ser más perjudicial sobre la performance predictiva del modelo que no haber escalado los datos.

TRANSFORMACIÓN LOGARÍTMICA

La transformación logarítmica es una herramienta poderosa para el trabajo con variables cuantitativas con valores mayores a cero que tienen distribuciones sesgadas (heavy-tailed).

Comprime la cola superior de la distribución, haciéndola más corta, y expande la región en la que se encuentra el resto de los datos.

TRANSFORMACIÓN LOGARÍTMICA

La transformación logarítmica puede aplicarse en diversas situaciones, por ejemplo:

  • Mejorar visualizaciones: al comprimir el rango en el que se encuentran los datos, ayuda a mejorar visualizaciones de variables cuyas observaciones se encuentran distribuidas en un rango de varios órdenes de magnitud.

  • Disminuir el sesgo: en ciertos casos, la transformación logarítmica ayuda a lograr una distribución más simétrica de los datos (importante en el análisis estadístico/modelado).

  • Linealizar relaciones entre variables.

TRANSFORMACIÓN LOGARÍTMICA - Ejemplo

Se cuenta con información acerca de alrededor de 40000 artículos y se quiere generar un modelo para predecir popularidad en términos del número de veces que se comparte en redes sociales.

Se propone utilizar como variable predictora el número de palabras en el artículo.

TRANSFORMACIÓN LOGARÍTMICA - Ejemplo1

La distribución luce mucho más simétrica luego de la transformación logarítmica (dejando de lado el grupo de artículos “sin palabras” 🧐).