3种时间序列混合建模方法的效果对比和代码实现

本文中将讨论如何建立一个有效的混合预测器,并对常见混合方式进行对比和分析

基于树的算法在机器学习生态系统中是众所周知的,它们以主导表格的监督任务而闻名。在学习过程中,树的分裂标准只关注相关特征和有用值的范围,所以给定一组表格特征和要预测的目标,无需太多配置和特定的预处理就可以得到令人满意的结果。

但是基于树和梯度提升模型在时间序列预测领域的表现并不好,很多人更倾向于深度学习的方法。这并不奇怪,因为基于树的模型的弱点在于:在技术上无法推断出比训练数据中更高/更低的特征值。他们几乎不可能预测所见区间之外的值。相反,经典的线性回归可能较少受到数据动态行为的影响。既然线性回归擅长推断趋势,而梯度提升擅长学习交互,是否可以将它们结合起来呢?本文目标是创建“混合”预测器,结合互补的学习算法,让一个的优势弥补另一个的弱点。

在使用深度学习时,更容易想到“混合模型”,因为神经网络的无限架构组合和个性化训练过程在定制方面提供了巨大的好处。使用树模型开发定制的混合是比较麻烦的。linear-tree,这个 python 包是一个不错的选择,它提供混合模型架构,混合了基于树的模型和线性模型的学习能力。不仅如此,LGBM 或 XGBoost 也引入了用树叶中的线性近似拟合梯度提升的能力。

在这篇文章中,我尝试从头开始构建一个混合预测器。下面需要做的就是按照两步的方法来学习系统模式。

基础知识

为了设计有效的混合,我们需要对时间序列的构建方式有一个大致的了解。时间序列一般可以通过将三个组成部分(趋势、季节和周期)加上一个本质上不可预测的项(误差)加在一起来精确描述。

  1. series = trend + seasons + cycles + error

学习时间序列组件可以看作是一个迭代过程:

  • 首先,学习趋势并将其从原始序列中减去,得到残差序列;
  • 其次,从去趋势的残差中学习季节性并减去季节;
  • 最后,学习周期并减去周期。

换句话说,我们使用一种算法来拟合特定的组件序列,然后使用另一种算法来拟合残差序列。最终的预测是各种模型组件的预测相加。

为了尝试构建混合模型,我们开始生成一些具有双季节性模式和趋势分量的时间序列数据。

在随机游走序列上拟合三次多项式可以获得未知趋势。结果是一条平滑的趋势线,它被添加到季节性分量中以获得最终的时间序列。可以通过以这种方式生成多个时间序列,并尝试预测它们对各种解决方案进行基准测试。

实验方法

本文中尝试了四种不同的方法:

  • 拟合一个简单的线性模型;
  • differencing:使用差分变换,使目标变得稳定;
  • hybrid additive:拟合具有最优的线性模型推断趋势。然后用梯度提升对去趋势序列进行建模;
  • hybrid inclusive.:拟合梯度提升,包括外推趋势(获得拟合具有最优线性模型拟合的趋势)作为特征。

除了最基本的解决方案,上面的所有方法都使用一些样条变换作为特征。这些特征可以很好地捕捉了季节性模式。通过在训练数据上搜索最佳线性模型来计算最佳趋势。使用时间交叉验证策略搜索一些最佳参数配置。

完整文章:

https://www.overfit.cn/post/266402dd48eb4a8884aa0f7c359da2cb

posted @   deephub  阅读(242)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示