Manejo de Datos Faltantes en Series Temporales

La recolección de datos a menudo genera valores ausentes debido a fallos en sensores, problemas de transmisión o mantenimiento. En series temporales, la imputación es más compleja porque las observaciones son secuenciales. Además, el mecanismo que causa la ausencia (MCAR, MAR, NMAR) influye en la estrategia óptima.

Causas de datos faltantes y su relevancia

  • Completamente aleatorio (MCAR): No existe un proceso sistemático detrás de la ausencia. Ejemplo: fallo aleatorio de un sensor.
  • Aleatorio (MAR): La ausencia se relaciona con otros valores de la serie, pero no con el propio valor faltante. Ejemplo: un sensor deja de transmitir durante un mantenimiento programado.
  • No aletaorio (NMAR): La probabilidad de que falte un valor depende de su propio valor. Ejemplo: un sensor de temperatura falla solo cuando la temepratura es extremadamente alta.

Conocer el mecanismo ayuda a elegir una técnica de imputación robusta.

Preparación de datos de ejemplo

Cargamos una serie temporla trimestral del conjunto M3 y simulamos valores ausentes (MCAR):

import numpy as np
import pandas as pd
from datasetsforecast.m3 import M3

# Cargar serie
dataset, *_ = M3.load('./data', 'Quarterly')
serie = dataset.query(f'unique_id=="Q1"').copy()

# Simular 30% de valores ausentes aleatorios
np.random.seed(42)
n = len(serie)
indices_ausentes = np.random.choice(n, size=int(0.3*n), replace=False)
serie_na = serie.copy()
serie_na.loc[serie_na.index[indices_ausentes], 'y'] = np.nan

Valores ausentes en serie temporal

Métodos de imputación

Propagación hacia adelante y atrás

Hacia adelante (forward fill): reemplaza con el último valor conocido.

serie_na_ffill = serie_na.ffill()

Hacia atrás (backward fill): usa el siguiente valor no nulo. Se recomienda evitar si se quiere prevenir fuga de datos futuros.

serie_na_bfill = serie_na.bfill()

Imputación con media

Media global (no recomendada para series temporales porque ignora la estacionalidad y la tendencia):

serie_na_mean = serie_na.fillna(serie_na.mean())

Media móvil (ventana de 5 periodos):

ventana = 5
media_movil = serie_na.rolling(window=ventana, min_periods=1).mean()
serie_na_ma = serie_na.fillna(media_movil)

Interpolación

La interpolación lineal asume una relación lineal entre puntos conocidos:

serie_na_interp_lin = serie_na.interpolate(method='linear')

Interpolación polinómica (orden 2) o spline:

serie_na_interp_poly = serie_na.interpolate(method='polynomial', order=2)
serie_na_interp_spline = serie_na.interpolate(method='spline', order=3)

Comparación de métodos de imputación

Eliminación de valores ausentes

Si la muestra es grande y la ausencia es aleatoria, se pueden eliminar las filas con NaN. Primero transformamos la serie a formato supervisado (ventana deslizante):

def serie_a_supervisada(datos, lags=5, horizonte=1):
    df = pd.DataFrame()
    for i in range(lags, len(datos) - horizonte + 1):
        fila = datos.iloc[i - lags:i].values.tolist() + [datos.iloc[i + horizonte - 1]]
        df = pd.concat([df, pd.DataFrame([fila])], ignore_index=True)
    return df

df_completo = serie_a_supervisada(serie_na['y'].values, lags=5, horizonte=1)
df_sin_na = df_completo.dropna()

Muestra de datos transformados con y sin valores ausentes

Conclusiones clave

  • Los datos faltantes en series temporales pueden deberse a distintos mecanismos; identificarlos mejora la elección del método.
  • La propagación hacia adelante, la media móvil y la interpolación son técnicas comunes; cada una tiene fortalezas y debilidades.
  • Eliminar observaciones incompletas es viable si la pérdida de información es mínima y no introduce sesgo.

Gracias por leer. En próximos artículos profundizaremos en técnicas avanzadas como imputación basada en modelos.

Código completo

El cuaderno de ejemplo está disponible en el repositorio del autor.

Referencias

  • Moritz, S., & Bartz-Beielstein, T. (2017). imputeTS: Time Series Missing Value Imputation in R. R J., 9(1), 207.
  • Jamshidian, M., Jalal, S. J., & Jansen, C. (2014). MissMech: An R Package for Testing Homoscedasticity, Multivariate Normality, and Missing Completely at Random (MCAR). Journal of Statistical Software, 56(6), 1–31.

Etiquetas: Series Temporales datos faltantes imputación MCAR MAR

Publicado el 7-6 07:58