Transformación de Variables Categóricas en Valores Numéricos
En Data Science y Machine Learning, una gran parte de la información disponible se encuentra en forma de variables categóricas. Estas variables contienen etiquetas o categorías que describen características de los datos, como:
- Nivel educativo.
- Tipo de cliente.
- Categoría de producto.
- Estado de un pedido.
- Clasificación de riesgo.
Sin embargo, la mayoría de los algoritmos de Machine Learning trabajan exclusivamente con datos numéricos, por lo que es necesario transformar estas categorías en valores que los modelos puedan procesar.
Existen diversas técnicas de codificación para realizar esta transformación, entre las que destacan One-Hot Encoding, Ordinal Encoding y Label Encoding. La elección de una u otra depende del tipo de variable y del algoritmo que se vaya a utilizar.
Label Encoding es una técnica que asigna un valor numérico único a cada categoría. Aunque históricamente se ha utilizado para codificar variables categóricas, en la actualidad su uso principal se centra en la codificación de variables objetivo categóricas (target) y en determinados escenarios donde las categorías pueden representarse mediante etiquetas numéricas.
¿Qué es Label Encoding?
Label Encoding es una técnica de codificación que transforma categorías en valores numéricos enteros. Cada categoría recibe una etiqueta numérica única, permitiendo que los algoritmos de Machine Learning trabajen con datos originalmente representados como texto.
Esta técnica es especialmente utilizada para convertir variables categóricas en un formato numérico más compacto y eficiente. En Scikit-Learn, su uso principal está orientado a la codificación de variables objetivo categóricas (target), aunque también puede encontrarse en otros escenarios de preparación de datos.
El proceso consiste en asignar un número diferente a cada categoría presente en la variable.
Ejemplo de Label Encoding
| Item | Categoría |
|---|---|
| A | Bajo |
| B | Medio |
| C | Alto |
Después de aplicar Label Encoding:
| Item | Categoría | Código |
|---|---|---|
| A | Bajo | 0 |
| B | Medio | 1 |
| C | Alto | 2 |
El objetivo es convertir variables categóricas en un formato numérico que pueda utilizarse en algoritmos de Machine Learning.
Es importante destacar que los números asignados son simplemente identificadores y no representan necesariamente una relación de orden o magnitud entre las categorías. Por ejemplo, que “Pendiente” tenga el valor 2 y “Entregado” el valor 0 no significa que una categoría sea mayor o mejor que la otra; únicamente son etiquetas numéricas utilizadas para representar las categorías originales.
En Scikit-Learn, los códigos suelen asignarse automáticamente siguiendo el orden alfabético de las categorías encontradas durante el entrenamiento. Por ello, el resultado puede variar dependiendo de los valores presentes en la variable.

¿Cómo Funciona?
El proceso consiste en:
- Identificar todas las categorías únicas de la variable.
- Asignar un número entero a cada categoría.
- Sustituir las categorías originales por sus códigos correspondientes.
Matemáticamente puede representarse como una función de mapeo entre categorías y valores numéricos. Una vez realizada la transformación, la variable pasa de estar representada mediante texto a utilizar identificadores numéricos.
Es importante destacar que los valores asignados son etiquetas numéricas y no necesariamente representan una relación de orden, distancia o magnitud entre las categorías.
Beneficios de Label Encoding
- Convierte variables categóricas en variables numéricas.
- Genera una representación compacta de los datos.
- No aumenta la dimensionalidad del conjunto de datos.
- Requiere poca memoria.
- Es rápido incluso en conjuntos de datos grandes.
- Resulta sencillo de implementar.
- Puede utilizarse para codificar variables objetivo categóricas en problemas de clasificación.
¿Cuándo Utilizar Label Encoding?
Label Encoding suele utilizarse cuando:
- Se necesita convertir categorías en identificadores numéricos.
- Se trabaja con una variable objetivo categórica (target).
- Existen muchas categorías y se desea una representación compacta.
- El incremento de dimensionalidad producido por One-Hot Encoding no resulta conveniente.
- Se utilizan algoritmos basados en árboles que no dependen de distancias entre categorías.
Para variables predictoras ordinales suele ser preferible utilizar Ordinal Encoding, ya que permite definir explícitamente el orden de las categorías.
Ventajas
- Implementación sencilla.
- Bajo consumo de memoria.
- No genera nuevas columnas.
- Produce representaciones compactas.
- Escala adecuadamente cuando existen muchas categorías.
- Compatible con numerosos algoritmos.
- Fácil de interpretar y aplicar.
Desventajas
- Puede introducir relaciones inexistentes entre categorías.
- Algunos algoritmos pueden interpretar los códigos como valores numéricos reales.
- No suele ser adecuado para variables nominales utilizadas como variables predictoras.
- Puede inducir sesgos en determinados modelos.
- Las diferencias entre códigos pueden interpretarse erróneamente como distancias reales.
Limitaciones
- No conserva completamente la naturaleza nominal de las categorías.
- Puede afectar negativamente a algoritmos basados en distancia, como KNN o K-Means.
- No refleja relaciones semánticas reales entre categorías.
- Puede introducir patrones artificiales en los datos.
- No garantiza una mejora del rendimiento predictivo.
Por este motivo, cuando se trabaja con variables predictoras nominales suele ser más habitual utilizar técnicas como One-Hot Encoding, que evitan la creación de relaciones artificiales entre categorías.
Comparación con One-Hot Encoding
Las dos técnicas más utilizadas para codificar variables categóricas son Label Encoding y One-Hot Encoding.
| Característica | Label Encoding | One-Hot Encoding |
|---|---|---|
| Genera nuevas columnas | No | Sí |
| Aumenta dimensionalidad | No | Sí |
| Adecuado para variables ordinales | Sí | No |
| Adecuado para variables nominales | No | Sí |
| Consumo de memoria | Bajo | Mayor |
| Introduce orden artificial | Sí | No |
| Fácil interpretación | Alta | Alta |
Aplicaciones en Data Science y Machine Learning
Aplicaciones en Data Science y Machine Learning
Label Encoding se utiliza principalmente en:
- Problemas de clasificación supervisada.
- Codificación de variables objetivo categóricas (target).
- Procesos de preparación y transformación de datos.
- Flujos de trabajo de Machine Learning que requieren etiquetas numéricas.
- Sistemas de evaluación y categorización.
- Modelos que trabajan con clases representadas mediante texto.
También puede encontrarse en conjuntos de datos utilizados por algoritmos como:
- Árboles de decisión.
- Random Forest.
- Gradient Boosting.
- XGBoost.
- LightGBM.
- CatBoost.
Sin embargo, cuando se utiliza sobre variables predictoras categóricas, es importante evaluar si Label Encoding es la técnica más adecuada. En muchos casos, especialmente para variables nominales, suelen emplearse alternativas como One-Hot Encoding, mientras que para variables ordinales suele utilizarse Ordinal Encoding.
También es habitual para codificar la variable objetivo en problemas de clasificación. Por ejemplo: Spam/No Spam
Implementación en Python
Utilizando LabelEncoder de Scikit-Learn
from sklearn.preprocessing import LabelEncoder
datos = [
"Bajo",
"Medio",
"Alto",
"Medio"
]
encoder = LabelEncoder()
resultado = encoder.fit_transform(datos)
print(resultado)
[1 2 0 2]Obtener las Categorías
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
encoder.fit(datos)
print(encoder.classes_)
['Alto' 'Bajo' 'Medio']Aplicación sobre un DataFrame
import pandas as pd
from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame({
"nivel": [
"Bajo",
"Medio",
"Alto",
"Medio"
]
})
encoder = LabelEncoder()
df["nivel_codificado"] = encoder.fit_transform(
df["nivel"]
)
print(df)
Codificación Manual
import pandas as pd
mapa = {
"Bajo": 0,
"Medio": 1,
"Alto": 2
}
df["nivel_codificado"] = df["nivel"].map(mapa)
Esta opción suele ser recomendable para variables ordinales porque permite controlar explícitamente el orden.
Uso dentro de un Pipeline
Cuando se trabaja con múltiples variables categóricas, suele ser más apropiado utilizar OrdinalEncoder.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OrdinalEncoder
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
preprocessor = ColumnTransformer([
(
"ordinales",
OrdinalEncoder(),
["nivel"]
)
])
pipeline = Pipeline([
("preprocessing", preprocessor),
("model", RandomForestClassifier())
])
pipeline.fit(X_train, y_train)
Buenas Prácticas
- Verificar si la variable es ordinal o nominal.
- Utilizar mapas personalizados cuando exista un orden natural.
- Evitar su uso en variables nominales cuando sea posible.
- Evaluar el impacto sobre el rendimiento del modelo.
- Integrar la transformación dentro de un Pipeline.
- Mantener la consistencia de los códigos entre entrenamiento e inferencia.
Conclusión
Label Encoding es una técnica sencilla y eficiente para transformar variables categóricas en valores numéricos mediante la asignación de etiquetas enteras. Su principal fortaleza reside en su simplicidad, bajo consumo de memoria y capacidad para representar variables ordinales de forma compacta.
Sin embargo, debe utilizarse con precaución en variables nominales, ya que puede introducir relaciones artificiales entre categorías que no existen en la realidad. Por este motivo, resulta especialmente adecuado para variables con un orden natural y para algoritmos basados en árboles, donde la interpretación de los valores numéricos suele ser menos problemática.
Cuando se aplica correctamente, Label Encoding constituye una herramienta fundamental dentro del proceso de preparación de datos para proyectos de Data Science y Machine Learning.