定期更新干货算法笔记和世间万物的学习记录~
层次时间序列预测是工业界非常常见的一个应用场景。当要预估的时间序列之间存在层次关系,不同层次的时间序列需要满足一定的和约束时,就需要利用层次时间序列预测方法解决。设想这样一种场景,我们作为政府负责旅游业的部门,需要预测出澳大利亚每个月的旅游人数,同时还需要预测澳大利亚每个州的旅游人数,以及每个州中每个区的旅游人数。如果澳大利亚包括10个州,每个州包括5个地区,那么总共需要预测1 10 50个时间序列。而这50个时间序列是存在关系的,即澳大利亚总旅游人数=10个州旅游总人数,同时每个州旅游总人数=这个州下5个地区旅游总人数。这就形成了一个类似于下面这样的层次结构:
对这种层次结构中每个序列进行预测,就叫层次预估。层次预估需要达成2个条件:首先,需要对层次中的每个节点都进行预测;其次,需要保证某个父节点的预测结果和其子节点的预测结果之和相等(或近似相等),这个约束可以被称为层次约束。层次预估在应用场景中也比较常见,相对于基础的时间序列预测,层次时间序列预测需要不仅要考虑如何预测好每个序列,还要考虑如何让整体层次预估结果满足层次约束。本文为大家梳理了层次时间序列预测的SOTA方法,从最基础的bottom-up方法,到基于校准的方法,再到近两年出现的基于深度学习的层次预估方法。
1
层次预估的基础方法
实现层次预估的目标其实并不难,最基础的方法包括bottom-up、top-down或middle-out等。Bottom-up方法,指的是只预测所有最底层节点的时间序列,对于上层的时间序列,使用底层时间序列预测结果逐层加和得到。Top-down方法只预测最顶层节点的时间序列,然后根据一种分配方式,将顶层的预测结果逐渐分发至底层,这种分配方式可以按照诸如某个子节点历史一段时间的值占其父节点值的比例分配。Middle-out选择中间某层进行预测,然后再利用bottom-up和top-down方法,从所选这一层的预估结果向上汇聚和向下分配。
这3种方式的问题在于,只能使用某一层的信息进行预测,无法同时使用所有层次序列信息。不同层次的节点有不同的优势和劣势。越往上层的节点,噪声越小,规律性越强,预估起来越容易(试想预测中国总人口相对容易,只要考虑出生率死亡率这些变化趋势就行了;而如果要预测每个城市的人口,就还需要考虑不同城市之间的迁徙规律、发展情况等,问题更加复杂)。而上层节点由于粒度过粗,损失了很多底层节点才有的信息。越往下层的节点,噪声越大,预估起来越困难,通过底层节点预估结果加和得到上层节点,往往不会取得比较好的效果。但是底层节点粒度细,信息更丰富。因此,如果能设计一种方式同时考虑不同层次的时间序列信息,实现整个层次整体的预估,能达到各个层次信息互补的目的,提升整体预测效果。
2
基于校准的层次预估方法
Optimal combination forecasts for hierarchical time series(2010)这篇文章中,将层次预估问题抽象成3个步骤:先分别预估每个序列的值(可以使用任何预估方法),我们把这一步得到的预估结果叫作基础预估结果(base forecast);然后利用层次约束信息(父节点预估结果等于其子节点预估结果的和)对每个底层序列的初始预估结果进行校准,我们把这步得到的结果叫作校准结果(reconciliation forecast);最后,我们使用底层节点的校准结果,采用bottom-up的思路向上聚合,得到其他上层节点的预估结果。整个过程可以用一个公式表示(这个公式非常重要):
其中左侧代表最终的预测结果,右侧的y代表初始预估结果,P代表校准矩阵,S代表层次关系。我们以下图中的层次结构为例,包含7个序列,3个层次。S是一个7*4的矩阵,S(i, j)表示第i个节点和第j个上层节点是否是父子关系。P是一个4*7的矩阵,可以理解为每个底层节点和其他节点之间的分配系数。公式右侧从右向左,可以理解为,首先利用所有节点的基础预估结果,结合矩阵P定义的分配系数,重新生成底层节点校准后的预测结果。这一步相当于将所有节点的预估结果信息都进行了利用,作用到底层节点。然后利用S矩阵定义的层次关系,将底层节点校准后的结果聚合到上层结果,得到所有节点的预测结果。
Bottom-up和top-down这两种方法都是上面方法的一种特例,它们的P矩阵分别可以表示成如下形式。
只要能够求解出最好的P,就能得到最优解,因此后面有一系列工作围绕如何求解P矩阵展开。主要工作包括Optimal combination forecasts for hierarchical time series(2010)、Optimal forecast reconciliation for hierarchical and grouped time series through trace minimization(2019)、(Regularized Regression for Hierarchical Forecasting Without Unbiasedness Conditions(KDD 2019)。这些工作的主要区别在于求解P的方法,从最基础的WLS、OLS,到MinT,再到ERM等。
3
基于深度学习的层次预估方法
近两年出现了一些层次预估的新方法,本节将对这些方法进行介绍。A Trainable Reconciliation Method for Hierarchical Time-Series(2021)将P矩阵(M*N)看成是一个从M维映射到N维的函数,利用NN网络来拟合这个校准矩阵P。模型可以看成是一个Encoder-Decoder结构,输入基础预估结果,经过P矩阵(NN网络)映射得到底层节点的预估结果,再根据层次关系矩阵S映射成整个层次所有节点的预估结果,Encoder-Decoder联合训练,模型结构如下图。
A Self-supervised Approach to Hierarchical Forecasting with Applications to Groupwise Synthetic Controls(2019)通过直接在引入一个底层节点预估结果之和与父节点预估结果的偏差作为正则化损失,加入优化目标中,将优化目标分解为forecast loss和reconciliation loss。其中reconciliation loss的作用在于,限制模型的预测结果,防止偏离层次约束太多,进而利用层次约束限制了预测结果的学习过程,公式如下:
Forecasting Hierarchical Time Series with a Regularized Embedding Space(2020)对上述方法进行改进,不是在预测结果上施加层次约束,而是将每个时间序列映射成一个embedding,然后在embedding上施加约束,即让父节点的embedding与子节点embedding的和更接近,公式如下:
HIERARCHICALLY REGULARIZED DEEP FORECASTING(2021,HIRED)提出了一种基于深度学习的端到端层次预估方法,并且适用于大规模层次时间序列预测任务,这里我们做重点介绍。HIRED假设每个序列都是由公共的一些basis序列组成的,类似于基于矩阵分解的时间序列预测思路,basis序列的数量是一个超参数。假设设定basis数量为5,对于每一个序列,都定义一个5维的embedding,5个维度分别对应每个basis的权重,利用emebdding的每个维度分别乘basis的每个序列进行加权求和,得到当前序列的预测结果。但是对于时间序列数量非常多的数据来说,这种全局学习basis的方法效率很低。因此本文提出一种反向操作,用每个序列的信息,去还原全局的basis,并且增加了不同序列还原得到的basis应该尽可能相同的一个正则化项,可以表示为如下形式:
其中左侧公式theta_i对应每个每个序列的embedding,函数B是根据当前序列的特征和序列值进行全局basis的还原;右侧公式表示让任何两个序列还原得到的全局basis尽可能相等的正则化项。
在此基础上,为了引入层次约束,本文采用了用序列的embedding进行约束的方式,类似于上面提到的Forecasting Hierarchical Time Series with a Regularized Embedding Space(2020)这篇论文的方法,即引入父节点的embedding和子节点的embedding的L2损失,可以表示如下:
最终,模型的loss由3个部分组成:预测loss、全局basis生成的正则化loss、embedding进行层次约束的loss,整体loss和模型结构如下:
4
总结
本文介绍了时间序列预测中层次时间序列预测这一场景,当要预测多个时间序列存在层次结构关系时,可以利用层次预估的思路,引入不同层次之间的加和关系、不同层次时间序列的信息等,提升整体的预测效果。
END