Análisis de Datos Avanzado
Limpieza Avanzada
Imputación de datos más allá de la media
Cuando nos enfrentamos a valores faltantes, la solución más rápida es rellenarlos con la media o la mediana. Sin embargo, este enfoque puede simplificar en exceso la realidad de nuestros datos, especialmente si las variables están correlacionadas. Una técnica más sofisticada es la imputación basada en modelos, donde usamos otras características para predecir y rellenar los valores ausentes.
Uno de los métodos más populares para esto es la imputación por K-Nearest Neighbors (KNN). En lugar de usar un valor agregado de toda la columna, KNN busca las 'k' filas más similares a la que tiene el valor faltante (basándose en las otras columnas) y utiliza la media o mediana de esos "vecinos" para imputar el dato. Esto preserva mejor las relaciones entre variables.
import pandas as pd
from sklearn.impute import KNNImputer
# Creando un DataFrame de ejemplo con valores faltantes
df = pd.DataFrame({
'edad': [25, 30, None, 45, 50],
'ingresos': [50000, 55000, 60000, None, 80000],
'experiencia': [2, 5, 7, 10, 12]
})
# Inicializamos el imputador KNN
imputer = KNNImputer(n_neighbors=2)
# Aplicamos la imputación
df_imputado = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(df_imputado)
Este enfoque es computacionalmente más costoso, pero a menudo produce un conjunto de datos mucho más realista y robusto para el modelado posterior. La elección de 'k' (el número de vecinos) es un hiperparámetro que puede ajustarse para optimizar los resultados.
Detección de valores atípicos
Los valores atípicos (outliers) son observaciones que se desvían significativamente del resto de los datos. Pueden distorsionar los resultados estadísticos y degradar el rendimiento de los modelos de machine learning. Dos métodos matemáticos comunes para detectarlos son el Z-Score y el Rango Intercuartílico (IQR).
El Z-Score mide cuántas desviaciones estándar se aleja un punto de la media. Una regla común es considerar como atípico cualquier punto con un Z-Score mayor que 3 o menor que -3.
Si bien el Z-Score es útil, es sensible a los propios outliers, ya que la media y la desviación estándar se ven afectadas por valores extremos. Un método más robusto es el Rango Intercuartílico (IQR). Este método se centra en el 50% central de los datos.
Un punto de datos se considera un outlier si se encuentra fuera de los siguientes límites: Límite inferior: Límite superior:
import numpy as np
# Datos de ejemplo con un outlier
data = np.array([10, 12, 12, 13, 12, 11, 14, 13, 100])
# Calculamos Q1, Q3 e IQR
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
# Definimos los límites
limite_inferior = Q1 - 1.5 * IQR
limite_superior = Q3 + 1.5 * IQR
# Identificamos los outliers
outliers = [x for x in data if x < limite_inferior or x > limite_superior]
print(f"Límite superior: {limite_superior}") # Salida: 16.5
print(f"Outliers: {outliers}") # Salida: [100]
La decisión de eliminar o no un outlier depende del contexto. Si es un error de entrada de datos, eliminarlo es apropiado. Si representa un evento real pero raro (como una venta masiva en el Black Friday), podría ser mejor transformarlo (por ejemplo, con una transformación logarítmica) o simplemente dejarlo si el modelo es robusto a su presencia.
Normalización y estandarización
Muchos algoritmos de machine learning (como KNN o SVM) son sensibles a la escala de las características. Si una variable como 'ingresos' está en el rango de miles y otra como 'edad' en decenas, la variable de ingresos dominará el análisis. Para evitar esto, escalamos las variables. Las dos técnicas más comunes son la normalización y la estandarización.
La normalización (a menudo llamada escalado Min-Max) reescala los datos a un rango fijo, generalmente de 0 a 1.
La estandarización transforma los datos para que tengan una media de 0 y una desviación estándar de 1. No limita los valores a un rango específico, lo que la hace menos sensible a outliers que la normalización.
La estandarización utiliza la fórmula del Z-Score que vimos anteriormente. El resultado es una distribución con y .
¿Cuándo usar cada una? Si sabes que tus datos no siguen una distribución gaussiana o si tu algoritmo no asume ninguna distribución (como KNN), la normalización es una buena opción. Para algoritmos que sí asumen una distribución gaussiana (como la regresión lineal), la estandarización suele ser más efectiva.
Dominar estas técnicas de limpieza avanzada es fundamental. Permiten transformar un conjunto de datos crudo y problemático en una base sólida y fiable sobre la que construir análisis y modelos precisos.