多序列 时间序列预测

  • 2021 年 6 月 1 日
  • AI

大部分经济学模型基本上都只能处理单序列问题,多个序列则要分开构建多个模型,对于大量的多序列,这样的处理方式往往难以接受,比如10万个商品意味着要构建10万个经济学模型,如果是简单平均预测之类的模型倒是没什么问题,如果是一些复杂的经济学模型,则模型的构建和维护成本太高。

所以一般多序列都放到一起用一个模型来建模,这么做的基本假设就是,我们把多序列问题当作一个 假设的单序列的的子序列,建模的目的在于学习所有多序列之间共同存在的模式。比如说股票,A股的上千只股票我们都当作一只股票的序列数据来建模,这样的话,某个时间段内的序列会出现非常多次,比如说 2020-01-01到2020-02-1,相同时间区间里的序列会有上千个,这样模型能学到什么呢?模型只能学到所有序列数据共同的一些比较“宏观”的运行模式,这也是为什么多序列建模之后,会发现每个序列的预测总是不那么准,毕竟你的数据是这么提供的,模型只能学习到其中最相似的模式,从而使得整体的loss最小。

比如说adidas这种大企业,基本上国内的大部分省市都有其不同商品的销量数据,这些数据全部放在一起,不同区域、不同热门程度、不同品类的商品都放在一起用一个模型建模,就硬train,这种情况下建模的效果往往不好,比如你adidas的鞋子可能卖的很火,但是你adidas的冰淇凌(只是举例)可能就没什么销量,毕竟市面上专门做冰淇凌的公司还是有很多的,这种情况下模型压根学不到什么共同的模式,可能最终学习到的是比较折中的对两种商品的预测效果都不好的规律,大概像这样:

假设上面的是nike的鞋子,下面是nike的冰淇凌,最终学出来的拟合曲线是中间的那条,显然对于二者的预测效果都不好。

因此,更好的方式是做时间序列聚类,然后每个聚类单独建模,比如nike的鞋子和衣服一起建模,nike的冰淇凌和nike的饼干一起建模,因为对时间序列聚类几乎没有涉及,所以之前都是通过城市,大类等方式来人工对多个序列进行分群然后单独建模,实际效果比整体建模要好得多。时间序列聚类还是挺有意思的,因为应用的场景也是比较有想象空间的,比如用户的交易序列进行聚类,从而检测交易序列有问题的欺诈用户等等