En este tutorial vamos a explorar todo lo que podemos hacer cuando nos encontramos con valores faltantes en nuestro dataset.
En un conjunto de datos hay veces que todas las variables no tienen un valor asociado.
Son valores que faltan 🙃
Por ejemplo, si tienes una lista de personas con su edad y una persona no tiene su edad registrada, ese espacio estará vacío o lo que es lo mismo tendrá un valor faltante.
Los valores faltantes pueden surgir por varias razones, como errores en la recopilación de datos, respuestas incompletas en encuestas, o simplemente porque cierta información no está disponible.
Esto es súper común.
En el análisis de datos, es importante identificar y tratar estos valores faltantes, ya que pueden afectar los resultados de los análisis o los modelos estadísticos.
Además, si lo que estás haciendo es preparar tu dataset para entrenar un modelo de Machine Learning ten en cuenta que hay modelos que no soportan datos de entrada incompletos.
Esto sucede, por ejemplo, en los modelos de la librería Scikit-learn.
En el mundo del análisis de datos con Python, la librería Pandas es una herramienta esencial, especialmente cuando se trata de manejar valores faltantes.
En los próximos apartados vamos a ver diversas técnicas de tratamiento de valores faltantes y con cada una habrá un ejemplo de cómo implementarla con Pandas.
Nuestro objetivo de hoy es conseguir un conjunto de datos completo. Sin valores faltantes.
Estos valores faltantes, que a menudo se representan como NaN
(Not a Number), son muy habituales en conjuntos de datos reales y pueden ser un desafío significativo.
Vamos a aplicar las técnicas de tratamiento de valores faltantes sobre un ejemplo concreto.
El ejemplo será un dataset de aprobación de operaciones de crédito.
En este dataset todos los nombres de características y valores han sido cambiados a símbolos arbitrarios para proteger la confidencialidad de los datos.
Así que prepara un Notebook de Google Colab y vamos a ello. No es necesario que te instales nada, solo te hace falta una cuenta en Google 🙂
Para poder utilizar el dataset directamente en Google Colab sólo tienes que seguir este tutorial y sustituir el dataset que se descarga en ese tutorial por el que realmente queremos utilizar aquí.
!kaggle datasets download -d martaarroyo/credit-approval-dataset
Lo primero que vamos a hacer es cuantificar los valores faltantes que tiene nuestro dataset.
Esto es importante a la hora de decidir cuál de las técnicas de imputación que vamos a ver a continuación vamos a utilizar.
import pandas as pd import matplotlib.pyplot as plt import numpy as np from sklearn.model_selection import train_test_split from sklearn.impute import SimpleImputer, MissingIndicator from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer
Lo primero que haremos es averiguar cuántos valores faltantes tenemos en cada característica. Para ello usaremos pandas.
Nuestro dataset está en la variable data
.
data = pd.read_csv('CreditApproval.csv') data.isnull().sum()
A1 12 A2 12 A3 90 A4 6 A5 6 A6 9 A7 9 A8 90 A9 90 A10 90 A11 0 A12 0 A13 0 A14 13 A15 0 A16 0 dtype: int64
Otro dato que nos puede dar información es saber el porcentaje de valores faltantes que tenemos en cada característica.
data.isnull().mean()
Y también podemos representarlo gráficamente.
data.isnull().mean().plot.bar(figsize=(12,6)) plt.ylabel('Porcentaje de valores faltantes') plt.xlabel('Características')
Estos son los métodos de Pandas que hemos utilizado en esta primera parte:
isnull()
: Lo usamos para identificar los valores faltantes. Crea un vector booleano para cada característica, donde "Verdadero" (True
) indica un valor faltante y "Falso" (False
) indica que el valor está presente en cada fila del conjunto de datos.sum()
: Lo aplicamos sobre los vectores booleanos. Suma todos los valores "Verdadero" (True
), lo que da como resultado el número total de valores faltantes en el conjunto de datos.mean()
: Este método también lo hemos utilizado sobre los vectores booleanos. Calcula el promedio de los valores "Verdadero" (True
), proporcionando el porcentaje de datos faltantes en el conjunto de datos, expresado en forma decimal.Cuando tenemos un conjunto de datos con valores faltantes y mucha prisa, la solución más hardcore 🔥 es eliminar todas las observaciones en las que haya alguna característica cuyo valor no sabemos.
👍 Como ventaja sí que es verdad que es un método rápido y fácil y además preserva la distribución de las variables.
👎 Peeero con este método es posible que acabes cepillándote una parte muy grande del dataset. Implica una gran pérdida de información.
data_cca = data.dropna() print(f'Número total de observaciones: {len(data)}') print(f'Número total de observaciones sin valores faltantes {len(data_cca)}')
Número total de observaciones: 690 Número total de observaciones sin valores faltantes 565
No hay un método de imputación correcto para todos los casos. Usaremos uno u otro dependiendo de nuestro dataset particular.
En cada apartado te iré diciendo en qué casos es más conveniente que apliques cada técnica para tratar los valores faltantes.
Tendrás que tener en cuenta:
A continuación vamos a ver los distintos tipos de imputación y veremos como aplicarlos en la práctica tanto en Pandas como en Scikit-learn.
¡Vamos a ello!