Python

Creación de variables dummies con Pandas (variables binarias para aprendizaje automático)

La mayoría de los algoritmos de aprendizaje automático solamente pueden trabajar con datos numéricos. Pero, en muchas ocasiones, lo que se tienen son datos de tipo categórico. Debido a que los algoritmos no pueden realizar las operaciones matemáticas sobre estos, es necesario transformarlos antes de poder emplearlos en el entrenamiento de cualquier modelo de aprendizaje automático. Algo que se puede conseguir mediante la creación de variables dummies o variables binarias. El método más habitual para la creación de variables dummies es convertir cada una de las categorías de la variable original en una nueva columna binaria, si la fila corresponde con la categoría ésta tendrá como valor 1, en cualquier otro caso tendrá 0. Veamos cómo se pueden crear las variables dummies con Pandas mediante la función get_dummies().

Conjunto de datos de ejemplo

Supongamos que contamos con un conjunto de datos en el que se tiene el precio de un producto y su color. Por ejemplo, el conjunto que se muestra a continuación

import pandas as pd

data = pd.DataFrame({ 'precio': [45, 53, 60, 42, 34],
                      'color': ['rojo', 'verde', 'azul', 'verde', 'rojo'] })
data
   precio  color
0      45   rojo
1      53  verde
2      60   azul
3      42  verde
4      34   rojo

Ahora, si se desea crear un modelo de regresión lineal para obtener el precio del producto no se puede usar el color directamente. Al ser una variable categórica no se puede multiplicar por un parámetro para predecir un valor. Pero sí que es posible si el dato se representa como variables dummies que representa si el registro es de un color u otro.

La función get_dummies() de Pandas

Pandas dispone de la función get_dummies() con la cual se puede crear de un forma sencilla variables dummies a partir de un DataFrame. El uso básico de esta función solamente requiere llamarla con un conjunto de datos como parámetro, obteniendo como resultado un DataFrame con los datos transformados. Lo que se puede hacer con el conjunto de datos de ejemplo.

dummies = pd.get_dummies(data)
dummies
   precio  color_azul  color_rojo  color_verde
0      45           0           1            0
1      53           0           0            1
2      60           1           0            0
3      42           0           0            1
4      34           0           1            0

Como se puede ver en los resultados se crea un nuevo conjunto de datos con tres variables en que comienzan por el nombre de la variable anterior, seguido de guión bajo y el nombre de la categoría. Así en este ejemplo se tienen tres variables, una para cada uno de los colores. Además, no es necesario indicar las variables que son categóricas, ya que el algoritmo las detecta automáticamente, dejando las numéricas intactas.

Eliminación de la primera categoría con drop_first

Los conjuntos de datos con colinealidad suelen dar problemas en la mayoría de algoritmos de aprendizaje automático. Por construcción, las variables dummies son colineales. Algo que se puede comprobar fácilmente, cualquier de las nuevas variables se puede predecir a partir del resto ya que es 1 cuando el resto es 0 y 0 cuando hay un 1 en cualquier otra variable. Para solucionar este problema se puede eliminar una variable o asignar el valor verdadero a la propiedad drop_first haciendo que la función elimine la variable de la primera categoría. Lo que se puede comprobar con el siguiente ejemplo.

dummies_drop = pd.get_dummies(data, drop_first=True)
dummies_drop
   precio  color_rojo  color_verde
0      45           1            0
1      53           0            1
2      60           0            0
3      42           0            1
4      34           1            0

Lo que elimina la columna del color azul.

Recupera los valores originales

En la versión 1.5 de Pandas se introdujo la función from_dummies() con la que se puede recuperar la variable original a partir de las dummies. Este método requiere las columnas para crear un nuevo DataFrame.

pd.from_dummies(dummies[['color_azul', 'color_rojo', 'color_verde']])
              
0   color_rojo
1  color_verde
2   color_azul
3  color_verde
4   color_rojo

Por defecto se obtiene una serie con el nombre de la variable, pero se le puede indicar la propiedad sep para indicar el carácter usado para separar el nombre de la variable de las categorías, para obtener así la variable original.

pd.from_dummies(dummies[['color_azul', 'color_rojo', 'color_verde']], sep='_')
   color
0   rojo
1  verde
2   azul
3  verde
4   rojo

En el caso de que se eliminase una de las categorías también se puede recuperar los datos originales. Solamente se le debe indicar a la función el valor de la categoría por defecto mediante el uso de la propiedad default_category.

pd.from_dummies(dummies[['color_rojo', 'color_verde']], sep='_', default_category='azul')
   color
0   rojo
1  verde
2   azul
3  verde
4   rojo

Conclusiones

Las funciones get_dummies() y from_dummies() de Pandas permite trabajar de una forma rápida y eficiente con variables dummies o variables binarias. Así, en una sola línea se pueden preparar los datos categóricos para poder ser utilizados en cualquier modelo de aprendizaje automático.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Pandas

Recent Posts

BG/BB: el modelo de CLV para compras en períodos discretos

Los dos artículos anteriores de la serie cubrieron BG/NBD, el modelo para negocios donde el…

1 día ago

Por Qué las Contraseñas Largas son más Seguras que las Complejas

"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…

6 días ago

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

1 semana ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

2 semanas ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

2 semanas ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

3 semanas ago

This website uses cookies.