对于初学者来说,了解第一个模型肯定是大概了解一下他内部的基本算法,不需要太懂,但得知道一些。首先,能看到这篇文章,大家肯定对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模型的心得相关推荐

  1. ARIMA模型详细讲解

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

  2. ARIMA模型学习心得

    模型简介 "ARIMA"实际上并不是一整个单词,而是一个缩写.其全称是:Autoregressive Integrated Moving Average Model,即自回归移动平 ...

  3. arima 预测模型_预测未来:学习使用Arima模型进行预测

    arima 预测模型 XTS对象 (XTS Objects) If you're not using XTS objects to perform your forecasting in R, the ...

  4. Python实现时间序列中的ARIMA模型(学习笔记)

    文章目录 ARIMA模型 AR MA模型 ARMA模型 基本步骤 平稳检验 数据差分 ACF和PACF ACF PACF 代码实现 本篇文章仅为学习笔记,阅读本文章您很难获得收获.

  5. ARIMA模型学习笔记

    ARIMA模型学习笔记 目录 ARIMA模型学习笔记 ARIMA模型 时间序列平稳性 什么是平稳性 严平稳 弱平稳 平稳性检验 ADF检验(Augmented Dickey-Fuller test) ...

  6. r语言没有forecast这个函数_R语言学习日记——时间序列分析之ARIMA模型预测

    指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求.但是,如果你想使用指数平滑法计算出预测区间,那么预测误差必须是不相关的, 而且必须是服从零均值. 方差不变的正态分 ...

  7. 学习笔记-ARIMA模型

    ARIMA模型是基于时间序列的预测模型,也叫做差分整合移动平均自回归模型,又称整合移动平均自回归模型,时间序列预测分析方法之一.ARIMA(p,d,q)中,AR是"自回归",p为自 ...

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

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

  9. python arima模型_Python时间序列处理之ARIMA模型的使用讲解

    ARIMA模型 ARIMA模型的全称是自回归移动平均模型,是用来预测时间序列的一种常用的统计模型,一般记作ARIMA(p,d,q). ARIMA的适应情况 ARIMA模型相对来说比较简单易用.在应用A ...

最新文章

  1. 别在 Java 代码里乱打日志了,这才是正确的打日志姿势
  2. 电脑显示未安装任何音频输出设备_一套完整的台式电脑有哪些配置
  3. 第15章 关于本软件
  4. 批处理 探测在线计算机,批处理(bat)用来监测Windows网络状态脚本
  5. linux源码编译安装lamp环境搭建,linux下源码包编译安装LAMP环境
  6. Hibernate一对一关联------主键关联(亲测成功)
  7. Docker - 实战TLS加密通讯
  8. 特斯拉第四季度生产超30.5万台车 全年交付近百万台
  9. 零基础学Python可以学会吗?
  10. 【转】No Persistence provider for EntityManager问题
  11. 移动端拖拽(模块化开发,触摸事件,webpack)
  12. 56.Linux/Unix 系统编程手册(下) -- SOCKET 介绍
  13. 卸载oracle10g教程,卸载Oracle10g步骤
  14. 像仓管一样管理redux-仓管也需要才艺(中间件)
  15. php code128扫码不能识别,求助excel中code128字体打印出的条码扫描枪读不出
  16. FC冒险岛java版_FC冒险岛全关卡版
  17. html毕业答辩ppt模板范文,答辩ppt模板|答辩总结范文
  18. Java作业:异常处理实验
  19. 多重背包的二进制拆分法
  20. 新手学做网站的建议教程

热门文章

  1. python父类以及子类
  2. OpenCV实现动态人脸识别(第三讲)
  3. 国美金融贷款BootLoader程序,国美金融贷款启动操作系统内核
  4. 区块链技术到底是什么鬼(一)
  5. Python学习(第一周附加)
  6. 深度学习 101-搭建 ResNet 识别鲜花图像
  7. 【调剂】防灾科技学院资源与环境(专硕)专业接受地下水科学与工程、工程地质等多个专业考生调剂...
  8. matlab mnist 代码,MNIST手写字 Matlab程序,包含BP和CNN程序
  9. matlab 简化结果,将多重图简化为简单图
  10. mysql下载 na,db4free.net