La dicotomización de una variable consiste en dividir los valores observados en dos grupos que representan dos categorías exhaustivas y mutuamente excluyentes, a menudo en base a un punto de corte.
Esta técnica se utiliza a menudo cuando se desea convertir una variable continua en una variable categórica binaria para su análisis.
DICOTOMIZACIÓN DE VARIABLES
Para ejemplificar en forma simple, supongamos que tenemos un dataset de juguete con información sobre el nombre, la ciudad en la que vive y la edad de una serie de personas:
import pandas as pd# Generamos los datos "de juguete"df = pd.DataFrame({'Nombre': ['Ana', 'Juan', 'Pedro', 'Maria', 'Luis', 'Elena', 'Florencia', 'Agustín'],'Ciudad': ['Rosario', 'Rosario', 'Funes', 'Roldán', 'Funes', 'Funes', 'Roldán' ,'Rosario'],'Edad': [14, 22, 18, 35, 16, 20, 38, 25]})
DICOTOMIZACIÓN DE VARIABLES
# Mostramos el dataset resultantedf
Nombre
Ciudad
Edad
0
Ana
Rosario
14
1
Juan
Rosario
22
2
Pedro
Funes
18
3
Maria
Roldán
35
4
Luis
Funes
16
5
Elena
Funes
20
6
Florencia
Roldán
38
7
Agustín
Rosario
25
DICOTOMIZACIÓN DE VARIABLES
Podemos dicotomizar la variable Edad según si la persona alcanzó o no los 18 años de edad:
df['18_cumplidos'] = df['Edad'].apply(lambda x: 'Si'if x >=18else'No')df.head()
Nombre
Ciudad
Edad
18_cumplidos
0
Ana
Rosario
14
No
1
Juan
Rosario
22
Si
2
Pedro
Funes
18
Si
3
Maria
Roldán
35
Si
4
Luis
Funes
16
No
BINNING
En este caso, en lugar de dividir los datos de una variable en dos grupos, la división se realiza en grupos múltiples exhaustivos y mutuamente excluyentes llamados bins o buckets.
BINNING
Por ejemplo, sobre nuestros datos de juguete podríamos definir la variable Grupo_etario para clasificar a las personas según su Edad en: 18 años o menos, 18-30 o Mayores de 30.
Para ello, una opción rápida es utilizar la función cut() de Pandas
# Definimos los puntos de corte y los labelscortes = [0, 18, 30, 100]etiquetas = ['18 o menos', '18-30', 'Mayor a 30']# Creamos la nueva variabledf['Grupo_etario'] = pd.cut(df['Edad'], bins = cortes, labels = etiquetas)
BINNING
df
Nombre
Ciudad
Edad
18_cumplidos
Grupo_etario
0
Ana
Rosario
14
No
18 o menos
1
Juan
Rosario
22
Si
18-30
2
Pedro
Funes
18
Si
18 o menos
3
Maria
Roldán
35
Si
Mayor a 30
4
Luis
Funes
16
No
18 o menos
5
Elena
Funes
20
Si
18-30
6
Florencia
Roldán
38
Si
Mayor a 30
7
Agustín
Rosario
25
Si
18-30
BINNING
Importante:
Cuando usamos pd.cut(), debemos recordar que si queremos definir n intervalos, necesitamos un total de (n + 1) puntos de corte (bins).
Tener en cuenta que, por default, el parámetro right de pd.cut() está seteado en True, por lo que los intervalos se definen de manera automática con el extremo superior cerrado. En el ejemplo anterior, las personas se clasifican en tres grupos etarios correspondientes a los intervalos: (0, 18], (18, 30] y (30, 100] años.
BINNING
Si buscamos un poco más de flexibilidad en la construcción de los intervalos —por ejemplo, clasificar a las personas en los grupos: Menores de 18 años, Entre 18 y 30 (inclusive) o Mayores a 30 años— podemos usar una función lambda para aplicar esta lógica de forma explícita:
# Creamos la nueva variabledf['Grupo_etario_2'] = df['Edad'].apply(lambda edad: 'Menor a 18'if edad <18else ('18 a 30'if edad <=30else'Mayor a 30'))
BINNING
df.drop(columns ='Grupo_etario')
Nombre
Ciudad
Edad
18_cumplidos
Grupo_etario_2
0
Ana
Rosario
14
No
Menor a 18
1
Juan
Rosario
22
Si
18 a 30
2
Pedro
Funes
18
Si
18 a 30
3
Maria
Roldán
35
Si
Mayor a 30
4
Luis
Funes
16
No
Menor a 18
5
Elena
Funes
20
Si
18 a 30
6
Florencia
Roldán
38
Si
Mayor a 30
7
Agustín
Rosario
25
Si
18 a 30
CODIFICACIÓN DE VARIABLES CATEGÓRICAS
La mayoría de los algoritmos de aprendizaje automático no pueden manejar variables categóricas a menos que las convirtamos en valores numéricos.
El rendimiento de muchos algoritmos varía en función de cómo se codifican las variables categóricas, por lo que debe analizarse muy bien el método de codificación previo al entrenamiento del modelo.
ONE-HOT ENCODING
En este método, asignamos cada categoría de la variable cualitativa a un vector que contiene 1 y 0, con los que se denota la presencia o ausencia de la característica, respectivamente. El número de vectores generados dependerá del número de categorías o niveles en la variable de interés.
Para aplicarlo, contamos con la función get_dummies() de Pandas.
ONE-HOT ENCODING
Si usamos este método de codificación sobre Ciudad, obtenemos lo siguiente:
Para la Unidad que viene, tener en cuenta que si utilizamos este método de codificación para introducir la información de una variable categórica a un modelo, debemos considerar (N-1) variables dummy como predictoras para representar una variable categórica, ya que de lo contrario caemos en la Dummy Variable Trap.
En esta situación, las variables predictoras se predicen perfectamente unas y otras creando multicolinearidad.
ORDINAL ENCODING
Se trata de una técnica de preprocesamiento utilizada para convertir datos categóricos de variables ordinales en valores numéricos que preservan su orden inherente. De esta manera, presenta dos beneficios:
Codifica datos categóricos en datos numéricos que los algoritmos pueden entender.
Retiene la información ordinal entre categorías, que se perdería con otros métodos como one-hot encoding.
ORDINAL ENCODING
La codificación ordinal funciona asignando cada valor de categoría único a un número entero diferente. Normalmente, los números enteros comienzan en 0 y aumentan en 1 por cada categoría adicional.
Por ejemplo, una variable de “tamaño” con las categorías [“pequeño”, “mediano”, “grande”] se asignaría a [0, 1, 2]. De esta forma, se mantienen las relaciones ordinales: “pequeño” < “mediano” < “grande”.
ORDINAL ENCODING
Algunas consideraciones importantes:
La codificación ordinal supone un orden secuencial significativo entre categorías. No debe usarse para categorías nominales.
Los números enteros utilizados deben espaciar uniformemente las categorías. Si se dejan espacios en blanco, algunos modelos pueden inferir incorrectamente cercanía entre categorías.
La codificación ordinal funciona bien para variables cualitativas con una pequeña cantidad de niveles diferentes, pero puede resultar engorrosa si existen muchas categorías.
RESUMEN FINAL
Técnica
Tipo de variable
Ventajas principales
Cuándo evitarla
Dicotomización
Continua
Simplicidad, útil para clasificación binaria
Pérdida de información, arbitrariedad del corte
Binning (cut)
Continua
Agrupación interpretable, reducción de ruido
Pérdida de detalle, depende del corte
One-Hot Encoding
Categórica nominal
No impone orden, funciona bien con modelos lineales