目标变换
无缝变换目标值
由于 mlforecast 使用单个全局模型,对目标应用一些变换可能有助于确保所有时间序列具有相似的分布。它们还可以帮助去除那些无法直接处理趋势的模型的趋势。
数据准备
在本例中,我们将使用 M4 数据集中的单个时间序列。
本地变换
每个时间序列应用的变换
差分
我们将查看我们的时间序列,看看哪些差分可能有助于我们的模型。
我们可以看到我们的数据具有趋势以及明显的季节性。我们可以先尝试去除趋势。
趋势已经去除,我们现在可以尝试进行 24 阶差分(减去前一天同一小时的值)。
LocalStandardScaler
我们看到现在我们的时间序列变成了随机噪声。假设我们还想对其进行标准化,即 使其均值为 0、方差为 1。我们可以在进行差分后添加 LocalStandardScaler 变换。
既然我们已经捕捉到了时间序列的组成部分(趋势 + 季节性),我们可以尝试使用一个总是预测 0 的模型进行预测,这基本上会投射出趋势和季节性。
全局变换
应用于所有时间序列的变换
GlobalSklearnTransformer
有些变换不需要学习任何参数,例如应用对数变换。使用 GlobalSklearnTransformer
可以轻松定义这些变换,它接受一个 scikit-learn 兼容的变换器并将其应用于所有时间序列。这是一个定义将时间序列每个值 + 1 后应用对数变换的示例,这有助于避免计算 0 的对数。
我们也可以将其与本地变换结合使用。例如,我们可以先应用对数变换,然后进行差分。
自定义变换
实现您自己的目标变换
为了实现您自己的目标变换,您必须定义一个继承自 mlforecast.target_transforms.BaseTargetTransform
的类(这负责将列名设置为 id_col
、time_col
和 target_col
属性),并实现 fit_transform
和 inverse_transform
方法。这是一个定义最小-最大缩放器的示例。
现在您可以将这个类的实例传递给 target_transforms
参数。