En cualquier ámbito de la vida cotidiana dónde pretendamos hacer proyecciones o compararnos con un momento pasado, es primordial identificar si nuestros datos tienen estacionalidad 📅. En este post voy a mostrar algunas estrategias visuales para analizar estacionalidad en series temporales.
Cuándo hablamos de estacionalidad nos referimos a un comportamiento regular y repetitivo en nuestras transacciones, ventas, movimientos o clientes a lo largo del tiempo. Generalmente, la estacionalidad está asociada a fenómenos climáticos o festivos.
La estacionalidad de las series de debemos considerarlas, para:
En este post estaremos analizando el dataset 🧾 que contiene las ventas por día de 3 comercios ficticios, entre el 01-06-2021 y el 31-12-2021 📆 . A continuación podemos ver el resumen de los datos del archivo.
| Fecha | Merchant | Cant_Ventas | |
|---|---|---|---|
| Min. :2021-06-01 | Length:642 | Min. : 1441 | |
| 1st Qu.:2021-07-24 | Class :character | 1st Qu.:10599 | |
| Median :2021-09-15 | Mode :character | Median :18258 | |
| Mean :2021-09-15 | NA | Mean :17035 | |
| 3rd Qu.:2021-11-08 | NA | 3rd Qu.:22243 | |
| Max. :2021-12-31 | NA | Max. :58553 |
📝 ahora que vimos el conjunto de datos, usaremos la función create.seasonal. Debemos indicarle dos parámetros, el nombre del data frame y del campo dónde está la variable de tipo date (de fecha). El resultado es una lista que contiene un gráfico por cada segmento usado (aquí por cada Merchant), con la estacionalidad diaria, semanal, mensual y trimestral 👀.
estacionalidad <- data %>%
mutate(nombre= Merchant) %>%
nest(column_nest= -c(Merchant)) %>%
mutate(seasonal_dx = map(column_nest, ~ create.seasonal(df = .,
date = "Fecha")))




Una aclaración importante ⚠️, los puntos de color fucsia indican los valores anómalos o atípicos los cuáles se detectan según la siguiente fórmula:
Es decir consideramos anómalos todos los valores que se están por lo menos 1.5 veces el rango intercuartil por encima del cuartil 3 o por debajo del cuartil 1 🔥.
Una estrategia visual que podemos sumar para una mejor compresión del comportamiento temporal de nuestos datos -ventas en nuestro ejemplo-, es combinar mapas de calor (heatmap) en calendarios dónde podamos identificar días con mayores ventas (zonas de calor) y días con menores ventas. Para ello, hacemos uso de la función heatmap.calendar que recibe 4 parámetros: + a) el nombre del dataframe, b) fecha de inicio, c) fecha final y d) Una escala de color Brewer para identificar la intensidad de las ventas por día.
Veamos el resultado de la función 👀.
heatmap_calendar <- data %>%
mutate(nombre= Merchant) %>%
nest(column_nest= -c(Merchant)) %>%
mutate(heatmap_calendar = map(column_nest,~heatmap.calendar(df = .,
fini = '01-06-2021',
ffin = '31-12-2021',
ColorBrewer = "GnBu")))



👉 se puede observar con claridad el patrón de mayor nivel de ventas del merchant A los días sábados y domingos, mientrás que para los otros merchant caen las ventas en esos días.
🧐 nos permite observar el incremento en las ventas en ciertos días, asociados a festividades o a acciones particulares de parte de los merchant.
🤶 se evidencia un claro incremento en las ventas en las días próximos a la nochebuena y navidad.
🔷 En este post mostré dos estrategias visuales para analizar la estacionalidad en nuestras series de datos.
💎 La aplicación de programación funcional en R hace que los scripts sean más eficiente, al mismo tiempo que nos facilita la reutilización del código, la búsqueda de bugs, etc.
🙏🏼 gracias por leer mi blog. Cualquier comentario u opinión es siempre bienvenida 👐🏼.