时间序列(四)ARIMA模型与差分
ARIMA模型
平稳性:
平稳性就是要求经由样本时间序列所得到的拟合曲线
在未来的一段期间内仍能顺着现有的形态“惯性”地延续下去
平稳性要求序列的均值和方差不发生明显变化
严平稳与弱平稳:
严平稳:严平稳表示的分布不随时间的改变而改变。
弱平稳:期望与相关系数(依赖性)不变
未来某时刻的t的值Xt就要依赖于它过去的信息,所以需要依赖性
import pandas as pd
import numpy as np
# Display and Plotting
import matplotlib.pylab as plt
import seaborn as sns
#Read the data
#美国消费者信心指数
Sentiment = 'data/sentiment.csv'
Sentiment = pd.read_csv(Sentiment, index_col=0, parse_dates=[0])
print(Sentiment.head())
截取其中2005-2016年
# Select the series from 2005 - 2016
sentiment_short = Sentiment.loc['2005':'2016']
sentiment_short.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Consumer Sentiment")
sns.despine()
plot.show()
画出来
画出一阶差分与二阶差分的图
sentiment_short['diff_1'] = sentiment_short['UMCSENT'].diff(1)sentiment_short['diff_2'] = sentiment_short['diff_1'].diff(1)sentiment_short.plot(subplots=True, figsize=(18, 12))
ARIMA模型原理
自回归模型AR
描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测
自回归模型必须满足平稳性的要求
p阶自回归过程的公式定义:
yt是当前值 u是常数项 P是阶数 ri是自相关系数 et是误差
(P当前值距p天前的值的关系)
自回归模型的限制
1、自回归模型是用自身的数据进行预测
2、必须具有平稳性
3、必须具有相关性,如果自相关系数(φi)小于0.5,则不宜采用
4、自回归只适用于预测与自身前期相关的现象
移动平均模型MA
移动平均模型关注的是自回归模型中的误差项的累加
q阶自回归过程的公式定义:
移动平均法能有效地消除预测中的随机波动
I是差分模型
需要确定P和Q,
d是做几阶差分,一般1阶就可以了
选择P与Q的方法:
自相关函数ACF(autocorrelation function)
有序的随机变量序列与其自身相比较自相关函数反映了同一序列在不同时序的取值的相关性
公式:
变量与自身的变化,yt和yt-1到yt和yt-k的相关系数
k阶滞后点
Pk的取值范围【-1,1】
虚线表示95%,置信区间
偏自相关函数(PACF)(partial autocorrelation function)
1、对于一个平稳AR(p)模型,求出滞后k自相关系数p(k)时
实际上得到的并不是x(t)与x(t-k)之间单纯的相关关系
2、x(t)同时还会受到中间k-1个随机变量x(t-1)、x(t-2)……、x(t-k+1)的影响,而这k-1个随机变量又都和x(t-k)具有相关关系,所以自相关系数p(k)里实际掺杂了其他变量对x(t)与x(t-k)的影响
3、剔除了中间k-1个随机变量x(t-1)、x(t-2)、……、x(t-k+1)的干扰之后
x(t-k)对x(t)影响的相关程度
4、ACF还包含了其他变量的影响
而偏自相关系数PACF是严格这两个变量之间的相关性
需要用到模块statsmodels
# TSA from Statsmodels
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt
分别画出ACF和PACF图像
fig = plt.figure(figsize=(12,8))ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(sentiment_short, lags=20,ax=ax1)
ax1.xaxis.set_ticks_position('bottom')
fig.tight_layout();
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(sentiment_short, lags=20, ax=ax2)
ax2.xaxis.set_ticks_position('bottom')
fig.tight_layout();
接下来确定ARIMA模型的p、d、q三个参数
ARIMA(p,d,q)
确认方法:
例子:
四个图的整合函数,可以改参数直接调用
# 更直观一些def tsplot(y, lags=None, title='', figsize=(14, 8)):fig = plt.figure(figsize=figsize)layout = (2, 2)ts_ax = plt.subplot2grid(layout, (0, 0))hist_ax = plt.subplot2grid(layout, (0, 1))acf_ax = plt.subplot2grid(layout, (1, 0))pacf_ax = plt.subplot2grid(layout, (1, 1))y.plot(ax=ts_ax)ts_ax.set_title(title)y.plot(ax=hist_ax, kind='hist', bins=25)hist_ax.set_title('Histogram')smt.graphics.plot_acf(y, lags=lags, ax=acf_ax)smt.graphics.plot_pacf(y, lags=lags, ax=pacf_ax)[ax.set_xlim(0) for ax in [acf_ax, pacf_ax]]sns.despine()plt.tight_layout()return ts_ax, acf_ax, pacf_ax
使用:
tsplot(sentiment_short, title='Consumer Sentiment', lags=36);
另一种判别:
从图中可以看出p=2,d=0,q=0 较为合适
于是训练模型
#Model Estimation# Fit the model
arima200 = sm.tsa.SARIMAX(ts_train, order=(2,0,0))
model_results=arima200.fit()
通过导入import itertools来遍历
import itertoolsp_min = 0
d_min = 0
q_min = 0
p_max = 4
d_max = 0
q_max = 4# Initialize a DataFrame to store the results
results_bic = pd.DataFrame(index=['AR{}'.format(i) for i in range(p_min,p_max+1)],columns=['MA{}'.format(i) for i in range(q_min,q_max+1)])for p,d,q in itertools.product(range(p_min,p_max+1),range(d_min,d_max+1),range(q_min,q_max+1)):if p==0 and d==0 and q==0:results_bic.loc['AR{}'.format(p), 'MA{}'.format(q)] = np.nancontinuetry:model = sm.tsa.SARIMAX(ts_train, order=(p, d, q),#enforce_stationarity=False,#enforce_invertibility=False,)results = model.fit()results_bic.loc['AR{}'.format(p), 'MA{}'.format(q)] = results.bicexcept:continue
results_bic = results_bic[results_bic.columns].astype(float)
画出热度图
fig, ax = plt.subplots(figsize=(10, 8))
ax = sns.heatmap(results_bic,mask=results_bic.isnull(),ax=ax,annot=True,fmt='.2f',);
ax.set_title('BIC');
输出AIC、BIC评价指标
# Alternative model selection method, limited to only searching AR and MA parameterstrain_results = sm.tsa.arma_order_select_ic(ts_train, ic=['aic', 'bic'], trend='nc', max_ar=4, max_ma=4)print('AIC', train_results.aic_min_order)
print('BIC', train_results.bic_min_order)
AIC (4, 2)
BIC (1, 1)
结果不一致需要我们重新审判
#残差分析 正态分布 QQ图线性
model_results.plot_diagnostics(figsize=(16, 12));
分析其他指标
时间序列(四)ARIMA模型与差分相关推荐
- 时间序列分析模型——ARIMA模型
时间序列分析模型--ARIMA模型 一.研究目的 传统的经济计量方法是以经济理论为基础来描述变量关系的模型.但经济理论通常不足以对变量之间的动态联系提供一个严密的说明,而且内生变量既可以出现在方程的左 ...
- 时间序列 :ARIMA模型-原理
时间序列是在时间点上形成的数值序列,时间序列预测是通过观察历史数据预测未来的值.ARIMA模型(Autoregressive Integrated Moving Average model)是时间序列 ...
- 理论加实践,终于把时间序列预测ARIMA模型讲明白了
上篇我们一起学习了一些关于时间序列预测的知识.而本文将通过一段时间内电力负荷波动的数据集来实战演示完整的ARIMA模型的建模及参数选择过程,其中包括数据准备.随机性.稳定性检验.本文旨在实践中学习,在 ...
- 时间序列之ARIMA模型原理
ARIMA模型 时间序列模型的意义: 在经典的回归模型中,主要是通过回归分析来建立不同变量之间的函数关系(因果关系),以考察事物之间的联系.本案例要讨论如何利用时间序列数据本身建立模型,以研究事物发展 ...
- 数据挖掘实战(3)——时间序列预测ARIMA模型(附踩坑日志)
文章目录 1 导包 2 数据准备 3 可视化 4 构建ARIMA模型 5 预测 6 踩坑日志 1 导包 import numpy as np import matplotlib.pyplot as p ...
- 【时间序列预测-ARIMA模型】
转载 https://blog.csdn.net/qq_35495233/article/details/83514126 参考[概念]https://blog.csdn.net/TU_JCN/art ...
- 基于spss的多变量时间序列的ARIMA模型
概述 数学建模的过程中必然会出现许多难以预料的问题,哪怕仅仅是一个温度预测模型也有莫大学问,譬如预测二十四小时内的温度变化,这多变量时间序列短期预测确实让我伤透了脑筋. 查阅了不少资料后,小弟我也勉勉 ...
- arima基本原理_时间序列 :ARIMA模型-原理
时间序列是在时间点上形成的数值序列,时间序列预测是通过观察历史数据预测未来的值.ARIMA模型(Autoregressive Integrated Moving Average model)是时间序列 ...
- 数据挖掘——时间序列算法之ARIMA模型
数据挖掘--时间序列算法之ARIMA模型 前言 差分定义 ARIMA模型 实践 1.检验序列的平稳性 2.进行一阶差分后,进行平稳性和白噪声检验 3.对一阶差分之后的平稳非白噪声序列拟合ARMA模型 ...
最新文章
- java与工业相机,OpenCV软件与工业相机的组合在机器视觉中的应用
- Flink JobManager HA模式部署(基于Standalone)
- rabbitmq 启动报错 Failed to get nic info
- HTML+CSS+JS实现 ❤️canvas 3D云动画效果❤️
- 28-33Linux目录指令
- 收回扣、打麻将、开赌场?比亚迪自曝多名员工贪污腐败
- c++ new delete
- 中颖内带LED资源驱动代码
- Linux基础命令---lp打印机命令
- 关于DHCP超级域与中继代理的疑问
- 20191124每日一句
- python学完不会用_如何学习Python的基础知我感觉我学Python的基础知识学了不会运用,就是学完一节课写代码就抓瞎?...
- 如何无线接收服务器封包,大大通|如何抓取802.11a/b/g/n/ac 的无线网络封包
- stm32直流电机PID控制hal库(Cubemx)
- 问:adb连接逍遥模拟器时,报offline。
- html中a标签如何进行锚点,a标签中的锚点使用方法
- 链接分析算法PageRank和HITS
- 转:组织敏捷不是一种选择,而是一种必须!
- Devops 基础介绍
- OFFER狂魔成长指南