curso
Las mejores técnicas para gestionar valores perdidos que todo científico de datos debe conocer
La falta de datos es un problema común e inherente a la recopilación de datos, especialmente cuando se trabaja con grandes conjuntos de datos. Hay varias razones para que falten datos, como la información incompleta facilitada por los participantes, la falta de respuesta de quienes se niegan a compartir información, encuestas mal diseñadas o eliminación de datos por razones de confidencialidad.
Si no se gestionan adecuadamente, los datos que faltan pueden sesgar las conclusiones de todos los análisis estadísticos de los datos, llevando a la empresa a tomar decisiones equivocadas.
Este artículo se centrará en algunas técnicas para manejar eficazmente los valores perdidos y sus implementaciones en Python. Ilustraremos las ventajas e inconvenientes de cada técnica para ayudarle a elegir la más adecuada en cada situación.
Identificar los datos que faltan
Los datos que faltan se presentan en distintos formatos. En esta sección se explican los distintos tipos de datos que faltan y cómo identificarlos.
Tipos de datos que faltan
Existen tres tipos principales de datos omitidos: (1) Falta Completamente al Azar (MCAR), (2) Falta al Azar (MAR) y (3) Falta No al Azar (MNAR).
Es importante conocer mejor cada uno de ellos para elegir los métodos adecuados para gestionarlos.
1) MCAR - Desaparecido completamente al azar
Esto ocurre si todas las variables y observaciones tienen la misma probabilidad de faltar. Imagina que le das a un niño Lego de distintos colores para que construya una casa. Cada Lego representa una información, como la forma y el color. El niño puede perder algunos Legos durante el juego. Estos legos perdidos representan información perdida, igual que cuando no pueden recordar la forma o el color del Lego que tenían. Esa información se perdió al azar, pero no cambian la información que el niño tiene sobre los otros Legos.
2) MAR - Desaparecido al azar
Para MAR, la probabilidad de que falte un valor está relacionada con el valor de la variable o de otras variables del conjunto de datos. Esto significa que no todas las observaciones y variables tienen la misma probabilidad de faltar. Un ejemplo de SAM es una encuesta en la comunidad de datos en la que los científicos de datos que no actualizan con frecuencia sus conocimientos tienen más probabilidades de no estar al tanto de los nuevos algoritmos o tecnologías de vanguardia, de ahí que se salten ciertas preguntas. Los datos que faltan, en este caso, están relacionados con la frecuencia con la que el científico de datos se actualiza.
3) MNAR- Falta no aleatoria
Se considera que MNAR es el escenario más difícil entre los tres tipos de datos que faltan. Se aplica cuando no se aplican ni MAR ni MCAR. En esta situación, la probabilidad de que falte es completamente diferente para distintos valores de la misma variable, y estas razones pueden ser desconocidas para nosotros. Un ejemplo de MNAR es una encuesta sobre parejas casadas. Es posible que las parejas con una mala relación no quieran responder a ciertas preguntas porque les da vergüenza hacerlo.
Métodos para identificar los datos que faltan
Hay múltiples métodos que se pueden utilizar para identificar los datos que faltan en pandas. A continuación figuran los más recurrentes.
Funciones |
Descripciones |
.isnull() |
Esta función devuelve un marco de datos pandas, donde cada valor es un valor booleano True si falta el valor, False en caso contrario. |
.notnull() |
De forma similar a la función anterior, los valores para ésta son False si se detecta un valor NaN o None. |
.info() |
Esta función genera tres columnas principales, incluido el "Recuento de valores no nulos", que muestra el número de valores no ausentes de cada columna. |
.isna() |
Es similar a isnull y notnull. Sin embargo, sólo muestra True cuando el valor que falta es de tipo NaN. |
Tabla de métodos para identificar los datos que faltan
Tratamiento de los datos no disponibles
Existen múltiples métodos para tratar los datos que faltan. En esta sección se describen algunas de ellas, junto con sus ventajas e inconvenientes.
Para ilustrar mejor el caso de uso, utilizaremos los Datos de Préstamos disponibles en DataLab junto con el código fuente cubierto en el tutorial.
Dado que el conjunto de datos no contiene valores perdidos, utilizaremos un subconjunto de los datos (100 filas) e introduciremos manualmente los valores perdidos.
import pandas as pd
sample_customer_data = pd.read_csv("data/customer_churn.csv", nrows=100)
sample_customer_data.info()
Muestra de 100 muestras aleatorias antes de introducir los valores perdidos
Introduzcamos el 50% de valores perdidos en cada columna del marco de datos utilizando.
import numpy as np
def introduce_nan(x,percentage):
n = int(len(x)*(percentage - x.isna().mean()))
idxs = np.random.choice(len(x), max(n,0), replace=False, p=x.notna()/x.notna().sum())
x.iloc[idxs] = np.nan
Aplicando la función a los datos se obtiene este resultado.
sample_customer_data.apply(introduce_nan, percentage=.5)
sample_customer_data.info()
Muestra de 100 muestras aleatorias tras introducir los valores perdidos
A continuación se muestran las cinco primeras filas del conjunto de datos.
sample_customer_data.head()
Cinco primeras filas con valores nulos
Caída de datos
Utilizar la función dropna()
es la forma más sencilla de eliminar observaciones o características con valores perdidos del marco de datos. A continuación se exponen algunas técnicas.
1) Eliminar las observaciones con valores omitidos
Estas tres situaciones pueden darse al intentar eliminar observaciones de un conjunto de datos:
dropna()
: elimina todas las filas con valores perdidos.
drop_na_strategy = sample_customer_data.dropna()
drop_na_strategy.info()
Deje caer las observaciones utilizando la función por defecto dropna()
Podemos ver que todas las observaciones se eliminan del conjunto de datos, lo que puede ser especialmente peligroso para el resto del análisis.
dropna(how = ‘all’)
: las filas en las que faltan todos los valores de columna.
drop_na_all_strategy = sample_customer_data.dropna(how="all")
drop_na_all_strategy.info()
En el resultado que se muestra a continuación, observamos que no hay ninguna observación en la que falten todas las columnas.
Eliminar observaciones utilizando la estrategia "todos
dropna(thresh = minimum_value)
: elimina filas en función de un umbral. Esta estrategia establece un número mínimo de valores perdidos necesarios para conservar las filas.
drop_na_thres_strategy = sample_customer_data.dropna(thresh=0.6)
drop_na_thres_strategy.info()
Ajustando el umbral al 60%, el resultado es el mismo que el anterior.
Eliminación de observaciones mediante umbral
2) Eliminar las columnas con valores omitidos
El parámetro axis = 1
puede utilizarse para especificar explícitamente que nos interesan las columnas en lugar de las filas.
dropna(axis = 1)
: elimina todas las columnas con valores perdidos.
drop_na_cols_strategy = sample_customer_data.dropna(axis=1)
drop_na_cols_strategy.info()
No hay más columnas en los datos. Esto se debe a que en todas las columnas falta al menos un valor.
Cuadro de datos vacío después de dropna()
en columnas
Como muchos otros enfoques, dropna()
también tiene algunos pros y contras.
Pros
- Sencillo y fácil de usar.
- Beneficioso cuando los valores perdidos no tienen importancia.
Contras
- Utilizar este enfoque puede provocar una pérdida de información, lo que puede introducir sesgos en el conjunto de datos final.
- Esto no es apropiado cuando los datos no faltan completamente al azar.
- Los conjuntos de datos con una gran proporción de valores perdidos pueden disminuir significativamente, lo que puede repercutir en el resultado de todos los análisis estadísticos de ese conjunto de datos.
Imputación media/mediana
Estas estrategias de sustitución se explican por sí solas. Las imputaciones de la media y la mediana se utilizan, respectivamente, para sustituir los valores que faltan en una columna determinada por la media y la mediana de los valores que no faltan en esa columna.
La distribución normal es el escenario ideal. Por desgracia, no siempre es así. Aquí es donde la imputación de la mediana puede ser útil porque no es sensible a los valores atípicos.
En Python, se puede utilizar la función fillna()
de pandas para realizar estas sustituciones.
- Ilustración de la imputación de medias.
mean_value = sample_customer_data.mean()
mean_imputation = sample_customer_data.fillna(mean_value)
Resultado de la imputación media
- Ilustración de la imputación mediana
median_value = sample_customer_data.median()
median_imputation = sample_customer_data.fillna(median_value)
median_imputation.head()
Resultado de la imputación mediana
Pros
- La sencillez y la facilidad de aplicación son algunas de las ventajas de la imputación de la media y la mediana.
- La imputación se realiza utilizando la información existente de los datos no ausentes, por lo que no se requieren datos adicionales.
- La imputación de la media y la mediana pueden proporcionar una buena estimación de los valores que faltan, respectivamente para datos con distribución normal y datos sesgados.
Contras
- No podemos aplicar estas dos estrategias a columnas categóricas. Sólo pueden funcionar para los numéricos.
- La imputación de medias es sensible a los valores atípicos y puede no ser una buena representación de la tendencia central de los datos. Al igual que la media, la mediana tampoco puede representar mejor la tendencia central.
- La imputación de la mediana parte del supuesto de que los datos faltan completamente al azar (MCAR), lo que no siempre es cierto.
Imputación aleatoria de muestras
La idea que subyace a la imputación de muestras aleatorias es diferente de las anteriores e implica pasos adicionales.
- En primer lugar, empieza creando dos subconjuntos a partir de los datos originales.
- El primer subconjunto contiene todas las observaciones sin datos que faltan, y el segundo, las que tienen datos que faltan.
- A continuación, selecciona aleatoriamente de cada subconjunto una observación aleatoria.
- Además, los datos que faltan de la observación seleccionada anteriormente se sustituyen por los existentes de la observación que dispone de todos los datos.
- Por último, el proceso continúa hasta que no falta más información.
def random_sample_imputation(df):
cols_with_missing_values = df.columns[df.isna().any()].tolist()
for var in cols_with_missing_values:
# extract a random sample
random_sample_df = df[var].dropna().sample(df[var].isnull().sum(),
random_state=0)
# re-index the randomly extracted sample
random_sample_df.index = df[
df[var].isnull()].index
# replace the NA
df.loc[df[var].isnull(), var] = random_sample_df
return df
df = sample_customer_data.copy()
random_sample_imp_df = random_sample_imputation(sample_customer_data)
random_sample_imp_df.head()
Imputación aleatoria de muestras
Pros
- Se trata de una técnica fácil y sencilla.
- Aborda tanto tipos de datos numéricos como categóricos.
- Hay menos distorsión en la varianza de los datos, y también preserva la distribución original de los datos, lo que no ocurre con la media, la mediana y más.
Contras
- La aleatoriedad no funciona necesariamente para todas las situaciones, y esto puede infundir ruido en los datos, lo que lleva a conclusiones estadísticas incorrectas.
- De forma similar a la media y la mediana, este enfoque también asume que los datos faltan completamente al azar (MCAR).
Imputación múltiple
Se trata de una técnica de imputación multivariante, lo que significa que la información que falta se rellena teniendo en cuenta la información de las demás columnas.
Por ejemplo, si falta el valor de los ingresos de una persona, no se sabe si tiene o no una hipoteca. Por lo tanto, para determinar el valor correcto, es necesario evaluar otras características como la puntuación crediticia, la ocupación y si la persona posee o no una vivienda.
La imputación múltiple por ecuaciones encadenadas (MICE, por sus siglas en inglés) es uno de los métodos de imputación multivariante más populares. Para comprender mejor el enfoque MICE, consideremos el conjunto de variables X1, X2, ... Xn, donde algunas o todas tienen valores perdidos.
El algoritmo funciona de la siguiente manera:
- Para cada variable, sustituya el valor que falta con una estrategia de imputación simple, como la imputación de medias, también considerada como "marcadores de posición".
- Los "marcadores de posición" de la primera variable, X1, se regresan utilizando un modelo de regresión en el que X1 es la variable dependiente y el resto de variables son las variables independientes. A continuación, X2 se utiliza como variable dependiente y el resto como variables independientes. El proceso continúa así hasta que todas las variables se consideran al menos una vez como variable dependiente.
- Esos "marcadores de posición" originales se sustituyen por las predicciones del modelo de regresión.
- El proceso de sustitución se repite durante un número de ciclos que suele ser de diez, según Raghunathan et al. 2002, y la imputación se actualiza en cada ciclo.
- Al final del ciclo, lo ideal es sustituir los valores que faltan por los valores de predicción que mejor reflejen las relaciones identificadas en los datos.
La implementación se realiza utilizando la biblioteca miceforest.
En primer lugar, tenemos que instalar la biblioteca utilizando la página pip
.
pip install miceforest
A continuación, importamos el módulo ImputationKernel
y creamos el núcleo para la imputación.
from miceforest import ImputationKernel
mice_kernel = ImputationKernel(
data = sample_customer_data,
save_all_iterations = True,
random_state = 2023
)
Además, ejecutamos el núcleo en los datos durante dos iteraciones y, por último, creamos los datos imputados.
mice_kernel.mice(2)
mice_imputation = mice_kernel.complete_data()
mice_imputation.head()
Imputación múltiple
Pros
- La imputación múltiple es muy eficaz para tratar los datos que faltan en múltiples variables y tipos de datos.
- Este enfoque puede producir resultados mucho mejores que las imputaciones de media y mediana.
- Muchos otros algoritmos, como K-Nearest Neighbors, Random forest y redes neuronales, pueden utilizarse como columna vertebral de la predicción por imputación múltiple para realizar predicciones.
Contras
- La imputación múltiple supone que los datos faltan de forma aleatoria (MAR).
- A pesar de todas sus ventajas, este enfoque puede resultar caro desde el punto de vista informático en comparación con otras técnicas, especialmente cuando se trabaja con grandes conjuntos de datos.
- Este enfoque requiere más esfuerzo que los anteriores.
De todas las imputaciones, es posible identificar cuál se aproxima más a la distribución de los datos originales.
La media (en amarillo) y la mediana (en rojo) están muy alejadas de la distribución original de los datos de la columna "Importe del cargo", por lo que no se consideran adecuadas para imputar los datos.
mean_imputation["Charge Amount Mean Imp"] = mean_imputation["Charge Amount"]
median_imputation["Charge Amount Median Imp"] = median_imputation["Charge Amount"]
random_sample_imp_df["Charge Amount Random Imp"] = random_sample_imp_df["Charge Amount"]
Con las nuevas columnas creadas para cada tipo de imputación, ahora podemos trazar la distribución.
import matplotlib.pyplot as plt
plt.figure(figsize=(12,8))
sample_customer_data["Charge Amount"].plot(kind='kde',color='blue')
mean_imputation["Charge Amount Mean Imp"].plot(kind='kde',color='yellow')
median_imputation["Charge Amount Median Imp"].plot(kind='kde',color='red')
Distribución "Importe del cargo": datos originales frente a media frente a mediana.
Al trazar la imputación múltiple y la imputación aleatoria a continuación, estas distribuciones se superponen perfectamente con los datos originales. Esto significa que esas imputaciones son mejores que las imputaciones de la media y la mediana.
random_sample_imp_df["Charge Amount Random Imp"] = random_sample_imp_df["Charge Amount"]
mice_imputation["Charge Amount MICE Imp"] = mice_imputation["Charge Amount"]
mice_imputation["Charge Amount MICE Imp"].plot(kind='kde',color='black')
random_sample_imp_df["Charge Amount Random Imp"].plot(kind='kde',color='purple')
plt.legend()
Distribución "Importe del cargo": datos originales vs. media vs. mediana vs. MICE vs.aleatorio
El curso Manejo de datos perdidos con imputaciones en R es un gran recurso para aprender más sobre estrategias para manejar valores perdidos. Cubre cómo aplicar la visualización y las pruebas estadísticas para reconocer patrones de datos perdidos y cómo imputarlos con técnicas estadísticas y de aprendizaje automático.
En la misma línea, el curso de tratamiento de datos omitidos en Python explica cómo identificar, analizar, eliminar e imputar datos omitidos en Python.
Buenas prácticas
Elegir el método de imputación adecuado en función del tipo de datos que faltan
Existen múltiples estrategias de imputación, y no deben utilizarse a ciegas. Adoptar el enfoque adecuado puede evitar introducir sesgos en los datos y tomar decisiones equivocadas.
La siguiente tabla ilustra qué método de imputación utilizar en función del tipo de datos que faltan. La lista de métodos no es exhaustiva, pero éstos son los más utilizados.
Tipo de datos que faltan |
Método de imputación |
Desaparecido completamente al azar |
Media, mediana, moda o cualquier otro método de imputación |
Desaparecido al azar |
Imputación múltiple, Imputación por regresión |
Desaparecido No al azar |
Sustitución de patrones, estimación de máxima verosimilitud |
Evaluación del impacto de la imputación en el análisis global
Es importante tener en cuenta que los datos originales no pueden recuperarse sea cual sea la técnica de imputación. Sin embargo, es posible utilizar técnicas capaces de generar conjuntos de datos imputados lo más parecidos posible a la realidad.
A continuación se indican algunos pasos clave a tener en cuenta durante la evaluación.
- Ejecute múltiples técnicas de imputación para identificar la más robusta. Esto puede ayudar a identificar cualquier sesgo y variaciones de una técnica a otra.
- Compare los datos imputados finales con los datos originales no imputados para evaluar la fiabilidad del método de imputación.
- Incluya el proceso de imputación en la cadena de análisis global, desde la limpieza de datos hasta la creación de cualquier modelo de aprendizaje automático.
Comunicación a las partes interesadas de los datos que faltan y de los métodos de imputación
Disponer de datos de buena calidad es el objetivo de cualquier interesado y profesional de los datos.
La honestidad y la transparencia son fundamentales a la hora de comunicar los datos que faltan en el análisis. A continuación se indican algunos aspectos importantes a tener en cuenta.
- Tenga en cuenta el contexto de los datos que faltan, si se trata de MCAR, MAR o MNAR.
- Explique y documente claramente los métodos utilizados para abordar los datos que faltan en los datos globales y analice las ventajas e inconvenientes de cada enfoque.
- Comunicar los resultados de forma comprensible para las partes interesadas.
Conclusión
En este artículo se ha tratado qué son los datos que faltan y su repercusión en el proceso de toma de decisiones basado en datos. También le ha guiado a través de algunas estrategias para manejarlos, junto con sus ventajas e inconvenientes para la toma de decisiones procesables.
Esperamos que le proporcione las estrategias pertinentes para resolver eficazmente sus problemas de falta de datos.
Preguntas frecuentes sobre valores perdidos
¿Qué son los datos que faltan?
Datos ausentes significa que algunas o todas las variables de los datos tienen un valor ausente.
¿Cuáles son los distintos tipos de datos que faltan?
Existen tres tipos principales de datos omitidos. Desaparecidos completamente al azar (MCAR), Desaparecidos al azar (MAR) y Desaparecidos no al azar (MNAR)
¿Cómo tratar los datos que faltan?
Para tratar los valores que faltan pueden adoptarse los siguientes enfoques: imputación de la media, la mediana y la moda, imputación de muestras aleatorias e imputaciones múltiples. La lista no es exhaustiva, y cada uno de estos métodos tiene sus pros y sus contras.
¿Por qué son importantes los datos que faltan?
Es importante tenerlas en cuenta porque pueden afectar al rendimiento de sus modelos de aprendizaje automático y sesgar las conclusiones derivadas de todos los análisis estadísticos de los datos, lo que puede llevar a la empresa a tomar decisiones equivocadas.
Cursos superiores
curso
Dealing With Missing Data in R
blog
Cómo analizar datos para tu empresa en 5 pasos
blog
9 Competencias esenciales del analista de datos: Guía profesional completa
tutorial
21 herramientas esenciales de Python
tutorial
Los 6 mejores IDEs de Python para ciencia de datos en 2023
tutorial
Comprender la regresión logística en el tutorial de Python
Avinash Navlani
10 min
tutorial
Tutorial de Lasso y regresión Ridge en Python
DataCamp Team
10 min