分层方法时间序列预测
项目描述
Nixtla 
分层预测 👑
基于统计和计量经济学方法的概率分层预测
分层预测提供了一系列的调整方法,包括自下而上
、自上而下
、中点开始
、最小追踪
和ERM
。还包括概率一致性预测,如正态分布
、Bootstrap
和PERMBU
。
📚 简介
大量的时间序列数据集被组织成不同层次或聚合结构的结构。例如,类别、品牌或地理分组。在各个层级上进行一致性预测对于一致的决策和计划至关重要。分层预测提供了在不同层级上实现一致性预测的不同调整方法。直到最近,这些方法主要在R生态系统中可用。这个基于Python的框架旨在弥合时间序列领域中统计建模与机器学习之间的差距。
🎊 功能
- 经典调整方法
自下而上
:简单地将上层加在一起。自上而下
:通过层级分配顶层预测。
- 替代调整方法
中点开始
:在中间层级上锚定基本预测。基本预测以上的层级使用自下而上的方法,而基本预测以下的层级使用自上而下的方法。最小追踪
:通过最小化一致性预测空间的总预测方差,使用最小追踪调整。ERM
:通过最小化一个L1正则化目标来优化调整矩阵。
- 概率一致性方法
正态分布
:在正态分布假设下使用最小追踪方差协方差闭式矩阵。Bootstrap
:使用Gamakumara的Bootstrap方法生成分层调整预测的分布。PERMBU
:通过重新注入估计的秩排列Copula中的多变量依赖性来调整独立样本预测,并执行自下而上的聚合。
📖 为什么?
简短:我们希望通过提供可靠的基础线和基准,为工业和学术界中的分层预测任务做出贡献。以下是完整的论文。
详细:HierarchicalForecast
集成了公开可用的处理后的数据集、评估指标和一系列标准的统计基础线。在这个库中,我们提供了使用示例和广泛的实验的参考,其中我们展示了基准的使用并评估了其预测的准确性。通过这项工作,我们希望通过弥合统计和计量经济学建模与机器学习预测之间的差距,以及提供基于这些已建立模型彻底比较的开发新型分层预测算法的工具,为机器学习预测做出贡献。我们打算继续维护和扩展存储库,促进预测社区的合作。
💻 安装
您可以使用Python包索引pip
安装HierarchicalForecast
:
pip install hierarchicalforecast
您也可以从conda
安装HierarchicalForecast
:
conda install -c conda-forge hierarchicalforecast
🧬 使用方法
以下示例需要额外的包statsforecast
和datasetsforecast
。如果尚未安装,请通过您首选的方法安装,例如pip install statsforecast datasetsforecast
。datasetsforecast
库允许我们下载分层数据集,我们将使用statsforecast
来计算需要调整的基本预测。
最小示例
# !pip install -U numba statsforecast datasetsforecast
import numpy as np
import pandas as pd
#obtain hierarchical dataset
from datasetsforecast.hierarchical import HierarchicalData
# compute base forecast no coherent
from statsforecast.core import StatsForecast
from statsforecast.models import AutoARIMA, Naive
#obtain hierarchical reconciliation methods and evaluation
from hierarchicalforecast.core import HierarchicalReconciliation
from hierarchicalforecast.evaluation import HierarchicalEvaluation
from hierarchicalforecast.methods import BottomUp, TopDown, MiddleOut
# Load TourismSmall dataset
Y_df, S, tags = HierarchicalData.load('./data', 'TourismSmall')
Y_df['ds'] = pd.to_datetime(Y_df['ds'])
#split train/test sets
Y_test_df = Y_df.groupby('unique_id').tail(4)
Y_train_df = Y_df.drop(Y_test_df.index)
# Compute base auto-ARIMA predictions
fcst = StatsForecast(df=Y_train_df,
models=[AutoARIMA(season_length=4), Naive()],
freq='Q', n_jobs=-1)
Y_hat_df = fcst.forecast(h=4)
# Reconcile the base predictions
reconcilers = [
BottomUp(),
TopDown(method='forecast_proportions'),
MiddleOut(middle_level='Country/Purpose/State',
top_down_method='forecast_proportions')
]
hrec = HierarchicalReconciliation(reconcilers=reconcilers)
Y_rec_df = hrec.reconcile(Y_hat_df=Y_hat_df, Y_df=Y_train_df,
S=S, tags=tags)
评估
假设您有一个测试数据框。
def mse(y, y_hat):
return np.mean((y-y_hat)**2)
evaluator = HierarchicalEvaluation(evaluators=[mse])
evaluator.evaluate(Y_hat_df=Y_rec_df, Y_test_df=Y_test_df.set_index('unique_id'),
tags=tags, benchmark='Naive')
📖 文档(进行中)
以下是文档的链接。
📃 许可证
本项目采用MIT许可协议 - 详细内容请参阅LICENSE文件。
🏟 HTS项目
在R生态系统中,我们推荐查看fable,以及已停用的hts。在Python中,我们想感谢以下库:hiere2e、sktime、darts、pyhts、scikit-hts。
📚 参考和致谢
本研究深受先前贡献者和其他学者提出的方法的启发。我们想强调Rob Hyndman、George Athanasopoulos、Shanika L. Wickramasuriya、Souhaib Ben Taieb和Bonsoo Koo的工作。有关完整参考文献链接,请访问本文论文的参考部分。我们鼓励用户探索这个文献综述。
🙏 如何引用
如果您喜欢或从使用这些Python实现中受益,对这篇层次预测参考文献论文的引用将非常感激。
@article{olivares2022hierarchicalforecast,
author = {Kin G. Olivares and
Federico Garza and
David Luo and
Cristian Challú and
Max Mergenthaler and
Souhaib Ben Taieb and
Shanika L. Wickramasuriya and
Artur Dubrawski},
title = {{HierarchicalForecast}: A Reference Framework for Hierarchical Forecasting in Python},
journal = {Work in progress paper, submitted to Journal of Machine Learning Research.},
volume = {abs/2207.03517},
year = {2022},
url = {https://arxiv.org/abs/2207.03517},
archivePrefix = {arXiv}
}
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
hierarchicalforecast-0.4.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8c9f5ff5d935cac62d9e0f09a8bb6899e38557cc77e6912f41db409c1bab8093 |
|
MD5 | f53b84230634e59588d5150fa4b36842 |
|
BLAKE2b-256 | 77cdbd6e9aba66ebe6c481e5c4ce1bf6026f37ab36bc9d1f415da54393806ae1 |
hierarchicalforecast-0.4.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e5dcd1f8e20a136babe2d88e74e981830a602ff70ba7550d5393ba0d02fe1dd2 |
|
MD5 | e864d937acef8f499a85bf9bb4f1695f |
|
BLAKE2b-256 | ff5f079bf6c20ad7475d93108b7abbdc6472d3afa4e4d1d0584082d1d7d2b549 |