Datos numéricos: Normalización

Después de examinar tus datos con técnicas estadísticas y de visualización, debes transformarlos de manera que ayuden a que tu modelo se entrene de manera más eficaz. El objetivo de la normalización es transformar las características para que estén en una escala similar. Por ejemplo, considera las siguientes dos funciones:

  • El atributo X abarca el rango de 154 a 24,917,482.
  • El atributo Y abarca el rango de 5 a 22.

Estas dos funciones abarcan rangos muy diferentes. La normalización podría manipular X y Y para que abarquen un rango similar, tal vez de 0 a 1.

La normalización proporciona los siguientes beneficios:

  • Ayuda a que los modelos convergen más rápido durante el entrenamiento. Cuando diferentes atributos tienen diferentes rangos, el descenso por gradiente puede “rebotar” y ralentizar la convergencia. Dicho esto, los optimizadores más avanzados, como Adagrad y Adam, protegen contra este problema cambiando la tasa de aprendizaje efectiva con el tiempo.
  • Ayuda a los modelos a inferir mejores predicciones. Cuando diferentes atributos tienen distintos rangos, el modelo resultante puede hacer predicciones un poco menos útiles.
  • Ayuda a evitar la “trampa de NaN” cuando los valores de los atributos son muy altos. NaN es la sigla en inglés de not a number. Cuando un valor de un modelo supera el límite de precisión de punto flotante, el sistema establece el valor en NaN en lugar de un número. Cuando un número del modelo se convierte en NaN, otros números del modelo también se convierten en NaN.
  • Ayuda al modelo a aprender los pesos adecuados para cada atributo. Sin el ajuste de atributos, el modelo les presta demasiada atención a los atributos con rangos amplios y no les presta suficiente atención a los atributos con rangos estrechos.

Recomendamos normalizar los atributos numéricos que abarcan rangos claramente diferentes (por ejemplo, edad e ingresos). También recomendamos que se normalice un solo atributo numérico que cubra un rango amplio, como city population..

Ten en cuenta las siguientes dos funciones:

  • El valor más bajo de la función A es -0.5 y el más alto es +0.5.
  • El valor más bajo de la función B es -5.0 y el más alto es +5.0.

Los componentes A y B tienen intervalos relativamente estrechos. Sin embargo, el intervalo de la función B es 10 veces más amplio que el de la función A. Por lo tanto:

  • Al comienzo del entrenamiento, el modelo supone que el atributo B es diez veces más “importante” que el atributo A.
  • El entrenamiento tardará más de lo debido.
  • Es posible que el modelo resultante no sea el óptimo.

El daño general por no realizar la normalización será relativamente pequeño. Sin embargo, te recomendamos que normalices las funciones A y B en la misma escala, quizás de -1.0 a +1.0.

Ahora, considera dos atributos con una mayor disparidad de rangos:

  • El valor más bajo del elemento C es -1 y el más alto es +1.
  • El valor más bajo del atributo D es +5,000 y el más alto, +1,000,000,000.

Si no normalizas los atributos C y D, es probable que tu modelo no sea óptimo. Además, el entrenamiento tardará mucho más en converger o incluso no convergerá por completo.

En esta sección, se describen tres métodos de normalización populares:

  • escalamiento lineal
  • Escalamiento de la puntuación Z
  • escalamiento logarítmico

En esta sección, también se aborda el recorte. Aunque no es una técnica de normalización real, el recorte controla los atributos numéricos ingobernables en rangos que producen mejores modelos.

Escalamiento lineal

El escalamiento lineal (que se suele abreviar como ajuste) consiste en convertir los valores de punto flotante de su rango natural en un rango estándar (por lo general, de 0 a 1 o de -1 a +1).

El escalamiento lineal es una buena opción cuando se cumplen todas las siguientes condiciones:

  • Los límites inferior y superior de tus datos no cambian mucho con el tiempo.
  • La función contiene pocos valores atípicos o no tiene ninguno, y esos valores no son extremos.
  • El atributo se distribuye de forma aproximadamente uniforme en su rango. Es decir, un histograma mostraría barras aproximadamente iguales para la mayoría de los valores.

Supongamos que el age humano es un atributo. El escalamiento lineal es una buena técnica de normalización para age por los siguientes motivos:

  • Los límites inferior y superior aproximados son de 0 a 100.
  • age contiene un porcentaje relativamente pequeño de valores atípicos. Solo el 0.3% de la población tiene más de 100 años.
  • Aunque ciertas edades están algo mejor representadas que otras, un conjunto de datos grande debe contener ejemplos suficientes de todas las edades.

Ejercicio: Comprueba tus conocimientos

Supongamos que tu modelo tiene un atributo llamado net_worth que contiene el valor neto de diferentes personas. ¿El escalamiento lineal sería una buena técnica de normalización para net_worth? ¿Por qué?

Escalamiento de la puntuación Z

Una puntuación Z es la cantidad de desviaciones estándar que tiene un valor respecto de la media. Por ejemplo, un valor que es 2 desviaciones estándar mayores que la media tiene una puntuación Z de +2.0. Un valor que es 1.5 desviaciones estándar menos que la media tiene una puntuación Z de -1.5.

Representar un atributo con escala de puntuación Z significa almacenar la puntuación Z de ese atributo en el vector de atributos. Por ejemplo, en la siguiente figura, se muestran dos histogramas:

  • A la izquierda, una distribución normal clásica.
  • A la derecha, la misma distribución normalizada por el escalamiento de puntuación z.
Figura 4: Dos histogramas: ambos muestran distribuciones normales con la misma distribución. El primer histograma, que contiene datos sin procesar, tiene una media de 200 y una desviación estándar de 30. El segundo histograma, que contiene una versión de la puntuación Z de la primera distribución, tiene una media de 0 y una desviación estándar de 1.
Figura 4: Datos sin procesar (izquierda) frente a puntuación Z (derecha) para una distribución normal.

El escalamiento de la puntuación Z también es una buena opción para datos como los que se muestran en la siguiente figura, que solo tiene una distribución vagamente normal.

Figura 5: Dos histogramas de forma idéntica, cada uno de los cuales muestra un ascenso empinado hasta una meseta y, luego, un descenso relativamente rápido seguido de un deterioro gradual. Un histograma ilustra la distribución de los datos sin procesar, y el otro ilustra la distribución de los datos sin procesar cuando se normalizan mediante la escala de puntuación Z.
            Los valores del eje X de los dos histogramas son muy diferentes.
            El histograma de datos sin procesar abarca el dominio de 0 a 29,000, mientras que el histograma ajustado a la puntuación Z varía de -1 a alrededor de +4.8.
Figura 5: Datos sin procesar (izquierda) en comparación con el escalamiento de la puntuación Z (derecha) para una distribución normal no clásica.

La puntuación z es una buena opción cuando los datos siguen una distribución normal o una distribución similar a una normal.

Ten en cuenta que algunas distribuciones pueden ser normales en la mayor parte de su rango, pero aún contienen valores extremos. Por ejemplo, casi todos los puntos de una función net_worth podrían encajar perfectamente en 3 desviaciones estándar, pero algunos ejemplos de esta función podrían estar a cientos de desviaciones estándar de la media. En estas situaciones, puedes combinar el escalamiento de la puntuación Z con otra forma de normalización (por lo general, recorte) para controlar esta situación.

Ejercicio: Comprueba tu comprensión

Supongamos que tu modelo se entrena en un atributo llamado height que contiene las alturas de diez millones de mujeres adultas. ¿El escalamiento de puntuación z sería una buena técnica de normalización para height? ¿Por qué?

Escalamiento logarítmico

El escalamiento logarítmico calcula el logaritmo del valor sin procesar. En teoría, el logaritmo podría ser cualquier base. En la práctica, la escala de registro suele calcular el logaritmo natural (ln).

El escalamiento logarítmico es útil cuando los datos se ajustan a una distribución de ley de poder. En términos generales, una distribución de ley de potencia se ve de la siguiente manera:

  • Los valores bajos de X tienen valores muy altos de Y.
  • A medida que aumentan los valores de X, los valores de Y disminuyen con rapidez. Por lo tanto, los valores altos de X tienen valores muy bajos de Y.

Las clasificaciones de películas son un buen ejemplo de una distribución de ley de potencia. En la siguiente figura, observa lo siguiente:

  • Algunas películas tienen muchas calificaciones de los usuarios. (Los valores bajos de X tienen valores altos de Y).
  • La mayoría de las películas tienen muy pocas calificaciones de los usuarios. (Los valores altos de X tienen valores bajos de Y).

El escalamiento logarítmico cambia la distribución, lo que ayuda a entrenar un modelo que realizará mejores predicciones.

Figura 6: Dos gráficos que comparan los datos sin procesar con el registro de los datos sin procesar.
            El gráfico de datos sin procesar muestra muchas calificaciones de los usuarios en la parte superior, seguidas de una cola larga. El gráfico de registro tiene una distribución más uniforme.
Figura 6. Comparación de una distribución sin procesar con su registro

Como segundo ejemplo, las ventas de libros se ajustan a una distribución de ley de potencia porque:

  • La mayoría de los libros publicados venden una pequeña cantidad de copias, tal vez uno o doscientos.
  • Algunos libros venden una cantidad moderada de copias, por miles.
  • Solo unos pocos más vendidos venden más de un millón de copias.

Supongamos que estás entrenando un modelo lineal para encontrar la relación, por ejemplo, entre las portadas de los libros y las ventas de estos. Un entrenamiento de modelos lineales con valores sin procesar tendría que encontrar algo sobre las portadas de libros que venden un millón de copias que sean 10,000 más poderosas que las que venden solo 100 copias. Sin embargo, el registro de escalamiento de todas las cifras de ventas hace que la tarea sea mucho más factible. Por ejemplo, el logaritmo de 100 es el siguiente:

  ~4.6 = ln(100)

mientras que el registro de 1,000,000 es:

  ~13.8 = ln(1,000,000)

Entonces, el logaritmo de 1,000,000 es solo alrededor de tres veces más grande que el logaritmo de 100. Es probable que podrías imaginar que la portada de un libro más vendido es tres veces más poderosa (de alguna manera) que una diminuta que se vende.

Recorte

El recorte es una técnica para minimizar la influencia de los valores atípicos extremos. En resumen, el recorte suele limitar (reducir) el valor de los valores extremos a un valor máximo específico. El recorte es una idea extraña y, sin embargo, puede ser muy eficaz.

Por ejemplo, imagina un conjunto de datos que contiene un atributo llamado roomsPerPerson, que representa la cantidad de habitaciones (cantidad total de habitaciones dividida por la cantidad de ocupantes) de varias casas. En el siguiente gráfico, se muestra que más del 99% de los valores de la función se ajustan a una distribución normal (aproximadamente, una media de 1.8 y una desviación estándar de 0.7). Sin embargo, el atributo contiene algunos valores atípicos, algunos de ellos extremos:

Figura 7: Un gráfico de roomsPerPerson en el que casi todos los valores están agrupados entre 0 y 4, pero hay una cola muy larga que se extiende hasta 17 habitaciones por persona
Figura 7: Es principalmente normal, pero no del todo.

¿Cómo puedes minimizar la influencia de esos valores atípicos extremos? Bueno, el histograma no es una distribución uniforme, una distribución normal ni una distribución de ley de potencia. ¿Qué sucede si solo limitas o recortas el valor máximo de roomsPerPerson a un valor arbitrario, como 4.0?

Un gráfico de roomsPerPerson en el que todos los valores se encuentran entre 0 y 4.0. El gráfico tiene forma de campana, pero hay una colina anormal en el valor 4.0
Figura 8: Recorte de los valores del atributo a 4.0.

Recortar el valor de la función en 4.0 no significa que tu modelo omita todos los valores superiores a 4.0. En cambio, significa que todos los valores que eran mayores que 4.0 ahora se convierten en 4.0. Esto explica la colina peculiar en 4.0. A pesar de esa colina, el conjunto de atributos ajustado ahora es más útil que los datos originales.

Espera un momento. ¿Realmente puedes reducir cada valor de valor atípico a un umbral superior arbitrario? Sí, cuando entrenas un modelo.

También puedes recortar valores después de aplicar otras formas de normalización. Por ejemplo, supongamos que usas el ajuste de escala de puntuación Z, pero algunos valores atípicos tienen valores absolutos muy superiores a 3. En este caso, puedes hacer lo siguiente:

  • Recortar las puntuaciones Z superiores a 3 para que sean exactamente 3
  • Recortar las puntuaciones Z inferiores a -3 para que sean exactamente -3

El recorte evita que el modelo indexe en exceso los datos sin importancia. Sin embargo, algunos valores atípicos son importantes, por lo que debes recortar los valores con cuidado.

Resumen de las técnicas de normalización

Técnica de normalizaciónFormulaCuándo debe utilizarse
Escalamiento lineal $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ Cuando el atributo se distribuye de manera uniforme en un rango fijo.
Escalamiento de la puntuación Z $$ x' = \frac{x - μ}{σ}$$ Cuando la distribución de atributos no contiene valores atípicos extremos.
Escalamiento logarítmico $$ x' = log(x)$$ Cuando el atributo cumple con la ley de potencia.
Recorte Si $x > max$, establece $x' = max$
Si $x < min$, establece $x' = min$
Cuando el atributo contiene valores extremos.

Ejercicio: Pon a prueba tus conocimientos

¿Qué técnica sería la más adecuada para normalizar una función con la siguiente distribución?

Un histograma que muestra un clúster de datos con valores en el rango de 0 a 200,000. La cantidad de datos aumenta gradualmente en el rango de 0 a 100,000 y, luego, disminuye gradualmente de 100,000 a 200,000.

Escalamiento de la puntuación Z
Los datos suelen cumplir con una distribución normal, por lo que la escala de la puntuación Z los forzará al rango de -3 a +3.
Escalamiento lineal
Revisa los análisis de las técnicas de normalización en esta página y vuelve a intentarlo.
Escalamiento logarítmico
Revisa los análisis de las técnicas de normalización en esta página y vuelve a intentarlo.
Recorte
Revisa los análisis de las técnicas de normalización en esta página y vuelve a intentarlo.

Supongamos que estás desarrollando un modelo que predice la productividad de un centro de datos según la temperatura medida en su interior. Casi todos los valores de temperature de tu conjunto de datos están entre 15 y 30 (Celsius), con las siguientes excepciones:

  • Una o dos veces al año, en días extremadamente calurosos, se registran algunos valores entre 31 y 45 en temperature.
  • Cada 1,000 puntos en temperature se establece en 1,000 en lugar de la temperatura real.

¿Cuál sería una técnica de normalización razonable para temperature?

Recortar los valores extremos entre 31 y 45, pero eliminar los extremos con un valor de 1,000

Los valores de 1,000 son errores y se deben borrar en lugar de recortarse.

Los valores entre 31 y 45 son datos legítimos. Es probable que sea una buena idea recortar estos valores, siempre que el conjunto de datos no contenga suficientes ejemplos en este rango de temperatura para entrenar al modelo y que realice buenas predicciones. Sin embargo, durante la inferencia, ten en cuenta que el modelo recortado haría la misma predicción para una temperatura de 45 que para una de 35.

Recortar todos los valores atípicos
Revisa los análisis de las técnicas de normalización en esta página y vuelve a intentarlo.
Borra todos los valores atípicos
Revisa los análisis de las técnicas de normalización en esta página y vuelve a intentarlo.
Borra los valores atípicos entre 31 y 45, pero recorta los atípicos con un valor de 1,000.
Revisa los análisis de las técnicas de normalización en esta página y vuelve a intentarlo.