• Saltar a la navegación principal
  • Saltar al contenido principal
Logo Codificando Bits

Codificando Bits

  • Academia
    • Rutas
    • Cursos
    • Proyectos
    • Tutoriales
  • Acceder
  • Suscribirse

El manejo de datos faltantes en Series de Tiempo

Las Series de Tiempo son un tipo de dato muy común en Ciencia de Datos y Machine Learning. Sin embargo, su procesamiento muchas veces requiere técnicas específicas y un ejemplo de ello es el manejo de datos faltantes.

Por su naturaleza temporal, los elementos consecutivos de una Serie de Tiempo estarán altamente correlacionados, lo que hace que las técnicas convencionales que usamos para el manejo de datos faltantes (por ejemplo, las que aplicamos en datos tabulares) no funcionen adecuadamente en este caso.

Así que este artículo veremos cuáles son y cómo funcionan las principales técnicas diseñadas específicamente para el manejo de datos faltantes en Series de Tiempo.

Técnicas sencillas heredadas de los datos tabulares

Comencemos hablando de las técnicas más sencillas para el manejo de datos faltantes, que son exactamente las mismas técnicas que se usarían cuando tenemos datos en formato tabular.

La técnica de eliminación

El principio de funcionamiento de esta técnica es muy sencillo: si tenemos una serie de tiempo que contiene ciertos valores faltantes (registros marcados en rojo en la figura de abajo), simplemente lo que hacemos es desechar esos elementos de la Serie. Es decir, únicamente preservamos los datos conocidos:

La técnica de eliminación de datos faltantes en Series de Tiempo
La técnica de eliminación de datos faltantes en Series de Tiempo

La gran limitación de esta técnica radica en que, si después de descartar estos registros queremos construir un modelo predictivo (es decir, un modelo que haga pronósticos sobre la Serie de Tiempo), es muy probable que nos quedemos con muy poca información para construir un modelo verdaderamente robusto.

Además, al eliminar datos en la Serie estamos afectando una de sus características esenciales: la correlación entre registros consecutivos.

Imputación global

Otro grupo de técnicas muy sencillas, que también provienen del manejo de datos estructurados, son las técnicas de imputación global.

Imaginemos una Serie de Tiempo con tres porciones o intervalos donde hay registros faltantes (figura de abajo). Lo que se hace primero es calcular alguna medida estadística global de la serie completa; usualmente se utiliza el promedio (la media) o también la mediana. Luego, se toma ese valor numérico calculado y, simplemente, se reemplazan los datos faltantes en esas porciones vacías con dicho valor global:

La técnica de imputación global para el manejo de datos faltantes en Series de Tiempo
La técnica de imputación global para el manejo de datos faltantes en Series de Tiempo

Esta técnica funciona razonablemente bien cuando tenemos una Serie de Tiempo estacionaria, es decir, una serie cuyos parámetros estadísticos no cambian de forma significativa a lo largo del tiempo.

Sin embargo, si la Serie de Tempo tiene tendencia o estacionalidad (es decir, si el valor promedio de la Serie se incrementa o se reduce con el tiempo o si la Serie alcanza valores máximos y mínimos de manera periódica), la imputación global dejará de funcionar y arrojará resultados incorrectos para nuestro análisis.

Como acabamos de ver, los métodos de eliminación o de imputación global no siempre funcionan de manera adecuada. Por lo tanto, lo ideal es recurrir a técnicas específicamente diseñadas para el manejo de datos faltantes en Series de Tiempo. Estas se dividen en tres grandes grupos: imputación usando información local, imputación estacional e imputación usando modelos predictivos.

Imputación usando información local

El principio de funcionamiento de estas técnicas de imputación basada en información local es bastante intuitivo. La idea es completar los datos faltantes tomando como base los valores vecinos de la serie que sí conocemos (que no están incompletos).

Dentro de esta categoría existen principalmente cuatro técnicas: el rellenado hacia adelante (forward fill), el rellenado hacia atrás (backward fill), el rellenado con media móvil y la interpolación.

Rellenado hacia adelante (forward fill)

En el rellenado de datos hacia adelante, el objetivo es completar o reemplazar los datos faltantes con el último valor observado antes de la porción, segmento o intervalo incompleto de la serie de tiempo.

Entendamos esto con un ejemplo. Supongamos que tenemos una serie de tiempo que contiene registros conocidos continuos hasta el minuto 32. Luego, entre el minuto 33 y el 43, tenemos datos faltantes. Posteriormente, a partir del minuto 44, tenemos nuevamente registros conocidos:

Rellenado de datos faltantes hacia adelante (forward fill) en Series de Tiempo
Rellenado de datos faltantes hacia adelante (forward fill) en Series de Tiempo

¿Cómo completamos los datos faltantes entre el minuto 33 y el 43? Con el forward fill, tomamos el último dato conocido a la izquierda de ese intervalo (el valor exacto de la serie en el minuto 32) y propagamos ese mismo valor numérico hacia adelante, rellenando todos los datos faltantes con éste.

Rellenado hacia atrás (backward fill)

La técnica del rellenado hacia atrás es la contraparte exacta del rellenado hacia adelante. En este caso, lo que hacemos es reemplazar los datos faltantes con el primer valor observado inmediatamente después (es decir, a la derecha) del intervalo que contiene los vacíos.

Volviendo al ejemplo de la serie con datos faltantes entre el minuto 33 y 43, lo que haríamos usando Backward Fill sería tomar el dato conocido en el minuto 44 y propagar ese valor hacia atrás, imputando todos los vacíos anteriores con este único dato:

Rellenado de datos faltantes hacia atrás (backward fill) en Series de Tiempo
Rellenado de datos faltantes hacia atrás (backward fill) en Series de Tiempo

Estas dos técnicas (forward y backward fill) funcionan adecuadamente siempre y cuando no tengamos intervalos de tiempo demasiado grandes por completar.

Si, por ejemplo, tenemos una serie de 60 datos tomados con una periodicidad de un minuto y dentro de esa serie existe un hueco de 15 minutos (15 datos faltantes), usar cualquiera de estas dos técnicas implicaría ¡completar el 25% de la información total con exactamente el mismo valor!.

Así que en este caso el uso de esta técnica no sería adecuado. Además, si la Serie presenta tendencia (incremento o reducción continua de su valor en el tiempo) o estacionalidad (valores máximos y mínimos que se repiten periódicamente), estos métodos fallarán, ya que su naturaleza constante no puede capturar dichas variaciones.

Imputación con media móvil

En la técnica de imputación con media móvil el proceso es ligeramente más sofisticado y para ello usamos el concepto de ventana temporal.

Primero, definimos una ventana de tiempo (un intervalo) para tomar una porción específica de la Serie. A partir de los datos que caen dentro de esta ventana, calculamos el promedio (el cual podemos visualizar como una línea punteada de color verde en la figura de abajo). Tomamos ese valor promedio calculado y lo usamos para imputar el siguiente valor faltante continuo en la Serie.

Luego, desplazamos esa ventana una posición hacia la derecha (un instante de tiempo) y repetimos el procedimiento. Es decir, con los datos conocidos y el nuevo dato que acabamos de imputar (que ya forma parte de la ventana), calculamos un nuevo promedio. Esta nueva línea punteada de color verde (en la figura de abajo) la usamos para imputar el siguiente valor faltante. Y luego se sigue desplazando la ventana hacia la derecha, repitiendo el cálculo y la imputación una y otra vez, hasta completar la totalidad de los datos faltantes:

La imputación de datos faltantes en Series de Tiempo usando el método de media móvil
La imputación de datos faltantes en Series de Tiempo usando el método de media móvil

La gran ventaja de este método, comparado con el rellenado hacia adelante o hacia atrás, radica en que el valor imputado no será siempre el mismo. Dado que la ventana se va desplazando a lo largo de la Serie, el valor promedio cambia progresivamente.

Esto hace que la imputación con la media móvil resulte mucho más conveniente cuando tenemos huecos demasiado grandes dentro de la serie de tiempo o cuando ésta presenta tendencia y estacionalidad.

Sin embargo, tiene una desventaja: los resultados dependerán considerablemente del tamaño de la ventana elegida. Si usamos una ventana muy pequeña, el algoritmo no será capaz de capturar las variaciones más relevantes de la Serie. Por el contrario, si la ventana tiene una duración excesivamente grande, los valores de la imputación serán casi siempre los mismos, generando un resultado final muy similar al del forward o backward fill.

Imputación por interpolación

Esta técnica toma los dos valores extremos, del lado izquierdo y derecho del segmento que contiene los datos faltantes, los usa como referencia y, con base en ellos, construye una recta de interpolación. Esta recta es básicamente la ecuación matemática de una línea recta que nos permitirá determinar analíticamente los valores faltantes:

El manejo de datos faltantes en Series de Tiempo usando la técnica de interpolación
El manejo de datos faltantes en Series de Tiempo usando la técnica de interpolación

En la figura de arriba vemos un ejemplo práctico: si en el extremo izquierdo, en el instante de tiempo t = 32, la serie de tiempo tiene un valor de 5.8 (el primer punto rojo ubicado a la izquierda) y en el extremo derecho, en el minuto 44, la serie tiene un valor de 4.0, podemos usar estos dos puntos para encontrar la ecuación de una línea recta.

Esta ecuación es y = -0.15 * t + 10.6. Con esta ecuación definida, simplemente comenzamos a reemplazar la variable de tiempo. Cuando t = 33, obtenemos el valor de y; cuando t = 44, obtenemos el valor de y correspondiente. Y así sucesivamente hasta completar todos los datos faltantes en el hueco temporal.

Es importante mencionar que podríamos usar ecuaciones más sofisticadas (no solo rectas, sino polinomios cuadráticos o cúbicos) para realizar la interpolación.

La ventaja fundamental de este método es que funciona adecuadamente para series tanto con tendencia como sin ella y aplica también para estacionalidad. La principal desventaja es su alta sensibilidad a valores extremos (outliers). Si uno de los dos datos base usados para definir la recta de interpolación es demasiado grande o demasiado pequeño por un error de medición, la recta entera resultará afectada. Esto provocará que todos los datos imputados se alejen de manera considerable de los patrones comunes de la Serie de Tiempo.

Imputación por estacionalidad

Como su nombre lo indica, la imputación por estacionalidad se aplica en Series de Tiempo que presentan algún tipo de comportamiento estacional (comportamiento con máximos o mínimos que se repiten periódicamente).

Para entender cómo funciona, imaginemos una Serie de Tiempo que alcanza valores mínimos siempre en los meses de enero y picos máximos siempre en los meses de agosto (figura de abajo). Supongamos que algunas porciones de esta serie están incompletas: del lado derecho de nuestra gráfica vemos que en el mes de enero faltan datos, al igual que en el mes de agosto:

La imputación de datos faltantes aprovechando la estacionalidad de la Serie de Tiempo
La imputación de datos faltantes aprovechando la estacionalidad de la Serie de Tiempo

¿Qué hace exactamente la imputación estacional? Partiendo de la periodicidad conocida de la Serie, si nos falta un dato en enero, podemos buscar en el registro histórico los datos conocidos de los meses de enero de años anteriores (representados por puntos de color rojo en la figura de arriba). Usamos esos valores históricos directos para imputar el dato faltante actual de enero. Y luego hacemos algo completamente análogo para los vacíos de agosto, tomando como referencia los datos históricos de agosto (puntos de color verde) e imputando los faltantes.

Este mismo principio puede aplicarse a casos más complejos. Por ejemplo, si tenemos una Serie que tiene tanto estacionalidad como tendencia (máximos y mínimos periódicos, pero cuyo valor promedio se incrementa a lo largo de los años). ¿Qué se hace en ese caso?

  1. Primero, se elimina matemáticamente la tendencia, dejando únicamente el componente estacional puro de la serie.
  2. Segundo, se realiza la imputación estacional tal como acabamos de explicar.
  3. Finalmente, habiendo imputado los datos faltantes en la serie estacional, se vuelve a agregar la tendencia para restaurar el comportamiento y escala original de la señal.

Imputación con modelos predictivos

El último conjunto de técnicas, y a menudo el más avanzado, es la imputación haciendo uso de modelos predictivos. La idea subyacente es bastante lógica: consiste en construir un modelo predictivo, que puede ser un modelo estadístico tipo ARIMA o un modelo de Deep Learning basado en Redes Neuronales Recurrentes (como las redes LSTM). La elección de la arquitectura dependerá enteramente de las características y complejidad de la serie de tiempo.

Este modelo debe entrenarse utilizando los valores conocidos de la serie presentados a su entrada, aprendiendo internamente a predecir la secuencia correcta de datos:

Un modelo predictivo pronostica los valores futuros de la Serie de Tiempo, usando como referencia los valores históricos
Un modelo predictivo pronostica los valores futuros de la Serie de Tiempo, usando como referencia los valores históricos

Una vez que el modelo predictivo está entrenado de manera satisfactoria, lo llevamos a nuestra Serie de Tiempo incompleta. Le presentamos a la entrada los registros temporalmente adyacentes a los huecos y utilizamos las predicciones arrojadas por el modelo para ir completando los datos faltantes:

La imputación de datos faltantes en Series de Tiempo usando modelos predictivos
La imputación de datos faltantes en Series de Tiempo usando modelos predictivos

Aunque la imputación con modelos predictivos es uno de los métodos más recomendados por su alta precisión, el éxito de esta técnica dependerá de qué tan robusto sea el modelo que logremos construir.

La robustez de un modelo de Machine Learning, a su vez, depende de la calidad y volumen de los datos usados para entrenarlo. Generalmente, si tenemos Series de Tiempo con muy pocos registros totales y además tenemos demasiados registros faltantes, será sumamente complicado lograr construir un modelo lo suficientemente robusto que justifique este enfoque.

Conclusión

El correcto manejo de datos faltantes en Series de Tiempo es una etapa crítica de preprocesamiento en proyectos de Ciencia de Datos e implica ir un paso más allá de los métodos clásicos.

En resumen, los puntos clave a recordar son:

  • Las técnicas sencillas de datos tabulares (eliminación de registros o imputación con la media/mediana global) rara vez son efectivas debido a la alta correlación temporal presente en la Serie de Tiempo.
  • Es fundamental utilizar métodos específicamente diseñados para Series de Tiempo, los cuales se dividen en métodos de información local, estacionalidad o modelos predictivos.
  • Dentro de la información local, métodos como el rellenado hacia adelante o hacia atrás son útiles pero fallan en huecos muy grandes o con presencia de tendencia y estacionalidad.
  • La imputación por media móvil y la interpolación ofrecen mayor flexibilidad frente a las variaciones temporales, pero resulta clave elegir correctamente las ventanas temporales y evitar posibles sesgos debidos a los outliers (o valores extremos)
  • Si existe un patrón periódico claro, la imputación por estacionalidad, extrayendo y devolviendo la tendencia, ofrece resultados muy buenos en este tipo de Series.
  • Finalmente, la imputación con modelos predictivos (ARIMA, LSTM, etc.) es el estándar de oro actual, siempre y cuando poseamos el suficiente volumen y calidad de datos para el entrenamiento de este tipo de modelos.

En la práctica, cada técnica tiene sus ventajas y desventajas y ninguna es mejor que otra. La elección final dependerá siempre de un análisis previo a nuestra Serie de Tiempo para determinar su naturaleza (tendencia, estacionalidad, porcentaje de datos faltantes y longitud de los intervalos vacíos).

Si te interesa profundizar en estas técnicas y ver cómo usar Python para aplicarlas a diferentes problemas, te invito a darle una mirada al curso Series de Tiempo: pre-procesamiento, donde vemos de forma práctica cómo leer, visualizar y realizar la limpieza de diferentes tipos de Series de Tiempo.

© Codificando Bits, LLC | Blog | Contacto | Servicios | Acerca de | Políticas

¿Has olvidado la contraseña?
¿Has perdido tu contraseña? Por favor, introduce tu nombre de usuario o dirección de correo electrónico. Recibirás por correo electrónico un enlace para crear una nueva contraseña.
body::-webkit-scrollbar { width: 7px; } body::-webkit-scrollbar-track { border-radius: 10px; background: #f0f0f0; } body::-webkit-scrollbar-thumb { border-radius: 50px; background: #dfdbdb }