Análisis de la complejidad de series temporales utilizando entropía

Análisis de la complejidad de series temporales

Aquí hay un método para entender la complejidad de tus series de tiempo, en unas pocas líneas de código

Imagen del autor, generada utilizando Midjourney

Todo científico de datos sabe esto: el primer paso para la solución de un problema de Aprendizaje Automático es la exploración de los datos.

Y no se trata solo de entender qué características pueden ayudarte a resolver el problema. Eso en realidad requiere conocimiento del dominio, mucho esfuerzo, hacer muchas preguntas y tratar de descubrirlo. Ese es un paso necesario, pero en mi opinión, es el paso número dos.

El primer paso es, de alguna manera, basado en el análisis de qué tan complejos son tus datos. ¿Te están pidiendo que encuentres detalles finos y patrones en algo que es más o menos siempre lo mismo, o las salidas son completamente diferentes entre sí? ¿Quieren que encuentres la distancia entre 0.0001 y 0.0002 o quieren que encuentres la distancia entre 0 y 10?

Déjame explicarme mejor.

Por ejemplo, soy un especialista en procesamiento de señales. Estudié Transformada de Fourier, Transformada de Chirplet, Transformada Wavelet, Transformada de Hilbert, Pronóstico de Series de Tiempo, Agrupación de Series de Tiempo, CNN 1D, RNN y muchos otros nombres aterradores.

Un problema muy común en el dominio de las Series de Tiempo es pasar de una entrada (que puede ser otra serie de tiempo) a una salida de serie de tiempo. Por ejemplo:

  • Tienes una propiedad de una configuración experimental y quieres simular tu experimento utilizando Aprendizaje Automático: esto es en realidad mi Tesis de Doctorado y se llama modelado de sustitución
  • Tienes los valores del mercado de valores hasta el día 300 y quieres predecir el día 301: esto es muy conocido y se llama pronóstico de series de tiempo
  • Tienes una señal que está muy sucia o ruidosa y quieres limpiarla: esto se llama eliminación de ruido de señal codificador-decodificador, y también es muy conocido.

Y en estos problemas, lo primero en lo que me fijo, sorprendentemente, es la serie de tiempo de salida (no la entrada).

Supongamos que tomo una serie de tiempo al azar de mi conjunto de datos. ¿Es la serie de tiempo una combinación suave y tranquila de senos y cosenos? ¿Es una función polinómica? ¿Es una función logarítmica? ¿Es una función que ni siquiera puedo nombrar?

Y si tomo otra serie de tiempo al azar, ¿cómo cambia? ¿La tarea se basa en observar pequeños cambios desde una línea de base obvia o la tarea es identificar comportamientos completamente diferentes en todo el conjunto de datos?

En una sola palabra, estamos tratando de entender qué tan compleja es nuestra tarea: estamos estimando la complejidad de nuestras series de tiempo. Ahora, la palabra “complejo” puede significar algo diferente para cada uno de nosotros.

Cuando mi esposa me muestra sus lecciones de anatomía, las encuentro extremadamente complejas, pero para ella es solo otro martes 🙂

La buena noticia es que hay una forma de describir la complejidad de manera más científica y única: el concepto de Entropía

1. La Entropía de una serie de tiempo 1/0 (Teoría)

Definamos la entropía a partir de un ejemplo muy simple: una serie de tiempo que solo puede tener los valores 1 y 0. Sé que no es exactamente el tipo de serie de tiempo que estamos acostumbrados a tratar, pero puedes imaginarlo como si cada minuto que entras a tu habitación lanzas una moneda: si sale cara, has medido 1, si sale cruz, has medido 0 (o al revés, no tengo una preferencia específica de que el 1 sea cara, para ser honesto…)

Imagen creada por el autor

Ahora, si lo piensas, algo es más “complejo” cuando no nos suena en nuestra mente cuando no lo entendemos completamente, o cuando no nos proporciona una gran cantidad de información.

Dejaré de molestarte y te daré la ecuación de esta maldita entropía:

Ecuación 1

Vamos a desglosarlo:

  • X es el dominio de nuestra serie temporal, en nuestro caso X = {0,1}
  • p(x) es la probabilidad de verificar el valor x que está en X

¿Por qué hay un logaritmo ahí? ¿Qué significa? ¿Por qué está ese signo menos?

Aprendamos mediante un ejemplo.

Imagina que la probabilidad de que X sea 0 (cola) es 0 y la probabilidad de que X sea 1 (cara) es 1. Esto ni siquiera es realmente una serie temporal, ya que siempre es 1. ¿Cuál es el valor de la entropía?

Ahora, p(x=0)=0, por lo que la primera contribución es 0. p(x=1)=1, pero el logaritmo de 1 es 0. Esto significa que la segunda contribución también es 0, y la entropía es, de hecho, 0.

¿Qué significa que la entropía sea 0? Que la serie temporal no es nada compleja, y tiene sentido porque se ve así:

Imagen por autor

No hay “complejidad” en esta serie temporal, ¿verdad? Por eso su entropía es 0.

Hagamos el mismo ejemplo si sabemos que p(x=0)=p(x=1)=0.5, eso significa la misma probabilidad exacta de tener 1 y 0 (cara o cola)

Imagen por autor

Esto es definitivamente más complejo, ¿verdad? La entropía ahora se convierte en:

Eso es más alto que 0. Este valor no tiene un significado en sí mismo, pero es el valor más alto que puedes tener. Esto significa que si cambias p(x=0) para que sea diferente de 0.5, la entropía es más baja*.

Imagen por autor

* Ten en cuenta que cuando cambias p(x=0) también cambias p(x=1) ya que p(x=1)=1-p(x=0)

Ahora pensemos en nuestros descubrimientos.

  • Cuando la probabilidad es 0, esto significa que no hay complejidad, ya que ya sabemos todo: tienes un valor y solo un valor.
  • Cuando la probabilidad es, digamos, 0.0001, esto significa que la complejidad es muy pequeña porque puede suceder que x=0, pero la mayoría de las veces x sería igual a 1
  • Cuando la probabilidad es 0.5, ahora la complejidad es máxima porque no tienes ni idea de lo que va a suceder a continuación: puede ser 1 o 0 con la misma probabilidad

Esta es la idea de lo que es “complejo” para nosotros. De una manera simple de 1/0, puedes encontrar retrospectivamente la probabilidad basada en las ocurrencias y recuperar la entropía.

2. La Entropía de una serie de tiempo 1/0 (Práctica)

En nuestro código, usaremos Python, y también usaremos bibliotecas muy básicas:

Escribamos el código para encontrar la misma solución pero usando la probabilidad “retrospectivamente”, o si quieres, usando su definición de frecuencia:

Donde:

  • x es un valor en el dominio: en nuestro caso, solo tenemos 0 y 1, por lo que x es 0 o 1
  • n(x) es el número de veces que tenemos x en nuestra serie de tiempo
  • N es la longitud de nuestra serie de tiempo

Vamos a encontrar p(x=0) y p(x=1) y luego usar la ecuación 1 anterior… Bien, la volveré a pegar para ti:

Ecuación 1

En Python, puedes hacer eso con este código muy simple:

¿Funciona? ¡Probémoslo!

Generemos una serie de tiempo de longitud 100, con una probabilidad=0.5 de tener 0:

Hermoso. Así que tenemos nuestra serie de tiempo equilibrada. El hecho de que hayamos establecido 0.5 como probabilidad no significa exactamente 50 y 50 como puedes ver, por lo que eso nos dará algún tipo de error al estimar la probabilidad. Ese es el mundo imperfecto en el que vivimos 🙂

La ecuación para calcular la entropía teórica es la siguiente:

Veamos si la entropía teórica y real coinciden:

¡Hermoso! ¡Lo hacen!

Ahora cambiemos p_0 y veamos si siguen coincidiendo:

Coinciden con un grado muy pequeño de error, ¿verdad? Y lo divertido es que si hacemos esto tres veces aumentando el tamaño de nuestra serie de tiempo, el error será cada vez menor:

Después de size = 10k básicamente no hay diferencias entre la entropía real y la predicha ❤

3. La Entropía de una serie de tiempo cualquiera

Ahora, si aún asumimos que nuestra serie de tiempo tiene valores discretos (0,1,2, …) podemos extender nuestra definición de entropía a más de solo 2 valores de una serie de tiempo.

Por ejemplo, tomemos un caso de tres valores. Entonces nuestra serie de tiempo puede ser 0, 1 o 2.

Creemos un nuevo vector de probabilidad p_0, p_1 y p_2. Para hacer eso, generaremos 3 números aleatorios entre 0 y 100, los almacenaremos en un vector y luego los dividiremos por la suma:

Podemos aplicar la misma ecuación (y el mismo código) que antes para encontrar la entropía real y predicha.

Ampliemos la definición de la entropía en la definición de entropía real:

Esto también funciona para el caso de solo 0/1:

Y como podemos ver, la entropía teórica y predicha coinciden incluso para el caso de tres valores:

Y para mostrarte que no estoy haciendo trampa, podemos ver que funciona para una variedad de casos. Si cambiamos p_vector (y la serie de tiempo) iterativamente, aún vemos que la entropía real y predicha coinciden:

4. Resultados

En esta publicación del blog:

  • Reflexionamos sobre la complejidad del análisis de la serie de tiempo antes de aplicar cualquier aprendizaje automático
  • Reflexionamos sobre la idea de entropía y desorden de una serie de tiempo
  • Definimos la ecuación matemática de entropía y la explicamos con ejemplos
  • Lo aplicamos en la práctica tanto para una serie de tiempo 0/1 como para una serie de tiempo 0,1,2, mostrando cómo la definición teórica coincide con nuestra aproximación computacional

Ahora, el problema (limitación) con este enfoque es que a veces la serie de tiempo puede ser demasiado continua para que este método funcione. ¡Pero no te preocupes! Existe una definición de entropía continua que corrige la entropía para una serie de tiempo.

¡Lo trataré en el próximo blogpost!

5. Conclusiones

Si te gustó el artículo y quieres saber más sobre el aprendizaje automático, o simplemente quieres hacerme alguna pregunta, puedes:

A. Seguirme en Linkedin, donde publico todas mis historias.B. Suscribirte a mi boletín informativo. Te mantendrá actualizado sobre nuevas historias y te dará la oportunidad de enviarme mensajes de texto para recibir todas las correcciones o dudas que puedas tener.C. Convertirte en un miembro referido, de modo que no tendrás ningún “número máximo de historias por mes” y podrás leer todo lo que yo (y miles de otros escritores destacados de Machine Learning y Ciencia de Datos) escriban sobre la tecnología más nueva disponible.