外生特征
使用外生回归变量进行训练和预测
数据设置
| unique_id | ds | y | static_0 | product_id | |
|---|---|---|---|---|---|
| 0 | id_00 | 2000-10-05 | 39.811983 | 79 | 45 | 
| 1 | id_00 | 2000-10-06 | 103.274013 | 79 | 45 | 
| 2 | id_00 | 2000-10-07 | 176.574744 | 79 | 45 | 
| 3 | id_00 | 2000-10-08 | 258.987900 | 79 | 45 | 
| 4 | id_00 | 2000-10-09 | 344.940404 | 79 | 45 | 
使用现有的外生特征
在 mlforecast 中,所需的列是时间序列标识符、时间和目标。您拥有的任何额外列,例如此处的 static_0 和 product_id,都被视为静态列,并在构建下一个时间戳的特征时进行复制。您可以通过将 static_features 传递给 MLForecast.preprocess 或 MLForecast.fit 来禁用此功能,这将仅保留您在那里定义的静态列。请记住,输入 dataframe 中的所有特征都将用于训练,因此您必须通过 X_df 参数向 MLForecast.predict 提供外生特征的未来值。
考虑以下示例。假设我们有每个 id 和日期的价格目录。
| ds | unique_id | price | |
|---|---|---|---|
| 0 | 2000-10-05 | id_00 | 0.548814 | 
| 1 | 2000-10-06 | id_00 | 0.715189 | 
| 2 | 2000-10-07 | id_00 | 0.602763 | 
| 3 | 2000-10-08 | id_00 | 0.544883 | 
| 4 | 2000-10-09 | id_00 | 0.423655 | 
并且您已经将这些价格合并到您的时间序列 dataframe 中。
| unique_id | ds | y | static_0 | product_id | price | |
|---|---|---|---|---|---|---|
| 0 | id_00 | 2000-10-05 | 39.811983 | 79 | 45 | 0.548814 | 
| 1 | id_00 | 2000-10-06 | 103.274013 | 79 | 45 | 0.715189 | 
| 2 | id_00 | 2000-10-07 | 176.574744 | 79 | 45 | 0.602763 | 
| 3 | id_00 | 2000-10-08 | 258.987900 | 79 | 45 | 0.544883 | 
| 4 | id_00 | 2000-10-09 | 344.940404 | 79 | 45 | 0.423655 | 
此 dataframe 将被传递给 MLForecast.fit(或 MLForecast.preprocess)。然而,由于价格是动态的,我们必须告诉该方法只有 static_0 和 product_id 是静态的。
用于训练的特征存储在 MLForecast.ts.features_order_ 中。如您所见,price 被用于训练。
因此,为了在每个时间步更新价格,我们只需使用我们的预测范围调用 MLForecast.predict,并通过 X_df 传递价格目录。
| unique_id | ds | LGBMRegressor | |
|---|---|---|---|
| 0 | id_00 | 2001-05-15 | 418.930093 | 
| 1 | id_00 | 2001-05-16 | 499.487368 | 
| 2 | id_00 | 2001-05-17 | 20.321885 | 
| 3 | id_00 | 2001-05-18 | 102.310778 | 
| 4 | id_00 | 2001-05-19 | 185.340281 | 
生成外生特征
Nixtla 提供了一些实用程序来为训练和预测生成外生特征,例如 statsforecast 的 mstl_decomposition 或 transform_exog 函数。我们还有 utilsforecast 的 fourier 函数,我们将在本节中进行演示。
假设您从上面所示的包含一些静态特征的数据开始。
| unique_id | ds | y | static_0 | product_id | |
|---|---|---|---|---|---|
| 0 | id_00 | 2000-10-05 | 39.811983 | 79 | 45 | 
| 1 | id_00 | 2000-10-06 | 103.274013 | 79 | 45 | 
| 2 | id_00 | 2000-10-07 | 176.574744 | 79 | 45 | 
| 3 | id_00 | 2000-10-08 | 258.987900 | 79 | 45 | 
| 4 | id_00 | 2000-10-09 | 344.940404 | 79 | 45 | 
现在我们想添加一些傅里叶项来建模季节性。我们可以通过以下方式实现:
这提供了一个扩展的训练数据集。
| unique_id | ds | y | static_0 | product_id | sin1_7 | sin2_7 | cos1_7 | cos2_7 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | id_00 | 2000-10-05 | 39.811983 | 79 | 45 | 0.781832 | 0.974928 | 0.623490 | -0.222521 | 
| 1 | id_00 | 2000-10-06 | 103.274013 | 79 | 45 | 0.974928 | -0.433884 | -0.222521 | -0.900969 | 
| 2 | id_00 | 2000-10-07 | 176.574744 | 79 | 45 | 0.433884 | -0.781831 | -0.900969 | 0.623490 | 
| 3 | id_00 | 2000-10-08 | 258.987900 | 79 | 45 | -0.433884 | 0.781832 | -0.900969 | 0.623490 | 
| 4 | id_00 | 2000-10-09 | 344.940404 | 79 | 45 | -0.974928 | 0.433884 | -0.222521 | -0.900969 | 
以及特征的未来值。
| unique_id | ds | sin1_7 | sin2_7 | cos1_7 | cos2_7 | |
|---|---|---|---|---|---|---|
| 0 | id_00 | 2001-05-15 | -0.781828 | -0.974930 | 0.623494 | -0.222511 | 
| 1 | id_00 | 2001-05-16 | 0.000006 | 0.000011 | 1.000000 | 1.000000 | 
| 2 | id_00 | 2001-05-17 | 0.781835 | 0.974925 | 0.623485 | -0.222533 | 
| 3 | id_00 | 2001-05-18 | 0.974927 | -0.433895 | -0.222527 | -0.900963 | 
| 4 | id_00 | 2001-05-19 | 0.433878 | -0.781823 | -0.900972 | 0.623500 | 
现在我们可以只使用这些特征(以及静态特征)进行训练。
并将未来值提供给 predict 方法。
| unique_id | ds | LinearRegression | |
|---|---|---|---|
| 0 | id_00 | 2001-05-15 | 275.822342 | 
| 1 | id_00 | 2001-05-16 | 262.258117 | 
| 2 | id_00 | 2001-05-17 | 238.195850 | 
| 3 | id_00 | 2001-05-18 | 240.997814 | 
| 4 | id_00 | 2001-05-19 | 262.247123 | 

