Skip to content

La Guía Definitiva: Cómo Usar el Imputer de Scikit-learn

Cuando se trabaja con conjuntos de datos grandes, es casi inevitable encontrar valores faltantes. Manejar los datos faltantes de manera eficiente es un paso fundamental en el proceso de preprocesamiento de datos. El Imputer de Scikit-learn proporciona un conjunto de estrategias robustas para esta tarea. En este artículo, profundizaremos en los Imputers SimpleImputer, IterativeImputer, KNNImputer de Scikit-learn y cómo aprovecharlos para manejar datos numéricos y categóricos.

¿Quieres crear rápidamente visualizaciones de datos desde un dataframe de Python Pandas sin escribir código?

PyGWalker es una biblioteca de Python para el análisis exploratorio de datos con visualización. PyGWalker (opens in a new tab) puede simplificar tu flujo de trabajo de análisis y visualización de datos en Jupyter Notebook, convirtiendo tu dataframe de pandas (y dataframe de polars) en una interfaz de usuario en estilo Tableau para la exploración visual.

PyGWalker para visualización de datos (opens in a new tab)

Desenmascarando el Imputer

Antes de sumergirnos en los "cómo hacerlo", primero entendamos qué es un Imputer. Básicamente, un imputer es un estimador que rellena los valores faltantes en tu conjunto de datos. Para datos numéricos, utiliza estrategias como la media, la mediana o una constante, mientras que para datos categóricos, utiliza el valor más frecuente o una constante. Además, puedes entrenar tu modelo para predecir los valores faltantes, dependiendo de la complejidad de tus datos y los recursos disponibles.

En esta guía, nos centraremos principalmente en los Imputers SimpleImputer, IterativeImputer y KNNImputer de Scikit-learn. Además, te guiaremos en el proceso de crear un pipeline para imputar características categóricas y numéricas de manera fluida y alimentarlas a un modelo de aprendizaje automático.

Configuración del Imputer de Scikit-learn

Las funciones de imputación de Scikit-learn ofrecen una forma conveniente de manejar datos faltantes utilizando solo unas pocas líneas de código. Además, te permiten crear pipelines, lo que facilita la reproducción de resultados y mejora tu flujo de trabajo en el desarrollo de aprendizaje automático.

Entorno y Conjunto de Datos

Antes de adentrarnos en los detalles de cómo usar el Imputer de Scikit-learn, configuremos nuestro entorno y adquiramos un conjunto de datos. Para este tutorial, utilizaremos la Base de Datos de Diabetes de los Indios Pima, un conjunto de datos popular en la comunidad de aprendizaje automático.

Este conjunto de datos está disponible de forma gratuita en Kaggle, y podemos descargarlo directamente utilizando la API de Kaggle. Sin embargo, primero debemos instalar las bibliotecas de Python necesarias:

!pip install numpy pandas scikit-learn kaggle

A continuación, descargaremos la Base de Datos de Diabetes de los Indios Pima utilizando la API de Kaggle:

!kaggle datasets download -d uciml/pima-indians-diabetes-database
!unzip pima-indians-diabetes-database.zip -d ./dataset

Ahora que tenemos nuestro conjunto de datos, carguémoslo en un DataFrame de pandas y echemos un vistazo:

import pandas as pd
 
df = pd.read_csv("./dataset/diabetes.csv")
print(df.head())

Adentrándonos en el Conjunto de Datos

Una vez que tenemos los datos cargados, es esencial entender su estructura. La Base de Datos de Diabetes de los Indios Pima tiene ocho características numéricas y una columna objetivo binaria, "Outcome". Las características se relacionan con varias métricas de salud, como el nivel de glucosa, la presión arterial y el IMC, mientras que la columna objetivo indica si una persona tiene o no diabetes.

Primero, examinemos la forma de nuestro conjunto de datos:

print(df.shape)

Con esta salida, podemos confirmar que nuestro conjunto de datos contiene 768 filas y 9 columnas.

Revelando Valores Faltantes

En los conjuntos de datos del mundo real, los valores faltantes son bastante comunes. Por lo tanto, antes de sumergirnos en el modelado de aprendizaje automático, debemos identificar y manejar adecuadamente estos valores faltantes.

Veamos si hay valores faltantes en nuestro conjunto de datos:

valores_faltantes = df.isnull().sum()
print(valores_faltantes)

En un escenario ideal, este comando devolvería ceros para todas las columnas. Sin embargo, en la práctica, rara vez es el caso. En las siguientes secciones, veremos cómo manejar estos valores faltantes.

Imputando Valores Numéricos

En el ámbito del Imputer de Scikit-learn, distinguimos entre imputación numérica e imputación categórica. La imputación numérica es el proceso de reemplazar los valores numéricos faltantes con estimaciones estadísticas. Es común utilizar la media, la mediana o la moda como valor de reemplazo.

Para fines de nuestro tutorial, consideremos que la columna 'BloodPressure' tiene valores faltantes. Nuestra primera tarea es confirmar la cantidad de valores faltantes:

print(df['BloodPressure'].isnull().sum())

En la próxima sección, aprenderemos cómo imputar estos valores faltantes utilizando el Imputer SimpleImputer de Scikit-learn.

Imputando Valores Numéricos con el SimpleImputer de Scikit-learn

El SimpleImputer de Scikit-learn proporciona una forma sencilla de manejar valores numéricos faltantes. Ofrece varias estrategias, como reemplazar los valores faltantes con la media, la mediana o un valor constante. Veamos un ejemplo de cómo usar SimpleImputer para imputar los valores faltantes en la columna 'BloodPressure'.

from sklearn.impute import SimpleImputer
 
# Crea una instancia de SimpleImputer
imputer = SimpleImputer(strategy='mean')
 
# Reshape la columna en un array 2D
presion_sanguinea = df['BloodPressure'].values.reshape(-1, 1)
 
# Imputa los valores faltantes
presion_sanguinea_imputada = imputer.fit_transform(presion_sanguinea)
 
# Actualiza el DataFrame con los valores imputados
df['BloodPressure'] = presion_sanguinea_imputada

Al establecer el parámetro de estrategia en 'mean', el SimpleImputer calcula la media de los valores disponibles y reemplaza los valores faltantes con ese valor medio. También se puede utilizar 'median' o 'constant' como estrategia, dependiendo de la naturaleza de sus datos.

Después de imputar los valores faltantes, siempre es una buena práctica verificar si quedan valores faltantes:

print(df['BloodPressure'].isnull().sum())

Con los valores faltantes imputados, la salida debería ser 0, lo que indica que no hay valores faltantes restantes en la columna 'BloodPressure'.

Imputación de valores categóricos

Ahora, pasemos a la imputación de valores categóricos. Para este ejemplo, consideremos la columna 'SkinThickness', que contiene valores categóricos faltantes.

Al igual que en la sección anterior, primero verificaremos cuántos valores faltantes están presentes en la columna 'SkinThickness':

print(df['SkinThickness'].isnull().sum())

Para imputar valores categóricos, podemos utilizar la estrategia 'most_frequent' proporcionada por el SimpleImputer. Esta estrategia reemplaza los valores faltantes por el valor más frecuente en la columna.

# Crear una instancia de SimpleImputer para valores categóricos
imputer_categorical = SimpleImputer(strategy='most_frequent')
 
# Reformar la columna en una matriz 2D
skin_thickness = df['SkinThickness'].values.reshape(-1, 1)
 
# Imputar los valores faltantes
imputed_skin_thickness = imputer_categorical.fit_transform(skin_thickness)
 
# Actualizar el DataFrame con los valores imputados
df['SkinThickness'] = imputed_skin_thickness

Después de imputar los valores faltantes, verifiquemos si quedan valores faltantes en la columna 'SkinThickness':

print(df['SkinThickness'].isnull().sum())

La salida debería ser 0, lo que indica que se han imputado correctamente todos los valores categóricos faltantes en la columna 'SkinThickness'.

Conclusión

En esta parte de la guía, aprendimos cómo utilizar el SimpleImputer de Scikit-learn para manejar valores faltantes tanto en columnas numéricas como categóricas. Exploramos estrategias como la media, la mediana y el valor más frecuente para imputar valores faltantes según la naturaleza de los datos.

La imputación es un paso esencial en el proceso de preprocesamiento de datos, ya que nos permite retener información valiosa y asegurarnos de que nuestros modelos puedan aprender de conjuntos de datos completos. Al aprovechar el SimpleImputer de Scikit-learn, los científicos de datos y los profesionales de aprendizaje automático pueden manejar eficientemente los datos faltantes y construir modelos robustos.