社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

数据分析 • 6 年前 • 1181 次点击  

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

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


简介


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


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

 


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


目录


一、什么是时间序列?

二、时间序列预测的方法

三、ARIMA简介

四、ARIMA实现步骤

五、为什么需要Auto ARIMA?

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

七、Auto ARIMA如何选择参数?


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


一、什么是时间序列?


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


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

 

  • 例1:


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


 

  • 例2:


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


 

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


二、时间序列预测的方法


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


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

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


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



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

 


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

 


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

 


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

 


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


 

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



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

 


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

 


七、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万人群。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/Vvb8hmBSZV
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/26384
 
1181 次点击