Introducción a la estacionalidad en series temporales

Las tendencias que se repiten a lo largo de días o meses se denominan estacionalidad en las series temporales. Los cambios estacionales, los festivales y los eventos culturales a menudo provocan estas variaciones.

Comprender estos patrones es esencial ya que influyen en gran medida en los resultados corporativos y en la toma de decisiones. Al analizar estas tendencias, las empresas pueden planificar, pronosticar y adaptarse con mayor éxito a cambios predecibles a lo largo del año.

Descripción general

  • Obtenga información sobre cómo detectar estacionalidad en datos de series temporales.
  • Descubra varios tipos de técnicas para analizar la estacionalidad.
  • Obtenga una comprensión de cómo visualizar patrones de estacionalidad.
  • Descubra la importancia de la estacionalidad en la previsión de series temporales.
  • Obtenga más información sobre los enfoques de análisis de estacionalidad.

Detección de estacionalidad en datos de series temporales

Los analistas emplean una variedad de técnicas para detectar la estacionalidad en datos de series temporales. Estos incluyen técnicas de análisis estadístico como análisis de función de autocorrelación (ACF), gráficos de subseries estacionales y visualizaciones para identificar patrones de manera efectiva.

Tipos de técnicas

Los analistas emplean muchos métodos al analizar la estacionalidad en datos de series de tiempo. Estos enfoques ayudan a separar los datos en componentes estacionales, de tendencia y residuales. Incluyen técnicas de descomposición, análisis de autocorrelación y descomposición de series temporales estacionales (STL).

Algunos métodos para determinar la estacionalidad incluyen verificar variaciones estacionales, identificar patrones periódicos en los datos y determinar si hay ciclos recurrentes. Estos métodos pueden cuantificar el grado y la importancia de la estacionalidad en los datos de series temporales.

Visualizando patrones de estacionalidad

Las visualizaciones son esenciales para comprender los patrones de estacionalidad en los datos de series temporales.

Los analistas pueden mostrar y comprender los datos de manera más eficaz si trazan subseries estacionales, gráficos de descomposición y gráficos de series temporales con patrones estacionales destacados.

Importancia de la estacionalidad en el pronóstico de series temporales

La estacionalidad es importante para predecir tendencias a lo largo del tiempo porque afecta a muchas empresas, como la banca, la atención médica y el comercio minorista. También mejora significativamente la precisión de estas predicciones.

  • Efecto de la estacionalidad en la precisión de los pronósticos: ignorar la estacionalidad puede causar variaciones en los patrones de datos, lo que dificulta los pronósticos. Las estimaciones inexactas pueden afectar la asignación de recursos y las decisiones comerciales.
  • Agregar estacionalidad a los modelos de pronóstico: para hacer mejores predicciones, debe incluir patrones de las estaciones en sus modelos. Métodos como el suavizado exponencial estacional, ARIMA estacional y Prophet.

Análisis de estacionalidad versus tendencia

El análisis de tendencias se concentra en cambios direccionales a largo plazo en los datos, mientras que la estacionalidad describe patrones recurrentes durante períodos determinados.

Diferenciar entre los dos es esencial para realizar pronósticos precisos, ya que la estacionalidad y las tendencias pueden interactuar de manera diferente en distintos conjuntos de datos de series temporales.

Enfoques de análisis de estacionalidad

El análisis de estacionalidad implica varias técnicas para comprender y extraer patrones estacionales de datos de series temporales. Utilizando un conjunto de datos de muestra, exploremos algunos de estos enfoques.

Primero, carguemos un conjunto de datos de series temporales de muestra. Lo ilustraremos con datos de ventas mensuales simulados.

import pandas as pd

# Sample dataset: Simulated monthly sales data

import pandas as pd

date_range = pd.date_range(start='2020-01-01', periods=36, freq='M')

sales_data = pd.Series([100, 120, 130, 110, 105, 125, 135, 145, 140, 130, 120, 110,

                     105, 125, 135, 145, 140, 130, 120, 110, 105, 125, 135, 145,

                     140, 130, 120, 110, 105, 125, 135, 145, 140, 130, 120, 110],

                     index=date_range, name='Sales')

Técnicas de análisis de estacionalidad

Ahora, exploremos algunas técnicas de análisis de estacionalidad:

Descomposición de series temporales:

La descomposición de series de tiempo divide los datos en sus componentes de tendencia, estacionales y residuales, lo que ayuda a comprender los patrones subyacentes.

from statsmodels.tsa.seasonal import seasonal_decompose

import matplotlib.pyplot as plt

# Perform time series decomposition

result = seasonal_decompose(sales_data, model='additive')

result.plot()

plt.show()

Análisis de la función de autocorrelación (ACF)

El análisis ACF mide la correlación entre una serie temporal y sus valores rezagados. Ayuda a identificar patrones estacionales.

from statsmodels.graphics.tsaplots import plot_acf

# Plot autocorrelation function

from statsmodels.graphics.tsaplots import plot_acf

plot_acf(sales_data, lags=12)

plt.show()

Trama de la subserie estacional

Los datos de la serie temporal se dividen en subgrupos según el período estacional en un gráfico de subserie estacional, que muestra cada subconjunto de forma independiente.

import seaborn as sns

# Plot seasonal subseries

import seaborn as sns

sns.boxplot(x=sales_data.index.month, y=sales_data.values)

plt.xlabel('Month')

plt.ylabel('Sales')

plt.title('Seasonal Subseries Plot')

plt.show()

Descomposición estacional de series temporales (STL)

Utilizando una regresión ponderada localmente, la descomposición STL descompone la serie temporal en sus componentes tendencial, estacional y residual.

# Perform seasonal decomposition using STL

result_stl = seasonal_decompose(sales_data, model='stl')

result_stl.plot()

plt.show()

Modelización y previsión de estacionalidad

Utilizamos modelos especiales que manejan cambios a lo largo del tiempo y patrones repetitivos para predecir cambios estacionales en los datos. Dos modelos que utilizamos frecuentemente son ARIMA estacional (SARIMA) y Suavizado exponencial estacional.

Modelos ARIMA (SARIMA) de temporada

La media móvil integrada autorregresiva, o ARIMA para abreviar, es un método popular para predecir datos de series temporales. Utiliza una técnica conocida como diferenciación para hacer frente a patrones cambiantes.

ARIMA combina dos modelos: Media móvil (que emplea errores de pronóstico históricos) y AutoRegresivo (que predice valores futuros basándose en valores anteriores). Contiene tres configuraciones: d (grado de diferenciación), q (retrasos del modelo de media móvil) y p (retrasos del modelo autorregresivo).

SARIMA amplía ARIMA añadiendo componentes estacionales, lo que lo hace muy eficaz para datos con patrones estacionales. Incluye términos estacionales adicionales P, D, Q, que representan el orden autorregresivo estacional, el grado de diferenciación estacional y el orden de promedio móvil estacional, respectivamente, junto con m , el número de períodos en cada temporada.

Generación y ajuste de un modelo SARIMA

Aquí hay un fragmento de código de Python que utiliza la clase SARIMAX de la biblioteca statsmodels para ajustarse a un modelo SARIMA:

import pandas as pd

import numpy as np

from statsmodels.tsa.statespace.sarimax import SARIMAX

# Generate monthly sales data

np.random.seed(0)

date_range = pd.date_range(start='2020-01-01', periods=120, freq='M')

sales_data = pd.Series(np.random.randint(100, 200, size=len(date_range)), index=date_range, name='Sales')

# Fit a SARIMA model

model_sarima = SARIMAX(sales_data, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))

result_sarima = model_sarima.fit()

print(result_sarima.summary())

Suavizado exponencial estacional

Al considerar tanto la tendencia como la estacionalidad, la suavización exponencial estacional mejora la suavización exponencial estándar cuando los datos muestran una tendencia estacional y los pronósticos se benefician de ella.

A continuación se explica cómo utilizar el paquete statsmodels en Python para crear este método:

from statsmodels.tsa.holtwinters import ExponentialSmoothing

# Fit seasonal exponential smoothing model

model_exp_smooth = ExponentialSmoothing(sales_data, seasonal_periods=12, trend='add', seasonal='add')

result_exp_smooth = model_exp_smooth.fit()

print(result_exp_smooth.summary())

Evaluación de la estacionalidad en datos de series temporales

Se utilizan varias mediciones para comprender los patrones estacionales en los datos de series temporales, entre ellas:

  • Índice de estacionalidad
  • Coeficiente de variación
  • ¿Cuántos de los cambios se deben a la estacionalidad?

Estas mediciones nos ayudan a ver patrones estacionales predecibles y consistentes, lo cual es importante para hacer predicciones precisas.

Métricas de estacionalidad y criterios de evaluación

import numpy as np

import pandas as pd

# Example data

np.random.seed(0)

date_range = pd.date_range(start='2020-01-01', periods=120, freq='M')

sales_data = pd.Series(np.random.randint(100, 200, size=len(date_range)), index=date_range, name='Sales')

# Calculating errors

mean_sales = sales_data.mean()

seasonal_estimates = np.full_like(sales_data, mean_sales)  # Placeholder for actual seasonal estimates

residuals = sales_data - seasonal_estimates

# Sum of Squared Errors for the seasonal component

sum_of_squared_errors_seasonal = np.sum(residuals**2)

# Total errors could similarly be defined; here using the same as an example

sum_of_squared_errors_total = sum_of_squared_errors_seasonal  # This should be based on a different calculation

# Metrics calculation

max_value = sales_data.max()

min_value = sales_data.min()

standard_deviation = sales_data.std()

mean_value = sales_data.mean()

seasonality_index = (max_value - min_value) / (max_value + min_value)

coefficient_of_variation = standard_deviation / mean_value

percentage_variation_explained = (sum_of_squared_errors_seasonal / sum_of_squared_errors_total) * 100

# Setting thresholds

thresholds = {

'seasonality_index': 0.5,

'coefficient_of_variation': 0.1,

'percentage_variation_explained': 70

}

# Evaluating seasonality

results = {

"Strong seasonality detected": seasonality_index > thresholds['seasonality_index'],

"Low variability, indicating significant seasonality": coefficient_of_variation < thresholds['coefficient_of_variation'],

"Seasonality explains a large portion of the variation in the data": percentage_variation_explained > thresholds['percentage_variation_explained']

}

Pruebas y validación de estacionalidad

  • Pruebas de estacionalidad: las pruebas de estacionalidad son esenciales para verificar si existen tendencias estacionales en los datos de series temporales. Esto puede afectar significativamente la eficacia de las previsiones de su modelo. Las pruebas estadísticas confirman la estacionariedad de la serie y cualquier tendencia o estacionalidad.
  • Validación de la precisión del pronóstico: es fundamental confirmar que su predicción estacional es precisa. Utilizando una variedad de medidas, debe pronosticar valores versus observaciones reales para medir el rendimiento del modelo e identificar áreas que podrían necesitar mejoras.
from statsmodels.tsa.stattools import adfuller, kpss

# Perform ADF test

adf_result = adfuller(sales_data)

adf_statistic, adf_p_value = adf_result[0], adf_result[1]

print(f"ADF Statistic: {adf_statistic}, p-value: {adf_p_value}")

# Perform KPSS test

kpss_result = kpss(sales_data, nlags='auto')  # Automatically determines the number of lags

kpss_statistic, kpss_p_value = kpss_result[0], kpss_result[1]

print(f"KPSS Statistic: {kpss_statistic}, p-value: {kpss_p_value}")

Validación de la precisión del pronóstico

Desarrollar el modelo en sí es más importante que validar la precisión de sus proyecciones estacionales. Implica utilizar una variedad de medidas para comparar los valores predichos con las observaciones reales. Este procedimiento ayuda a medir la eficacia del modelo y localiza las áreas que necesitan mejora.

  • MAE: El error absoluto medio (MAE) muestra el error promedio entre nuestras predicciones y los resultados reales.
  • RMSE: La raíz del error cuadrático medio, o RMSE, indica el tamaño del error de pronóstico promedio.
  • Porcentaje de precisión del pronóstico: esta cifra ilustra la precisión con la que nuestras suposiciones coincidieron con los eventos reales.

Código para validación de pronóstico:

import numpy as np

import pandas as pd

# Example setup

np.random.seed(0)

date_range = pd.date_range(start='2020-01-01', periods=120, freq='M')

sales_data = pd.Series(np.random.randint(100, 200, size=len(date_range)), index=date_range, name='Sales')

# Let's assume the last 12 data points are our actual values

actual_values = sales_data[-12:]

# For simplicity, let’s assume forecasted values are slightly varied actual values

forecasted_values = actual_values * np.random.normal(1.0, 0.05, size=len(actual_values))

# Calculate forecast accuracy metrics

mae = mean_absolute_error(actual_values, forecasted_values)

rmse = mean_squared_error(actual_values, forecasted_values, squared=False)

forecast_accuracy_percentage = 100 * (1 - (np.abs(actual_values - forecasted_values) / actual_values)).mean()

# Display the results

print(f"Mean Absolute Error (MAE): {mae}")

print(f"Root Mean Squared Error (RMSE): {rmse}")

print(f"Forecast Accuracy Percentage: {forecast_accuracy_percentage}%")

Usos prácticos del análisis de estacionalidad en series temporales

El análisis de estacionalidad es una herramienta especial que ayuda a las tiendas y negocios a tomar buenas decisiones. Les permite ver cómo las ventas suben y bajan a lo largo del año. De esta manera, las tiendas pueden planificar cuándo realizar rebajas o cuántas cosas conservar en la tienda.

Por ejemplo, si una tienda sabe que menos gente compra cosas en febrero, puede hacer una gran oferta para vender las cosas que sobran. Esto les ayuda a no desperdiciar nada y les permite seguir ganando dinero. Las empresas también pueden beneficiarse de la investigación de estacionalidad al saber cuánto inventario deben tener disponible para evitar quedarse sin existencias y perder ventas.

En el ámbito financiero, los inversores en acciones utilizan la estacionalidad para predecir si los precios de las acciones subirán o bajarán, lo que les permite tomar decisiones más informadas sobre qué comprar y vender.


Conclusión

Comprender la estacionalidad ayuda a las empresas y a los inversores a tomar decisiones inteligentes durante todo el año.

Al saber cuándo suelen subir o bajar las ventas, las tiendas pueden planificar mejores ventas y gestionar sus existencias de forma más inteligente, ahorrando dinero y vendiendo más.

Comprender estas tendencias puede ayudar a los inversores a tomar decisiones más informadas sobre la compra o venta de acciones. Las empresas y los inversores pueden tener un gran éxito si utilizan la estacionalidad en su planificación y pronósticos.

Vistas: 3