Al comenzar tu andadura en la ciencia de datos y en Machine Learning quizá te des cuenta de lo importante que es el análisis de series temporales. Así que creemos que es clave entender el concepto desde lo básico para poder ir avanzando a temas más complejos. Vas a aprender qué son, cómo analizarlas y las claves para realizar pronósticos.
Definición
Cuando buscamos en Google qué es una serie temporal, el primer resultado que tenemos es, cómo no, Wikipedia:
Una serie temporal o cronológica es una sucesión de datos medidos en determinados momentos y ordenados cronológicamente.
https://es.wikipedia.org/wiki/Serie_temporal
En otras palabras, se trata de datos que se producen a lo largo del tiempo. Este orden cronológico es la clave diferenciadora entre datos que forman una serie temporal y los que no. Los datos pueden ser anuales, mensuales, diarios o incluso por nanosegundos.
Hay infinidad de tipos de datos que se presentan como serie temporal, y de ahí viene toda su importancia en el ámbito de Machine Learning. Vamos a ver unos ejemplos:
- Mercado de valores. Las acciones varían su valor según avanzan las manecillas del reloj.
- Ocupación de un hotel. El número de habitaciones ocupadas varía cada día.
- Predicción de demanda de productos en McDonald’s. McDonald’s ha elaborado un sistema de recomendación de productos en los que tiene en cuenta la capacidad de generación del restaurante. Esta capacidad de generación y de demanda se calcula con el día o la hora (entre otros muchísimos factores).
Componentes de una serie temporal
Se trata de sacar información estadística relevante que nos ayude a comprender mejor el comportamiento de la serie temporal y también a realizar un mejor pronóstico en el futuro.
Por norma general, una señal temporal se puede descomponer en las siguientes partes:
- Nivel: El valor medio en toda la serie.
- Tendencia: el incremento o decremento del valor de la serie
- Componente cíclica: la repetición de ciclos a corto tiempo, aunque no tiene por qué ser periódica.
- Ruido: variación aleatoria de una serie.
Una vez que ya sabemos cuáles son las componentes de una serie temporal, tenemos que saber cómo extraer cada una. Por suerte, la librería statsmodels tiene una implementación para descomponer series temporales que es muy útil.
Lo primero que tenemos que saber, es que cada serie puede tener una composición diferente. Pueden ser aditivas o multiplicativa.
Serie Aditiva
Pertenecer a este tipo sugiere que la serie está representada por la suma de sus componentes:
y(t) = Level + Trend + Seasonality + Noise
Se trata de una serie lineal donde los cambios temporales tienen la misma cantidad. Esto implica que la tendencia es una línea recta y que las componentes cíclicas tienen la misma frecuencia y amplitud. Vamos a ver un ejemplo de cómo descomponerla con statsmodels:
from random import randrange from matplotlib import pyplot from statsmodels.tsa.seasonal import seasonal_decompose series = [i+randrange(10) for i in range(1,100)] result = seasonal_decompose(series, model='additive', freq=1) result.plot() pyplot.show()

Serie Multiplicativa
Esta tipología nos indica que las componentes se multiplican para formar la señal:
y(t) = Level + Trend + Seasonality + Noise
Se trata de una serie no lineal (como puede ser una señal cuadrática o exponencial por ejemplo). Los cambios aumentan o disminuyen con el tiempo. Esto implica que la tendencia es una curva y tanto la frecuencia como la amplitud son inconstantes.
from matplotlib import pyplot from statsmodels.tsa.seasonal import seasonal_decompose series = [i**2.0 for i in range(1,100)] result = seasonal_decompose(series, model='multiplicative', freq=1) result.plot() pyplot.show()

Resumen
En este post introductorio sobre series temporales hemos podido aprender qué son y por qué son tan importantes a nivel de negocio a base de diferentes casos de uso.
Tambi?n hemos aprendido sobre las componentes primordiales de una serie temporal, los tipos de series que hay y a saber descomponerlas de manera automática gracias a la librería statsmodels.
Déjanos un comentario sobre el post, o sobre qué más te gustaría aprender!