TSAP(7) : ARIMA模型
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模型相关推荐
- R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列
R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列 目录
- 时间序列(四)ARIMA模型与差分
ARIMA模型 平稳性: 平稳性就是要求经由样本时间序列所得到的拟合曲线 在未来的一段期间内仍能顺着现有的形态"惯性"地延续下去 平稳性要求序列的均值和方差不发生明显变化 严平稳与 ...
- 时间序列预测---差分自回归移动平均模型(ARIMA模型)
ARIMA模型简介 1. 数据平稳性 了解ARIMA模型就要先了解数据的平稳性,样本数据获得的时间序列,在未来一段时间沿着一个"趋势"发展下去,只有具有平稳性的数据才可以做预测 平 ...
- python时间序列分析航空旅人_时间序列分析-ARIMA模型(python)
时间序列概念:在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻 所得到的离散数字组成的序列集合,称之为时间序列.时间序列分析是根据系统观察得到的时间序列数据,通过曲线拟合和参数估 ...
- ARIMA模型实例讲解——网络流量预测可以使用啊
ARIMA模型实例讲解:时间序列预测需要多少历史数据? from:https://www.leiphone.com/news/201704/6zgOPEjmlvMpfvaB.html 雷锋网按:本 ...
- python画不出来图是什么原因-完美解决ARIMA模型中plot_acf画不出图的问题
问题描述:在画时间序列ACF时,调用 from statsmodels.graphics.tsaplots import plot_acf, plot_pacf plot_acf(data, lags ...
- arima模型 p q d 确定_基于ARIMA预测股指期货价格走势
" 常用的时间序列模型有四种:自回归模型 AR(p).移动平均模型 MA(q).自回归移动平均模型 ARMA(p,q).自回归差分移动平均模型 ARIMA(p,d,q), 可以说前三种都是 ...
- ARIMA模型详细讲解
近期在学习ARIMA模型,下面博主讲的比较精细很受用,感觉看完之后收获大大嘀. https://www.jianshu.com/p/305c4961ee06 转载于:https://www.cnblo ...
- arima模型 p q d 确定_时间序列分析第07讲(ARIMA模型,季节时间序列模型,均值的估计)...
3.3 广义 ARMA 模型和 ARIMA 模型介绍 一.广义 ARMA 模型 (1)定义 我们把 ARMA 模型中关于多项式 A(z),B(z) 的最小相位条件去掉(即允许有单位圆内的根),其余定义 ...
- 理论加实践,终于把时间序列预测ARIMA模型讲明白了
上篇我们一起学习了一些关于时间序列预测的知识.而本文将通过一段时间内电力负荷波动的数据集来实战演示完整的ARIMA模型的建模及参数选择过程,其中包括数据准备.随机性.稳定性检验.本文旨在实践中学习,在 ...
最新文章
- Python学习笔记3 流程控制、迭代器、生成器
- [.Net线程处理系列]专题二:线程池中的工作者线程
- (转)分布式文件存储FastDFS(五)FastDFS常用命令总结
- python开发的软件sparrow-黑客常用wifi蓝牙分析攻击工具,让你的设备陷入危险之中...
- vs.net2003无法打开*.xsd文件的解决方法
- C语言预定义宏 __func__、__FUNCTION__、__LINE__、__FILE__、__DATE__、__TIME__
- JAVA基础知识(2)
- String | 344. Reverse String
- Tomcat启动时自动加载Servlet
- c# Brush、Color、String相互转换
- lingo纳什均衡代码_数学建模练习题.
- winrar4.2 破解 注册码
- OSAL 添加一个LED任务
- 如何用R语言做深度学习
- 【项目介绍】单发动机驱动的多旋翼飞行器及其控制系统
- 阿里巴巴高级技术专家:如何成为优秀的技术主管(下篇)
- M2增速8%处于历史地位——解读10月货币数据
- TypeError: Object of type 'datetime' is not JSON serializable
- html表格到层的相对位置,html,左右拖动表格.doc
- 卡布奇诺搭建教程_移动Web应用程序框架匹配,第2部分,探索卡布奇诺咖啡以进行移动Web应用程序开发