学习ARIMA模型的心得
对于初学者来说,了解第一个模型肯定是大概了解一下他内部的基本算法,不需要太懂,但得知道一些。首先,能看到这篇文章,大家肯定对ARIMA有一些基本的了解,他是由AR和MA模型综合而来的。
那么,简要介绍这两个模型吧。开始我们必须得知道自相关系数和偏相关系数了,这两个是啥呢?大家可以从搜到一些计算的原理。我也简单的说一下。那么一开始呢我们有一组数据,比如就是【1,2,3,4,5】,通常来说我们学习相关系数一般是2组数据求解得来的,所以一组数据是没有相关系数的,但是自相关系数顾名思义,和自己相关,怎么弄呢。(但是重要的一点,我们后面计算的平均值方差都是整体数据得来的)。我们只需要把里面的数据拆解成2部分就行了,比如第一组【1,2,3,4】和第二组【2,3,4,5】,这个是一阶,二阶的两组数据是【1,2,3】和【3,4,5】有没有发现一些规律呢,一阶就是整体数据减掉一项,2阶就是减去两项。我们可以直接用excel计算并且和python的acf值对比,看是否准确。
自相关系数
从图可以看出我们的自相关系数需要计算出两组数据的协方差cov,然后除以两组数据的方差乘机开方,但是,上面我说过,平均值以及方差是基于整体数据的。
计算数据【1,2,3,4】和【2,3,4,5】的cov时,我们减去的均值都是3,即整体的均值。数字10计算的是整体数据减去均值的平方和,如果除以n就是方差了,但是我们不需要,可以和上面的cov下面的分母约分掉。到这里便计算出一阶自相关,重复步骤,即可计算出各阶值。
我们用python计算acf值
import numpy as np
from statsmodels.tsa.api import acf
data = np.array([1,2,3,4,5])
print(acf(data))
结果和我们一致,只不过,在最前面加上了0阶的自相关系数,那就是1了。
偏相关系数的计算相对就比较麻烦了,需要用到Yule公式,我也不太会,这里面涉及到先求解协方差,然后求出协方差的对角矩阵,最后进行矩阵方差求解,代码如下
import numpy as npa = np.array([1,2,3,4,5])
n = len(a)
a = a - np.mean(a)
order = 4
adj_needed = 1
r = np.zeros(order+1, np.float64)
r[0] = (a ** 2).sum() / n #先求出第一个本身的 协方差 实际就是自己的方差
for k in range(1, order+1):r[k] = (a[0:-k] * a[k:]).sum() / (n - k * adj_needed) #不能直接用公式求协方差 是因为 用的是整体的 均值,而不是独立出来样本的均值
print(r)
R = toeplitz(r[:-1]) #得到 对角矩阵
print(R)
rho = np.linalg.solve(R, r[1:]) #解方程组
print(rho, rho[-1])
理解了上面2部分,对于理解ARIMA方差便可以有一个大概的认识了,就是由几组数据通过复杂的计算,加上常数项和误差项。
就是根据acf,pacf得到最佳阶数后(拖尾和截尾的问题),对上面的公式进行拟合,当然ARIMA和上面的区别就在于数据做差分,使其更平稳,通常就是用ADF检验,至于这个就不深入。大部分数据都可以一阶差分后得到平稳数据。
最后就是我们需要的ARIMA训练以及预测了。
但是我们不想去观看什么pacf图去确定p,q以及差分d的值,可以直接使用代码去代替我们得到最佳的答案。
min_bic = np.inf
best_order = None
best_arma = None
max_lag = 4
for p in range(max_lag):for d in range(max_lag):for q in range(max_lag):try:tmp_arma = tsa.ARIMA(train_data,order=(p,d,q)).fit() tmp_bic = tmp_arma.bicif tmp_bic < min_bic:min_bic = tmp_bic #使用BIC 最小值进行取值best_order = (p,d,q)best_arma = tmp_armaexcept:continue
直接让他自行搜索到最优组合,即bic(贝叶斯信息量)值最小,这个可以简单理解我们得到的方程组拟合效果最好。
可以自行打印最优的参数组合best_order,但是我不建议用这种方法,太慢了,因为3个循环范围都是4,就会有64种结果,如果max_lag再大,会更慢。
可以采用自行查看一阶差分是否平稳,直接传入d的值可以有效缩短时间,完整的情况如下
data = data.close
train_data=data[:-30] #划分好训练 和预测的数据集
test_data=data[-30:]
data_diff = data.diff().dropna()
adf = adfuller(data_diff) #一般看第二个值是否小于0.05,如果是,便认为是平稳数据,如果这里一阶可以,下面的d值可以直接输入为1
print(adf[1]<0.05) #为true说明一阶差分符合条件
min_bic = np.inf
best_order = None
best_arma = None
max_lag = 4
for p in range(max_lag):for q in range(max_lag):try:tmp_arma = tsa.ARIMA(train_data,order=(p,1,q)).fit() #这里训练,不需要使用差分后的数据,否则还需要还原tmp_bic = tmp_arma.bicif tmp_bic < min_bic:min_bic = tmp_bic #使用BIC 最小值进行取值best_order = (p,1,q)best_arma = tmp_armaexcept:continue
print(best_order)
# tmp_arma = tsa.ARIMA(train_data,order=(4,1,2)).fit()
# res = tmp_arma.forecast(30)
res = best_arma.forecast(30)
print(res)
predicted = resindex = test_data.index
predicted_data=pd.DataFrame(predicted,index=index)
fig = plt.figure()
plt.plot(data[-30:],c='blue')
plt.plot(predicted_data,c='red')
plt.legend(['ture','prediction'])
plt.show()
还有我们可以直接使用其他方法,除了上面的方法还可以使用其他方法查找最优参数,比如
auto_arima,网上有很多人讲解使用,这里不再叙述。
学习ARIMA模型的心得相关推荐
- ARIMA模型详细讲解
近期在学习ARIMA模型,下面博主讲的比较精细很受用,感觉看完之后收获大大嘀. https://www.jianshu.com/p/305c4961ee06 转载于:https://www.cnblo ...
- ARIMA模型学习心得
模型简介 "ARIMA"实际上并不是一整个单词,而是一个缩写.其全称是:Autoregressive Integrated Moving Average Model,即自回归移动平 ...
- arima 预测模型_预测未来:学习使用Arima模型进行预测
arima 预测模型 XTS对象 (XTS Objects) If you're not using XTS objects to perform your forecasting in R, the ...
- Python实现时间序列中的ARIMA模型(学习笔记)
文章目录 ARIMA模型 AR MA模型 ARMA模型 基本步骤 平稳检验 数据差分 ACF和PACF ACF PACF 代码实现 本篇文章仅为学习笔记,阅读本文章您很难获得收获.
- ARIMA模型学习笔记
ARIMA模型学习笔记 目录 ARIMA模型学习笔记 ARIMA模型 时间序列平稳性 什么是平稳性 严平稳 弱平稳 平稳性检验 ADF检验(Augmented Dickey-Fuller test) ...
- r语言没有forecast这个函数_R语言学习日记——时间序列分析之ARIMA模型预测
指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求.但是,如果你想使用指数平滑法计算出预测区间,那么预测误差必须是不相关的, 而且必须是服从零均值. 方差不变的正态分 ...
- 学习笔记-ARIMA模型
ARIMA模型是基于时间序列的预测模型,也叫做差分整合移动平均自回归模型,又称整合移动平均自回归模型,时间序列预测分析方法之一.ARIMA(p,d,q)中,AR是"自回归",p为自 ...
- 理论加实践,终于把时间序列预测ARIMA模型讲明白了
上篇我们一起学习了一些关于时间序列预测的知识.而本文将通过一段时间内电力负荷波动的数据集来实战演示完整的ARIMA模型的建模及参数选择过程,其中包括数据准备.随机性.稳定性检验.本文旨在实践中学习,在 ...
- python arima模型_Python时间序列处理之ARIMA模型的使用讲解
ARIMA模型 ARIMA模型的全称是自回归移动平均模型,是用来预测时间序列的一种常用的统计模型,一般记作ARIMA(p,d,q). ARIMA的适应情况 ARIMA模型相对来说比较简单易用.在应用A ...
最新文章
- 别在 Java 代码里乱打日志了,这才是正确的打日志姿势
- 电脑显示未安装任何音频输出设备_一套完整的台式电脑有哪些配置
- 第15章 关于本软件
- 批处理 探测在线计算机,批处理(bat)用来监测Windows网络状态脚本
- linux源码编译安装lamp环境搭建,linux下源码包编译安装LAMP环境
- Hibernate一对一关联------主键关联(亲测成功)
- Docker - 实战TLS加密通讯
- 特斯拉第四季度生产超30.5万台车 全年交付近百万台
- 零基础学Python可以学会吗?
- 【转】No Persistence provider for EntityManager问题
- 移动端拖拽(模块化开发,触摸事件,webpack)
- 56.Linux/Unix 系统编程手册(下) -- SOCKET 介绍
- 卸载oracle10g教程,卸载Oracle10g步骤
- 像仓管一样管理redux-仓管也需要才艺(中间件)
- php code128扫码不能识别,求助excel中code128字体打印出的条码扫描枪读不出
- FC冒险岛java版_FC冒险岛全关卡版
- html毕业答辩ppt模板范文,答辩ppt模板|答辩总结范文
- Java作业:异常处理实验
- 多重背包的二进制拆分法
- 新手学做网站的建议教程
热门文章
- python父类以及子类
- OpenCV实现动态人脸识别(第三讲)
- 国美金融贷款BootLoader程序,国美金融贷款启动操作系统内核
- 区块链技术到底是什么鬼(一)
- Python学习(第一周附加)
- 深度学习 101-搭建 ResNet 识别鲜花图像
- 【调剂】防灾科技学院资源与环境(专硕)专业接受地下水科学与工程、工程地质等多个专业考生调剂...
- matlab mnist 代码,MNIST手写字 Matlab程序,包含BP和CNN程序
- matlab 简化结果,将多重图简化为简单图
- mysql下载 na,db4free.net