MinMaxScaler y StandardScaler en Python

Resumen

Cuando trabajas con datos deportivos como tiros al arco o porcentaje de posesión, escalar los datos con MinMaxScaler y StandardScaler evita que el modelo confunda magnitud con importancia. Aquí aprenderás cuándo normalizar, cuándo estandarizar y cómo aplicarlo en Python para que tus predicciones sean justas y precisas.

¿Por qué es importante escalar los datos antes de entrenar un modelo?

Imagina que tu delantero tuvo 12 tiros al arco y el equipo manejó el 55% de posesión. Sin escalado, el algoritmo verá el 12 como un número más pequeño que 55, aunque el 55% represente una variable porcentual y el 12 una cuenta absoluta. Esa diferencia de rangos sesga los pesos del modelo y genera predicciones inexactas.

Escalar nivela el terreno de juego. Todas las variables quedan en una escala comparable y el modelo puede aprender sin sesgos numéricos [00:51].

¿Qué significa escalar datos en machine learning? Es transformar variables con rangos distintos a una escala común para que ningún atributo domine al modelo solo por tener números más grandes.

¿Cuál es la diferencia entre MinMaxScaler y StandardScaler?

Ambas son técnicas de preprocesamiento, pero responden a necesidades distintas según la distribución de tus datos [01:32].

  • MinMaxScaler (normalización): transforma los valores a un rango fijo, normalmente entre 0 y 1. Es ideal cuando los datos no siguen una distribución normal. Si un jugador tiene 12 tiros y el máximo es 15, el valor escalado sería 12/15 = 0.8.
  • StandardScaler (estandarización): centra los datos en torno a cero con desviación estándar uno. Es útil con algoritmos que asumen datos centrados, como regresión lineal o PCA.

En el caso de Cebollitas FC, los tiros al arco local y visitante se normalizan porque siempre caen entre 3 y 15. La posesión, en cambio, se estandariza porque queremos centrarla sin importar el valor original [02:20].

¿Cómo aplicar MinMaxScaler en pandas?

El flujo en el notebook empieza importando las clases necesarias desde scikit-learn y cargando el dataset con pandas. Luego se crea una instancia del scaler:

python from sklearn.preprocessing import MinMaxScaler, StandardScaler import pandas as pd

scaler_norm = MinMaxScaler() df[['tiros_local_norm', 'tiros_visitante_norm']] = scaler_norm.fit_transform( df[['tiros_local', 'tiros_visitante']] )

La clave está en fit_transform, un atajo que combina dos pasos: fit calcula el mínimo y el máximo de cada columna, y transform aplica la fórmula a cada dato. Pasar ambas columnas juntas garantiza que el cálculo considere el conjunto completo de cada variable [03:38].

Al imprimir las primeras filas con head(6), verás los tiros originales junto a sus versiones normalizadas entre 0 y 1.

¿Cómo aplicar StandardScaler en pandas?

La lógica es la misma, pero con otra clase y otra fórmula matemática. Aquí fit calcula la media y la desviación estándar, y transform centra los datos en cero con varianza uno:

python scaler_std = StandardScaler() df[['posesion_local_std', 'posesion_visitante_std']] = scaler_std.fit_transform( df[['posesion_local', 'posesion_visitante']] )

Transformar ambas columnas de posesión en una sola operación asegura consistencia entre local y visitante [05:25].

¿Cuándo uso MinMaxScaler y cuándo StandardScaler? Usa MinMaxScaler si necesitas un rango acotado (0 a 1) y tus datos no son normales. Usa StandardScaler si tu algoritmo asume datos centrados o quieres preservar la forma de la distribución.

¿Cómo visualizar el resultado del escalado con histogramas?

Después del preprocesamiento, los histogramas confirman si los datos quedaron bien distribuidos. Un histograma parejo es como un campo listo antes del partido: tu trabajo es dejarlo en condiciones [02:55].

Para graficar dos histogramas lado a lado se usan Matplotlib y Seaborn:

python import matplotlib.pyplot as plt import seaborn as sns

fig, axes = plt.subplots(1, 2, figsize=(12, 4))

sns.histplot(df['tiros_local_norm'], ax=axes[0]) axes[0].set_title('Tiros al arco local normalizados')

sns.histplot(df['posesion_local_std'], ax=axes[1], color='orange') axes[1].set_title('Posesión local estandarizada')

plt.show()

La función plt.subplots crea dos ejes en una fila, uno para cada histograma. Con plt.show() se muestran ambos gráficos de forma simultánea y puedes comparar cómo se ven los datos normalizados frente a los estandarizados [06:20].

¿Qué ganaste al escalar las variables de tu dataset?

Igualaste las escalas con dos técnicas fundamentales: MinMaxScaling para llevar valores al rango 0 a 1 y StandardScaler para centrar en media cero con varianza uno. Con esto, ninguna variable domina al modelo solo por su magnitud y quedas listo para entrenar algoritmos más precisos y equitativos.

¿Qué inferencias sacas tú al comparar ambos histogramas? Cuéntame en los comentarios cómo se vieron tus distribuciones después de aplicar cada técnica.