Introduction to Seasonality in Time Series

Deepsandhya Shukla Last Updated : 10 Jun, 2024
8 min read

Introduction

Trends that repeat themselves over days or months are called seasonality in time series. Seasonal changes, festivals, and cultural events often bring about these variances. Understanding these patterns is essential since they greatly influence corporate results and decision-making. By analyzing these trends, businesses may more successfully plan, forecast, and adapt to predictable changes throughout the year.

Overview

  • Learn about detecting seasonality in time series data.
  • Discover various types of techniques for analyzing seasonality.
  • Gain an understanding of visualizing seasonality patterns.
  • Discover the importance of seasonality in time series forecasting.
  • Learn about seasonality analysis approaches.

Detecting Seasonality in Time Series Data

Analysts employ a range of techniques to detect seasonality in time series data. These include statistical analysis techniques like autocorrelation function (ACF) analysis, seasonal subseries plots, and visualizations to identify patterns effectively.

Types of Techniques

Analysts employ many methods when analyzing seasonality in time series data. These approaches help separate the data into seasonal, trend, and residual components. They include decomposition techniques, autocorrelation analysis, and seasonal time series (STL) decomposition.

Some methods to determine seasonality include checking for seasonal variations, identifying periodic patterns in the data, and determining whether recurrent cycles are present. These methods can quantify the degree and significance of seasonality in the time series data.

Visualizing Seasonality Patterns

Visualizations are essential for comprehending seasonality patterns in time series data. Analysts can more effectively display and comprehend the data by plotting seasonal subseries, decomposition plots, and time series plots with emphasized seasonal patterns.

Importance of Seasonality in Time Series Forecasting

Seasonality is significant for predicting trends over time because it affects many businesses, such as banking, healthcare, and retail. It also significantly improves the accuracy of these predictions.

  • Effect of Seasonality on Forecasting Accuracy: Ignoring seasonality can cause variations in data patterns, making forecasting more difficult. Inaccurate estimates can then affect resource allocation and business decisions.
  • Adding Seasonality to Forecasting Models: To make better predictions, you should include patterns of the seasons in your models. Methods like seasonal exponential smoothing, seasonal ARIMA, and the Prophet

Seasonality vs. Trend Analysis

Trend analysis concentrates on long-term directional changes in data, whereas seasonality describes recurrent patterns over set periods. Differentiating between the two is essential for precise forecasting since seasonality and trends can interact differently in distinct time series datasets.

Seasonality Analysis Approaches

Seasonality analysis involves several techniques for understanding and extracting seasonal patterns from time series data. Using a sample dataset, let’s explore some of these approaches.

First, let’s load a sample time series dataset. We’ll illustrate with simulated monthly sales data.

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')

Seasonality Analysis Techniques

Now, let’s explore some seasonality analysis techniques:

Time Series Decomposition: 

Time series decomposition divides the data into its trend, seasonal, and residual components, aiding in our understanding of the underlying patterns.

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()
Seasonality in Time Series |

Autocorrelation Function (ACF) Analysis

ACF analysis measures the correlation between a time series and its lagged values. It helps identify seasonal patterns. 

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()
Autocorrelation Function (ACF) Analysis

Seasonal Subseries Plot

The time series data is divided into subgroups according to the seasonal period in a seasonal subseries plot, which shows each subset independently.

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()
Seasonal Subseries Plot

Seasonal Decomposition of Time Series (STL)

Using locally weighted regression, STL decomposition decomposes the time series into its trend, seasonal, and residual components.

# Perform seasonal decomposition using STL

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

result_stl.plot()

plt.show()
Seasonal Decomposition of Time Series (STL)

Seasonality Modeling and Forecasting

We use special models that handle changes over time and repeating patterns to predict seasonal changes in data. Two models we often use are Seasonal ARIMA (SARIMA) and Seasonal Exponential Smoothing.

Seasonal ARIMA (SARIMA) Models

AutoRegressive Integrated Moving Average, or ARIMA for short, is a popular method for predicting time series data. It uses a technique known as differencing to deal with shifting patterns. ARIMA combines two models: Moving Average (which employs historical forecast mistakes) and AutoRegressive (which predicts future values based on previous values). It contains three settings: d (degree of differencing), q (lags of the moving-average model), and p (lags of the autoregressive model).

SARIMA extends ARIMA by adding seasonal components, making it highly effective for data with seasonal patterns. It includes additional seasonal terms P, D, Q, which represent the seasonal autoregressive order, seasonal differencing degree, and seasonal moving average order, respectively, along with m, the number of periods in each season.

Generating and Fitting a SARIMA Model

Here’s a Python code snippet using the SARIMAX class from the statsmodels library to fit a SARIMA model:

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())
Seasonal Exponential Smoothing | Forecasting

Seasonal Exponential Smoothing

By considering both trend and seasonality, seasonal exponential smoothing improves on standard exponential smoothing when data shows a seasonal trend, and forecasting benefits from it.

Here’s how to use the statsmodels package in Python to build this method:

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())
Seasonality in Time Series

Evaluating Seasonality in Time Series Data

Several measurements are used to understand seasonal patterns in time series data, including:

  • Seasonality index
  • Coefficient of variation
  • How much of the changes are due to seasonality

These measurements help us see the predictable and consistent seasonal patterns, which is important for making accurate predictions.

Seasonality Metrics and Evaluation Criteria

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']

}

Results

Evaluating Seasonality in Time Series Data

Seasonality Testing and Validation

  • Seasonality Testing: Seasonality testing is essential for verifying whether seasonal trends exist in your time series data. This may significantly affect how well your model forecasts. Statistical tests confirm the stationarity of the series and any trends or seasonality.
  • Forecast Accuracy Validation: It is critical to confirm that your seasonal prediction is accurate. Using a variety of measures, you must forecast values versus actual observations to measure the model’s performance and pinpoint areas that might need improvement.
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}")

Validation of Forecast Accuracy

Developing the model itself is more important than validating the accuracy of your seasonal projections. It entails utilizing a variety of measures to compare the predicted values with the actual observations. This procedure aids in measuring the model’s effectiveness and locates any areas that need improvement.

  • MAE: The mean absolute error (MAE) displays the average error between our predictions and the actual results.
  • RMSE: The root mean square error, or RMSE, indicates the size of the average forecast mistake.
  • Forecast Accuracy Percentage: This figure illustrates the accuracy with which our assumptions matched actual events.

Code for Forecast Validation:

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}%")
Seasonality in Time Series | Forecasting

Practical Uses of Seasonality Analysis in Time Series

Seasonality analysis is a special tool that helps shops and businesses make good choices. It lets them see how sales go up and down over the year. This way, shops can plan when to have sales or how much stuff to keep in store. For example, if a shop knows that fewer people buy things in February, they can have a big sale to sell things that are left over. This helps them not to waste anything and keeps them making money. Businesses may also benefit from seasonality research by knowing how much inventory to keep on hand to avoid running out and losing sales. In the financial realm, stock investors utilize seasonality to predict whether stock prices will rise or fall, which enables them to make more informed decisions about what to purchase and sell.

Conclusion

Understanding seasonality helps businesses and investors make smart decisions throughout the year. By knowing when sales usually go up or down, shops can plan better sales and manage their stock more wisely, saving money and selling more. Understanding these trends can help investors make more informed judgments about purchasing or selling stocks. Businesses and investors can succeed tremendously by utilizing seasonality in their planning and forecasts.

To learn more about time series analysis, check out Analytics Vidhya’s Blackbelt Plus Program.

Frequently Asked Questions

Q1. What is an example of seasonality in time series?

A. An example of seasonality in time series is increased retail sales during the holiday season. For instance, many stores experience a significant boost in sales every December due to Christmas shopping, followed by a decline in January. This pattern repeats annually, illustrating a seasonal effect influenced by the time of year, which can be predicted and planned based on historical data.

Q2. What are the three types of seasonality?

A. The three types of seasonality are Additive Seasonality, Multiplicative Seasonality, and Mixed Seasonality.

Q3. What is meant by seasonality?

A. Seasonality refers to predictable and recurring patterns or fluctuations in a time series that occur at regular intervals due to seasonal factors. Various factors, such as weather, holidays, or cultural events, influence these patterns. They are evident over a fixed period, such as days, weeks, months, or quarters, affecting the behavior or level of the data at specific times each cycle.

Q4. What is the difference between cycle and seasonality?

A. The difference between cycle and seasonality lies in their nature and regularity. Seasonality is a consistent, predictable pattern that repeats at fixed intervals (like monthly or yearly), driven by external factors such as weather or holidays. Conversely, the cycle refers to fluctuations that occur at irregular intervals, often influenced by economic conditions or long-term trends, without a fixed period or predictable pattern.

Responses From Readers

Clear

We use cookies essential for this site to function well. Please click to help us improve its usefulness with additional cookies. Learn about our use of cookies in our Privacy Policy & Cookies Policy.

Show details