操作指南
滞后变换
基于滞后计算特征
mlforecast 允许您对滞后定义变换作为特征使用。这些变换通过 lag_transforms
参数提供,该参数是一个字典,其中键是滞后,值是要应用于该滞后的一系列变换。
数据设置
内置变换
内置滞后变换位于 mlforecast.lag_transforms
模块中。
定义变换后,您可以使用 MLForecast.preprocess
查看它们的效果。
unique_id | ds | y | expanding_std_lag1 | rolling_mean_lag7_window_size7_min_samples1 | rolling_mean_lag7_window_size14 | |
---|---|---|---|---|---|---|
20 | id_0 | 2000-01-21 | 6.319961 | 1.956363 | 3.234486 | 3.283064 |
21 | id_0 | 2000-01-22 | 0.071677 | 2.028545 | 3.256055 | 3.291068 |
扩展内置变换
您可以使用 Combine
类组合内置变换,该类接受两个变换和一个运算符。
unique_id | ds | y | rolling_mean_lag1_window_size7 | rolling_mean_lag1_window_size14 | rolling_mean_lag1_window_size7_truediv_rolling_mean_lag1_window_size14 | |
---|---|---|---|---|---|---|
14 | id_0 | 2000-01-15 | 0.435006 | 3.234486 | 3.283064 | 0.985204 |
15 | id_0 | 2000-01-16 | 1.489309 | 3.256055 | 3.291068 | 0.989361 |
如果您想将 Combine
中的某个变换应用于不同的滞后,您可以使用 Offset
类,该类会先应用偏移量,然后再应用变换。
unique_id | ds | y | rolling_mean_lag1_window_size7 | rolling_mean_lag1_window_size7_truediv_rolling_mean_lag2_window_size7 | rolling_mean_lag2_window_size7 | |
---|---|---|---|---|---|---|
8 | id_0 | 2000-01-09 | 1.462798 | 3.326081 | 0.998331 | 3.331641 |
9 | id_0 | 2000-01-10 | 2.035518 | 3.360938 | 1.010480 | 3.326081 |
基于 numba 的变换
window-ops 包提供了定义为 numba JIT 编译函数的变换。我们使用 numba 是因为它使这些函数非常快速,并且可以绕过 python 的 GIL,从而允许通过多线程并发运行它们。
使用这些变换的主要优点是它们非常易于实现。然而,当我们需要在预测步骤中更新它们的值时,它们可能会非常慢,因为我们必须对完整历史记录再次调用函数并只保留最后一个值。因此,如果性能是一个问题,您应该尽量使用内置的变换,或者在 MLForecast.preprocess
或 MLForecast.fit
中将 keep_last_n
设置为您变换所需的最小样本数。
如果您的函数接受的参数多于输入数组,您可以提供一个元组,例如:(func, arg1, arg2, ...)
unique_id | ds | y | lag1 | lag2 | lag3 | expanding_mean_lag1 | ratio_over_previous_lag1 | ratio_over_previous_lag1_offset2 | diff_over_previous_lag2 | |
---|---|---|---|---|---|---|---|---|---|---|
3 | id_0 | 2000-01-04 | 3.481831 | 2.445887 | 1.218794 | 0.322947 | 1.329209 | 2.006809 | 7.573645 | 0.895847 |
4 | id_0 | 2000-01-05 | 4.191721 | 3.481831 | 2.445887 | 1.218794 | 1.867365 | 1.423546 | 2.856785 | 1.227093 |
如您所见,函数名称被用作变换名称,并加上 _lag
后缀。如果函数有其他参数且未设置为默认值,它们也会被包含进来,就像这里的 offset=2
一样。