Greykite预测结果后处理:层次化预测的协调与整合终极指南
【免费下载链接】greykiteA flexible, intuitive and fast forecasting library项目地址: https://gitcode.com/gh_mirrors/gr/greykite
Greykite作为一个灵活、直观且快速的预测库,提供了强大的层次化预测协调功能,这是预测结果后处理的关键环节。在实际业务场景中,我们经常需要处理具有层次结构的时间序列数据,比如全国销售数据可以分解为各省市数据,而Greykite的预测协调功能能够确保各级预测在数学上保持一致,消除不一致性,提升整体预测质量。🎯
什么是层次化预测协调?🤔
层次化预测协调是指对具有层次结构的时间序列预测结果进行后处理,使其满足数学一致性约束的过程。例如,在销售预测中,全国总销售额应该等于各省市销售额之和。然而,独立预测各级别数据时,往往会出现不一致的情况。
Greykite通过ReconcileAdditiveForecasts类实现这一功能,该模块位于greykite/algo/reconcile/convex/reconcile_forecasts.py。它采用凸优化方法,在保持预测准确性的同时,强制实施层次约束。
为什么需要层次化预测协调?📊
解决预测不一致问题
当独立预测层次结构中的不同级别时,经常会出现"父节点预测 ≠ 子节点预测之和"的问题。这种不一致性会导致决策困难,影响业务分析的可靠性。
提升整体预测精度
研究表明,协调后的预测通常比独立预测更准确,因为协调过程利用了层次结构中的信息共享。
保持业务逻辑一致性
在财务、供应链、销售等领域,保持数据的一致性对于报表和决策至关重要。
Greykite层次化预测协调的核心原理🔬
1. 约束矩阵表示
Greykite使用约束矩阵来表示层次关系。例如,对于一个简单的三层树结构:
00 # 根节点 / \ 10 11 # 中间节点 /|\ / \ 20 21 22 23 24 # 叶节点对应的约束矩阵确保:
- 00 = 10 + 11
- 10 = 20 + 21 + 22
- 11 = 23 + 24
2. 优化目标
Greykite通过解决以下凸优化问题来协调预测:
最小化:
- 调整惩罚:调整后的预测与原始预测的差异
- 偏差惩罚:调整后预测的偏差
- 训练MSE惩罚:在训练集上的均方误差
- 方差惩罚:调整后预测误差的方差
约束条件:
- 必须满足层次约束
- 可选的无偏性约束
- 可选的变换矩阵边界约束
3. 支持的协调方法
Greykite提供了四种协调方法:
| 方法 | 描述 | 适用场景 |
|---|---|---|
| bottom_up | 自底向上法,仅使用叶节点预测 | 简单层次结构,叶节点预测最准确 |
| ols | 普通最小二乘法 | 假设预测误差不相关且方差相等 |
| mint_sample | MinT方法,使用样本协方差 | 考虑预测误差的相关性 |
| custom | 自定义优化参数 | 需要精细调优的场景 |
快速上手:三步完成预测协调🚀
步骤1:准备数据
首先加载层次化的实际数据和预测数据:
from greykite.algo.reconcile.convex.reconcile_forecasts import ReconcileAdditiveForecasts from greykite.common.data_loader import DataLoader # 加载数据 dl = DataLoader() actuals = dl.load_data(data_name="daily_hierarchical_actuals") forecasts = dl.load_data(data_name="daily_hierarchical_forecasts")步骤2:定义层次结构
使用levels参数定义树结构:
# 定义3层树结构:根节点有2个子节点,分别有3个和2个子节点 levels = [[2], [3, 2]]步骤3:协调预测
使用ReconcileAdditiveForecasts进行协调:
# 创建协调器 raf = ReconcileAdditiveForecasts() # 拟合和转换 raf.fit_transform( forecasts=forecasts, actuals=actuals, levels=levels, method="mint_sample" # 选择协调方法 ) # 获取协调后的预测 adjusted_forecasts = raf.adjusted_forecasts高级调优技巧🎯
1. 自定义权重调整
如果某些节点的预测特别准确,可以增加其调整惩罚权重:
# 对节点"24"给予5倍权重,减少对其的调整 weight = np.array([1, 1, 1, 1, 1, 1, 1, 5]) raf.fit_transform( forecasts=forecasts, actuals=actuals, levels=levels, method="custom", weight_adj=weight # 应用自定义权重 )2. 多目标优化平衡
通过调整lambda参数平衡不同优化目标:
raf.fit_transform( forecasts=forecasts, actuals=actuals, levels=levels, method="custom", lam_adj=1.0, # 调整惩罚权重 lam_bias=1.0, # 偏差惩罚权重 lam_train=1.0, # 训练MSE惩罚权重 lam_var=1.0, # 方差惩罚权重 unbiased=True # 是否要求无偏 )3. 训练-测试集评估
为了获得可靠的性能评估,应该使用独立的测试集:
# 分割数据 train_size = forecasts.shape[0] // 2 forecasts_train = forecasts.iloc[:train_size, :] actuals_train = actuals.iloc[:train_size, :] forecasts_test = forecasts.iloc[train_size:, :] actuals_test = actuals.iloc[train_size:, :] # 在训练集上拟合 raf.fit(forecasts_train, actuals_train, levels=levels, method="mint_sample") # 在测试集上评估 evaluation_df_test = raf.transform_evaluate( forecasts_test=forecasts_test, actuals_test=actuals_test )可视化分析工具📈
Greykite提供了丰富的可视化工具来帮助分析协调效果:
1. 变换矩阵可视化
通过热图展示预测如何被调整:
fig = raf.plot_transform_matrix() fig.show()2. 协调效果对比
对比协调前后的预测效果:
# 显示评估结果表格 print(raf.evaluation_df.round(1)) # 显示协调前后对比图 plotly.io.show(raf.figures["base_adj"]) plotly.io.show(raf.figures["adj_size"]) plotly.io.show(raf.figures["error"])实际应用场景🏢
零售业销售预测
- 国家级预测:全国总销售额
- 省级预测:各省销售额
- 市级预测:各城市销售额
- 门店级预测:各门店销售额
能源需求预测
- 电网级预测:总电力需求
- 区域级预测:各区域需求
- 变电站级预测:各变电站需求
财务预算预测
- 公司级预算:总预算
- 部门级预算:各部门预算
- 项目级预算:各项目预算
最佳实践建议💡
1. 方法选择指南
- 如果叶节点预测最准确,使用bottom_up方法
- 如果预测误差独立同分布,使用ols方法
- 如果考虑误差相关性,使用mint_sample方法
- 如果需要精细控制,使用custom方法
2. 数据准备要点
- 确保所有时间序列具有相同的时间点
- 检查实际数据是否满足层次约束
- 考虑使用滚动窗口预测获得固定步长的预测
3. 模型评估策略
- 始终使用独立的测试集进行评估
- 关注约束违反程度指标
- 对比协调前后的预测误差变化
常见问题解答❓
Q1:协调会降低预测准确性吗?
不一定。协调过程可能会调整某些节点的预测,但整体上通常会提高或保持预测质量。关键是通过测试集评估来确定最佳协调方法。
Q2:如何处理缺失数据?
Greykite的协调方法可以处理部分缺失数据,但建议在协调前进行适当的数据填充或处理。
Q3:协调过程计算复杂度高吗?
对于中等规模的层次结构,计算效率很高。Greykite使用凸优化求解器,能够快速找到最优解。
Q4:可以处理非树状层次结构吗?
是的,Greykite支持通过constraint_matrix参数定义任意的线性约束,不仅限于树状结构。
总结📝
Greykite的层次化预测协调功能为处理复杂的时间序列预测问题提供了强大的工具。通过数学优化方法,它能够确保多层次预测的一致性,同时尽可能保持预测的准确性。无论是简单的自底向上方法还是复杂的自定义优化,Greykite都提供了灵活的接口来满足不同业务场景的需求。
记住,成功的预测协调不仅需要正确的技术工具,还需要对业务逻辑的深刻理解。通过合理选择协调方法、仔细调优参数、严格评估效果,你可以显著提升多层次预测系统的整体性能。✨
核心模块路径参考:
- 层次化预测协调核心类:
greykite/algo/reconcile/convex/reconcile_forecasts.py - 层次关系定义类:
greykite/algo/reconcile/hierarchical_relationship.py - 数据加载工具:
greykite/common/data_loader.py
【免费下载链接】greykiteA flexible, intuitive and fast forecasting library项目地址: https://gitcode.com/gh_mirrors/gr/greykite
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考