TSAP : TimeSeries Analysis with Python

(7) :

ARIMA模型

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
from matplotlib.pylab import rcParams
import warnings
warnings.filterwarnings('ignore')
#rcParams['figure.figsize'] = 15, 6

Load data

air_passengers = pd.read_csv("./data/AirPassengers.csv", header = 0, parse_dates = [0], names = ['Month', 'Passengers'], index_col = 0)
# log transform
log_air_passengers = np.log(air_passengers.Passengers)
# difference
log_air_passengers_diff = log_air_passengers - log_air_passengers.shift()
# drop Nan
log_air_passengers_diff.dropna(inplace=True)

对数转换后的时间序列一阶差分

  • 一阶差分后得到平稳的时间序列:特征不随时间而变化,就称此过程是平稳的。
log_air_passengers_diff.plot(figsize=(10, 5), grid=True)

ARIMA Model

ARIMA模型全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),其中ARIMA(p,d,q)称为差分自回归移动平均模型.

  • AR是自回归
  • p为自回归项 Auto-Regressive Terms §
  • MA为移动平均
  • q为移动平均项数 Moving Average Terms (q)
  • d为时间序列成为平稳时所做的差分次数

ARIMA模型预测的基本程序

  • 根据时间序列的可视化结果对序列的平稳性进行识别。
  • 对非平稳序列进行平稳化处理。如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理.
  • 根据时间序列模型的识别规则,建立相应的模型。若平稳序列的偏相关函数是截尾的,而自相关函数是拖尾的,可断定序列适合AR模型;若平稳序列的偏相关函数是拖尾的,而自相关函数是截尾的,则可断定序列适合MA模型;若平稳序列的偏相关函数和自相关函数均是拖尾的,则序列适合ARMA模型.(截尾是指时间序列的自相关函数(ACF)或偏自相关函数(PACF)在某阶后均为0的性质(比如AR的PACF);拖尾是ACF或PACF并不在某阶后均为0的性质)
  • 进行参数估计,检验是否具有统计意义。
  • 进行假设检验,诊断残差序列是否为白噪声。
  • 利用已通过检验的模型进行预测分析。

计算平稳时间序列的自相关和偏自相关函数值

# ARIAM的参数从数据中获得, 计算平稳时间序列的自相关和偏自相关函数值
from statsmodels.tsa.stattools import acf, pacf
lag_acf, acf_confint= acf(log_air_passengers_diff.values, nlags = 20, alpha=0.05)
# alpha=0.05,返回95%的置信边界
lag_pacf, pacf_confint = pacf(log_air_passengers_diff.values, nlags = 20, alpha=0.05)
ave_acf_confint = np.mean(acf_confint,axis=0)
ave_pacf_confint = np.mean(pacf_confint,axis=0)
plt.figure(figsize=(14,5))
plt.subplot(121)
plt.plot(lag_acf,c='k')
plt.axhline(y=0,linestyle='-')
plt.axhline(ave_acf_confint[0],linestyle='--',c='orange')
plt.axhline(ave_acf_confint[1],linestyle='--',c='green')
plt.plot(acf_confint[:,0],c='orange')
plt.plot(acf_confint[:,1],c='green')
plt.grid(True, axis='x', linestyle='-', c='k')
plt.xticks([0, 1, 3, 4])
plt.title('ACF')
#-------------------------------------------
plt.subplot(122)
plt.plot(lag_pacf,c='k')
plt.axhline(y=0,linestyle='--')
plt.axhline(ave_pacf_confint[0],linestyle='--',c='orange')
plt.axhline(ave_pacf_confint[1],linestyle='--',c='green')
plt.plot(pacf_confint[:,0],c='orange')
plt.plot(pacf_confint[:,1],c='green')
plt.xticks([0, 1, 2, 4])
plt.grid(True, axis='x', linestyle='-', c='k')
plt.title('PACF')
Text(0.5,1,'PACF')

自相关图显示滞后0,1阶都是拖尾

偏自相关图显示滞后0,2,4阶拖尾

P,Q的取值可以尝试多个不同的组合.来确定最佳的参数

AR model

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(log_air_passengers, order=(2, 1, 0))
results_AR = model.fit(disp=-1)
plt.plot(log_air_passengers_diff)
plt.plot(results_AR.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_AR.fittedvalues-log_air_passengers_diff)**2))
Text(0.5,1,'RSS: 1.5023')

MA model

model = ARIMA(log_air_passengers, order=(0, 1, 2))
results_MA = model.fit(disp=-1)
plt.plot(log_air_passengers_diff)
plt.plot(results_MA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_MA.fittedvalues-log_air_passengers_diff)**2))
Text(0.5,1,'RSS: 1.4721')

ARIMA model

model = ARIMA(log_air_passengers, order=(2, 1, 4))
results_ARIMA = model.fit(disp=-1)
plt.plot(log_air_passengers_diff)
plt.plot(results_ARIMA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-log_air_passengers_diff)**2))
Text(0.5,1,'RSS: 0.9661')

Predict feature

  • method 1,: 从原始序列的第一个值开始
  • methoe 2,: 从原始序列的最后一个值开始
def predict_value(seed, pred_diff):prev_value = seedpred_value = []for diff in pred_diff:pred_log = prev_value + diffpred_value.append(pred_log)prev_value = pred_logreturn pred_value
predictions_arima_diff = results_ARIMA.predict(1,157).tolist()
seed_1 = log_air_passengers.tolist()[0]
seed_2 = log_air_passengers.tolist()[-1]
pred_log1 = predict_value(seed_1, predictions_arima_diff)pred_log1 = [seed_1] + pred_log1
pred_log2 = predict_value(seed_2, predictions_arima_diff[143:])pred_log2 = log_air_passengers.tolist()+pred_log2
plt.figure(figsize=(10, 5))
plt.plot(np.exp(pred_log1),label='pred_log1')
plt.plot(np.exp(pred_log2),label='pred_log2')
plt.plot(air_passengers.values,label='original')
plt.legend()
plt.grid(True, axis='x')
plt.xticks([143])
plt.xlabel('Month')

TSAP(7) : ARIMA模型相关推荐

  1. R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列

    R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列 目录

  2. 时间序列(四)ARIMA模型与差分

    ARIMA模型 平稳性: 平稳性就是要求经由样本时间序列所得到的拟合曲线 在未来的一段期间内仍能顺着现有的形态"惯性"地延续下去 平稳性要求序列的均值和方差不发生明显变化 严平稳与 ...

  3. 时间序列预测---差分自回归移动平均模型(ARIMA模型)

    ARIMA模型简介 1. 数据平稳性 了解ARIMA模型就要先了解数据的平稳性,样本数据获得的时间序列,在未来一段时间沿着一个"趋势"发展下去,只有具有平稳性的数据才可以做预测 平 ...

  4. python时间序列分析航空旅人_时间序列分析-ARIMA模型(python)

    时间序列概念:在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻 所得到的离散数字组成的序列集合,称之为时间序列.时间序列分析是根据系统观察得到的时间序列数据,通过曲线拟合和参数估 ...

  5. ARIMA模型实例讲解——网络流量预测可以使用啊

    ARIMA模型实例讲解:时间序列预测需要多少历史数据? from:https://www.leiphone.com/news/201704/6zgOPEjmlvMpfvaB.html   雷锋网按:本 ...

  6. python画不出来图是什么原因-完美解决ARIMA模型中plot_acf画不出图的问题

    问题描述:在画时间序列ACF时,调用 from statsmodels.graphics.tsaplots import plot_acf, plot_pacf plot_acf(data, lags ...

  7. arima模型 p q d 确定_基于ARIMA预测股指期货价格走势

    " 常用的时间序列模型有四种:自回归模型 AR(p).移动平均模型 MA(q).自回归移动平均模型 ARMA(p,q).自回归差分移动平均模型 ARIMA(p,d,q), 可以说前三种都是 ...

  8. ARIMA模型详细讲解

    近期在学习ARIMA模型,下面博主讲的比较精细很受用,感觉看完之后收获大大嘀. https://www.jianshu.com/p/305c4961ee06 转载于:https://www.cnblo ...

  9. arima模型 p q d 确定_时间序列分析第07讲(ARIMA模型,季节时间序列模型,均值的估计)...

    3.3 广义 ARMA 模型和 ARIMA 模型介绍 一.广义 ARMA 模型 (1)定义 我们把 ARMA 模型中关于多项式 A(z),B(z) 的最小相位条件去掉(即允许有单位圆内的根),其余定义 ...

  10. 理论加实践,终于把时间序列预测ARIMA模型讲明白了

    上篇我们一起学习了一些关于时间序列预测的知识.而本文将通过一段时间内电力负荷波动的数据集来实战演示完整的ARIMA模型的建模及参数选择过程,其中包括数据准备.随机性.稳定性检验.本文旨在实践中学习,在 ...

最新文章

  1. Python学习笔记3 流程控制、迭代器、生成器
  2. [.Net线程处理系列]专题二:线程池中的工作者线程
  3. (转)分布式文件存储FastDFS(五)FastDFS常用命令总结
  4. python开发的软件sparrow-黑客常用wifi蓝牙分析攻击工具,让你的设备陷入危险之中...
  5. vs.net2003无法打开*.xsd文件的解决方法
  6. C语言预定义宏 __func__、__FUNCTION__、__LINE__、__FILE__、__DATE__、__TIME__
  7. JAVA基础知识(2)
  8. String | 344. Reverse String
  9. Tomcat启动时自动加载Servlet
  10. c# Brush、Color、String相互转换
  11. lingo纳什均衡代码_数学建模练习题.
  12. winrar4.2 破解 注册码
  13. OSAL 添加一个LED任务
  14. 如何用R语言做深度学习
  15. 【项目介绍】单发动机驱动的多旋翼飞行器及其控制系统
  16. 阿里巴巴高级技术专家:如何成为优秀的技术主管(下篇)
  17. M2增速8%处于历史地位——解读10月货币数据
  18. TypeError: Object of type 'datetime' is not JSON serializable
  19. html表格到层的相对位置,html,左右拖动表格.doc
  20. 卡布奇诺搭建教程_移动Web应用程序框架匹配,第2部分,探索卡布奇诺咖啡以进行移动Web应用程序开发

热门文章

  1. 使用监听器实现实时在线人数统计
  2. 2021海口高考调研成绩查询,2021海口市地区高考成绩排名查询,海口市高考各高中成绩喜报榜单...
  3. RecyclerView 内item点击失效
  4. 盒型详解及不同浏览器兼容
  5. laravel 模型事件 updated 触发条件
  6. nginx 的基本配置
  7. 挨踢部落故事汇(2):机缘所致转型之路
  8. wxpython仿写记事本
  9. 怎么让你开发的安卓软件适应更多尺寸的设备
  10. 登录亿邮网关windows脚本