15种时间序列预测方法总结(包含多种方法代码实现)

机器学习AI算法工程

共 9577字,需浏览 20分钟

 ·

2024-04-29 11:00

向AI转型的程序员都关注了这个号👇👇👇


在这篇文章中,我们将深入探讨时间序列预测的基本概念和方法。我们将首先介绍单元预测和多元预测的概念,然后详细介绍各种深度学习和传统机器学习方法如何应用于时间序列预测,包括循环神经网络(RNN)、一维卷积神经网络(1D-CNN)、Transformer、自回归模型(AR)、状态空间模型、支持向量机(SVM)和随机森林(RF)等。我们还会讨论这些方法在单元预测和多元预测中的适用性。


时间序列分析


基本概念


在我们的日常生活中,时间序列数据无处不在。无论是市场的价格波动,气象站的天气记录,还是社交媒体的用户活动,这些都是时间序列数据的例子,类似于下面的图片。


其中横坐标代表着时间的信息,纵坐标代表着价格,从其中我们可以看出随着时间的推移其价格会有一定的波动,这一现象我们就称之为时间序列。 

那么什么是时间序列的定义呢?

时间序列数据是指按照时间顺序收集的数据,每个数据点都与一个特定的时间点相关联。这些数据点通常按照均匀的时间间隔(如每日、每周、每月等)进行测量和记录。例如,每天的股票价格、每月的销售额、每年的人口总数等都是时间序列数据的例子。


核心概念 

在进行时间序列分析时,有几个核心概念需要理解:

趋势:趋势是时间序列数据中长期的上升或下降模式。例如,一个公司的年销售额可能会显示出持续增长的趋势。

季节性:季节性是时间序列数据中的周期性波动,这些波动通常与季节或其他固定的时间间隔有关。例如,零售业的销售额可能在节假日期间显著增加。

周期性:周期性是时间序列数据中的波动,这些波动的周期不固定,与季节性不同。例如,经济周期就是一种周期性。

随机(或不规则)波动:这是时间序列中不可预测的部分,不能被趋势、季节性或周期性解释。

自相关性:自相关性是时间序列中相邻观察值之间的相关性。例如,今天的股票价格可能与昨天的股票价格高度相关。

平稳性:平稳时间序列的统计特性(如均值、方差等)不随时间变化。许多时间序列模型都假设数据是平稳的,或可以通过某种转换(如差分)变为平稳。

滞后值:滞后值是过去的数据值。例如,在t-1时刻的值就是在t时刻的滞后值。滞后值在许多时间序列模型(如自回归模型)中都有应用。

理解这些基本概念是进行有效的时间序列分析和预测的关键。在接下来的文章中,我们将深入探讨如何应用这些概念,并介绍一些常见的时间序列预测方法,包括深度学习和传统的机器学习方法。


时间序列预处理

在数据科学领域,我们经常听到这样一句话:“数据预处理占据了大部分的时间和精力。”这句话在时间序列预测中同样适用。在我们开始预测未来的趋势和模式之前,我们需要确保我们的数据是准确的、一致的,并且适合我们的模型。

(PS:数据预处理是非常重要的,同样的数据如果你进行了处理可能精度提升要有十个点甚至二十个点,我曾经就实验过Xgboost数据处理和未处理时候的精度对比效果竟然相差百分之三十!所以大家一定要重视数据的预处理)


以下是时间序列预处理的一些关键步骤以及代码示例:

处理缺失值:缺失值是时间序列数据中常见的问题。处理方法可能包括插值(例如,使用前后观察值的平均值填充缺失值)。

import pandas as pd

# 假设df是一个DataFrame,其中有一些缺失值

df = pd.DataFrame({"value": [1, None, 2, 3, None, 4]})

# 使用线性插值填充缺失值

df = df.interpolate(method='linear')


输出 :可以看出用相邻两个数之间的值替换了缺失的Nan值


季节性调整:许多时间序列数据包含季节性变化,这可能会掩盖数据的真实趋势。季节性调整是一种方法,可以去除数据中的季节性效应,使得趋势更加明显。 


# 假设df是一个DataFrame,其中包含时间序列数据

df = pd.DataFrame({"value": [1,2,3,4,5,6,7,8,9,10,11,12]})

# 进行季节性分解

res = sm.tsa.seasonal_decompose(df.value, model='additive', period=3)

# 季节性调整

df_deseasonalized = df.value - res.seasonal


输出:


去噪:时间序列数据可能包含噪声,这可能会影响预测的准确性。去噪方法可能包括平滑技术(例如,移动平均法)或者更复杂的方法(例如,使用滤波器)。


检查并确保平稳性:许多时间序列模型假设数据是平稳的,即数据的统计特性(如均值、方差等)不随时间变化。如果数据不是平稳的,可能需要进行一些转换(如取对数、差分等)。


检查并处理异常值:异常值是时间序列数据中的极端值,可能会影响预测的准确性。处理方法可能包括修剪(限制极端值的大小),或者使用更复杂的方法(例如,使用模型识别并处理异常值)。 


 (PS:在上述的方法中一般使用的是Nan值的处理和异常值的检测,这两个方法在实际生产的过程中运用的比较多,首先如果你的数据中有NaN值对于python来说一般会报错导致你的程序运行报错,而异常值我们可以称之为离群点,往往会导致模型预测精度的不准)

特征工程在时间序列预测中的应用

经过了时间序列预测的处理,我们的数据已经符合了模型的需要,那么我们就该进行一些特征工程的操作,下面我们来讲解特征工程。

特征工程是将原始数据转化为更适合机器学习模型的特征的过程。在时间序列预测中,特征工程尤其重要,因为它可以帮助模型捕捉到数据的时间依赖性。

以下是一些在时间序列预测中常用的特征工程技术:

滞后特征:滞后特征是用过去的数据作为新的特征。例如,我们可以创建一个新的特征,表示在过去一天、一周或一月的数据。

滑动窗口统计:滑动窗口统计是对过去一段时间内的数据进行统计分析,如求和、平均、最大值、最小值等。

时间特征:时间特征是从时间戳中提取的特征,如年份、月份、一周的第几天、一天的第几小时等。

趋势特征:趋势特征是表示数据的长期趋势,可以通过线性回归或其他方法来捕捉。

季节性特征:季节性特征是表示数据的周期性波动,可以通过傅立叶变换或其他方法来捕捉。

以上这些特征工程的操作只是一些非常常见的操作,实际过程当中我们会结合数据来进行一些特定的特征工程操作(特征工程的操作以及特征的选取往往是通过假设的方式来确定的,一些特征的选取在没有实验结论之前谁也无法确定其是否能作为一个特征) 

例如:一份数据如下图,


这份数据是一份油温数据的预测数据其中根据HUFL——LULL预测OT,其中HUFL-LULL我们就称之为特征当然时间date列我们也称之为特征,那么在这份数据中我们能否增加一些特征工程的操作呢?


答案是当然能,其中我们可以进行一些

常见的特征工程操作例如:将时间列date提取出来,进行拆分处理对于天日期我们可以分出是否是周六、周日,对于时间我们可以细分为当天的第几个时间段,

一些其它的特征工程操作例如:我们可以将OT列的过去三天同一时间段的数据取出来生成三个新的特征列,将同一时间段的所有数据的平均值全部求出来算一个平均值生成一个新的特征列,这些操作都是可以的。

下面是一个示例我们来展示一下对于进行特征工程和未进行特征工程操作的数据进行结果的对比。

对于这段代码,选用的是Xgboost模型进行一个四分类任务的实验其是一个基于某公司的业务进行预测然后进行的一个分类实验代码,其中有一段特征工程的操作代码


这一份是是否进行特征工程的操作当feature为True的时候我们就选取一些特征过程的部分进行模型训练以及预测,为False时候不进行特征工程的操作,下面让我们来对比一下结果。

可以看出对于是否进行特征工程的精度差距为0.86-0.71=0..15所以进行特征工程是一个十分重要的操作。 

通过使用这些特征工程技术,我们可以创建出更具代表性的特征,从而提高模型的预测性能。

常见的时间序列预测方法

经过了时间序列预测处理和特征工程的操作,下面我们就需要来了解一些模型了和一些模型的概念。


预测方法的分类概念

我们可以将时间序列预测方法分为几个主要类别,包括单变量预测、多变量预测,以及其他一些其它的预测方法。

单变量时间序列预测:单变量时间序列预测是最常见的预测方法,它只依赖于一个单一的时间序列数据源。这种类型的预测主要关注如何根据过去的数据来预测未来的数据。常见的单变量预测方法包括自回归移动平均模型(ARIMA)、指数平滑模型、随机森林和深度学习模型等。

多变量时间序列预测:与单变量预测相比,多变量时间序列预测使用两个或更多的相关时间序列来进行预测。这种方法可以帮助我们更好地理解和利用不同变量之间的相互关系。多变量预测方法包括向量自回归模型(VAR)、协整模型和多变量深度学习模型等。

除了上述分类,还有一些其他类型的时间序列预测方法:

混合模型预测:混合模型预测是将多个预测模型的结果结合起来,以得到更好的预测结果。这种方法可以利用不同模型的优点,并减少模型偏差的影响。例如,可以将ARIMA模型的预测结果与深度学习模型的预测结果结合起来。

频域方法预测:频域方法预测是通过分析数据的频率成分来进行预测。这种方法特别适用于具有明显周期性的数据。例如,傅立叶变换就是一种常用的频域分析方法。

异常检测预测:异常检测预测是一种旨在识别和预测异常时间点的方法。这种方法常用于信用卡欺诈检测、网络入侵检测等场景。

下面来就这些模型进行一个详细的解决以及举例


单变量预测

移动平均模型

移动平均模型(Moving Average Model):移动平均模型使用时间序列过去的几个观测值的均值作为未来预测的依据。它适用于没有明显趋势或季节性的数据。

(PS:移动平均就是指根据过去未来一定时间段内的值赋予给其中的每一个值一个权重然后进行加权求和就是最新的值)

下面是一个简单的示例:


可以看出我们的窗口为3因为头两个数值前面的数据并不够窗口的大小所以填充值为NaN


指数平滑

指数平滑(Exponential Smoothing):指数平滑模型根据时间序列的加权平均来进行预测,其中较近的数据点具有较高的权重。这种方法适用于平滑对称或非对称季节性的数据。

指数平滑一般分为三种:简单指数平滑、双指数平滑和三指数平滑(Holt-Winters) 。

下面是三种指数平滑的例子,大家有需要可以自己运行尝试一下看看效果,其中比较重要的是三指数平滑。


简单指数平滑 


二指数平滑 



三指数平滑 

三指数平滑又称为Holt-Winters大家有想详细了解的可以看我的另一篇博客里面有详细的讲解

Xgboost模型 

XGBoost是一种梯度提升树算法,它通过迭代地训练多个决策树,并使用梯度下降方法来最小化目标函数(常用的是均方误差)。XGBoost通过合并多个弱学习器(决策树)的预测结果来提升整体模型的性能和稳定性。它可以同时考虑特征的非线性关系、交互作用和特征重要性等因素,并具有较高的预测准确度。


ARIMA模型

ARIMA模型(Autoregressive Integrated Moving Average Model):ARIMA模型是一种基于时间序列自回归和移动平均的模型。它用过去观测值的线性组合来预测未来值。ARIMA模型可以处理具有明显趋势和季节性的数据。

大家有需要的可以关注我后期的博客和专栏,我会出ARIMA模型的详细讲解这里就不再过多的赘述了,因为这一篇博客主要是介绍一些概念,后期我也会添加链接到这里。

ARIMA还有一些增强的模型包括SARIMA模型(Seasonal ARIMA Model):SARIMA模型是ARIMA模型在具有明显季节性的数据上的扩展。它考虑季节性的影响,并根据历史数据中的季节模式进行预测。


随机森林

随机森林是一种基于决策树的集成学习方法,它通过随机选择特征子集和样本的子集来训练多个决策树。每个决策树都是根据随机选择的特征和样本进行训练,并通过投票或平均预测结果来做出最终的预测。随机森林能够有效地处理高维特征空间和大规模数据,并具有一定的抗过拟合能力。

大家有需要的可以关注我后期的博客和专栏,我会出Xgboost模型的详细讲解这里就不再过多的赘述了,因为这一篇博客主要是介绍一些概念,后期我也会添加链接到这里。 

多变量预测

当涉及多变量时间序列预测时,有几种常见的模型可以使用。

VAR模型 

VAR模型是一种基于向量自回归的多变量时间序列预测模型。它基于两个关键概念:自回归(Autoregression)和向量(Vector)。自回归表示每个变量的值可以由它自身的历史值来预测。向量表示我们考虑多个变量同时作为预测变量。VAR模型假设每个变量的当前值与过去一段时间内所有变量的值相关,通过建立一个包含所有变量的回归模型来预测未来的变量值。VAR模型可以通过最小二乘法或最大似然估计进行参数估计。


LSTM模型

LSTM是一种递归神经网络(RNN)的变体,用于处理具有长期时间依赖关系的序列数据。在多变量时间序列预测中,每个变量被视为一个输入序列,模型通过学习时间序列中的模式和关联来预测未来的变量值。LSTM通过使用一种称为"门"的机制来解决传统RNN中的梯度消失和梯度爆炸问题,使其能够有效地捕捉长期依赖。LSTM模型具有记忆单元,可以处理和存储先前的信息,并根据需要更新和使用这些信息。

大家有需要的可以看我的另一篇博客或者订阅我的专栏里面有详细的讲解。

GARCH模型

GARCH模型是一种常用于金融领域的多变量时间序列预测模型,特别用于建模序列的方差变化。它基于两个概念:自回归(Autoregressive)和条件异方差(Conditional Heteroskedasticity)。自回归表示方差的当前值与其过去的方差值相关。条件异方差表示方差是随时间变化的,并且与过去的变量值相关。GARCH模型通过建立自回归和条件异方差的模型来预测未来的方差值,进而根据方差估计变量的预测值。


Prophet模型

Prophet是由Facebook开发的一种开源的多变量时间序列预测框架。它适用于具有季节性、趋势性和节假日等复杂特征的预测问题。Prophet模型拥抱时间序列的非线性趋势,并使用加性模型来组合季节性、趋势性和节假日效应。该模型使用基于分解的方法来捕捉不同的时间组件,并结合回归分析来处理外部影响因素。Prophet模型在预测中提供了可解释性,并且非常适合用于具有多种时间特征的多变量时间序列数据。


以下是一个简单Prophet模型的实现案例大家有需要的可以copy运行以下,别忘了下载运行库

所要的csv文件我也会在后面的下载链接里面提供。


GRU模型

GRU模型引入了门控机制,目的是解决传统RNN中的梯度消失和梯度爆炸问题,并提供一种有效地捕捉长期依赖关系的方法。

GRU模型中包含两个关键的门:更新门(update gate)和重置门(reset gate)。更新门决定了模型需要在当前步骤中记住多少旧信息,并融合进来,同时接收新的信息。重置门决定了模型需要忽略多少旧信息,并且在当前步骤中重置隐藏状态。

GRU模型通过这两个门的组合,可以选择性地保留和丢弃信息,并根据序列的特点自适应地更新内部状态。这使得GRU在处理长序列数据时可以更好地捕捉长期依赖关系,而且相对于LSTM模型而言,GRU模型的参数数量更少,计算量更小。

在多变量时间序列预测中,GRU模型可以被应用于每个变量的输入序列,并通过并行处理多个变量的信息来进行预测。通过学习序列中的模式和关联,GRU模型能够预测未来的变量值,并提供关于时间序列数据内部模式的解释。

总结来说,GRU模型是一种适用于处理多变量时间序列预测的神经网络模型。它通过引入更新门和重置门的机制,能够有效地处理长期依赖关系,并提供了一种学习时间序列模式和预测未来值的方法。GRU模型在序列预测和生成任务中表现出色,得到了广泛应用。


Transformer模型

Transformer模型是一种基于注意力机制的序列建模方法,最初在自然语言处理领域引起了广泛的关注和成功应用。然而,Transformer模型同样适用于处理多变量时间序列数据。

Transformer模型使用自注意力机制来学习序列中不同位置的依赖关系,并根据这些依赖关系来编码输入序列。它使用多层的自注意力层和前馈神经网络层,通过多次迭代学习序列中的信息。Transformer模型通过避免传统的递归结构,实现了并行计算,使得它更适合处理长序列数据。在多变量时间序列预测中,Transformer模型可以将每个变量视为一个序列,并将它们作为输入来进行预测。


MTS-Mixers

MTS-Mixers(Multi-Time-Series Mixers)是一种基于深度学习的多元时间序列预测方法。MTS-Mixers是在Transformer的基础上进行了改进和扩展,以应对多变量时间序列数据的特殊要求。

MTS-Mixers模型将多个时间序列数据混合在一起,并结合Transformer的编码器和解码器进行建模和预测。它利用交叉注意力机制来学习序列之间的相关性,并根据这些相关性进行联合预测。MTS-Mixers模型还考虑了不同时间尺度(比如小时、天、周等)之间的关系,并通过适当的时间间隔对输入序列进行采样和处理。


时间序列预测的应用领域

时间序列预测在很多领域都具有广泛的应用。以下是一些常见的应用领域:

金融和股票市场预测:时间序列预测可以帮助预测股票价格、货币汇率、利率变动等金融指标,为投资决策提供参考。

销售和需求预测:通过分析历史销售数据,时间序列预测可以帮助企业预测产品销售情况、需求量等,以优化库存管理和生产计划。

能源需求和负荷预测:时间序列模型可以用于预测电力、天然气等能源需求,以及负荷变化,从而支持能源供应和节能策略。

交通流量预测:时间序列预测可以帮助预测交通拥堵情况、交通流量高峰等,协助交通规划和优化交通运输系统。

天气和气候预测:时间序列模型在气象学中起着重要作用,可以用于预测气温、湿度、降水量等天气和气候变量,支持天气预报和气候研究

这只是时间序列预测的一些应用领域示例,实际上,时间序列预测在许多其他行业和领域中具有广泛的应用,随着数据的不断积累和技术的进步,时间序列预测的应用前景将不断扩大。

机器学习算法AI大数据技术

 搜索公众号添加: datanlp

长按图片,识别二维码




阅读过本文的人还看了以下文章:


TensorFlow 2.0深度学习案例实战


基于40万表格数据集TableBank,用MaskRCNN做表格检测


《基于深度学习的自然语言处理》中/英PDF


Deep Learning 中文版初版-周志华团队


【全套视频课】最全的目标检测算法系列讲解,通俗易懂!


《美团机器学习实践》_美团算法团队.pdf


《深度学习入门:基于Python的理论与实现》高清中文PDF+源码


《深度学习:基于Keras的Python实践》PDF和代码


特征提取与图像处理(第二版).pdf


python就业班学习视频,从入门到实战项目


2019最新《PyTorch自然语言处理》英、中文版PDF+源码


《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码


《深度学习之pytorch》pdf+附书源码


PyTorch深度学习快速实战入门《pytorch-handbook》


【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》


《Python数据分析与挖掘实战》PDF+完整源码


汽车行业完整知识图谱项目实战视频(全23课)


李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材


笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!


《神经网络与深度学习》最新2018版中英PDF+源码


将机器学习模型部署为REST API


FashionAI服装属性标签图像识别Top1-5方案分享


重要开源!CNN-RNN-CTC 实现手写汉字识别


yolo3 检测出图像中的不规则汉字


同样是机器学习算法工程师,你的面试为什么过不了?


前海征信大数据算法:风险概率预测


【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类


VGG16迁移学习,实现医学图像识别分类工程项目


特征工程(一)


特征工程(二) :文本数据的展开、过滤和分块


特征工程(三):特征缩放,从词袋到 TF-IDF


特征工程(四): 类别特征


特征工程(五): PCA 降维


特征工程(六): 非线性特征提取和模型堆叠


特征工程(七):图像特征提取和深度学习


如何利用全新的决策树集成级联结构gcForest做特征工程并打分?


Machine Learning Yearning 中文翻译稿


蚂蚁金服2018秋招-算法工程师(共四面)通过


全球AI挑战-场景分类的比赛源码(多模型融合)


斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)


python+flask搭建CNN在线识别手写中文网站


中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程



不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  




浏览 163
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报