用户名
密码
(30天内有效)
注册
注册
首页 > 案例资料 >

如何用PyTorch完成一个简单的时间序列预测实验?

我要收藏
2020-09-18

【欢迎投稿】

如果你有与城市数据、城市创新、智慧城市、新技术等相关主题的稿件,欢迎来稿,稿费多多,请联系微信客服 lemon_udparty


【本期看点】

时间序列分析是概率统计学科中应用性较强的一个分支,在金融经济、信号处理等领域具有重要应用,由于城市数据本身也是时间序列数据中的一种,时间序列分析在城市数据分析中也扮演着不容忽略的角色。


时间序列预测,作为时间序列分析在各个领域中最为活跃的应用点,它一方面能够帮助我们“预见未来”,另一方面也能够帮我们加深对数据的理解。


作为先前发布的《如何用PyTorch构建多维时空交通数据的张量结构?》文章的延伸,本文将介绍如何使用PyTorch编写时间序列预测模型,并以自回归模型为例详细介绍模型构建、实验设置以及结果分析。



  本期投稿  



1600397717894701.png

作者:kim


城市交通数据分析爱好者

目前从事城市综合交通规划类工作



时间序列预测的角色


实际上,几乎所有的城市数据都可以视为时间序列,这是因为城市数据在带有很强的地理位置信息的同时,也带有较强时间信息。近年来,以时间序列分析为出发点的城市数据研究层出不穷,且得到了广泛的关注,其中,时间序列预测可谓是其中的“宠儿”,这一方面得益于模型层面的研发,即越来越多的深度学习模型刷新了我们对模型精度的认识,另一方面也得益于计算机硬件的快速发展,硬件上面的提升使得我们有能力对城市级的时空数据进行计算。




在谷歌学术上搜索关键词time series analysis,我们便可窥探到时间序列分析的关注度和热度在最近20年间始终不减,相关搜索的关键词排名第一位便是时间序列预测 (time series analysis forecasting),从这里可以看出时间序列预测在时间序列分析中的重要性。


1600397751210845.png

注:图片截取自谷歌学术。




在GitHub上搜索关键词time series prediction,我们可以得到超过2000条搜索结果,不管是从标星数量还是代码数量来看,时间序列预测的热度都是极高的,其中,程序语言中排名最靠前的便是Jupyter Notebook和Python,而大多数Jupyter Notebook又是以Python语言编写,这样看来,Python毫无疑问是时间序列预测中最为通用的程序语言。


1600397776456395.png

注:图片截取自GitHub。




基本的自回归模型



自回归模型 (autoregressive model) 是金融经济、统计计量等领域最为常用且基础的模型,它作为一种有效的时间序列分析和预测模型,几十年前便进入了公众的视野。一般而言,给定一个时间序列,自回归模型的形式为

1600397801205733.png


其中,d表示自回归的阶数 (order),若d=1,则该模型为一阶自回归模型,若d=2,则该模型为二阶自回归模型,x表示时间序列的数值,与时间t相关,我们的目标是根据时间序列x估计出系数a。




用PyTorch定义自回归模型



PyTorch作为当下深度学习最为流行的框架,它在时间序列分析中具有十分重要的地位。当然,如果我们想把PyTorch灵活地应用在我们的实际模型中,还需要加深对模型和框架的理解。在这里,我们会介绍如何一步步用PyTorch编写自回归模型代码。


 

自回归模型预测机制:


1600397829252715.png

当我们有了已经训练好的系数a以及时间序列的观测值,然后就可以根据这条公式进行预测。预测的代码为:

1600397850821030.png

1600397864153583.png



这里分别写了autoregressive和ar_predict两个函数,第一个函数autoregressive用于训练自回归的系数a;第二个函数ar_predict用于时间序列预测,给定时间窗,比如预测5个时间窗,那么模型会滚动预测,最终返回5个数值。




时间序列预测实例分析



实际上,在城市数据中,我们不难找到一些合适的时间序列数据进行分析。为了加深读者对PyTorch在实际城市数据应用中的认识,接下来将以GitHub热门开源项目transdim(项目网址为https://github.com/xinychen/transdim,截至目前,该项目已获得超过370次标星)中所提供的时空交通数据为例,通过实例分析,以期让读者对时间序列预测有更深入的认识。


 

开源项目transdim中的数据集 (datasets) 目录中提供了广州城市路网车速数据集、伯明翰停车数据集、杭州地铁客流数据集、西雅图高速公路车速数据集、纽约出租车流量数据集等,这些数据集支持各类数据建模以及交通数据修复及预测的标准测试。


1600397888962784.png

transdim项目的GitHub开源界面,注:图片截取自GitHub页面


 

注:在transdim项目的GitHub开源界面,点击code按钮即可下载数据。

 

【实例分析】以广州城市路网车速数据集为例,按照如下步骤读入时间序列数据:第一步,调用Python中基本的工具包,如这里的scipy;第二步,使用scipy.io.loadmat命令倒入.mat后缀的数据文件,并同时输出numpy数组;第三步,用PyTorch将numpy数组转换成torch中的张量。


1600397918151300.png


以第一条路段最后9天的车速序列作为实验数据,从图中可看到最后9天车速数据的曲线。


1600397941454260.png


为了进行测试,我们将最后5天的车速序列用于预测并评估自回归模型的预测效果,为了评估自回归模型的预测效果,定义相对误差mape和绝对误差rmse.


1600397961701434.png



实验场景:滚动预测未来12个时间窗(每10分钟一个时间窗,即预测未来两个小时)的路段车速曲线。如图,自回归模型的阶数为288,预测曲线为红色曲线,相对误差为14.24%,绝对误差为4.86,红色的预测曲线与真实车速较为吻合,预测效果表现优秀。


1600397987771351.png


如下图,若设置阶数为144,则相对误差为14.94%,绝对误差为5.12,相对阶数为288,此时自回归模型的预测效果明显变差,因此,在使用自回归模型进行时间序列预测时,阶数的选取也是十分重要的,合理的阶数会带来很高的预测精度。


1600398013526805.png



结   论


本文介绍了如何使用PyTorch编写一个简单的时间序列自回归模型,并将其应用在城市数据的时间序列预测中。通过实例分析,本文可以加深读者对时间序列预测的认识和理解。

本站声明

本文仅代表作者观点,不代表城市数据派立场;
本文系作者授权城市数据派发表,未经许可,不得转载;
本网站上的所有内容均为虚拟服务,一经购买成功概不退款,请您理解。

点赞0