推荐 :利用Auto ARIMA构建高性能时间序列模型(附Python和R代码)-程序员宅基地

作者:AISHWARYA SINGH;翻译:陈之炎;校对:丁楠雅

本文共3400字,建议阅读10+分钟。
本文介绍了ARIMA的概念,并带你用Python和R训练一个数据集实现它。


简介


想象你现在有一个任务:根据已有的历史数据,预测下一代iPhone的价格,可使用的特征包括季度销售、月度支出以及苹果资产负债表上的一系列内容。作为一名数据科学家,你会把这个问题归类为哪一类问题?当然是时间序列建模。


从预测产品销售到估算家庭用电量,时间序列预测是任何数据科学家都应该知道——哪怕不是熟练掌握——的核心技能之一。你可以使用多种不同的方法进行时间序列预测,我们将在本文中讨论Auto ARIMA,它是最为有效的方法之一。

 

640?wx_fmt=png


首先,我们来了解一下ARIMA的概念,然后再进入正题——Auto ARIMA。为了巩固概念,我们将使用一个数据集,并用Python和R实现它。


目录


一、什么是时间序列?

二、时间序列预测的方法

三、ARIMA简介

四、ARIMA实现步骤

五、为什么需要Auto ARIMA?

六、用Auto ARIMA实现案例(航空乘客数据集)

七、Auto ARIMA如何选择参数?


如果你熟悉时间序列及其常用方法(如移动平均、指数平滑和ARIMA),则可以直接跳到第4节。对于初学者,请从下面这一节开始,内容包括对时间序列和各种预测方法的简要介绍。


一、什么是时间序列?


在我们学习如何处理时间序列数据之前,首先应理解什么是时间序列,以及它与其他类型的数据的区别。时间序列的正式定义如下:它是一系列在相同时间间隔内测量到的数据点


简言之,时间序列是指以固定的时间间隔记录下的特定的值,时间间隔可以是小时、每天、每周、每10天等等。时间序列的特殊性是:该序列中的每个数据点都与先前的数据点相关。我们通过下面几个例子来更清楚地理解这一点。

 

  • 例1:


假设你从某公司获得了一个贷款人员的数据集(如下表所示)。你认为每一行都与前面的行相关吗?当然不是!一个人的贷款金额取决于他的经济状况和需要(可能还有其他因素,如家庭规模等,但为了简单起见,我们只考虑收入和贷款类型)。此外,这些数据不是在特定时间间隔内收集的,它仅与公司何时收到贷款申请相关。


640?wx_fmt=png

 

  • 例2:


再举一个例子。假设你有一个数据集,其中包含每天空气中的二氧化碳水平(下面是截图)。那么可以通过过去几天的数值来预测第二天的二氧化碳水平吗?当然可以。如果你观察到的数据是每天记录下来的,那么,时间间隔便是恒定的(24小时)。


640?wx_fmt=png

 

现在你已经有了直觉,第一个例子是简单的回归问题,而第二个例子是时间序列问题。虽然这里的时间序列问题也可以用线性回归来解决,但这并不是最好的方法,因为它忽略了这些值与所有相对过去值之间的关系。下面,我们来了解一下解决时间序列问题的一些常用方法。


二、时间序列预测的方法


有许多种方法可以进行时间序列预测,我们将在这一节中对它们做简要地介绍。下面提到的所有方法的详细说明和Python代码可以在下文中找到:


七种时间序列预测方法(附Python代码):

https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/


1. 朴素预测法:在这种预测方法中,新数据点预测值等于前一个数据点的值。结果将会是一条平行线,因为所有预测的新值采用的都是先前的值。


640?wx_fmt=png


2. 简单平均值法:视下一个值为所有先前值的平均数。这一预测法要优于“朴素预测法”,因为它的结果不会是一条平行线。但是在简单平均值法中,过去的所有值都被考虑进去了,而这些值可能并不都是有用的。例如,当要求预测今天的温度时,你仅需要考虑前七天的温度,而不是一个月前的温度。

 

640?wx_fmt=png


3. 移动平均法:这是对前两个方法的改进。不取前面所有点的平均值,而是将n个先前的点的平均值作为预测值。

 

640?wx_fmt=png


4. 加权移动平均法:加权移动平均是带权重的移动平均,先前的n个值被赋予不同的权重。

 

640?wx_fmt=png


5. 简单指数平滑法:在这种方法中,更大的权重被分配给更近期的观测结果,来自遥远过去的观测值则被赋予较小的权重。

 

640?wx_fmt=png


6. 霍尔特(Holt)线性趋势模型:该方法考虑了数据集的趋势。所谓趋势,指的是数据的递增或递减的性质。假设旅馆的预订数量每年都在增加,那么我们可以说预订数量呈现出增加的趋势。该方法的预测函数是值和趋势的函数。


640?wx_fmt=png

 

7. 霍尔特-温特斯(Holt Winters)方法:该算法同时考虑了数据的趋势和季节性。例如,一家酒店的预订数量在周末很高,而在工作日则很低,并且每年都在增加;因此存在每周的季节性和增长的趋势。


640?wx_fmt=png


8. ARIMA:ARIMA是一种非常流行的时间序列建模方法。它描述了数据点之间的相关性,并考虑了数值之间的差异。ARIMA的改进版是SARIMA (或季节性ARIMA)。我们将在下一节中更详细地讨论ARIMA。


三、ARIMA简介


在本节中,我们将简要介绍ARIMA,这将有助于理解Auto Arima。“时间序列完整教程”一文中对ARIMA, (p,q,d) 参数,ACF、 PACF图和具体实现有详细的解释。


ARIMA是一种非常流行的时间序列预测方法,它是自回归综合移动平均(Auto-Regressive Integrated Moving Averages)的首字母缩写。ARIMA模型建立在以下假设的基础上:


  • 数据序列是平稳的,这意味着均值和方差不应随时间而变化。通过对数变换或差分可以使序列平稳。

  • 输入的数据必须是单变量序列,因为ARIMA利用过去的数值预测未来的数值。


ARIMA有三个分量:AR(自回归项)、I(差分项)和MA(移动平均项)。让我们对每个分量做一下解释:


  • AR项是指用于预测下一个值的过去值。AR项由ARIMA中的参数‘p’定义。“p”的值是由PACF图确定的。

  • MA项定义了预测未来值时过去预测误差的数目。ARIMA中的参数‘q’代表MA项。ACF图用于识别正确的‘q’值,

  • 差分顺序规定了对序列执行差分操作的次数,对数据进行差分操作的目的是使之保持平稳。像ADF和KPSS这样的测试可以用来确定序列是否是平稳的,并有助于识别d值。


四、ARIMA实现步骤


实现ARIMA模型的通用步骤如下:


1. 加载数据:构建模型的第一步当然是加载数据集。

2. 预处理:根据数据集定义预处理步骤。包括创建时间戳、日期/时间列转换为d类型、序列单变量化等。

3. 序列平稳化:为了满足假设,应确保序列平稳。这包括检查序列的平稳性和执行所需的转换。

4. 确定d值:为了使序列平稳,执行差分操作的次数将确定为d值。

5. 创建ACF和PACF图:这是ARIMA实现中最重要的一步。用ACF PACF图来确定ARIMA模型的输入参数。

6. 确定p值和q值:从上一步的ACF和PACF图中读取p和q的值。

7. 拟合ARIMA模型:利用我们从前面步骤中计算出来的数据和参数值,拟合ARIMA模型。

8. 在验证集上进行预测:预测未来的值。

9. 计算RMSE:通过检查RMSE值来检查模型的性能,用验证集上的预测值和实际值检查RMSE值。

 

五、为什么我们需要Auto ARIMA?


虽然ARIMA是一个非常强大的预测时间序列数据的模型,但是数据准备和参数调整过程是非常耗时的。在实现ARIMA之前,需要使数据保持平稳,并使用前面讨论的ACF和PACF图确定p和q的值。Auto ARIMA让整个任务实现起来非常简单,因为它去除了我们在上一节中提到的步骤3至6。下面是实现AUTO ARIMA应该遵循的步骤:


1. 加载数据:此步骤与ARIMA实现步骤1相同。将数据加载到笔记本中。

2. 预处理数据:输入应该是单变量,因此删除其他列。

3. 拟合Auto ARIMA:在单变量序列上拟合模型。

4. 在验证集上进行预测:对验证集进行预测。

5. 计算RMSE:用验证集上的预测值和实际值检查RMSE值。


正如你所看到的,我们完全绕过了选择p和q的步骤。啊!可以松口气了!在下一节中,我们将使用一个假想数据集实现Auto ARIMA。


六、Python和R的实现


我们将使用国际航空旅客数据集,此数据集包含每月乘客总数(以千为单位),它有两栏-月份和乘客数。你可以从以下链接获取数据集:


https://datamarket.com/data/set/22u3/international-airline-passengers-monthly-totals-in-thousands-jan-49-dec-60#!ds=22u3&display=line

 

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


以下是同一问题的R代码:

 

640?wx_fmt=png


七、Auto ARIMA如何选择最佳参数


在上述代码中,我们仅需用.efit()命令来拟合模型,而不必选择p、q、d的组合,但是模型是如何确定这些参数的最佳组合的呢?Auto ARIMA生成AIC和BIC值(正如你在代码中看到的那样),以确定参数的最佳组合。AIC(赤池信息准则)和BIC(贝叶斯信息准则)值是用于比较模型的评估器。这些值越低,模型就越好。


如果你对AIC和BIC背后的数学感兴趣,请访问以下链接:


  • AIC:

    http://www.statisticshowto.com/akaikes-information-criterion/

  • BIC:

    http://www.statisticshowto.com/bayesian-information-criterion/


八、尾注和进一步阅读


我发现Auto ARIMA是进行时间序列预测的最简单的方法。知道一条捷径是件好事,但熟悉它背后的数学也同样重要的。在这篇文章中,我略过了ARIMA如何工作的细节,但请务必阅读本文中提供的链接的文章。为了方便你参考,这里再次提供一遍链接:


  • 时间序列预测初学者综合指南(Python)

    https://www.analyticsvidhya.com/blog/2016/02/time-series-forecasting-codes-python/


  • 时间序列完整教程(R)

    https://www.analyticsvidhya.com/blog/2015/12/complete-tutorial-time-series-modeling/


  • 时间序列预测的七种方法 (附python代码)

    https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/


建议大家做一下这个课程中的练习题:“时间序列实战”。你也可以参加我们的培训课程,参与到实战中来,“时间序列预测”课程为你提供一个领先的开端。


祝你好运,请在下面的评论部分提供你的反馈并提出问题。

 

原文标题:

Build High Performance Time Series Models using Auto ARIMA in Python and R

原文链接:

https://www.analyticsvidhya.com/blog/2018/08/auto-arima-time-series-modeling-python-r/

——【完】——

译者简介:陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。

本文转自: 数据派THU 微信公众号;

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。

关联阅读

原创系列文章:

1:从0开始搭建自己的数据运营指标体系(概括篇)

2 :从0开始搭建自己的数据运营指标体系(定位篇)

3 :从0开始搭建自己的数据运营体系(业务理解篇)

4 :数据指标的构建流程与逻辑

5 :系列 :从数据指标到数据运营指标体系

6:   实战 :为自己的公号搭建一个数据运营指标体系

7:  从0开始搭建自己的数据运营指标体系(运营活动分析)

数据运营 关联文章阅读:  

运营入门,从0到1搭建数据分析知识体系    

推荐 :数据分析师与运营协作的9个好习惯

干货 :手把手教你搭建数据化用户运营体系

推荐 :最用心的运营数据指标解读

干货 : 如何构建数据运营指标体系

从零开始,构建数据化运营体系

干货 :解读产品、运营和数据三个基友关系

干货 :从0到1搭建数据运营体系

数据分析、数据产品 关联文章阅读:

干货 :数据分析团队的搭建和思考

关于用户画像那些事,看这一文章就够了

数据分析师必需具备的10种分析思维。

如何构建大数据层级体系,看这一文章就够了

干货 : 聚焦于用户行为分析的数据产品

如何构建大数据层级体系,看这一文章就够了

80%的运营注定了打杂?因为你没有搭建出一套有效的用户运营体系

从底层到应用,那些数据人的必备技能

读懂用户运营体系:用户分层和分群

做运营必须掌握的数据分析思维,你还敢说不会做数据分析

合作请加qq:365242293  


更多相关知识请回复:“ 月光宝盒 ”;

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

640?wx_fmt=png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Tw6cy6uKyDea86Z/article/details/84076363

智能推荐

C#之json字符串转xml字符串-程序员宅基地

文章浏览阅读552次。为什么80%的码农都做不了架构师?>>> ..._c# json字符串转xml字符串(utf-8)

几种常见的JSON数据格式化_json value值格式化-程序员宅基地

文章浏览阅读5.2k次。一、格式化化后不可修改 <pre>{{ JSON.stringify(inputData, null, 4) }}</pre> <!--格式化json数据,inputData为json对象-->二、格式化后可修改数据 方式1:<template> <div class="content"> <el-button type="primary" size="mini" ..._json value值格式化

Excel vba 根据工作表名进行跳转_vba跳转到指定工作表-程序员宅基地

文章浏览阅读5.2k次。Excel 下 按快捷键,alt+F11 进入vba编辑界面,点击插入,选择模块,输入以下代码Sub 跳转() Dim sn As StringDim x As Integersn = InputBox("请输入要跳转到的工作表的名字") For i = 1 To Sheets.Count If Sheets(i).Name = sn Then Sheets(i).Act..._vba跳转到指定工作表

C# Dictionary源码解析_c# 源码-程序员宅基地

文章浏览阅读1.3k次,点赞6次,收藏12次。Dictionary底层原理本篇文章将介绍C#在.NET下的Dictionary的底层源码,源码都根据自己的理解加上了注释,源码直接到官网即可查看下载https://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs关键数据结构 Entryprivate struct Entry { public int hashCode; // 哈希值,-1代表此Entry未使用 _c# 源码

nRF52832 协议栈 使用外部32mhz 时钟_nrf52832设置外部32mhz晶振-程序员宅基地

文章浏览阅读2k次。测试SDK 目录:nRF5_SDK_15.0.0_a53641a\examples\ble_peripheral\ble_app_beacon选择 协议栈晶振 ,编译测试OK;关于32.768khz 晶振数据手册是这样描述的:说明我们使用正确。_nrf52832设置外部32mhz晶振

Qt下等待对话框的设计_qt waiting dialog-程序员宅基地

文章浏览阅读6.1k次,点赞2次,收藏7次。在Qt程序经常长时间操作时采用一个等待对话框来提示用户正在操作。 Qt有标准的QProcessDialog 能部分实现这个功能,但是缺点是要计算进度,二是用户可以中途取消。所以一般我们采用自定义对话框实现这个功能。常见实现机制开源项目 QtWaitingSpinner,具体可以下载代码一试,它是自己用代码描绘出进度条动态来了,因此可以调整出不同大小的环形等待标志 https://github.c_qt waiting dialog

随便推点

Sfdp 超级表单开发平台 V6.0.0 正式发布_sfdp表单设计-程序员宅基地

文章浏览阅读289次。Sfdp V6.0.0正式版欢迎使用 Sfdp 超级表单开发平台6.0.0 历经一年多的产品再次迭代,我们迎来2022年首个商业版本;我们已经在我们的商业版本 Gadmin 全面应用,如果觉得还不错,可以给我们点个 Star支持下我们呗,开源不易。Sfdp 通过可视化的业务单据设计,可以完整的构建一套业务逻辑系统。 Sfdp 通过脚本、函数的支持,在逻辑实现更加简洁、可用。关于 6.0.0版本更新内容【新增】编辑器设计器,更加自由布局,更加灵活的页面设计 【新增】增加查看事.._sfdp表单设计

算法-数组拆分为奇偶两部分_将数组元素分为奇偶两部分-程序员宅基地

文章浏览阅读6.4k次。仅用O(1)的空间,将整数数组按奇偶数分成2部分,数组左边是奇数、右边是偶数。(要求:给出完整代码,尽量高效,简洁) 思路: 1. 从左往右找偶数,遇到奇数就继续往右(即遇到奇数执行操作:low++),找到偶数就停止,结果是找到第一个偶数 2. 从右往左找奇数,遇到偶数就继续往左(即遇到偶数执行操作: high–),直到找到第一个奇数public class Main { public s_将数组元素分为奇偶两部分

SpringMVC学习之JSTL(JSP标准标签库)一_sprjstl-程序员宅基地

文章浏览阅读2k次。1.JSTL库官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.tar.gz JSTL是标准标签库,它是通过多个标签库来暴露其行为的,JSTL1.2中可以分为5类区域:core:核心标签库,我们学习的重点;_sprjstl

python语言,pycharm程序中 requests库的简单使用_pycharmrequest的方法调用-程序员宅基地

文章浏览阅读2.2k次。 请求作用是请求网站获取网页数据的,所以作为一个预备的爬虫程序,要明白请求的作用,请求作用的,可以理解为我上你家串门,先问你有人没一个意思。import requests #加入requests包headers = { 'User-Agent': 'Mozilla / 5.0(X11;Linux x86_64) Appl..._pycharmrequest的方法调用

如何将OnlyOffice与NextCloud集成_nextcloud 整合 onlyoffice-程序员宅基地

文章浏览阅读9.8k次。 原作者:XiaoGuo An 转载来源:https://www.linuxbabe.com/ubuntu/integrate-nextcloud-onlyoffice 如何将OnlyOffice与NextCloud集成 借助于 2017年2月发布的ownCloud OnlyOffice集成应用程序,ownCloud用户可以使用OnlyOffice在线编辑器直接从他们自己的Clou..._nextcloud 整合 onlyoffice

安装部署Hadoop 2.8.0(伪分布式)_2.8.5 hadoop 伪分布式模式 配置 详解-程序员宅基地

文章浏览阅读1.3k次。添加用户到sudo组:命令:sudo adduser hadoopUser sudo。如果用户已经在此组内会提示。 添加组Hadoop,并将hadoopUser添加至组hadoop(groups命令可以查看用户所在的组): su addgroup hadoop usermod -a -G hadoop hadoopUser配置ssh免密码登录安装ssh server:sudo apt-get_2.8.5 hadoop 伪分布式模式 配置 详解

推荐文章

热门文章

相关标签