前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python时间序列分析--ARIMA模型实战案例

Python时间序列分析--ARIMA模型实战案例

作者头像
润森
发布于 2022-08-18 02:30:49
发布于 2022-08-18 02:30:49
1.8K00
代码可运行
举报
文章被收录于专栏:毛利学Python毛利学Python
运行总次数:0
代码可运行

本文将介绍使用Python来完成时间序列分析ARIMA模型的完整步骤与流程,绘制时序图,平稳性检验,单位根检验,白噪声检验,模型定阶,模型有啊,参数估计,模型检验等完整步骤。Python建立时间序列分析–ARIMA模型实战案例

时间序列分析概念

时间序列分析 是统计学中的一个非常重要的分支,是以概率论与数理统计为基础、计算机应用为技术支撑,迅速发展起来的一种应用性很强的科学方法。时间序列是变量按时间间隔的顺序而下形成的随机变量序列,大量自然界、社会经济等领域的统计指标都依年、季、月或日统计其指标值,随着时间的推移,形成了统计指标的时间序列,例如,股价指数、物价指数、GDP和产品销售量等等都属于时间序列。原文链接:https://blog.csdn.net/qq_45176548/article/details/111504846

建立模型基本步骤

ARIMA模型建模实战

导入模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
import os
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np
from arch.unitroot import ADF
import matplotlib.pylab as plt
%matplotlib inline
from matplotlib.pylab import style
style.use('ggplot')
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt
from statsmodels.tsa.stattools import adfuller 
from statsmodels.stats.diagnostic import acorr_ljungbox 
from statsmodels.graphics.api import qqplot
pd.set_option('display.float_format', lambda x: '%.5f' % x) 
np.set_printoptions(precision=5, suppress=True) 
"""中文显示问题"""
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']

加载数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = pd.read_excel("data.xlsx",index_col="年份",parse_dates=True)
data.head()

年份

1952-01-01

1953-01-01

1954-01-01

1955-01-01

1956-01-01

平稳性检验

时序图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data["diff1"] = data["xt"].diff(1).dropna()
data["diff2"] = data["diff1"].diff(1).dropna()
data1 = data.loc[:,["xt","diff1","diff2"]]
data1.plot(subplots=True, figsize=(18, 12),title="差分图")

时序图检验 - - 全靠肉眼的判断和判断人的经验,不同的人看到同样的图形,很可能会给出不同的判断。因此我们需要一个更有说服力、更加客观的统计方法来帮助我们检验时间序列的平稳性,这种方法,就是单位根检验。原文链接:https://blog.csdn.net/qq_45176548/article/details/111504846

单位根检验

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("单位根检验:\n")
print(ADF(data.diff1.dropna()))  

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
单位根检验:

   Augmented Dickey-Fuller Results   
=====================================
Test Statistic                 -3.156
P-value                         0.023
Lags                                0
-------------------------------------

Trend: Constant
Critical Values: -3.63 (1%), -2.95 (5%), -2.61 (10%)
Null Hypothesis: The process contains a unit root.
Alternative Hypothesis: The process is weakly stationary.

单位根检验:对其一阶差分进行单位根检验,得到:1%、%5、%10不同程度拒绝原假设的统计值和ADF Test result的比较,本数据中,P-value 为 0.023,接近0,ADF Test result同时小于5%、10%即说明很好地拒绝该假设,本数据中,ADF结果为-3.156,拒绝原假设,即一阶差分后数据是平稳的。

白噪声检验

判断序列是否为非白噪声序列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from statsmodels.stats.diagnostic import acorr_ljungbox
acorr_ljungbox(data.diff1.dropna(), lags = [i for i in range(1,12)],boxpierce=True)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(array([11.30402, 13.03896, 13.37637, 14.24184, 14.6937 , 15.33042,
        16.36099, 16.76433, 18.15565, 18.16275, 18.21663]),
 array([0.00077, 0.00147, 0.00389, 0.00656, 0.01175, 0.01784, 0.02202,
        0.03266, 0.03341, 0.05228, 0.07669]),
 array([10.4116 , 11.96391, 12.25693, 12.98574, 13.35437, 13.85704,
        14.64353, 14.94072, 15.92929, 15.93415, 15.9696 ]),
 array([0.00125, 0.00252, 0.00655, 0.01135, 0.02027, 0.03127, 0.04085,
        0.06031, 0.06837, 0.10153, 0.14226]))

通过P<α,拒绝原假设,故差分后的序列是平稳的非白噪声序列,可以进行下一步建模

模型定阶

现在我们已经得到一个平稳的时间序列,接来下就是选择合适的ARIMA模型,即ARIMA模型中合适的p,q。第一步我们要先检查平稳时间序列的自相关图和偏自相关图。通过sm.graphics.tsa.plot_acf和sm.graphics.tsa.plot_pacf得到图形

从一阶差分序列的自相关图和偏自相关图可以发现:

  1. 自相关图拖尾或一阶截尾1. 偏自相关图一阶截尾,- 所以我们可以建立ARIMA(1,1,0)、ARIMA(1,1,1)、ARIMA(0,1,1)模型。

模型优化

  • 其中L是在该模型下的最大似然,n是数据数量,k是模型的变量个数。python代码如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arma_mod20 = sm.tsa.ARIMA(data["xt"],(1,1,0)).fit()
arma_mod30 = sm.tsa.ARIMA(data["xt"],(0,1,1)).fit()
arma_mod40 = sm.tsa.ARIMA(data["xt"],(1,1,1)).fit()
values = [[arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic],[arma_mod30.aic,arma_mod30.bic,arma_mod30.hqic],[arma_mod40.aic,arma_mod40.bic,arma_mod40.hqic]]
df = pd.DataFrame(values,index=["AR(1,1,0)","MA(0,1,1)","ARMA(1,1,1)"],columns=["AIC","BIC","hqic"])
df

AIC|BIC|hqic| AR(1,1,0)|253.09159|257.84215|254.74966 MA(0,1,1)|251.97340|256.72396|253.63147 ARMA(1,1,1)|254.09159|258.84535|259.74966

  • 构造这些统计量所遵循的统计思想是一致的,就是在考虑拟合残差的同时,依自变量个数施加“惩罚”。但要注意的是,这些准则不能说明某一个模型的精确度,也即是说,对于三个模型A,B,C,我们能够判断出B模型是最好的,但不能保证B模型能够很好地刻画数据

参数估计

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data["xt"], order=(0,1,1))
result = model.fit()
print(result.summary())

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                             ARIMA Model Results                              
==============================================================================
Dep. Variable:                   D.xt   No. Observations:                   36
Model:                 ARIMA(0, 1, 1)   Log Likelihood                -122.987
Method:                       css-mle   S.D. of innovations              7.309
Date:                Tue, 22 Dec 2020   AIC                            251.973
Time:                        09:11:55   BIC                            256.724
Sample:                    01-01-1953   HQIC                           253.631
                         - 01-01-1988                                         
==============================================================================
                 coef    std err          z      P&gt;|z|      [0.025      0.975]
------------------------------------------------------------------------------
const          4.9956      2.014      2.481      0.013       1.048       8.943
ma.L1.D.xt     0.6710      0.165      4.071      0.000       0.348       0.994
                                    Roots                                    
=============================================================================
                  Real          Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
MA.1           -1.4902           +0.0000j            1.4902            0.5000
-----------------------------------------------------------------------------

模型检验

参数的显著性检验

P<α,拒绝原假设,认为该参数显著非零MA(2)模型拟合该序列,残差序列已实现白噪声

模型的显著性检验

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resid = result.resid#残差
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
fig = qqplot(resid, line='q', ax=ax, fit=True)

qq图显示,我们看到红色的KDE线与N(0,1)平行,这是残留物正太分布的良好指标,说明残差序列是白噪声序列,模型的信息的提取充分,当让大家也可以使用前面介绍的检验白噪声的方法LB统计量来检验

ARIMA(0,1,1)模型拟合该序列,残差序列已实现白噪声,且参数均显著非零。说明AR(0,11)模型是该序列的有效拟合模型

模型预测

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pred = result.predict('1988', '1990',dynamic=True, typ='levels')
print (pred)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1988-01-01   278.35527
1989-01-01   283.35088
1990-01-01   288.34649
Freq: AS-JAN, dtype: float64

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.figure(figsize=(12, 8))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(data.xt)
plt.show()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
AI就业排名出炉:机器学习霸榜、薪资最高;但AI岗位需求正放缓
在过去几年里,人工智能和机器学习专家的就业市场似乎一直处于“缺口巨大”、“天价工资”的状态。而且随着AI技术几乎每天都在新行业中得到应用,似乎这个岗位的需求度短时间内是不会减弱。
新智元
2019/07/05
7280
AI就业排名出炉:机器学习霸榜、薪资最高;但AI岗位需求正放缓
2023年就业形势回顾:新兴行业和岗位的发展
2023年将是新兴行业和岗位发展的关键之年。随着科技的不断进步和全球经济的快速变化,新兴行业将成为就业市场的重要增长点。本文将回顾2023年的就业形势,重点关注新兴行业和岗位的发展趋势,为求职者提供有关未来就业方向的参考。
大盘鸡拌面
2023/11/28
7820
万亿数字化市场,数据科学为何能扛起“价值担当”?
如今,一股数据科学的热潮正席卷国内各大高校。今年十月底,一系列数据科学的网络直播课在多所大学火爆异常,吸引来自北大、清华、北师大、哈工大、浙大等多所高校学生广泛参与。
大数据在线
2023/02/28
4470
万亿数字化市场,数据科学为何能扛起“价值担当”?
【数据科学】什么? 你还不知道数据科学!?在不了解,就OUT了!!
商僧语 2012年《哈佛商业评论》( Harvard Business Review)把数据科学家誉为“21世纪最性感的职业”。数据科学也日渐成为更多小僧们的追逐的心仪对象。那么如何成为一名高大上,酷拽狂的数据科学家呢?就让商僧带你了解下吧!要想了解数据科学家,我们首先需要知道什么是数据科学,下面我们来看一下有关数据科学的简单介绍。 ■ ■ ■ 概述 数据科学是指用自动化的方法来分析结构化或非结构化的海量数据,并从中提取知识。它是数据挖掘技术和预测分析领域的延续,也被称为知识发现和数据挖掘(KDD)。 “
陆勤_数据人网
2018/02/26
7960
面对数据科学人才的巨大缺口,我们该如何提升自身技能
如今,数据科学家炙手可热。在世界各地,成千上万的学生都在大学或在线课程中选择了数据分析课程。
CDA数据分析师
2018/08/14
7100
面对数据科学人才的巨大缺口,我们该如何提升自身技能
2021数据科学就业市场最全分析:Python技能最重要,5到10年经验最吃香
作者:Sujan ShirolR、oberto Iriondo 机器之心编译 编辑:蛋酱、杜伟
机器之心
2021/06/08
7190
人工智能,机器人技术和数据科学家将在2020年成为新兴工作
根据LinkedIn 发布的《 2020年新兴工作报告》,人工智能,机器人技术(专门从事机器人过程自动化或RPA)和数据科学家角色在新加坡排名前5位。
RPA小葵
2020/05/14
4890
人工智能,机器人技术和数据科学家将在2020年成为新兴工作
2017年关于数据科学六大预言
作者|Paramita Ghosh 选文&校对|寒小阳 翻译|姜范波 今天,数据正在以前所未有的方式创造和促进着企业成长和商业利润。在过去的十年间,先进的数据科技和高级分析工具的出现,已经使商界精英们从他们的数据中收获无数的利益,然而,对大多数人而言,他们只是触及了数据潜能的最表面。数据科学正在开天辟地的让企业成功地撬动这个巨大的潜能。 麦肯锡2013年出版了一份特别的报告,预言全球商业界将会感觉到下一个十年数据科学专业人士的紧缺,尤其是善于从大量静态和动态(实时)数据中发现有价值的情报的数据分析师,缺
大数据文摘
2018/05/25
3900
AI时代就业指南:数学专业,你看不见的前尘似锦
数学专业,在大众化的眼光看来,毕业后的就业前景无非是当老师或者搞科研,这个专业似乎太古板且就业道路狭窄。然而,在AI时代,这些都是偏见,数学专业毕业生早已是互联网、金融界、IT界、科研界的“香饽饽”,数学专业的就业前景有你看不见的“前途似锦”! 数学专业的划分主要如下: 专业 基础数学(应用数学)概率论与数理统计(概率与统计精算)数学工程的科学与工程计算系专业概况数学系一般开设基础数学、应用数学两专业,而这两个专业方向基本是相通的,都是为培养数学和其他高科技复合型人才打下基础。基础数学学科较多地涉及:代
小莹莹
2018/04/19
2.1K0
AI时代就业指南:数学专业,你看不见的前尘似锦
【数据科学】数据科学家与数据科学
仅仅在几年前,数据科学家还不是一个正式确定的职业,然而一眨眼的工夫,这个职业就已经被誉为“今后十年IT行业最重要的人才”了。 一、数据科学家的起源 "数据科学"(DataScience)起初叫"datalogy "。最初在1966年由Peter Naur提出,用来代替"计算机科学"(丹麦人,2005年图灵奖得主,丹麦的计算机学会的正式名称就叫Danish Society of Datalogy,他是这个学会的第一任主席。Algol 60是许多后来的程序设计语言,包括今天那些必不可少的软件工程工具的原型。
陆勤_数据人网
2018/02/26
1.1K0
【数据科学】数据科学家与数据科学
业界深访 | 产品总监眼中的数据科学家到底是怎样的
在大数据和机器学习的时代,有一种职业脱颖而出——数据科学家。数据科学家在近年来备受追捧,也有越来越多的人想投身入数据科学领域。
CDA数据分析师
2018/11/22
4810
我们分析了1001份LinkedIn资料,得出了数据科学家的平均画像
接下来,从1990年代后期到2000年代早期,很显然当时互联网即将给世界带来翻天覆地的变化。许多精通技术的毕业生开始专攻软件和Web开发。
CDA数据分析师
2019/11/12
5420
【AI碾压金融成薪资最高行业】35位数据科学家透露秘诀:做好PPT!
职业招聘信息网站Indeed.com近日发布报告称,自2015年6月到2018年6月,与人工智能或机器学习有关的工作岗位数量增长了99.8%。
新智元
2018/09/25
6410
【AI碾压金融成薪资最高行业】35位数据科学家透露秘诀:做好PPT!
互联网公司如何组建数据科学团队?
今天近乎所有的互联网公司都希望组建(大)数据分析团队,但由于大数据技术应用是一个高速发展的全新领域,与建设常规的软件开发团队相比,企业在数据科学团队的招聘、建设和成长方面面临各种全新的挑战。 对于人力资源经理来说,大数据分析人才的招聘说明中有太多的生词,包括各种大数据新鲜名词、算法和技能,而且整个技术人才市场对大数据经验、最佳实践的定义和标准尚无定论。 近日Experteer的Rodrigo Rivera为VB撰文指出,企业组建大数据分析团队首先需要搞清楚以下三个问题:数据分析团队在企业组织架构中的智能定位
CSDN技术头条
2018/02/09
7850
互联网公司如何组建数据科学团队?
【数据科学】从学界到业界:关于数据科学的误解与事实
在从学界(粒子物理学博士后研究员)进入业界(数据科学领域)时,Emily Thompson也曾有过犹疑。而现在,在担任 Insight 项目总监10个月之后,她对数据科学家有了自己独特的看法。近日,她在一篇 文章 中就当前人们对数据科学的误解谈了自己的看法,主要涉及数据科学家的职责、应用领域、工作环境、职业发展、技能集合等方面。 误解一:“‘数据科学家’只是‘业务分析师’的一种花哨叫法,他们本质上是相同的” 在数据科学领域,业务分析师仍然占了很大一部分,而数据科学家也构建数据产品,创建软件平台,实现可视化
陆勤_数据人网
2018/02/27
8570
敲了17年代码,我现在连个面试机会都得不到
虽然全球经济正显现出逐步复苏的迹象,但科技行业的裁员仍在不断推进。在 IT 这个永远寻求下一个热门趋势的产业当中,美国软件就业市场哀鸿遍野,连技术老鸟们似乎也难以重拾竞争力——几十年的经验积累反而让他们感觉自己身处劣势。
深度学习与Python
2024/03/18
1320
敲了17年代码,我现在连个面试机会都得不到
数据科学家在美国仍然是最热门工作的3大原因
原作者 Vivian Zhang , Chris Neimeth 编译 CDA 编译团队 本文为 CDA 数据分析师原创翻译作品,转载需授权 根据美国招聘网站 Glassdoor 关于50个最热门工作岗位的报告,数据科学家毫不意外的连续第二年获得了首位。每年, Glassdoor 会根据所有工作获得的“ Glassdoor 工作得分”发布此报告。评分取决于三个关键因素:市场职位需求,工作满意度和平均年薪。 凭借着工作得分 4.8 分,工作满意度 4.4 分( 5 分为满分),平均年薪 11 万美元
CDA数据分析师
2018/02/26
7480
数据科学家在美国仍然是最热门工作的3大原因
未来什么职业最赚钱!LinkedIn 2017年美国新兴职业报告
新的职业种类对于所有水平的工作人员来说都拥有着新的可能性,这对于正在职场转型的职场人士意义更为重大。
IT阅读排行榜
2018/08/17
9680
未来什么职业最赚钱!LinkedIn 2017年美国新兴职业报告
Kaggle 2017数据科学报告:最受欢迎的工具竟然是......
摘要:数据平台 Kaggle 近日发布了2017 机器学习及数据科学调查报告,针对最受欢迎的编程语言、不同国家数据科学家的平均年龄、不同国家的平均年薪等进行深度调查。此次调查共收到16000余份回复。 正文: 2017年,我们首次进行了全行业调查,以全面了解数据科学和机器学习的生态。我们收到了超过16,000份回复,我们调查了”谁在处理数据?”,"各行业机器学习的最前沿发生了什么?”,”新进入这一领域的数据科学家如何取得突破?”等问题并获得了大量反馈信息。本文分享了我们的一些重要发现,其中的摘要内容
小莹莹
2018/04/18
8490
Kaggle 2017数据科学报告:最受欢迎的工具竟然是......
2020 年数据科学就业市场必备的五项技能
数据科学是一个竞争激烈的领域,人们正在迅速学习越来越多的技能和经验。这导致了机器学习工程师的从业要求的直线上升,因此 2020 年我的建议是,所有的数据科学家也需要成为开发人员。
AI研习社
2020/01/02
4040
推荐阅读
相关推荐
AI就业排名出炉:机器学习霸榜、薪资最高;但AI岗位需求正放缓
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档