Normalización y estandarización de datos para modelos predictivos

Clase 7 de 20Curso de Fundamentos de Machine Learning

Resumen

Para asegurar predicciones precisas en modelos de aprendizaje automático, es clave nivelar la escala de las variables. Cuando los datos presentan rangos muy diversos, las variables con números mayores pueden afectar injustamente los resultados. Aquí aprenderemos cómo corregir esto con dos técnicas fundamentales: Min-Max Scaling para normalización y Standard Scaler para estandarización.

¿Por qué es necesario escalar los datos antes de entrenar modelos?

Los modelos de aprendizaje automático pueden confundirse cuando las variables manejan escalas muy distintas. Por ejemplo, una variable como tiros al arco (valores entre 0 y 15) podría parecerle menos relevante al modelo que la posesión (del 0 al 100), simplemente por tener números más pequeños. Esto no es realista, ya que ambas podrían tener igual importancia.

¿Qué ocurre al no escalar correctamente?

Cuando usamos datos sin escalar:

  • El modelo asigna incorrectamente mayor importancia a magnitudes mayores.
  • Se generan sesgos en las predicciones.
  • Puede afectar negativamente la precisión del modelo.

Al escalar los datos, logramos una medida justa que permite al modelo aprender con mayor precisión.

¿Qué diferencia hay entre Min-Max Scaling y Standard Scaler?

Existen dos métodos claves para escalar tus datos, cada uno ideal para ciertas circunstancias:

¿Cuándo usar Min-Max Scaling?

El Min-Max Scaling es ideal cuando tus datos no siguen una distribución normal. Este método transforma cualquier valor numérico a un rango cerrado entre 0 y 1. Por ejemplo, si un futbolista tiene 12 tiros al arco y el máximo registrado es 15, al aplicar Min-Max Scaling obtendremos:

  • Resultado escalado: 12/15 = 0,8.

Este proceso se realiza usando la herramienta MinMaxScaler de las bibliotecas de procesamiento de datos.

¿En qué casos se aplica Standard Scaler?

El Standard Scaler, por otro lado, es más apropiado cuando deseas preservar la distribución original de los datos. Este método centra la información alrededor de cero, con desviación estándar de uno. Es especialmente útil con algoritmos que necesitan datos centrados como regresión lineal o PCA. Los resultados obtenidos tendrán una distribución estandarizada, eliminando cualquier sesgo por magnitud original.

¿Cómo aplicar estas técnicas paso a paso?

Veamos brevemente cómo aplicar ambos métodos utilizando herramientas comunes en Python como pandas para datos y las clases MinMaxScaler y StandardScaler para escalar.

Aplicando Min-Max Scaling a tus datos

  • Primero, crea una instancia de MinMaxScaler.
  • Utiliza la función fit_transform para calcular el mínimo y máximo de cada columna y aplicar la escala a la vez.
  • Guarda estos datos normalizados en columnas nuevas:
from sklearn.preprocessing import MinMaxScaler
scaler_norm = MinMaxScaler()
datos_normalizados = scaler_norm.fit_transform(datos[['tiros_al_arco_local', 'tiros_al_arco_visitante']])
datos[['tiros_al_arco_local_norm', 'tiros_al_arco_visitante_norm']] = datos_normalizados

Aplicando Standard Scaler correctamente

Para estandarizar:

  • Genera una instancia de StandardScaler.
  • Nuevamente, usa fit_transform para calcular media y desviación estándar y aplicar la transformación.
  • Guarda los resultados en nuevas columnas:
from sklearn.preprocessing import StandardScaler
scaler_std = StandardScaler()
datos_estandarizados = scaler_std.fit_transform(datos[['posesion_local', 'posesion_visitante']])
datos[['posesion_local_std', 'posesion_visitante_std']] = datos_estandarizados

¿Cómo saber si el escalado fue exitoso?

Para visualizar si tu escalado fue exitoso y efectivo, usa histogramas, una visualización que revisa cómo se distribuyen tus datos escalados. Para ello, emplea bibliotecas como Matplotlib o Seaborn:

import matplotlib.pyplot as plt 
import seaborn as sns

fig, axes = plt.subplots(1, 2)
sns.histplot(datos['tiros_al_arco_local_norm'], ax=axes[0])
axes[0].set_title('Tiros al Arco Local Normalizados')

sns.histplot(datos['posesion_local_std'], ax=axes[1], color='orange')
axes[1].set_title('Posesión Local Estandarizada')

plt.show()

Dichas gráficas mostrarán claramente si los datos tienen una distribución adecuada y equilibrada. Cuéntanos, ¿qué inferencias puedes sacar de tu visualización?