Ejercicio de preprocesamiento de variables

| Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este post realizaremos un ejercicio de preprocesamiento de variables utilizando los datos de un conjunto de datos de fuga de una compañía de teléfonos.

¿Qué es el preprocesamiento de variables?

El preprocesamiento de variables es el acto por medio del cual ajustamos nuestros datos de entrada para que encajen con lo que espera el algoritmo, ya que, de no hacerlo, este tendría problemas en la ejecución de ciertos comandos que requieran datos precisos.

No todos los datos ni todos los campos son útiles, de ahí la necesidad de ejecutar el preprocesamiento de variables, para determinar qué datos e información conservamos, de manera previa, y qué podemos desechar sin temor a equivocarnos.

Ejercicio de preprocesamiento de variables

Si escribimos data.dtypes nos indica el tipo de las variables de nuestro dataframe. Vemos que tenemos variables categóricas que tenemos que codificar.

Para empezar el preprocesamiento de variables, lo primero que haremos será eliminar la variable “phone number” del dataframe y codificar las variables categóricas.

Observemos las variables alojadas dentro de nuestro conjunto de datos:

state: object

account length: int64

area code: int64

phone number: int64

international plan: object

voice mail plan: object

number vmail messages: int64

total day minutes: float64

total day calls: int64

total day charge: float64

total eve minutes: float64

total eve calls: int64

total eve charge: float64

total night minutes: float64

total night calls: int64

total night charge: float64

total intl minutes: float64

total intl calls: int64

total intl charge: float64

customer service calls: int64

churn: bool

dtype: object

¿Por qué es mejor eliminar la variable “phone number”? Porque no nos brindará información de ninguna relevancia. Es verdad que esta variable identifica al usuario, pero es que esta información nos da igual, porque no estamos intentando identificar un único usuario, sino un patrón. Veamos, por tanto, cómo eliminar esta variable.

data.drop (['phone number'], axis = 1, inplace = True)

Luego verificamos que sí se ha eliminado la variable:

data.head ().T
preprocesamiento de variables

En efecto, ya no está.

Ahora bien, las variables categóricas las codificaremos con un Label Encoder. ¿Cómo funciona el Label Encoder? Tenemos una variable categórica como state (recordemos que state es de tipo object, lo que indica que es una variable categórica); también tenemos international plan, voice mail plan y churn.

Codificamos:

#preprocesamiento de variables
from sklearn.preprocessing import LabelEncoder

le1 = LabelEncoder ()
le2 = LabelEncoder ()
le3 = LabelEncoder ()
le4 = LabelEncoder ()

data ['state'] = le1.fit_transform (data ['state'])
data ['international plan'] = le2.fit_transform (data ['international plan'])
data ['voice mail plan'] = le3. fit_transform (data ['voice mail plan'])
data ['churn'] le4.fit_transform (data ['churn'])

data.head ()

Después de esto, vemos cómo todos se han categorizado correctamente:

state: int64

account length: int64

area code: int64

international plan: int64

voice mail plan: int64

number vmail messages: int64

total day minutes: float64

total day calls: int64

total day charge: float64

total eve minutes: float64

total eve calls: int64

total eve charge: float64

total night minutes: float64

total night calls: int64

total night charge: float64

total intl minutes: float64

total intl calls: int64

total intl charge: float64

customer service calls: int64

churn: bool

dtype: int64

Ahora observemos las clases de cada una de las variables categóricas que hemos codificado:

le1.classes_

array ([‘AK’, ‘AL’, ‘AR’, ‘AZ’, ‘CA’, ‘CO’, ‘CT’, ‘DC’, ‘DE’, ‘FL’, ‘GA’, ‘HI’, ‘IA’, ‘ID’, ‘IL’, ‘IN’, ‘KS’, ‘KY’, ‘LA’, ‘MA’, ‘MD’, ‘ME’, ‘MI’, ‘MN’, ‘MO’, ‘MS’, ‘MT’, ‘NC’, ‘ND’, ‘NE’, ‘NH’, ‘NJ’, ‘NM’, ‘NV’, ‘NY’, ‘OH’, ‘OK’, ‘OR’, ‘PA’, ‘RI’, ‘SC’, ‘SD’, ‘TN’, ‘TX’, ‘UT’, ‘VA’, ‘VT’, ‘WA’, ‘WI’, ‘WV’, ‘WY’], dtype = object)

le2.classes_

array ([‘no’, ‘yes’], dtype = object)

le3.classes_

array ([‘no’, ‘yes’], dtype = object)

le4.classes_

array ([False, True])

En este caso no hemos dividido entre train y test con anterioridad. Si lo hubiéramos hecho, el código cambiaría a lo siguiente:

#Si tuviera un dataset de test, lo que haría es:
#preprocesamiento de variables

data_test ['state'] = le1.fit_transform (data_test ['state'])
data_test ['international plan'] = le2.fit_transform (data_test ['international plan'])
data_test ['voice mail plan'] = le3.fit_transform (data_test ['voice mail plan'])
data_test ['churn'] = le4.fit_transform (data_test ['churn'])

Podríamos hacer la división train/test después de todo este proceso, pero no sería óptimo porque no estaríamos dividiendo todos los datos. Esto forma parte del conducto regular del preprocesamiento de variables.

¿Qué sigue?

El Big Data es una de las áreas en las que más trabajos se ofertan. Si te gustaría profesionalizarte y acceder a este tipo de opciones laborales, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que adquirirás todos los conocimientos a nivel teórico y práctico para, en pocos meses, obtener el trabajo de tus sueños. ¡No esperes más para seguir tu camino hacia el éxito y solicita información ahora!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado