One-Hot Encoding

Escrito por

en

Transformación de Variables Categóricas para Machine Learning

En Data Science y Machine Learning, los algoritmos trabajan fundamentalmente con datos numéricos. Sin embargo, en la práctica es muy común encontrar variables categóricas que contienen valores de texto, como:

  • País.
  • Ciudad.
  • Color.
  • Categoría de producto.
  • Tipo de cliente.
  • Método de pago.

Estas variables contienen información valiosa, pero no pueden utilizarse directamente en la mayoría de los modelos de Machine Learning. Para resolver este problema se utilizan técnicas de codificación (encoding), siendo una de las más populares y ampliamente utilizadas el One-Hot Encoding.

Esta técnica transforma categorías en variables numéricas binarias, permitiendo que los algoritmos interpreten correctamente la información sin asumir relaciones inexistentes entre las categorías.

¿Qué es One-Hot Encoding?

One-Hot Encoding es una técnica de codificación de variables categóricas que convierte cada categoría en una nueva variable binaria. Cada nueva variable puede tomar únicamente dos valores:

  • 1 si la observación pertenece a esa categoría.
  • 0 si no pertenece a esa categoría.

Por este motivo también se conoce como:

  • Dummy Encoding.
  • Codificación Binaria de Categorías.
  • Variables Indicadoras (Indicator Variables).

El objetivo es representar categorías de forma numérica sin introducir un orden artificial entre ellas.

¿Cómo Funciona?

Supongamos una variable denominada “Color”:

ItemColor
ARojo
BAzul
CVerde

Tras aplicar One-Hot Encoding se generan tres nuevas columnas:

ItemRojoAzulVerde
A100
B010
C001

Cada observación activa únicamente la columna correspondiente a su categoría. De ahí proviene el término “One-Hot”, ya que solo una posición toma el valor 1 mientras las demás permanecen en 0.

¿Por qué es necesario?

Supongamos que intentamos representar los colores utilizando números; aunque parece una solución válida, introduce un problema importante. El algoritmo podría interpretar que los valores tienen jerarquía o incluso asumir que se pueden hacer operaciones matemáticas. One-Hot Encoding evita este problema al representar cada categoría de forma independiente.

Beneficios de One-Hot Encoding

  • Convierte variables categóricas en variables numéricas.
  • Evita introducir relaciones artificiales entre categorías.
  • Es compatible con la mayoría de algoritmos de Machine Learning.
  • Conserva toda la información categórica original.
  • Facilita el procesamiento de datos mixtos.
  • Es una técnica ampliamente aceptada y utilizada en la industria.

¿Cuándo Utilizar One-Hot Encoding?

  • La variable es categórica nominal.
  • No existe un orden natural entre las categorías.
  • El número de categorías es relativamente pequeño.
  • Se utilizan algoritmos que requieren datos numéricos.
  • Se desea evitar relaciones artificiales entre categorías.

Variables Nominales vs Ordinales

One-Hot Encoding es especialmente adecuado para variables nominales, o sea que no tienen orden inherente o poseen una jerarquía natural como las variables ordinales.

  • Variables nominales: rojo, azul, verde, España, Francia, Italia.
  • Variables ordinales: bajo, medio, alto o básico, premium, VIP.

Ventajas

  • Compatible con la mayoría de modelos.
  • No introduce sesgos relacionados con el orden.
  • Conserva la información original.
  • Funciona correctamente con variables nominales.
  • Es ampliamente soportado por bibliotecas de Machine Learning.

Desventajas

  • Incrementa el número de variables.
  • Puede generar matrices muy dispersas (sparse matrices).
  • Consume más memoria.
  • Aumenta el tiempo de entrenamiento en conjuntos de datos grandes.
  • Puede generar problemas de dimensionalidad cuando existen muchas categorías.

Limitaciones

Antes de utilizar One-Hot Encoding conviene considerar varios aspectos:

  • No escala bien cuando existen miles de categorías.
  • Puede producir el problema conocido como “Curse of Dimensionality”.
  • No captura relaciones entre categorías.
  • Puede generar redundancia en determinados modelos.
  • No siempre es la mejor opción para variables con alta cardinalidad.

El Problema de la Multicolinealidad

Cuando se generan todas las columnas posibles, puede aparecer una dependencia lineal entre ellas. Por ejemplo:

RojoAzulVerde
100
010
001

Si conocemos dos columnas, la tercera puede deducirse automáticamente. Para evitar este problema, algunos modelos utilizan:

drop_first=True

eliminando una de las categorías. Esta estrategia se conoce como Dummy Variable Trap.

Comparación con Otras Técnicas de Codificación

TécnicaMantiene OrdenAumenta DimensionalidadAdecuada para Variables Nominales
Label EncodingNoNo
Ordinal EncodingNoNo
One-Hot EncodingNo
Target EncodingParcialmenteNo
Frequency EncodingParcialmenteNo

One-Hot Encoding suele ser la opción más segura cuando las categorías no tienen orden natural.

Aplicaciones en Data Science y Machine Learning

  • Regresión Lineal.
  • Regresión Logística.
  • Redes Neuronales.
  • Support Vector Machines (SVM).
  • K-Nearest Neighbors (KNN).
  • Árboles de Decisión.
  • Random Forest.
  • XGBoost.
  • Sistemas de recomendación.
  • Modelos de clasificación y regresión.

Es una de las transformaciones más comunes dentro de los pipelines de preparación de datos.

Implementación en Python

Utilizando Pandas

La forma más sencilla consiste en utilizar get_dummies().

import pandas as pd

df = pd.DataFrame({
    "color": [
        "Rojo",
        "Azul",
        "Verde",
        "Rojo"
    ]
})

df_encoded = pd.get_dummies(
    df,
    columns=["color"]
)

print(df_encoded)
   color_Azul  color_Rojo  color_Verde
0       False        True        False
1        True       False        False
2       False       False         True
3       False        True        False

Eliminando una Categoría

df_encoded = pd.get_dummies(
    df,
    columns=["color"],
    drop_first=True
)
print(df_encoded)
   color_Rojo  color_Verde
0        True        False
1       False        False
2       False         True
3        True        False

Utilizando Scikit-Learn

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder()

X_encoded = encoder.fit_transform(X)

Obtener los Nombres de las Variables

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder()

encoder.fit(X)

print(
    encoder.get_feature_names_out()
)

Uso dentro de un Pipeline

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression

preprocessor = ColumnTransformer([
    (
        "categoricas",
        OneHotEncoder(),
        ["color", "pais"]
    )
])

pipeline = Pipeline([
    ("preprocessing", preprocessor),
    ("model", LogisticRegression())
])

pipeline.fit(X_train, y_train)

Esta es la forma recomendada cuando se trabaja con flujos de Machine Learning en producción.

Buenas Prácticas

  • Aplicarlo únicamente a variables categóricas nominales.
  • Evaluar la cardinalidad de las categorías antes de codificar.
  • Considerar técnicas alternativas para variables con miles de categorías.
  • Integrar la transformación dentro de un Pipeline.
  • Ajustar el codificador únicamente con los datos de entrenamiento.
  • Revisar el impacto sobre la dimensionalidad del conjunto de datos.

Conclusión

One-Hot Encoding es una de las técnicas más importantes y utilizadas para transformar variables categóricas en formatos compatibles con Machine Learning. Su capacidad para representar categorías sin introducir relaciones artificiales la convierte en una herramienta fundamental dentro de cualquier proceso de preparación de datos.

Aunque puede incrementar considerablemente la dimensionalidad cuando existen muchas categorías, sigue siendo la opción preferida para variables nominales con un número moderado de valores distintos. Gracias a su simplicidad, interpretabilidad y amplia compatibilidad con algoritmos modernos, constituye un componente esencial de los pipelines de Data Science y Machine Learning.