Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习中时间序列预测的一些常见陷阱

机器学习中时间序列预测的一些常见陷阱

作者头像
商业新知
修改于 2019-05-24 09:59:15
修改于 2019-05-24 09:59:15
3.9K0
举报
文章被收录于专栏:AI人工智能AI人工智能

在本文中,我将讨论机器学习中时间序列预测的一些常见陷阱。

时间序列预测是机器学习的一个重要领域。说它重要是因为有很多预测问题都涉及时间成分。然而,虽然时间成分补充了额外的信息,但与其他预测任务相比,时间序列问题更难以处理。

本文将介绍机器学习进行时间序列预测的任务的过程,以及如何避免一些常见的陷阱。我将通过一个具体的例子展示看起来拥有了一个好的模型并决定投入生产,而实际上该模型可能没有任何预测能力,更具体地说,我将专注于如何评估你的模型精度,并向您展示如果只是简单地依赖常见的误差指标(如平均百分比误差,R2得分等),而没有谨慎应用它们的话,反而可能产生极大的误导。

时间序列预测的机器学习模型

有一些类型的模型可用于时间序列预测。在这个具体的例子中,我使用了长短期记忆网络,或称LSTM网络。这是一种特殊的神经网络,可以根据以前的数据进行预测。它在语言识别、时间序列分析等方向很受欢迎。但是,根据我的经验,在许多情况下,越简单的模型类型实际上提供了越准确的预测。使用随机森林、梯度增强回归和延时神经网络等模型时,可以通过添加一组延时到输入来覆盖时序信息,以便在不同的时间点来表示数据。由于它们的有序性,TDNN被作为前馈神经网络实现,而不是递归神经网络。

如何使用开源软件库实现模型

我通常使用Keras来定义神经网络类型的模型,Keras是一个高级神经网络API,用Python编写并且能够在TensorFlow,CNTK或Theano之上运行。对于其他类型的模型,我通常使用Scikit-Learn,这是一个免费的机器学习库,它具有各种分类、回归和聚类算法,包括支持向量机、随机森林、梯度增强、k -means和DBSCAN等,旨在与Python数值和科学库NumPy和SciPy建立互操作。

但是,本文的主要内容不是如何实现时间序列预测模型,而是如何评估模型预测结果。因此我不会详细介绍模型构建,因为还有很多其他文章涵盖这些主题。

示例:时间序列数据的预测

在本文中使用的示例数据如下图所示。稍后我将介绍细节,现在我们先假设这些数据代表了股票指数的年变化。数据被分成训练集和测试集,其中前250天用作模型的训练数据,数据集的最后部分用于尝试预测股票指数。

由于我在本文中不关注模型实现,因此直接进入评估模型精度的环节。单单通过目测检查上图,模型预测值似乎紧密跟随真实值,表现出了良好的精度。为了更加精确,我们可以通过绘制如下散点图,查看真实值与预测值来评估模型精度,并计算了误差度量R2得分。

R2得分为0.89,看起来这是真实值和预测值之间的达到了良好匹配。但是,正如我即将更详细地讨论的那样,这种度量和模型评估可能会产生误导。

一个简单的错误

根据上面的图表和计算误差,该模型显然给出了准确的预测。然而这仅仅是在评估模型性能时选择了错误的精度度量,并产生误导的一个示例。在该示例中,为了证明,我们故意选择了实际上不能实现预测的数据。更具体地说,我称之为“股票指数”的数据实际上是使用随机游走过程建模的。随机游走顾名思义是一个完全随机的过程。因此,想使用历史数据作为训练集以学习行为和预测未来结果是根本不可能的。那么,为什么该模型似乎正为我们提供非常准确的预测呢?下面我将更详细地回顾一下,这一切都归结为(错误)精确度度量的选择。

延时预测和自相关

时间的意义很重要,从这个角度上说,时间序列数据(如名称所示)与其他类型的数据不同。积极的意义是为我们提供了构建机器学习模型时可以使用的附加信息,不仅输入包含有用信息,而且输入/输出随时间变化。然而,虽然时间成分提供了了额外的信息,但它使得时间序列问题比其他预测任务更难以处理。

在这个例子中,我使用了一个LSTM网络,它根据过往数据进行预测。但是,当我们稍微放大模型预测的比例时,如下图所示,我们可以看到模型的实际情况。

时间序列数据倾向于在时间上相关,并且表现出显着的自相关性。在这种情况下,这意味着在时间“ t +1”处的值很可能与时间“ t ” 处值相近。如上图右侧所示,模型实际上在做的是:当预测时间“ t +1” 的值时,它只是使用时间“ t ” 的值作为其预测(通常称为持续性模型)。绘制预测值和真实值之间的相关性(下图),我们在1天左右的时间滞后处看到一个明显的峰值,表明该模型仅使用先前的值作为未来的预测。

精度指标的不当使用会产生误导

这意味着在根据直接预测值的能力评估模型时,常见的误差度量(例如平均百分比误差和R2分数) 都表明模型具备高预测精度。但是,由于示例数据是通过随机游走过程生成的,因此该模型实际上是无法预测未来结果的。这凸显了一个重要的事实,即通过直接计算常见错误度量来简单地评估模型预测能力可能会产生误导,并且很容易让人对模型精度过于自信。

平稳性和差分时间序列数据

一个平稳的时间序列  是指其统计特性,如均值、方差、自相关等随着时间变化都保持不变。大多数统计预测方法会基于这样的假设:通过数学变换可以使时间序列近似静 止(stationarized)。这类转换中一个 基本转换是对数据进行时差转换,如下图所示。

这种转变的作用是不直接考虑值,而是计算连续时间步长之间的差值。

定义模型来预测时间步长间值的差异,而不是值本身,这种方法是对模型预测能力更强的检验。 在这种情况下,不能简单地使用具有强自相关性的数据,并使用时间“ t ” 的值作为“ t + 1” 的预测。因此,它对模型精度提供了更好的验证,以及验证模型是否在训练阶段学到了有用的东西,并可分析历史数据是否可以帮助模型预测未来的变化。

时间差分数据的预测模型

由于能够预测差分数据而不是直接预测数据,因此可以更好地辨明模型的预测能力,让我们试一下我们的模型。该检验的结果如下图所示,真实值与预测值关系的散点图。

该图表明该模型不能基于历史事件预测未来的变化(预期结果),因为数据是使用完全随机游走过程生成的。随机过程的结果是不可能预测的,如果有人声称能做到,那么应该对此怀疑。

你的时间序列是随机游走吗?

您的时间序列实际上可能是随机游走,有些方法可以检查如下:

  • 时间序列显示强烈的时间依赖性(自相关),呈线性衰减或以类似的模式衰减。
  • 时间序列是非平稳的,使其静止表示在数据中没有明显可训练的结构。
  • 持续性模型(将前一时间步骤的观察结果用在下一个时间步骤中)提供可靠预测的最佳来源。

最后一点是时间序列预测的关键。使用持续性模型的基线预测可以快速证实您是否可以做得更好。如果不能,那您可能正在处理随机游走(或接近随机游走)。人类的头脑天生就想到处寻找模式,我们必须警惕的是,我们不是在自欺欺人,而是因为在为随机游走过程开发复杂的模型而浪费时间。

作者说明:在发表文章后,我发现了Jason Brownlee一篇同一主题的精彩文章,该文章对随机漫步和时间序列进行了类似处理

用Python编写随机漫步时间序列预测

https://machinelearningmastery.com/gentle-introduction-random-walk-times-series-forecasting-python/

总结

我想通过本文强调的主要观点,是根据预测精度评估模型性能时需要非常小心。如文中所示,完全随机的过程中预测未来结果是不可能的,但人们很容易被愚弄。通过简单地定义一个模型,进行一些预测并计算通用的精度度量,人们似乎可以拥有一个好的模型并决定将其投入生产。然而在现实中,该模型可能没有任何预测能力。

如果您正在进行时间序列预测,并且可能认为自己是数据科学家,我建议您也要强调科学方面。始终对数据告诉你的内容持怀疑态度,提出关键问题并且从不轻率的得出任何结论。数据科学中应用的科学方法应该与其他科学中应用的一样。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度时间序列预测和基础模型的研究进展
本文综述了深度学习在时间序列预测中的应用,特别是在流行病预测领域。尽管深度学习在时间序列预测中表现出显著优势,但仍面临挑战,如时间序列不够长、无法利用积累的科学知识以及模型的解释性。
算法进阶
2024/07/10
3160
深度时间序列预测和基础模型的研究进展
【数据挖掘 & 机器学习 | 时间序列】时间序列必学模型: ARIMA超详细讲解
【数据挖掘 & 机器学习 | 时间序列】时间序列必学模型: ARIMA超详细讲解 作者: 计算机魔术师 版本: 1.0 ( 2023.8.27 )
计算机魔术师
2023/11/20
2.4K0
【数据挖掘 & 机器学习 | 时间序列】时间序列必学模型: ARIMA超详细讲解
时间序列预测:深度学习与统计学,谁赢了?
不少学术论文对深度学习模型进行了深度探讨,但并没有展示出完整的情况。有趣的是,即使在 NLP 的案例中,一些人更倾向于将 GPT 模型的重大突破归功于“更多的数据和计算能力”,而非“更优秀的机器学习研究”。
数据STUDIO
2024/04/11
6010
时间序列预测:深度学习与统计学,谁赢了?
时间序列预测的20个基本概念总结
时间序列数据是有序的。这意味着观察/数据点依赖于以前的观察/数据点。因此,在模型训练期间,数据点顺序不会被打乱。
deephub
2023/08/30
7870
时间序列预测的20个基本概念总结
Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测|附代码数据
根据频率,时间序列可以是每年(例如:年度预算),每季度(例如:支出),每周(例如:销售数量),每天(例如天气),每小时(例如:股票价格),分钟(例如:来电提示中的呼入电话),甚至是几秒钟(例如:网络流量)。
拓端
2023/02/20
1.9K0
AI 技术讲座精选:Python中使用LSTM网络进行时间序列预测
长短记忆型递归神经网络拥有学习长观察值序列的潜力。 它似乎是实现时间序列预测的完美方法,事实上,它可能就是。 在此教程中,你将学习如何构建解决单步单变量时间序列预测问题的LSTM预测模型。 在学习完
AI科技大本营
2018/04/26
1.7K0
AI 技术讲座精选:Python中使用LSTM网络进行时间序列预测
深度学习与统计学中的时间序列预测
近年来,深度学习在NLP领域取得了显著进展。由于时间序列本质上也是呈现出序列性,如果将预训练的转换器(transformers)模型应用在时间序列预测上,结果将会如何呢?
LeonAlgo
2025/02/26
990
深度学习与统计学中的时间序列预测
使用 TiDE 进行时间序列预测
时间序列预测一直是数据科学领域的一个热门研究课题,广泛应用于能源、金融、交通等诸多行业。传统的统计模型如ARIMA、GARCH等因其简单高效而被广泛使用。而近年来,随着深度学习的兴起,基于神经网络的预测模型也备受关注,表现出了强大的预测能力。
数据STUDIO
2024/07/24
5330
使用 TiDE 进行时间序列预测
Python、R用深度学习神经网络组合预测优化能源消费总量时间序列预测及ARIMA、xgboost对比
在能源领域,精准预测能源消费总量对制定合理能源战略至关重要。当前,能源消费预测分析主要运用单一模型(如灰色预测法、时间序列分析法等)和组合模型两种方式。然而,单一模型存在系统误差较高、预测结果可信度存疑等问题,提升预测精度成为亟待解决的关键(点击文末“阅读原文”获取完整代码数据)。
拓端
2025/01/01
1240
Python、R用深度学习神经网络组合预测优化能源消费总量时间序列预测及ARIMA、xgboost对比
时间序列预测方法最全总结!
时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。
Datawhale
2021/03/12
28.7K1
时间序列预测方法最全总结!
时间序列自监督学习综述
自监督学习(SSL)是一种机器学习方法,最近在各种时间序列任务上取得了令人印象深刻的表现。SSL最显著的优点是它减少了对标记数据的依赖。基于预训练和微调策略,即使是少量的标记数据也能实现高性能。
算法进阶
2023/08/28
6110
时间序列自监督学习综述
深度学习时间序列异常检测方法
本文全面概述了深度学习用于时间序列异常检测的最新架构,提供了基于策略和模型的方法,并讨论了各种技术的优点和局限性。此外,还举例说明了近年来深度学习在时间序列异常检测中各领域的应用。
算法进阶
2024/07/11
1.1K0
深度学习时间序列异常检测方法
时间序列预测任务的模型选择最全总结
如果你正在处理时间序列数据,那么就跟云朵君一起学习如何根据预测性能来比较和选择时间序列模型。
数据STUDIO
2023/02/24
5.5K0
时间序列预测任务的模型选择最全总结
深度学习时间序列的综述
摘要:时间序列一般是指对某种事物发展变化过程进行观测并按照一定频率采集得出的一组随机变量。时间序列预测的任务就是从众多数据中挖掘出其蕴含的核心规律并且依据已知的因素对未来的数据做出准确的估计。由于大量物联网数据采集设备的接入、多维数据的爆炸增长和对预测精度的要求愈发苛刻,导致经典的参数模型以及传统机器学习算法难以满足预测任务的高效率和高精度需求。近年来,以卷积神经网络、循环神经网络和 Transformer 模型为代表的深度学习算法在时间序列预测任务中取得了丰硕的成果。为进一步促进时间序列预测技术的发展,综述了时间序列数据的常见特性、数据集和模型的评价指标,并以时间和算法架构为研究主线,实验对比分析了各预测算法的特点、优势和局限;着重介绍对比了多个基于 Transformer 模型的时间序列预测方法;最后结合深度学习应用于时间序列预测任务存在的问题与挑战对未来该方向的研究趋势进行了展望。(文末附论文下载地址)
算法进阶
2023/08/28
8810
深度学习时间序列的综述
Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测|附代码数据
使用ARIMA模型,您可以使用序列过去的值预测时间序列(点击文末“阅读原文”获取完整代码数据)。
拓端
2022/11/07
2K0
算法金 | 时间序列预测真的需要深度学习模型吗?是的,我需要。不,你不需要?
时间序列预测,这玩意儿在数据分析界可是个香饽饽,尤其在电力、交通、空气质量这些领域里,预测得准,资源分配更合理,还能让相关部门提前做好准备。但深度学习这小子横空出世,开始抢传统统计学方法的风头。那么问题来了,时间序列预测非得用深度学习吗?咱们今天就来掰扯掰扯。
算法金
2024/07/08
830
算法金 | 时间序列预测真的需要深度学习模型吗?是的,我需要。不,你不需要?
Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
使用ARIMA模型,您可以使用序列过去的值预测时间序列。在本文中,我们从头开始构建了一个最佳ARIMA模型,并将其扩展到Seasonal ARIMA(SARIMA)和SARIMAX模型。
拓端
2020/08/07
9K0
R语言武汉流动人口趋势预测:灰色模型GM(1,1)、ARIMA时间序列、logistic逻辑回归模型|附代码数据
人口流动与迁移,作为人类产生以来就存在的一种社会现象,伴随着人类文明的不断进步从未间断。
拓端
2023/09/08
2760
python用ARIMA模型预测CO2浓度时间序列实现|附代码数据
时间序列为预测未来数据提供了方法。根据先前的值,时间序列可用于预测经济,天气的趋势。时间序列数据的特定属性意味着通常需要专门的统计方法
拓端
2023/03/15
1.4K0
时间序列损失函数的最新综述!
A Comprehensive Survey of Regression Based Loss Functions for Time Series Forecasting
算法进阶
2023/08/28
8610
时间序列损失函数的最新综述!
推荐阅读
相关推荐
深度时间序列预测和基础模型的研究进展
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档