为什么时间序列预测这么难?本文将给你答案

news2024/11/24 19:15:54

机器学习和深度学习已越来越多应用在时序预测中。ARIMA 或指数平滑等经典预测方法正在被 XGBoost、高斯过程或深度学习等机器学习回归算法所取代。

尽管时序模型越来越复杂,但人们对时序模型的性能表示怀疑。有研究表明,复杂的时序模型并不一定会比时序分解模型有效(Makridakis, 2018)。

为什么时序预测很难?

时间序列是按时间排序的值,但时序预测具有很大的挑战性。从模型难度和精度角度考虑,时序模型的比常规的回归和分类任务更难。

原因1:序列是非平稳的

平稳性是时间序列的核心概念,如果时间序列的趋势(例如平均水平)不随时间变化,则该时间序列是平稳的。许多现有方法都假设时间序列是平稳的,但是趋势或季节性会打破平稳性。

原因2:依赖外部数据

除了时间因素之外,时间序列通常还有额外的依赖性。时空数据是一个常见的例子,每个观察值都在两个维度上相关,因此数据具有自身的滞后(时间依赖性)和附近位置的滞后(空间依赖性)。

原因3:噪音和缺失值

现实世界受到噪音和缺失值的困扰,设备故障可能会产生噪音和缺失值。传感器故障导致数据丢失,或者存在干扰,都会带来数据噪音。

原因4:样本量有限

时间序列往往都只包含少量的观察值,可能没有足够的数据来构建足够的模型。数据采集的频率影响了样本量,同时也会遇到数据冷启动问题。

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

好的技术文章离不开粉丝的分享、推荐,资料干货、资料分享、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:pythoner666,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

样本量与模型精度

时序模型往往无法进行完美预测,这可能和时序数据的样本量相关。在使用较大的训练集时,具有大模型往往比参数较少的模型表现更好。在时序序列长度小于1000时,深度模型往往并不会比时序分类模型更好。

下面对比了模型精度与样本个数的关系,这里尝试了五种经典方法(ARIMA、ETS、TBATS、Theta 和 Naive)和五种机器学习方法(高斯过程、M5、LASSO、随机森林和 MARS)。预测任务是来预测时间序列的下一个值。

结果如下图所示,轴表示训练样本大小,即用于拟合预测模型的数据量。轴表示所有时间序列中每个模型的平均误差,使用交叉验证计算得出。

当只有少数观测值可用时,基础方法表现出更好的性能。然而,随着样本量的增加,机器学习方法优于经典方法。

进一步可以得出以下结论:

  • 机器学习方法拥有很强的预测能力,前提是它们具有足够大的训练数据集;

  • 当只有少量观测值可用时,推荐首选 ARIMA 或指数平滑等经典方法;

  • 可以将指数平滑等经典方法与机器学习相结合可以提高预测准确性。

时序多步预测

大多数预测问题都被定义为单步预测,根据最近发生的事件预测系列的下一个值。时间序列多步预测需要预测未来多个值, 提前预测许多步骤具有重要的实际优势,多步预测减少了长期的不确定性。 但模型试图预测更远的未来时,模型的误差也会逐渐增加。

方法1:递归预测

多步预测最简单的方法是递归形式,训练单个模型进行单步预测,然后将模型与其先前的预测结果作为输入得到后续的输出。

from sklearn.linear_model import LinearRegression  
# using a linear regression for simplicity. any regression will do.  
recursive = LinearRegression()  
# training it to predict the next value of the series (t+1)  
recursive.fit(X_tr, Y_tr['t+1'])  
# setting up the prediction data structure  
predictions = pd.DataFrame(np.zeros(Y_ts.shape), columns=Y_ts.columns)  
  
# making predictions for t+1  
yh = recursive.predict(X_ts)  
predictions['t+1'] = yh  
  
# iterating the model with its own predictions for multi-step forecasting  
X_ts_aux = X_ts.copy()  
for i in range(2, Y_tr.shape[1] + 1):  
    X_ts_aux.iloc[:, :-1] = X_ts_aux.iloc[:, 1:].values  
    X_ts_aux['t-0'] = yh  
  
    yh = recursive.predict(X_ts_aux)  
  
    predictions[f't+{i}'] = yh  

上述代码逻辑在sktime中也可以找到相应的实现:https://www.sktime.org/en/stable/api_reference/auto_generated/sktime.forecasting.compose.RecursiveTimeSeriesRegressionForecaster.html

递归方法只需要一个模型即可完成整个预测范围,且无需事先确定预测范围。

但此种方法用自己的预测作为输入,这导致误差逐渐累计,对长期预测的预测性能较差。

方法2:多目标回归

多目标回归为每一个预测结果构建一个模型,如下是一个使用案例:

from sklearn.multioutput import MultiOutputRegressor  
  
direct = MultiOutputRegressor(LinearRegression())  
direct.fit(X_tr, Y_tr)  
direct.predict(X_ts)  

scikit-learn的MultiOutputRegressor为每个目标变量复制了一个学习算法。在这种情况下,预测方法是LinearRegression

此种方法避免了递归方式中错误传播,但多目标预测需要更多的计算资源。此外多目标预测假设每个点是独立的,这是违背了时序数据的特点。

方法3:递归多目标回归

递归多目标回归结合了多目标和递归的思想。为每个点建立一个模型。但是在每一步的输入数据都会随着前一个模型的预测而增加。

from sklearn.multioutput import RegressorChain  
  
dirrec = RegressorChain(LinearRegression())  
dirrec.fit(X_tr, Y_tr)  
dirrec.predict(X_ts)  

这种方法在机器学习文献中被称为chaining。scikit-learn 通过 RegressorChain 类为其提供了一个实现。

参考文献

Makridakis, Spyros, Evangelos Spiliotis, and Vassilios Assimakopoulos. “Statistical and Machine Learning forecasting methods: Concerns and ways forward.” PloS one 13.3 (2018): e0194889.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如果网站的 Cookie 特别多特别大,会发生什么(二)

协议 仔细回顾一遍 Cookie 属性,除了 secure,再没和 URL Scheme 相关的属性了。 HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。…

C++类基础(十四)

类的继承——虚函数 ● 通过虚函数与引用(指针)实现动态绑定 – 使用关键字 virtual 引入 – 非静态、非构造函数可声明为虚函数 – 虚函数会引入vtable结构 ● dynamic_cast static_cast, reinterpret_cast, const_cast在编译期发生。 dynamic_cast在…

Linux常用命令--目录文件管理

Linux常用命令一、目录与文件管理场景一:我是谁场景二:我在哪?跳转目录场景三:查看目录内容场景四:创建目录场景五:如何在目录中创建一个文件场景六:如何编辑一个简单文本文件?场景七…

用Python实现自动发送周报给老板,强制周报不用愁

前言 老板每周要求写周报上交? 像我这种记性不好的,一个月四周忘记三次 只能用点小技术,用Python写个小工具,让它每周帮我给老板发周报~ Github: Weekday 小工具 目标细化 SMTP发送邮件, 用smtplib 读取配置文件 发件人 收件…

uml图六种箭头的含义

在看uml图忘记箭头含义记录一下 泛化 概念:泛化是一种一般与特殊、一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其进行了扩展。在java中用来表示继承的关系。 表示方法:用实线空心三角箭头表示。 实现 概念…

Postman中cookie的操作

在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问。 Postman接口请求使用Cookie有如下两种方式: 1、直接在头域中添加Cookie头域,适用于已经知道请求所用Cookie数据的情况。 2、使用…

Vue3.0学习笔记

文章目录一. Vue开始1.1 渐进式框架1.2 单文件组件1.3 API 风格1.3.1 选项式 API1.3.2 组合式 API二. Vue基础2.1 创建一个 Vue 应用2.1.1 应用实例2.1.2 根组件2.1.3 挂载应用2.1.4 DOM 中的根组件模板2.1.5 应用配置2.1.6 多个应用实例2.2 模板语法2.2.1 文本插值2.2.2 原始 …

4K、高清、无水印视频素材库

推荐5个可以免费下载视频素材的网站,建议收起来! 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 菜鸟图库主要提供设计素材为主,自媒体等相关素材也很多,像商用图片、背景图、视频素材、音频素材都很齐全。视频素材全部都是…

不同接口的LCD硬件操作原理

不同接口的LCD硬件操作原理 文章目录不同接口的LCD硬件操作原理参考资料:一、 应用工程师眼里看到的LCD1.1 像素的颜色怎么表示二、 驱动工程师眼里看到的LCD2.1 统一的LCD硬件模型2.2 MCU常用的8080接口LCD模组2.3 MPU常用的TFT RGB接口2.4 有一个MIPI标准参考资料…

大专生现在转行IT可行吗?

抛开其他具体情况不说,大专是行业基本要求,大专学习转IT完全没有问题! 关于IT行业的学历要求 大专学历是满足基本入行要求的,并且大专可以选择的方向也很多,比如开发、云计算、大数据、数据分析等方向,这…

云计算ACP云服务器ECS实例题库(二)

😘作者简介:一名99年软件运维应届毕业生,正在自学云计算课程。👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。&…

java面试题-容器

目录 1、Java 容器都有哪些? 2.、Collection 和 Collections 有什么区别? 3、 List、Set、Map 之间的区别是什么? 4、HashMap 和 Hashtable 有什么区别? 5、 如何决定使用 HashMap 还是 TreeMap? 6、 说一下 Has…

融资、量产和一栈式布局,这家Tier 1如此备战高阶智驾决赛圈

作者 | Bruce 编辑 | 于婷 从早期的ADAS,到高速/城市NOA,智能驾驶的竞争正逐渐升级,这对于车企和供应商的核心技术和产品布局都是一个重要的考验。 部分智驾供应商已经在囤积粮草,响应变化。 2023刚一开年,智能驾驶…

C语言消消乐游戏代码

C和C游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。 本章我们将编写十字消除游戏,用户点击空白方块,沿其上下左右方向寻找第一个彩色方块,如果有两个或两个以上颜色一致,就将其消除。在进度…

Spark 3.1.1 shuffle fetch 导致shuffle错位的问题

背景 最近从数据仓库小组那边反馈了一个问题,一个SQL任务出来的结果不正确,重新运行一次之后就没问题了,具体的SQL如下: select col1,count(1) as cnt from table1 where dt 20230202 group by col1 having count(1) > 1这个问题是偶发…

SpringBoot 整合JWT实现基于自定义注解的-登录请求验证拦截(保姆级教学,附:源码)

学习目标: Spring Boot 整合JWT实现基于自定义注解的 登录请求接口拦截 例: 一篇掌握 JWT 入门知识1.1 在学习SpringBoot 整合JWT之前,我们先来说说JWT进行用户身份验证的流程 1:客户端使用用户名和密码请求登录 2:服务端收到请求&#xf…

spring中@Autowire和@Resource的区别在哪里?

介绍今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?Autowire private JdbcTemplate jdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: &quo…

AntDB-M设计之内存结构

亚信科技专注通信行业多年,AntDB数据库从诞生开始,就面对通信级的大数据量应用场景挑战,在性能、稳定性、规模化等方面获得了超过10年的通信核心业务系统验证,性能峰值达到每秒百万的通信核心交易量。AntDB-M(AntDB内存…

CMMI有哪几个级别,每个级别有哪些其特征

CMMI 一共分五个级别,一级低,五级高,一般初次认证CMMI从三级或者二级开始。 1、CMMI一级,完成级。 在完成级水平上,企业对项目的目标与要做的努力很清晰。项目的目标得以实现。一般来说,公司的初始阶段就是…

工作记录------@Accessors(chain = true)引起的BUG,Excel导入时获取不到值

工作记录------Accessors(chain true)引起的BUG,Excel导入时获取不到值 如题所示 背景:在进行文件excel文件导入时,发现实体类获取到的属性值都为null。 框架:com.alibaba.excel 2.2.0的版本。 结论:首先说下结论 如…