El tratamiento de variables categóricas para imputación es un paso importante en la limpieza de datos, ya que la mayoría de los métodos de imputación (como la media, la mediana o incluso modelos más avanzados como KNN o regresiones) requieren que las variables categóricas estén codificadas numéricamente.
La **codificación ordinal** es una técnica que convierte las categorías en números de manera que las categorías tengan un orden lógico, pero sin implicar una relación de magnitud precisa entre las categorías.
### ¿Qué es la codificación ordinal?
La **codificación ordinal** se utiliza cuando las categorías de una variable tienen un orden inherente. Un ejemplo común es una variable de satisfacción con las opciones: "Bajo", "Medio", "Alto". El orden es claro, y se puede representar con números como 1, 2, y 3, donde 1 representa "Bajo" y 3 representa "Alto".
Este tipo de codificación es ideal para variables categóricas ordinales, en las que las categorías pueden ordenarse de manera lógica.
### Pasos para la imputación con codificación ordinal:
1. **Identificación de las variables ordinales**: Primero, debes identificar las variables categóricas que tienen un orden lógico entre sus categorías. Por ejemplo:
- Nivel educativo (Primaria, Secundaria, Universitaria).
- Tamaño de una empresa (Pequeña, Mediana, Grande).
2. **Codificación ordinal**: Convertir las categorías en valores numéricos que respeten el orden inherente. Para hacer esto, puedes usar la función OrdinalEncoder de sklearn o codificar manualmente.
```python
from sklearn.preprocessing import OrdinalEncoder
import pandas as pd
# Ejemplo de datos categóricos
data = {'Nivel_Educativo': ['Primaria', 'Secundaria', 'Universitaria', None]}
df = pd.DataFrame(data)
# Definir el orden de las categorías
encoder = OrdinalEncoder(categories=[['Primaria', 'Secundaria', 'Universitaria']])
# Codificar
df['Nivel_Educativo_Cod'] = encoder.fit_transform(df[['Nivel_Educativo']])
print(df)
```
Salida:
```
Nivel_Educativo Nivel_Educativo_Cod
0 Primaria 0.0
1 Secundaria 1.0
2 Universitaria 2.0
3 None NaN
```
3. **Imputación**: Una vez que la variable ha sido codificada ordinalmente, puedes aplicar métodos de imputación estándar. Por ejemplo, imputar los valores faltantes utilizando la media o mediana en lugar de dejar los valores como NaN.
```python
from sklearn.impute import SimpleImputer
# Imputar la mediana en los valores faltantes
imputer = SimpleImputer(strategy='median')
df['Nivel_Educativo_Imputado'] = imputer.fit_transform(df[['Nivel_Educativo_Cod']])
print(df)
```
Salida:
```
Nivel_Educativo Nivel_Educativo_Cod Nivel_Educativo_Imputado
0 Primaria 0.0 0.0
1 Secundaria 1.0 1.0
2 Universitaria 2.0 2.0
3 None NaN 1.0
```
En este caso, el valor faltante se ha reemplazado por la mediana.
### Beneficios de la codificación ordinal
1. **Imputación más precisa**: Al conservar el orden inherente de las categorías, la imputación de los valores faltantes será más precisa, ya que métodos como la media o la mediana pueden mantener la lógica de las relaciones entre las categorías.
2. **Modelos más robustos**: Los modelos de Machine Learning y las técnicas estadísticas suelen funcionar mejor con datos numéricos, y la codificación ordinal facilita el uso de estos modelos para variables categóricas.
3. **Evita la codificación arbitraria**: En lugar de usar números sin sentido o hacer una codificación "one-hot" que puede introducir complejidad innecesaria, la codificación ordinal refleja el orden real de las categorías.
### Cuándo no usar codificación ordinal
No todas las variables categóricas deben ser codificadas ordinalmente. **Solo** debes aplicar esta técnica si las categorías tienen un **orden lógico**. Si las categorías no tienen un orden, deberías usar otras técnicas como la **codificación "one-hot"** o **frecuencial**.
### Conclusión
La codificación ordinal es una técnica efectiva cuando necesitas imputar valores faltantes en variables categóricas con un orden implícito. La clave es respetar el orden de las categorías, para luego poder aplicar métodos de imputación y análisis que te proporcionen resultados precisos y consistentes.