点预测调节
非负最小跟踪
组织成不同聚合级别结构的大量时间序列,通常要求它们的预测结果遵循聚合约束并为非负值,这带来了创建能够生成一致预测的新算法的挑战。
`HierarchicalForecast` 软件包提供了广泛的 Python 实现的分层预测算法,这些算法遵循非负分层预测调节。
在本 notebook 中,我们将展示如何使用 `HierarchicalForecast` 软件包在 `Wiki2` 数据集上执行非负预测调节。
您可以使用 Google Colab 在 CPU 或 GPU 上运行这些实验。
1. 加载数据
在此示例中,我们将使用 `Wiki2` 数据集。以下单元格获取层次结构中不同级别的时间序列,用于从底层层次结构恢复完整数据集的求和数据框 `S_df`,以及用 `tags` 表示的每个层次结构的索引。
unique_id | ds | y | |
---|---|---|---|
0 | Total | 2016-01-01 | 156508 |
1 | Total | 2016-01-02 | 129902 |
2 | Total | 2016-01-03 | 138203 |
3 | Total | 2016-01-04 | 115017 |
4 | Total | 2016-01-05 | 126042 |
unique_id | de_AAC_AAG_001 | de_AAC_AAG_010 | de_AAC_AAG_014 | de_AAC_AAG_045 | |
---|---|---|---|---|---|
0 | Total | 1 | 1 | 1 | 1 |
1 | de | 1 | 1 | 1 | 1 |
2 | en | 0 | 0 | 0 | 0 |
3 | fr | 0 | 0 | 0 | 0 |
4 | ja | 0 | 0 | 0 | 0 |
我们将数据框拆分为训练集/测试集。
2. 基础预测
以下单元格使用 `AutoETS` 模型计算每个时间序列的*基础预测*。请注意,`Y_hat_df` 包含预测结果,但它们并不一致。
请注意,`AutoETS` 模型计算出某些时间序列的负值预测。
unique_id | ds | AutoETS | Naive | |
---|---|---|---|---|
28 | de_AAC_AAG_001 | 2016-12-25 | -523.766907 | 340.0 |
29 | de_AAC_AAG_001 | 2016-12-26 | -245.337433 | 340.0 |
30 | de_AAC_AAG_001 | 2016-12-27 | -194.253815 | 340.0 |
33 | de_AAC_AAG_001 | 2016-12-30 | -315.425659 | 340.0 |
34 | de_AAC_AAG_001 | 2016-12-31 | -806.920105 | 340.0 |
… | … | … | … | … |
1217 | zh_AAC_AAG_033 | 2016-12-31 | -86.466789 | 37.0 |
1345 | zh_MOB | 2016-12-26 | -199.534882 | 1036.0 |
1346 | zh_MOB | 2016-12-27 | -69.527260 | 1036.0 |
1352 | zh_MOB_AAG | 2016-12-26 | -199.534882 | 1036.0 |
1353 | zh_MOB_AAG | 2016-12-27 | -69.527260 | 1036.0 |
3. 非负预测调节
以下单元格使用 HierarchicalReconciliation
类使先前的预测结果一致且非负。
请注意,非负预测调节方法得到了非负预测结果。
unique_id | ds | AutoETS | Naive | AutoETS/最小跟踪方法-ols | Naive/最小跟踪方法-ols | AutoETS/最小跟踪方法-ols_非负-True | Naive/最小跟踪方法-ols_非负-True | |
---|---|---|---|---|---|---|---|---|
0 | Total | 2016-12-25 | 94523.164062 | 95743.0 | 95852.000421 | 95743.0 | 9.664245e+04 | 95743.0 |
1 | Total | 2016-12-26 | 87734.367188 | 95743.0 | 89525.238276 | 95743.0 | 9.028857e+04 | 95743.0 |
2 | Total | 2016-12-27 | 87751.125000 | 95743.0 | 89638.119184 | 95743.0 | 9.056593e+04 | 95743.0 |
3 | Total | 2016-12-28 | 133237.968750 | 95743.0 | 131051.839057 | 95743.0 | 1.314028e+05 | 95743.0 |
4 | Total | 2016-12-29 | 126501.796875 | 95743.0 | 121214.048604 | 95743.0 | 1.218000e+05 | 95743.0 |
… | … | … | … | … | … | … | … | … |
1388 | zh_MOB_AAG_138 | 2016-12-27 | 62.049744 | 65.0 | -147.399760 | 65.0 | 0.000000e+00 | 65.0 |
1389 | zh_MOB_AAG_138 | 2016-12-28 | 54.934032 | 65.0 | 7.561682 | 65.0 | 4.397229e-15 | 65.0 |
1390 | zh_MOB_AAG_138 | 2016-12-29 | 60.452618 | 65.0 | 114.253489 | 65.0 | 9.321380e+01 | 65.0 |
1391 | zh_MOB_AAG_138 | 2016-12-30 | 50.356693 | 65.0 | 96.446754 | 65.0 | 7.565171e+01 | 65.0 |
1392 | zh_MOB_AAG_138 | 2016-12-31 | 66.735626 | 65.0 | 208.184648 | 65.0 | 1.851130e+02 | 65.0 |
unique_id | ds | AutoETS | Naive | AutoETS/最小跟踪方法-ols | Naive/最小跟踪方法-ols | AutoETS/最小跟踪方法-ols_非负-True | Naive/最小跟踪方法-ols_非负-True |
---|
自由预测调节方法得到负值预测结果。
unique_id | ds | AutoETS | Naive | AutoETS/最小跟踪方法-ols | Naive/最小跟踪方法-ols | AutoETS/最小跟踪方法-ols_非负-True | Naive/最小跟踪方法-ols_非负-True | |
---|---|---|---|---|---|---|---|---|
56 | de_DES | 2016-12-25 | -2553.932861 | 495.0 | -3818.990043 | 495.0 | 0.000000e+00 | 495.0 |
57 | de_DES | 2016-12-26 | -2155.228271 | 495.0 | -3309.806933 | 495.0 | 1.909922e-30 | 495.0 |
58 | de_DES | 2016-12-27 | -2720.993896 | 495.0 | -3965.351121 | 495.0 | 1.140223e-13 | 495.0 |
60 | de_DES | 2016-12-29 | -3429.432617 | 495.0 | -3042.502484 | 495.0 | 3.049601e+02 | 495.0 |
61 | de_DES | 2016-12-30 | -3963.202637 | 495.0 | -3476.273292 | 495.0 | 2.877829e+02 | 495.0 |
… | … | … | … | … | … | … | … | … |
1380 | zh_MOB_AAG_036 | 2016-12-26 | 75.298317 | 115.0 | -166.245228 | 115.0 | 0.000000e+00 | 115.0 |
1381 | zh_MOB_AAG_036 | 2016-12-27 | 72.895554 | 115.0 | -136.553950 | 115.0 | 1.699002e-14 | 115.0 |
1386 | zh_MOB_AAG_138 | 2016-12-25 | 94.796623 | 65.0 | -49.410174 | 65.0 | 0.000000e+00 | 65.0 |
1387 | zh_MOB_AAG_138 | 2016-12-26 | 71.293983 | 65.0 | -170.249562 | 65.0 | 0.000000e+00 | 65.0 |
1388 | zh_MOB_AAG_138 | 2016-12-27 | 62.049744 | 65.0 | -147.399760 | 65.0 | 0.000000e+00 | 65.0 |
4. 评估
`HierarchicalForecast` 软件包包含 evaluate
函数用于评估不同的层次结构。我们使用 `utilsforecast` 计算平均绝对误差。
AutoETS | AutoETS/最小跟踪方法-ols | AutoETS/最小跟踪方法-ols_非负-True | ||
---|---|---|---|---|
level | metric | |||
Views | mse-scaled | 0.735800 | 0.697371 | 0.675672 |
Views/国家 | mse-scaled | 1.190354 | 1.053631 | 0.994758 |
Views/国家/访问 | mse-scaled | 1.086102 | 1.133507 | 1.172270 |
Views/国家/访问/代理 | mse-scaled | 1.067394 | 1.100215 | 1.127960 |
Views/国家/访问/代理/主题 | mse-scaled | 1.435105 | 1.381990 | 1.163428 |
总体 | mse-scaled | 1.010801 | 0.977667 | 0.939286 |
请注意,非负预测调节方法的性能(较低的误差)优于其无约束对应方法。
参考文献
- Hyndman, R.J., & Athanasopoulos, G. (2021). “预测:原理与实践,第3版:第11章:分层和分组时间序列预测”。OTexts:澳大利亚墨尔本。OTexts.com/fpp3 访问于2022年7月。
- Wickramasuriya, S. L., Athanasopoulos, G., & Hyndman, R. J. (2019). “通过迹最小化实现分层和分组时间序列的最佳预测调节”。Journal of the American Statistical Association, 114, 804–819. doi:10.1080/01621459.2018.1448825。.
- Wickramasuriya, S.L., Turlach, B.A. & Hyndman, R.J. (2020). “最优非负预测调节”。Stat Comput 30, 1167–1182, https://doi.org/10.1007/s11222-020-09930-0.