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”:
| Item | Color |
|---|---|
| A | Rojo |
| B | Azul |
| C | Verde |
Tras aplicar One-Hot Encoding se generan tres nuevas columnas:
| Item | Rojo | Azul | Verde |
|---|---|---|---|
| A | 1 | 0 | 0 |
| B | 0 | 1 | 0 |
| C | 0 | 0 | 1 |
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:
| Rojo | Azul | Verde |
|---|---|---|
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
Si conocemos dos columnas, la tercera puede deducirse automáticamente. Para evitar este problema, algunos modelos utilizan:
drop_first=Trueeliminando una de las categorías. Esta estrategia se conoce como Dummy Variable Trap.
Comparación con Otras Técnicas de Codificación
| Técnica | Mantiene Orden | Aumenta Dimensionalidad | Adecuada para Variables Nominales |
|---|---|---|---|
| Label Encoding | Sí | No | No |
| Ordinal Encoding | Sí | No | No |
| One-Hot Encoding | No | Sí | Sí |
| Target Encoding | Parcialmente | No | Sí |
| Frequency Encoding | Parcialmente | No | Sí |
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 FalseEliminando 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 FalseUtilizando 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.