建模季节性的技术

2025年7月14日 | 阅读10分钟

季节性是时间序列统计中一种常见的模式,通常由自然或人为活动驱动。准确地建模和考虑季节性对于提高金融、零售、医疗保健、天气科学等行业的预测和分析至关重要。季节性可以出现在各种时间尺度上,包括每日、每周、每月或每年,捕捉这些模式可以实现更精确的预测。在本文中,我们将探讨用于建模季节性的各种技术,从简单的分解到先进的机器学习方法。

1. 分解技术

分解是一种分析时间序列数据的重要方法。它包括将时间序列分解为其核心组成部分——趋势、季节性和残差(或噪声)。这有助于分离和理解数据的基本结构,使其更容易建模和预测未来值。分解技术在处理季节性数据时特别有用,季节性数据中的周期性模式会随着时间重复出现。

主要的分解模型是加法模型和乘法模型,每种模型都根据季节性变化的性质来应用。让我们详细探讨这两种模型,以及一种称为 STL 分解的先进方法。

1)加法分解

在加法分解中,时间序列的组成部分是相加的。当季节性变化随时间保持稳定时,该模型效果最佳,即波动的幅度不会随着数据水平的显著变化而变化。加法分解方法可以写为:

Y(t) = Trend(t) + Seasonality(t) + Residual(t)

加法分解步骤

  • 趋势分量:时间序列中的整体方向或运动(上升、下降或持平)。
  • 季节性分量:在固定间隔(例如每月、每季度或每年)重复的模式。
  • 残差(不规则)分量:在去除趋势和季节性分量后剩余的随机波动或噪声。

加法分解的优点

  • 简单性:易于理解和可视化。
  • 对于具有稳定季节性模式的数据有效。

局限性

不适用于季节性波动幅度随时间增大或减小的情况。

2)乘法分解

乘法模型假设季节性变化随趋势水平成比例变化。它适用于季节性模式随序列整体水平的增加而变得更加明显的时序数据。该模型表示为:

Y(t) = Trend(t) × Seasonality(t) × Residual(t)

乘法分解步骤

  • 趋势分量:随时间变化的整体趋势。
  • 季节性分量:重复的模式,其中季节性变化的幅度随趋势水平成比例变化。
  • 残差(不规则)分量:无法由趋势或季节性分量解释的数据部分。

乘法分解的优点

  • 更适用于季节性波动的幅度随时间变化的趋势。
  • 有效处理季节性的比例变化。

局限性

不适用于季节性影响恒定的序列(此时加法分解效果更好)。

3)STL 分解(使用 LOESS 的季节性趋势分解)

STL 分解是一种更高级、更灵活的方法,可以处理加法和乘法季节性。STL 使用 LOESS(局部估计散点图平滑)来估计趋势和季节性分量。它对于具有传统分解技术可能难以处理的复杂时间序列数据特别鲁棒和适应性强。

STL 的主要特点

  • 加法或乘法:它可以处理这两种季节性模式。
  • 处理非平稳性:对于具有非平稳季节性模式(季节性随时间变化)的时间序列非常有效。
  • 可调:STL 允许用户自定义控制趋势和季节性分量的平滑度,使其能够适应各种各样的数据。

STL 分解步骤

  • 平滑趋势:应用 LOESS 来估计趋势分量。
  • 提取季节性:从原始序列中减去趋势以估计季节性分量。
  • 计算残差:从原始序列中减去趋势和季节性分量,以隔离残差(噪声)。

STL 的优点

  • 灵活:处理平稳和非平稳季节性数据。
  • 对异常值鲁棒:与传统分解技术相比,它可以更好地处理包含异常值和缺失值的数据集。
  • 多季节性:它可以适应显示多个季节性周期(例如,每日和每年的季节性)的时间序列。

局限性

计算密集:与简单的加法或乘法分解方法相比,更复杂,需要更多的计算资源。

何时使用加法、乘法和 STL 分解

  • 加法分解:当季节性变化随时间恒定时使用(例如,月度温度读数,季节性波动幅度较大)。
  • 乘法分解:当季节性变化与趋势成比例地增加或减少时使用(例如,经济数据,其中增长会影响季节性效应的幅度)。
  • STL 分解:对于具有复杂、非线性或变化的季节性的数据集使用(例如,零售销售,其季节性模式随时间动态变化)。

2. 季节性自回归积分移动平均模型 (SARIMA)

季节性自回归积分移动平均模型 (SARIMA) 是流行的 ARIMA(自回归积分移动平均)模型的扩展,它将季节性纳入时间序列预测方法。虽然 ARIMA 在对时间序列数据中的非季节性趋势和模式进行建模方面非常有效,但它本身不考虑季节性波动。SARIMA 通过向 ARIMA 框架添加季节性项来解决此问题,使其成为具有季节性模式的时间序列数据的强大工具。

SARIMA 在数据显示周期性模式的场景中特别有用,例如零售销售在假期高峰期达到顶峰,夏季用电量增加,或一周内网站流量波动。在本文中,我们将深入探讨 SARIMA 的工作原理、其组成部分以及如何有效地应用它。

SARIMA 的组成部分

SARIMA 将非季节性 ARIMA 模型与附加项相结合,以考虑季节性。SARIMA 的标准表示法为:

SARIMA(p, d, q) (P, D, Q)s

  • (p, d, q):这些是非季节性 ARIMA 参数。
  • p:自回归 (AR) 项的数量。
  • d:使时间序列平稳所需的差分阶数。
  • q:移动平均 (MA) 项的数量。
  • (P, D, Q):这些是季节性 ARIMA 项。
  • P:季节性自回归 (SAR) 项的数量。
  • D:使时间序列季节性平稳所需的差分阶数。
  • Q:季节性移动平均 (SMA) 项的数量。
  • s:季节性周期的长度(一个季节性周期中的时间段数)。例如,对于具有年度季节性的月度数据,s 可以是 12。

构建和应用 SARIMA 的步骤

步骤 1:使序列平稳

任何基于 ARIMA 的模型的第一步都是确保时间序列是平稳的,即它随时间具有恒定的均值、方差和自相关性。这可以通过以下方式实现:

  • 差分(非季节性和季节性)以消除趋势和季节性模式。
  • 使用增强迪基-富勒 (ADF) 检验或绘制自相关 (ACF) 和偏自相关 (PACF) 图来检查平稳性。

步骤 2:识别模型参数 (p, d, q, P, D, Q)

下一步是为模型选择合适的参数。p、q、P 和 Q 的值可以从自相关函数 (ACF) 和偏自相关函数 (PACF) 图推断出来。

  • ACF:测量时间序列与其滞后值之间的相关性。
  • PACF:测量时间序列与其滞后值在消除中间观测值影响后的相关性。

通过分析这些图,您可以确定 AR 和 MA 项中应包含多少个滞后。

步骤 3:拟合模型

确定参数后,就可以将 SARIMA 模型拟合到数据中。在 Python 中,可以使用 statsmodels 库中的 SARIMAX 等函数来实现。

步骤 4:验证模型

拟合模型后,通过以下方式测试其性能:

  • 检查残差:残差最好应类似于白噪声(即,无自相关,正态分布)。
  • 交叉验证:将数据分为训练集和测试集,并检查模型在预测测试数据时的准确性。
  • AIC/BIC:使用赤池信息准则 (AIC) 或贝叶斯信息准则 (BIC) 来评估不同参数组合的模型拟合度。值越低表示模型越好。

步骤 5:进行预测

模型验证后,可以用于预测未来值,同时考虑非季节性和季节性模式。

SARIMA 的优点

  • 处理季节性:包含季节性效应,比 ARIMA 对具有周期性波动的更有效。
  • 灵活:该模型足够灵活,可以捕捉数据中的短期和长期模式。
  • 广泛使用:SARIMA 是一种经过验证的方法,在商业、经济和科学研究中有许多应用。

SARIMA 的局限性

  • 复杂性:选择正确的参数可能很困难,尤其是有多个季节性周期时。
  • 平稳性要求:该模型假设时间序列在差分后是平稳的,这可能并不总是成立。
  • 计算密集:SARIMA 可能计算成本高昂,尤其对于具有长季节性周期的庞大数据集。

3. 傅里叶变换

傅里叶变换是一种强大的数学方法,用于将时间序列分解为其组成频率。它在分析周期性或循环模式方面非常强大,使其成为对时间序列数据中的季节性进行建模的理想工具。本质上,傅里叶变换允许我们将时间序列中复杂的重复模式表示为简单正弦和余弦波的总和,每个波都与特定的频率相关。

通过使用傅里叶变换,我们可以识别数据中主要的季节性周期,并捕获它们以实现更好的预测和分析。此技术对于具有多个季节性或季节性模式不完全规律的时间序列特别有用。

什么是傅里叶变换?

傅里叶变换是一种数学函数,它将时域信号(如时间序列)转换为频域表示。在时间序列分析的背景下,它表征了构成数据周期性行为的频率分量。简单来说,它帮助您了解数据中存在哪些周期(季节性模式)以及这些周期的强度。

对于离散时间序列数据,我们使用离散傅里叶变换 (DFT),它对有限的采样数据而不是连续函数进行操作。

傅里叶变换如何捕获季节性

时间序列数据中的季节性是指周期性模式或周期。这些模式在特定周期(例如,每日、每月、每年)内重复出现,而傅里叶变换在识别这些重复频率方面非常出色。通过将时间序列从时域转换为频域,傅里叶变换识别出数据中最突出的频率(周期)。

使用傅里叶变换对季节性进行建模的步骤

  • 将时间序列数据转换为频域:第一步是使用傅里叶变换将时间序列从时域转换为频域。此步骤提取底层的周期性及其对应的幅度。
  • 识别主要频率:转换完成后,您将查看数据中最突出的频率分量。这些频率对应于时间序列中的季节性模式。例如,强大的年度周期将显示为一个显著的频率。
  • 重构时间序列:在识别出主要频率后,可以通过对相应的正弦和余弦波求和来重构时间序列。这允许您对数据的季节性分量进行建模。
  • 使用傅里叶分量进行预测:识别出的频率可以纳入预测模型(例如,通过向回归模型或 ARIMA 等时间序列模型添加季节性项),从而提高它们预测未来季节性模式的能力。

滞后特征

滞后特征是指使用目标变量的过去值作为预测变量。例如,如果数据中存在已知的 12 个月季节性,您可以创建滞后特征,如 Yt-12 或 Yt-24,其中 Yt-12 表示前一年同一时期。此技术在使用机器学习模型时特别有用,例如:

  • 随机森林
  • 梯度提升机
  • 神经网络

通过创建滞后特征,这些模型可以有效地捕获周期性模式(季节性),而无需依赖领域知识。

4. 状态空间模型

状态空间模型为对具有随时间演变的潜在状态变量的时间序列进行建模提供了一个灵活的框架。两个常见的类型包括:

  • 动态线性模型 (DLM):这些模型定义了一个具有随时间变化的潜状态变量的过程。状态空间表示允许通过随时间变化的参数来捕获季节性和趋势。
  • 结构时间序列 (STS) 模型:与 DLM 类似,STS 模型将时间序列显式地分解为趋势、季节性和噪声等组成部分。卡尔曼滤波器通常用于估计随时间的潜状态。

这些模型在处理具有多个季节性成分或其他结构复杂性的时间序列方面非常灵活和强大。

5. Prophet

Prophet 由 Facebook 开发,是一个开源预测工具,专门用于处理具有强季节性模式的时间序列。它易于使用,并且对异常值和缺失数据具有鲁棒性。Prophet 自动检测并考虑多个季节性,包括:

  • 年度:捕获年度周期。
  • 每周:考虑每周的模式。
  • 每日:处理每日周期性。

Prophet 很灵活,并允许用户添加自定义季节性,这对于需要对复杂季节性模式进行建模的业务应用很有用。

6. 高斯过程 (GP)

高斯过程 (GPs) 是非参数模型,可以通过定义周期性核函数(如 RBF(径向基函数)或周期核)来捕获复杂的季节性。GPs 适用于较小的数据集,并允许预测中的不确定性估计。

它们非常灵活,允许处理非线性和时变的季节性模式。但是,与较简单的模型相比,它们需要更多的计算资源,尤其是在数据集不断增长的情况下。

7. 神经网络

神经网络,尤其是循环架构,是时间序列预测的强大工具。一些常见模型包括:

  • 循环神经网络 (RNN)
  • 长短期记忆 (LSTM) 网络
  • 门控循环单元 (GRU)

这些模型在捕获顺序依赖性(如季节性)方面表现出色。当季节性是非线性或复杂的时,神经网络可以从大型数据集中学习较简单模型可能会遗漏的模式。但是,它们通常需要大量数据和计算资源才能有效训练。

8. TBATS 和 BATS 模型

TBATS 和 BATS 模型专门用于处理复杂的季节性。

  • BATS 代表 Box-Cox 变换、ARMA 误差、趋势和季节性成分。
  • TBATS 通过添加三角季节性成分来扩展 BATS,使其能够对多个和非整数季节性进行建模。

这些模型在存在多个或复杂季节性周期(例如,每周和年度周期)的情况下特别有效,并且它们为季节性时间序列预测提供了一种自动化解决方案。


下一主题