MFLES
MFLES 是一种基于梯度提升时间序列分解的简单时间序列方法。
有许多方法可以进入提升循环,具体取决于用户提供的参数或 MFLES 自动执行的一些似乎运行良好的快速逻辑。其中一些方法包括:
- SES 集成
- 简单移动平均
- 分段线性趋势
- 用于季节性的傅里叶基函数回归
- 简单中位数
- 用于趋势的鲁棒线性方法
梯度提升分解
这种方法旨在将时间序列分解(趋势、季节性和外生性)视为梯度提升过程中的“弱”估计器。
需要注意的主要相关变化是:
- 趋势估计器总是从简单到复杂。从中位数开始,然后是线性/分段线性,然后是某种平滑器。
- 多重季节性是每个提升轮次拟合一个季节性,而不是同时拟合。这意味着你应该按照你认为的重要性顺序组织你的季节性。此外,理论上,默认情况下最多可以存在 50 个季节性,但在 3 个之后,你应该预期性能会下降。
- 学习率现在是估计器特有的,而不是像 XGBoost 中那样的单一参数。如果你有也具有季节性的外生信号,这很有用,你可以(这不是自动完成的)优化季节性信号和外生信号的组合。
让我们进行预测
在这里,我们将使用 Statsforecast 中的特定模型对象和著名的航空公司乘客数据集 😀
让我们看看一些标准体验的关键参数。
-
season_length:季节周期列表,最好按感知到的重要性顺序排列。
-
test_size:AutoMFLES 通过时间序列交叉验证进行优化。测试大小决定了每个测试折叠中使用多少周期。这可能是优化时最重要的参数,在设置时应权衡季节长度、预测范围和总体数据长度。但一个好的经验法则时最重要的季节长度或其一半,以便 MFLES 能够捕捉到季节性。
-
n_windows:优化参数时使用的测试集数量。在此示例中,2 表示我们总共使用 24 个月(12 * 2),分配到这 2 个窗口中。
-
metric:这个很简单,它就是我们希望用参数优化的指标。这里我们使用默认值 smape,它默认用于重现 M4 上的实验结果。您也可以传递 'rmse'、'mape' 或 'mae' 来优化其他指标。
深入了解更定制化的模型
之前的拟合是在 99% 的自动化逻辑检查和网格搜索参数下完成的。但我们可以极大地操纵拟合(也许操纵得太多了)。本节将概述一些非常重要的参数以及它们如何影响输出。
参数网格搜索
首先,让我们看看 AutoMFLES 将尝试的默认参数网格
- seasonality_weights:如果为 True,在计算季节性时,我们会更重视最近的观测值。这允许确定性季节性反映最近的变化。
- smoother:True 表示在几轮提升后,我们将使用一个简单的指数平滑器来拟合残差。如果参数为 False,则我们使用一个简单的移动平均。
- ma:此参数是使用移动平均时包含的过去观测值数量,None 表示在 'smoother' 为 True 的情况下,它将被半自动设置或忽略。为了优化,我们搜索您提供的最小季节长度或该数字除以 2。
- seasonal_period:这是您提供的 season_length 列表
现在让我们看看如何将配置传递给 AutoMFLES,因为这是我们在底层使用的,所以结果将是相同的!
如果您想强制进行响应性较低的预测怎么办?
只需将 smoother 设置为 False,并调整 ma 相对于您的季节性更大。
强制 季节性
有时季节性序列会自动拟合非季节性设置,为了调整这一点并强制季节性,只需删除 seasonal_period 列表中的 'None' 设置。
这也减少了 MFLES 尝试的配置数量,从而加快了拟合速度。
控制复杂性
控制复杂性的最佳方法之一是使用 max_rounds 参数。默认情况下,此参数设置为 50,但大多数时候模型收敛得比这快得多。在第 4 轮,我们开始将平滑器作为趋势部分实现,因此如果您不想要,可以将 max_rounds 设置为 3!但是,您可能想要平滑器!
您还可以利用特定于估计器的学习率,这些学习率应用于单个估计器而不是整个提升轮次。如果您注意到残差平滑器过快地吞噬了太多信号,这将非常有用。
技巧与窍门
由于大多数设置在交叉验证期间都会进行优化,因此精度和计算之间总是存在权衡。
默认设置是经过大量测试后确定的,为您提供了一种平衡的方法。希望它能在短时间内提供良好的精度。
但是,有一些方法可以通常为您提供更高的精度(不是改变人生,而是一个小幅提升)或显著缩短运行时间(而不会牺牲太多精度)。
下一节将回顾其中一些设置!
测试窗口数量
使用时间序列交叉验证进行优化时,窗口数量直接影响每个参数需要拟合模型的次数。这里的默认值是 2,但增加到 3(如果您的数据允许)应该会给您更一致的结果。显然,在一定程度上越多越好,但这取决于您的数据。反之,将其减少到 1 意味着您是根据单个保留集选择参数,这可能会降低精度。
现在尝试使用 3 个窗口,注意拟合结果不同!
移动平均参数
默认情况下,我们将尝试您季节长度的最小值和其一半作为 'ma' 参数。这在实际应用中效果很好,但您可能希望大大加深此搜索。如果您需要从 MFLES 中获得更高的精度,这是最好的微调参数之一。只需向列表传递更多参数即可,理想情况下,这些数字应根据季节性、预测范围或其他一些信息确定。在我们的例子中,由于是月度数据,我还将传递 3 和 4。由于这增加了要尝试的参数数量,因此也会增加计算时间。
变点
默认情况下,MFLES 会自动检测是否应该使用变点。这带来了一些精度优势,但计算开销巨大。您可以禁用变点,通常会看到接近的精度,但速度会有很大提升。
季节性权重
大多数时间序列不会在季节性信号中出现显著偏移,或者至少没有值得为其付出额外计算以进行拟合的偏移。为了稍微加快速度,您可以禁用此功能。尽管如此,有时禁用此功能会导致精度大幅下降。