在分层预测中,我们的目标是为许多时间序列同时创建预测,同时遵守时间序列之间预先指定的分层关系。我们可以通过对预测执行后处理一致性调整步骤来强制实现这种一致性。

HierarchicalForecast 包提供了最全面的分层预测算法 Python 实现集合,这些算法遵循经典的分层一致性调整方法。所有方法都有一个 reconcile 函数,能够使用 numpy 数组调整基础预测。

跨部门层次结构

传统上,分层预测方法调整跨部门聚合。例如,我们可能对单个产品的需求进行预测,但也对整个产品组、部门和商店进行预测,并且我们希望确保这些预测相互一致。这可以形式化为

Y~=SPY^  ,\tilde{\textbf{Y}} = SP\hat{\textbf{Y}} \;,

其中 Y^Rm×p\hat{\textbf{Y}} \in \mathbb{R}^{m \times p} 表示层次结构中所有 mm 个时间序列的所有 pp 个时间步的预测矩阵,S{0,1}m×nS \in \lbrace 0, 1 \rbrace^{m \times n} 是一个矩阵,定义了 nn 个底层时间序列与 m=mnm^* = m - n 个聚合之间的分层关系,PRn×mP \in \mathbb{R}^{n \times m} 是一个矩阵,概括了每个预测对最终估计的贡献,而 Y~Rm×p\tilde{\textbf{Y}} \in \mathbb{R}^{m \times p} 是一致性调整后的预测矩阵。我们可以使用矩阵 PP 来定义各种预测贡献情景。

跨部门一致性调整方法旨在找到最优的 PP 矩阵。

时间层次结构

我们还可以执行时间一致性调整。例如,我们可能对每日需求、每周需求和每月需求进行预测,并且我们希望确保这些预测相互一致。我们将时间分层预测问题形式化为

Y~=(StePteY^)  ,\tilde{\textbf{Y}} = \left( S_{te} P_{te} \hat{\textbf{Y}}^{\intercal} \right)^{\intercal} \;,

其中 Ste{0,1}p×kS_{te} \in \lbrace 0, 1 \rbrace^{p \times k} 是一个矩阵,定义了 kk 个底层时间步与 p=pkp^* = p - k 个聚合之间的层次关系,而 PteRk×pP_{te} \in \mathbb{R}^{k \times p} 是一个矩阵,概括了每个预测对最终估计的贡献。我们可以使用矩阵 PteP_{te} 来定义各种预测贡献情景。

时间一致性调整方法旨在找到最优的 PteP_{te} 矩阵。

跨时间和跨部门一致性调整

我们可以通过两步过程执行跨部门一致性调整和时间一致性调整,将跨部门和时间分层预测结合起来。

参考文献
-Hyndman, Rob. Notation for forecast reconciliation.

1. 自下而上


source

BottomUp

 BottomUp ()

*自下而上一致性调整类。最基本的分层一致性调整是使用自下而上策略执行的。它由 Orcutt 于 1968 年首次提出。相应的分层“投影”矩阵定义为: PBU=[0[b],[a]    I[b][b]]\mathbf{P}_{\text{BU}} = [\mathbf{0}_{\mathrm{[b],[a]}}\;|\;\mathbf{I}_{\mathrm{[b][b]}}]

参数

参考文献
- Orcutt, G.H., Watts, H.W., & Edwards, J.B.(1968). “Data aggregation and information loss”. The American Economic Review, 58 , 773(787).*


source

BottomUp.fit

 BottomUp.fit (S:numpy.ndarray, y_hat:numpy.ndarray,
               idx_bottom:numpy.ndarray,
               y_insample:Optional[numpy.ndarray]=None,
               y_hat_insample:Optional[numpy.ndarray]=None,
               sigmah:Optional[numpy.ndarray]=None,
               intervals_method:Optional[str]=None,
               num_samples:Optional[int]=None, seed:Optional[int]=None,
               tags:Optional[dict[str,numpy.ndarray]]=None)

*Bottom Up Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, horizon) 的样本内值。
y_hat_insample: 大小为 (base, horizon) 的样本内预测值。
sigmah: 条件边际分布的估计标准差。

intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
**sampler_kwargs: 一致性采样器实例化参数。

返回
self: object,已拟合的一致性调整器。*


source

BottomUp.predict

 BottomUp.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                   level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

BottomUp.fit_predict

 BottomUp.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                       idx_bottom:numpy.ndarray,
                       y_insample:Optional[numpy.ndarray]=None,
                       y_hat_insample:Optional[numpy.ndarray]=None,
                       sigmah:Optional[numpy.ndarray]=None,
                       level:Optional[list[int]]=None,
                       intervals_method:Optional[str]=None,
                       num_samples:Optional[int]=None,
                       seed:Optional[int]=None,
                       tags:Optional[dict[str,numpy.ndarray]]=None)

*BottomUp 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的样本内值。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。
sigmah: 条件边际分布的估计标准差。

level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
**sampler_kwargs: 一致性采样器实例化参数。

返回
y_tilde: 使用 Bottom Up 方法调整的一致性预测 y_hat。*


source

BottomUp.sample

 BottomUp.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*


source

BottomUpSparse

 BottomUpSparse ()

*BottomUpSparse 一致性调整类。

这是使用稀疏矩阵方法实现自下而上一致性调整。它在具有许多时间序列的数据集上工作效率更高。[makoren: 至少我希望如此,我只检查了大约 2 万个时间序列,并没有真正的改进,如果能检查像 100 万个时间序列那样的数据,密集 S 矩阵确实无法适应内存,那就太好了]

更多细节请参阅父类。*


source

BottomUpSparse.fit

 BottomUpSparse.fit (S:numpy.ndarray, y_hat:numpy.ndarray,
                     idx_bottom:numpy.ndarray,
                     y_insample:Optional[numpy.ndarray]=None,
                     y_hat_insample:Optional[numpy.ndarray]=None,
                     sigmah:Optional[numpy.ndarray]=None,
                     intervals_method:Optional[str]=None,
                     num_samples:Optional[int]=None,
                     seed:Optional[int]=None,
                     tags:Optional[dict[str,numpy.ndarray]]=None)

*Bottom Up Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, horizon) 的样本内值。
y_hat_insample: 大小为 (base, horizon) 的样本内预测值。
sigmah: 条件边际分布的估计标准差。

intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
**sampler_kwargs: 一致性采样器实例化参数。

返回
self: object,已拟合的一致性调整器。*


source

BottomUpSparse.predict

 BottomUpSparse.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                         level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

BottomUpSparse.fit_predict

 BottomUpSparse.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                             idx_bottom:numpy.ndarray,
                             y_insample:Optional[numpy.ndarray]=None,
                             y_hat_insample:Optional[numpy.ndarray]=None,
                             sigmah:Optional[numpy.ndarray]=None,
                             level:Optional[list[int]]=None,
                             intervals_method:Optional[str]=None,
                             num_samples:Optional[int]=None,
                             seed:Optional[int]=None,
                             tags:Optional[dict[str,numpy.ndarray]]=None)

*BottomUp 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的样本内值。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。
sigmah: 条件边际分布的估计标准差。

level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
**sampler_kwargs: 一致性采样器实例化参数。

返回
y_tilde: 使用 Bottom Up 方法调整的一致性预测 y_hat。*


source

BottomUpSparse.sample

 BottomUpSparse.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*

2. 自上而下


source

TopDown

 TopDown (method:str)

*Top Down 一致性调整类。

Top Down 分层一致性调整方法分配总聚合预测并使用比例 p[b]\mathbf{p}_{\mathrm{[b]}} 将其分解到层次结构的下方,这些比例可以是实际历史值或估计值。

P=[p[b]    0[b][a,b  1]]\mathbf{P}=[\mathbf{p}_{\mathrm{[b]}}\;|\;\mathbf{0}_{\mathrm{[b][a,b\;-1]}}] 参数:
method: forecast_proportions, average_proportionsproportion_averages 之一。

参考文献
- CW. Gross (1990). “Disaggregation methods to expedite product line forecasting”. Journal of Forecasting, 9 , 233–254. doi:10.1002/for.3980090304
- G. Fliedner (1999). “An investigation of aggregate variable time series forecast strategies with specific subaggregate time series statistical correlation”. Computers and Operations Research, 26 , 1133–1149. doi:10.1016/S0305-0548(99)00017-9.*


source

TopDown.fit

 TopDown.fit (S, y_hat, y_insample:numpy.ndarray,
              y_hat_insample:Optional[numpy.ndarray]=None,
              sigmah:Optional[numpy.ndarray]=None,
              intervals_method:Optional[str]=None,
              num_samples:Optional[int]=None, seed:Optional[int]=None,
              tags:Optional[dict[str,numpy.ndarray]]=None,
              idx_bottom:Optional[numpy.ndarray]=None)

*TopDown Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
y_insample: 大小为 (base, insample_size) 的样本内值。对于 forecast_proportions 方法是可选的。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。对于 forecast_proportions 方法是可选的。
sigmah: 条件边际分布的估计标准差。
interval_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。

返回
self: object,已拟合的一致性调整器。*


source

TopDown.predict

 TopDown.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                  level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

TopDown.fit_predict

 TopDown.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                      tags:dict[str,numpy.ndarray],
                      idx_bottom:numpy.ndarray=None,
                      y_insample:Optional[numpy.ndarray]=None,
                      y_hat_insample:Optional[numpy.ndarray]=None,
                      sigmah:Optional[numpy.ndarray]=None,
                      level:Optional[list[int]]=None,
                      intervals_method:Optional[str]=None,
                      num_samples:Optional[int]=None,
                      seed:Optional[int]=None)

*Top Down 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的样本内值。对于 forecast_proportions 方法是可选的。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。对于 forecast_proportions 方法是可选的。
sigmah: 条件边际分布的估计标准差。
level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。

返回
y_tilde: 使用 Top Down 方法调整的一致性预测 y_hat。*


source

TopDown.sample

 TopDown.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*


source

TopDownSparse

 TopDownSparse (method:str)

*TopDownSparse 一致性调整类。

这是使用稀疏矩阵方法实现自上而下一致性调整。它在具有许多时间序列的数据集上工作效率更高。

更多细节请参阅父类。*


source

TopDownSparse.fit

 TopDownSparse.fit (S, y_hat, y_insample:numpy.ndarray,
                    y_hat_insample:Optional[numpy.ndarray]=None,
                    sigmah:Optional[numpy.ndarray]=None,
                    intervals_method:Optional[str]=None,
                    num_samples:Optional[int]=None,
                    seed:Optional[int]=None,
                    tags:Optional[dict[str,numpy.ndarray]]=None,
                    idx_bottom:Optional[numpy.ndarray]=None)

*TopDown Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
y_insample: 大小为 (base, insample_size) 的样本内值。对于 forecast_proportions 方法是可选的。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。对于 forecast_proportions 方法是可选的。
sigmah: 条件边际分布的估计标准差。
interval_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。

返回
self: object,已拟合的一致性调整器。*


source

TopDownSparse.predict

 TopDownSparse.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                        level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

TopDownSparse.fit_predict

 TopDownSparse.fit_predict (S:scipy.sparse._csr.csr_matrix,
                            y_hat:numpy.ndarray,
                            tags:dict[str,numpy.ndarray],
                            idx_bottom:numpy.ndarray=None,
                            y_insample:Optional[numpy.ndarray]=None,
                            y_hat_insample:Optional[numpy.ndarray]=None,
                            sigmah:Optional[numpy.ndarray]=None,
                            level:Optional[list[int]]=None,
                            intervals_method:Optional[str]=None,
                            num_samples:Optional[int]=None,
                            seed:Optional[int]=None)

*Top Down 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的样本内值。对于 forecast_proportions 方法是可选的。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。对于 forecast_proportions 方法是可选的。
sigmah: 条件边际分布的估计标准差。
level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。

返回
y_tilde: 使用 Top Down 方法调整的一致性预测 y_hat。*


source

TopDownSparse.sample

 TopDownSparse.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*

cls_top_down(
                S=S, y_hat=S @ y_hat_bottom, y_insample=S @ y_bottom, tags=tags
            )["mean"]
#\ hide
cls_top_down = TopDownSparse(method="average_proportions")
test_fail(
    cls_top_down,
    contains="Top-down reconciliation requires strictly hierarchical structures.",
    args=(sparse.csr_matrix(S_non_hier), None, tags_non_hier),
)

3. 中间向外


source

MiddleOut

 MiddleOut (middle_level:str, top_down_method:str)

*Middle Out 一致性调整类。

此方法仅适用于严格的分层结构。它将基础预测锚定在中间层级。基础预测之上的层级使用自下而上方法,而之下的层级使用自上而下方法。

参数
middle_level: 中间层级。
top_down_method: forecast_proportions, average_proportionsproportion_averages 之一。

参考文献
- Hyndman, R.J., & Athanasopoulos, G. (2021). “Forecasting: principles and practice, 3rd edition: Chapter 11: Forecasting hierarchical and grouped series.”. OTexts: Melbourne, Australia. OTexts.com/fpp3 Accessed on July 2022.*


source

MiddleOut.fit

 MiddleOut.fit (**kwargs)

source

MiddleOut.predict

 MiddleOut.predict (**kwargs)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

MiddleOut.fit_predict

 MiddleOut.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                        tags:dict[str,numpy.ndarray],
                        y_insample:Optional[numpy.ndarray]=None,
                        level:Optional[list[int]]=None,
                        intervals_method:Optional[str]=None)

*Middle Out 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
tags: 每个键是一个层级,每个值是其 S 索引。
y_insample: 大小为 (base, insample_size) 的样本内值。仅用于 forecast_proportions
level: 不支持。
intervals_method: 不支持。

返回
y_tilde: 使用 Middle Out 方法调整的一致性预测 y_hat。*


source

MiddleOut.sample

 MiddleOut.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*


source

MiddleOutSparse

 MiddleOutSparse (middle_level:str, top_down_method:str)

*MiddleOutSparse 一致性调整类。

这是使用稀疏矩阵方法实现中间向外一致性调整。它在具有许多时间序列的数据集上工作效率更高。

更多细节请参阅父类。*


source

MiddleOutSparse.fit

 MiddleOutSparse.fit (**kwargs)

source

MiddleOutSparse.predict

 MiddleOutSparse.predict (**kwargs)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

MiddleOutSparse.fit_predict

 MiddleOutSparse.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                              tags:dict[str,numpy.ndarray],
                              y_insample:Optional[numpy.ndarray]=None,
                              level:Optional[list[int]]=None,
                              intervals_method:Optional[str]=None)

*Middle Out 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
tags: 每个键是一个层级,每个值是其 S 索引。
y_insample: 大小为 (base, insample_size) 的样本内值。仅用于 forecast_proportions
level: 不支持。
intervals_method: 不支持。

返回
y_tilde: 使用 Middle Out 方法调整的一致性预测 y_hat。*


source

MiddleOutSparse.sample

 MiddleOutSparse.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*

4. Min-Trace


source

MinTrace

 MinTrace (method:str, nonnegative:bool=False,
           mint_shr_ridge:Optional[float]=2e-08, num_threads:int=1)

*MinTrace 一致性调整类。

Wickramasuriya 等人提出的此一致性调整算法依赖于广义最小二乘估计量和一致性误差 Wh\mathbf{W}_{h} 的协方差矩阵估计量。Min Trace 算法在无偏假设下最小化一致性预测的平方误差;其解具有封闭形式。

PMinT=(SWhS)1SWh1 \mathbf{P}_{\text{MinT}}=\left(\mathbf{S}^{\intercal}\mathbf{W}_{h}\mathbf{S}\right)^{-1} \mathbf{S}^{\intercal}\mathbf{W}^{-1}_{h}

参数
method: str,可以是 ols, wls_struct, wls_var, mint_shrink, mint_cov 之一。
nonnegative: bool,调整后预测是否应为非负数?
mint_shr_ridge: float=2e-8,MinTrace-shr 协方差估计器的数值保护岭值。
num_threads: int=1,用于解决优化问题(当 nonnegative=True 时)的线程数。

参考文献
- Wickramasuriya, S. L., Athanasopoulos, G., & Hyndman, R. J. (2019). “Optimal forecast reconciliation for hierarchical and grouped time series through trace minimization”. 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). “Optimal non-negative forecast reconciliation”. Stat Comput 30, 1167–1182, https://doi.org/10.1007/s11222-020-09930-0.*


source

MinTrace.fit

 MinTrace.fit (S, y_hat, y_insample:Optional[numpy.ndarray]=None,
               y_hat_insample:Optional[numpy.ndarray]=None,
               sigmah:Optional[numpy.ndarray]=None,
               intervals_method:Optional[str]=None,
               num_samples:Optional[int]=None, seed:Optional[int]=None,
               tags:Optional[dict[str,numpy.ndarray]]=None,
               idx_bottom:Optional[numpy.ndarray]=None)

*MinTrace Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
y_insample: 大小为 (base, insample_size) 的样本内值。仅用于 “wls_var”, “mint_cov”, “mint_shrink”。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。仅用于 “wls_var”, “mint_cov”, “mint_shrink”
sigmah: 条件边际分布的估计标准差。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。

返回
self: object,已拟合的一致性调整器。*


source

MinTrace.predict

 MinTrace.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                   level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

MinTrace.fit_predict

 MinTrace.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                       idx_bottom:numpy.ndarray=None,
                       y_insample:Optional[numpy.ndarray]=None,
                       y_hat_insample:Optional[numpy.ndarray]=None,
                       sigmah:Optional[numpy.ndarray]=None,
                       level:Optional[list[int]]=None,
                       intervals_method:Optional[str]=None,
                       num_samples:Optional[int]=None,
                       seed:Optional[int]=None,
                       tags:Optional[dict[str,numpy.ndarray]]=None)

*MinTrace 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的样本内值。仅由 wls_var, mint_cov, mint_shrink 使用。
y_hat_insample: 大小为 (base, insample_size) 的样本内拟合值。仅由 wls_var, mint_cov, mint_shrink 使用。
sigmah: 条件边际分布的估计标准差。
level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。

返回
y_tilde: 使用 MinTrace 方法调整的一致性预测 y_hat。*


source

MinTrace.sample

 MinTrace.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*


source

MinTraceSparse

 MinTraceSparse (method:str, nonnegative:bool=False, num_threads:int=1,
                 qp:bool=True)

*MinTraceSparse 一致性调整类。

这是使用稀疏矩阵实现的 OLS 和 WLS 估计量。它不能保证给出与非稀疏版本相同的结果,但在具有许多时间序列的数据集上效率更高。

更多细节请参阅父类。

参数
method: str,可以是 ols, wls_structwls_var 之一。
nonnegative: bool,返回非负的一致性调整预测。
num_threads: int,执行非负二次规划调用的线程数。
qp: bool,使用二次规划方法实现非负约束。将其设置为 True 通常会获得更好的结果,但计算成本更高。
*


source

MinTraceSparse.fit

 MinTraceSparse.fit (S:scipy.sparse._csr.csr_matrix, y_hat:numpy.ndarray,
                     y_insample:Optional[numpy.ndarray]=None,
                     y_hat_insample:Optional[numpy.ndarray]=None,
                     sigmah:Optional[numpy.ndarray]=None,
                     intervals_method:Optional[str]=None,
                     num_samples:Optional[int]=None,
                     seed:Optional[int]=None,
                     tags:Optional[dict[str,numpy.ndarray]]=None,
                     idx_bottom:Optional[numpy.ndarray]=None)

*MinTraceSparse Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
y_insample: 大小为 (base, insample_size) 的样本内值。仅用于 “wls_var”。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。仅用于 “wls_var”
sigmah: 条件边际分布的估计标准差。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。

返回
self: object,已拟合的一致性调整器。*


source

MinTraceSparse.predict

 MinTraceSparse.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                         level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

MinTraceSparse.fit_predict

 MinTraceSparse.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                             idx_bottom:numpy.ndarray=None,
                             y_insample:Optional[numpy.ndarray]=None,
                             y_hat_insample:Optional[numpy.ndarray]=None,
                             sigmah:Optional[numpy.ndarray]=None,
                             level:Optional[list[int]]=None,
                             intervals_method:Optional[str]=None,
                             num_samples:Optional[int]=None,
                             seed:Optional[int]=None,
                             tags:Optional[dict[str,numpy.ndarray]]=None)

*MinTrace 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的样本内值。仅由 wls_var, mint_cov, mint_shrink 使用。
y_hat_insample: 大小为 (base, insample_size) 的样本内拟合值。仅由 wls_var, mint_cov, mint_shrink 使用。
sigmah: 条件边际分布的估计标准差。
level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。

返回
y_tilde: 使用 MinTrace 方法调整的一致性预测 y_hat。*


source

MinTraceSparse.sample

 MinTraceSparse.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*

5. 最优组合


source

OptimalCombination

 OptimalCombination (method:str, nonnegative:bool=False,
                     num_threads:int=1)

*最优组合一致性调整类。

此一致性调整算法由 Hyndman 等人于 2011 年提出,该方法使用广义最小二乘估计量并利用一致性误差的协方差矩阵。考虑基础预测的协方差 Var(ϵh)=Σh\textrm{Var}(\epsilon_{h}) = \Sigma_{h},此方法的 P\mathbf{P} 矩阵定义为: P=(SΣhS)1SΣh \mathbf{P} = \left(\mathbf{S}^{\intercal}\Sigma_{h}^{\dagger}\mathbf{S}\right)^{-1}\mathbf{S}^{\intercal}\Sigma^{\dagger}_{h} 其中 Σh\Sigma_{h}^{\dagger} 表示方差伪逆。后来证明此方法与 MinTrace 变体等效。

参数
method: str,允许的最优组合方法:‘ols’, ‘wls_struct’。
nonnegative: bool,调整后预测是否应为非负数?

参考文献
- Rob J. Hyndman, Roman A. Ahmed, George Athanasopoulos, Han Lin Shang (2010). “Optimal Combination Forecasts for Hierarchical Time Series”..
- Shanika L. Wickramasuriya, George Athanasopoulos and Rob J. Hyndman (2010). “Optimal Combination Forecasts for Hierarchical Time Series”.. - Wickramasuriya, S.L., Turlach, B.A. & Hyndman, R.J. (2020). “Optimal non-negative forecast reconciliation”. Stat Comput 30, 1167–1182, https://doi.org/10.1007/s11222-020-09930-0.*


source

OptimalCombination.fit

 OptimalCombination.fit (S, y_hat,
                         y_insample:Optional[numpy.ndarray]=None,
                         y_hat_insample:Optional[numpy.ndarray]=None,
                         sigmah:Optional[numpy.ndarray]=None,
                         intervals_method:Optional[str]=None,
                         num_samples:Optional[int]=None,
                         seed:Optional[int]=None,
                         tags:Optional[dict[str,numpy.ndarray]]=None,
                         idx_bottom:Optional[numpy.ndarray]=None)

*MinTrace Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
y_insample: 大小为 (base, insample_size) 的样本内值。仅用于 “wls_var”, “mint_cov”, “mint_shrink”。
y_hat_insample: 大小为 (base, insample_size) 的样本内预测值。仅用于 “wls_var”, “mint_cov”, “mint_shrink”
sigmah: 条件边际分布的估计标准差。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。

返回
self: object,已拟合的一致性调整器。*


source

OptimalCombination.predict

 OptimalCombination.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                             level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

OptimalCombination.fit_predict

 OptimalCombination.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                                 idx_bottom:numpy.ndarray=None,
                                 y_insample:Optional[numpy.ndarray]=None, 
                                 y_hat_insample:Optional[numpy.ndarray]=No
                                 ne, sigmah:Optional[numpy.ndarray]=None,
                                 level:Optional[list[int]]=None,
                                 intervals_method:Optional[str]=None,
                                 num_samples:Optional[int]=None,
                                 seed:Optional[int]=None, tags:Optional[di
                                 ct[str,numpy.ndarray]]=None)

*MinTrace 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的样本内值。仅由 wls_var, mint_cov, mint_shrink 使用。
y_hat_insample: 大小为 (base, insample_size) 的样本内拟合值。仅由 wls_var, mint_cov, mint_shrink 使用。
sigmah: 条件边际分布的估计标准差。
level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。

返回
y_tilde: 使用 MinTrace 方法调整的一致性预测 y_hat。*


source

OptimalCombination.sample

 OptimalCombination.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*

6. 经验风险最小化


source

ERM

 ERM (method:str, lambda_reg:float=0.01)

*最优组合一致性调整类。

经验风险最小化一致性调整策略放宽了先前 MinT 等一致性调整方法的无偏假设,并优化调整后预测与验证数据之间的平方误差以获得最优一致性调整矩阵 P。

对于 P\mathbf{P} 的精确解 (method='closed') 遵循以下表达式: P=(SS)1YY^(Y^Y^)1\mathbf{P}^{*} = \left(\mathbf{S}^{\intercal}\mathbf{S}\right)^{-1}\mathbf{Y}^{\intercal}\hat{\mathbf{Y}}\left(\hat{\mathbf{Y}}\hat{\mathbf{Y}}\right)^{-1}

替代的 Lasso 正则化 P\mathbf{P} 解 (method='reg_bu') 在验证数据观测值有限或精确解数值稳定性低时非常有用。 P=argminPYSPY^22+λPPBU1\mathbf{P}^{*} = \text{argmin}_{\mathbf{P}} ||\mathbf{Y}-\mathbf{S} \mathbf{P} \hat{Y} ||^{2}_{2} + \lambda ||\mathbf{P}-\mathbf{P}_{\text{BU}}||_{1}

参数
method: str,可以是 closed, regreg_bu 之一。
lambda_reg: float,用于 regreg_bu 的 l1 正则化项。

参考文献
- Ben Taieb, S., & Koo, B. (2019). Regularized regression for hierarchical forecasting without unbiasedness conditions. In Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining KDD ’19 (p. 1337-1347). New York, NY, USA: Association for Computing Machinery..
*


source

ERM.fit

 ERM.fit (S, y_hat, y_insample, y_hat_insample,
          sigmah:Optional[numpy.ndarray]=None,
          intervals_method:Optional[str]=None,
          num_samples:Optional[int]=None, seed:Optional[int]=None,
          tags:Optional[dict[str,numpy.ndarray]]=None,
          idx_bottom:Optional[numpy.ndarray]=None)

*ERM Fit 方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
y_insample: 大小为 (base, insample_size) 的训练值。
y_hat_insample: 大小为 (base, insample_size) 的样本内训练预测值。
sigmah: 条件边际分布的估计标准差。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。

返回
self: object,已拟合的一致性调整器。*


source

ERM.predict

 ERM.predict (S:numpy.ndarray, y_hat:numpy.ndarray,
              level:Optional[list[int]]=None)

*使用一致性调整器进行预测。

使用拟合的均值和概率一致性调整器进行预测。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
level: float list 0-100,预测区间的置信水平。

返回
y_tilde: 已调整的一致性预测。*


source

ERM.fit_predict

 ERM.fit_predict (S:numpy.ndarray, y_hat:numpy.ndarray,
                  idx_bottom:numpy.ndarray=None,
                  y_insample:Optional[numpy.ndarray]=None,
                  y_hat_insample:Optional[numpy.ndarray]=None,
                  sigmah:Optional[numpy.ndarray]=None,
                  level:Optional[list[int]]=None,
                  intervals_method:Optional[str]=None,
                  num_samples:Optional[int]=None, seed:Optional[int]=None,
                  tags:Optional[dict[str,numpy.ndarray]]=None)

*ERM 一致性调整方法。

参数
S: 大小为 (base, bottom) 的求和矩阵。
y_hat: 大小为 (base, horizon) 的预测值。
idx_bottom: 对应于 S 底层的索引,大小为 (bottom)。
y_insample: 大小为 (base, insample_size) 的训练值。
y_hat_insample: 大小为 (base, insample_size) 的样本内训练预测值。
sigmah: 条件边际分布的估计标准差。
level: float list 0-100,预测区间的置信水平。
intervals_method: 预测区间的采样器,可以是 normality, bootstrap, permbu 之一。
num_samples: 概率一致性分布的样本数量。
seed: 可复现性的种子。
tags: 每个键是一个层级,每个值是其 S 索引。

返回
y_tilde: 使用 ERM 方法调整的一致性预测 y_hat。*


source

ERM.sample

 ERM.sample (num_samples:int)

*对概率一致性分布进行采样。

从概率一致性分布生成 n 个样本。该方法使用拟合的均值和概率一致性调整器,这些调整器由一致性调整器实例化期间选择的 intervals_method 定义。目前可用:normality, bootstrap, permbu

参数
num_samples: int,从一致性分布生成的样本数量。

返回
samples: 大小为 (num_series, horizon, num_samples) 的一致性样本。*

S @ y_hat_bottom_insample

参考文献

一般一致性调整

最优一致性调整

分层概率一致性预测