Saltar al contenido principal

Las mejores técnicas para gestionar valores perdidos que todo científico de datos debe conocer

Explore varias técnicas para manejar eficazmente los valores perdidos y sus implementaciones en Python.
3 may 2024  · 15 min de lectura

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

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()

muestras tras introducir los valores perdidos

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

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()

Observaciones

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.

muestras tras introducir los valores perdidos

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.

Eliminar observaciones utilizando la estrategia "todos

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.

Marco de datos vacío después de dropna

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

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 media

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

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

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')

Datos originales vs media vs mediana

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()

datos originales vs media vs mediana vs MICE vs aleatorio

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.

Temas

Cursos superiores

curso

Dealing with Missing Data in Python

4 hr
22.6K
Learn how to identify, analyze, remove and impute missing data in Python.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

blog

Cómo analizar datos para tu empresa en 5 pasos

Descubre los distintos pasos para analizar los datos y extraer valor de ellos, así como los métodos y técnicas que intervienen en el proceso.
Javier Canales Luna's photo

Javier Canales Luna

14 min

Data Analyst surfing on wave of data

blog

9 Competencias esenciales del analista de datos: Guía profesional completa

Aprenda habilidades esenciales de analista de datos, tanto técnicas como interpersonales, desde la programación en Python hasta la comunicación eficaz, para avanzar en su carrera.
Matt Crabtree's photo

Matt Crabtree

9 min

tutorial

21 herramientas esenciales de Python

Conozca las herramientas esenciales de Python para el desarrollo de software, raspado y desarrollo web, análisis y visualización de datos y aprendizaje automático.
Abid Ali Awan's photo

Abid Ali Awan

6 min

tutorial

Los 6 mejores IDEs de Python para ciencia de datos en 2023

En este artículo, hablaremos de seis de los mejores IDE para científicos de datos en 2023
Adel Nehme's photo

Adel Nehme

9 min

tutorial

Comprender la regresión logística en el tutorial de Python

Aprende sobre la regresión logística, sus propiedades básicas, y construye un modelo de machine learning sobre una aplicación del mundo real en Python.
Avinash Navlani's photo

Avinash Navlani

10 min

tutorial

Tutorial de Lasso y regresión Ridge en Python

Conozca las técnicas de regresión del lazo y la cresta. Compare y analice los métodos en detalle.
DataCamp Team's photo

DataCamp Team

10 min

See MoreSee More