ARMA/ARIMA/SARIMA模型预测

a基本原理:

这三种模型都是用来预测时序性数据。其中ARIMA和SARIMA是由ARMA模型演变过来的,而ARMA是由AR模型(自回归模型)和MA模型(移动平均模型)组合出来的(AR模型和MA模型会在下文讲解)。

假设有一个时间节点t。AR做的事是利用t之前的随机变量来预测t之后随机变量;MA做的事是利用t之前(包括t)的随机误差项和滞后误差项,来形成一个误差项模型。

AR模型可以理解成ARMA模型的一种特殊的形式,相对而言ARMA功能更强大。

ARMA:针对弱平稳、宽平稳时间序列分析

ARIMA:针对非平稳、非周期性时间序列分析

SARIMA:针对非平稳、周期性时间序列分析

b模型原理:

AR模型(自回归模型)

自回归模型(Autoregressive Model)是用自身做回归变量的过程,即利用历史时序数据值的线性组合来预测当前时刻点的线性回归模型,它是时间序列中的一种常见形式。

MA模型(移动平均模型)

MA模型和AR模型大同小异。移动平均模型(moving average model)使用历史白噪声的线性组合来预测当前时刻点的线性回归模型。与AR最大的不同之处在于,AR模型中历史白噪声的影响是间接影响当前预测值的(通过影响历史时序值)。

ARMA模型(自回归移动平均模型)

ARMA(Auto-Regressive and Moving Average Model)模型顾名思义就是将AR模型和MA模型结合起来,即历史随机变量和历史白噪声结合起来,其模型可以看成是AR模型+MA模型。

ARIMA模型(整合自回归移动平均模型)

ARIMA(Autoregressive Integrated Moving Average model)模型就是在ARMA模型的基础上多了一个差分数据处理。该模型的主要功能是将不平稳数据进行d次差分形成一个平稳的时间序列数据,然后采用ARMA模型。模型记为ARIMA(p,d,q),其中p和q就是ARMA(p,q)模型里面的p和q,而d是差分的次数(阶数)。

设当前时间为t,那么先将[t-p,t-1]历史随机变量和[t-q,t-1]历史白噪声进行d次差分形成平稳的时间序列数据,再将数据进行ARMA(p,q),则称该模型为(p,d,q)阶整合自回归移动平均模型,其数学模型和ARMA的模型一致。

SARIMA模型(季节性整合自回归移动平均模型)

SARIMA(Seasonal Autoregressive Integrated Moving Average)模型在非稳的数据上多了一些对有周期性特征数据的处理。其主要原理是来源于外界对数据周期性的观察,得到季节的长度(s)、季节自回归的阶数(P,取值由PACF判断)、季节移动平均的阶数(Q,取值由ACF判断)季节差分的阶数(D,一般就是0或1),再建立关于季节性的模型,将该模型和ARIMA模型结合,就是SARIMA模型。

c算法入口:

d如何选择p、q值?

  1. 利用自身相关函数(ACF)和偏自身相关函数(PACF)画出相应的图。利用图中的趋势 变换情况判断该趋势属于截尾还是拖尾情况,再通过图像判断其是在第几阶拖尾/截尾 的。在自相关函数(ACF)第p阶拖尾,偏自相关函数(PACF)第q阶拖尾。

AR(p)在自相关函数(ACF)第p阶拖尾,偏自相关函数(PACF)第q阶截尾。

MA(q)在自偏自相关函数(PACF)第q阶拖尾,自相关函数(ACF)第阶截尾。

ARMA(p,q)在自相关函数(ACF)第p阶拖尾,偏自相关函数(PACF)第q阶拖尾。

注:模型计算的时候有时还需要考虑一下p+1、p-1、q+1、q-1这样的情况。ACF和PACF 判断只是一种近似判断,所以还需要考虑一下几种情况差不多的概率。

2.第二种方法相对简单,因为通常状态下p和q的阶数不会太大(况且要是p和q的阶数 太大的话ARMA模型会很慢),所以可以暴力枚举所有的p和q的组合,找出aic (Akaike information criterion)最小的情况,即为最优的p和q。

e如何选择d值?

对不平稳数据进行逐阶的差分,再判断数据的平稳性,平稳性判断推荐使用ADF检验。

如刚开始的数据不平稳,对它进行一阶差分,差分好之后进行ADF检验。若平稳则停止差分,然后采用ARMA模型;若不平稳则进行二阶差分,再进行ADF检验,以此类推。

f实例参考:

AR模型(ar_model.AR)

# -*- coding: utf-8 -*-
'''自回归模型。预测澳大利亚墨尔本市最低日常温度
'''import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.ar_model import AR
from sklearn.metrics import mean_squared_errorpath = r'csv/daily-minimum-temperatures-in-me.csv'  # csv路径def getData(path):  # 获得训练数据和测试数据series = pd.read_csv(path, header=0)X = series.valuestrain, test = X[:len(X) - 7], X[len(X) - 7:]  # 最后一周为测试数据,其余的为训练数据return train, testdef getModel(X):  # 模型训练try:model = AR(endog=X)return model.fit()except ValueError:print('参数错误')return Nonedef prediction(model_fit, train, test):  # 预测return model_fit.predict(start=len(train), end=len(train) + len(test) - 1, dynamic=False)  # 要输入预测开始和结束的位置if __name__ == '__main__':train, test = getData(path)model_fit = getModel(train[:, 1])print('常数项+模型参数:{}'.format(model_fit.params))predict = prediction(model_fit, train, test)for i in range(len(predict)):print('预测值:{},期望值:{}'.format(predict[i], test[:, 1][i]))MSE = mean_squared_error(test[:, 1], predict)  # 输出均方误差plt.plot(test[:, 1], color='blue', label='expect')plt.plot(predict, color='red', label='predict')plt.legend()plt.show()

运行结果如下

数据在信息已删除

ARMA模型

'''自回归滑动平均模型
'''
from statsmodels.tsa.arima_model import ARMA
from itertools import productdef myARMA(data):p = range(0, 9)q = range(0, 9)parameters = list(product(p, q))  # 生成(p,q)从(0,0)到(9,9)的枚举best_aic = float('inf')result = Nonefor param in parameters:try:model = ARMA(endog=data, order=(param[0], param[1])).fit()except ValueError:print("参数错误:", param)continueaic = model.aicif aic < best_aic:  # 选取最优的aicbest_aic = model.aicresult = (model, param)return result

h参考文献:

数据分析——时间序列分析模型(AR,MA,ARMA,ARIMA)

数据分析——时间序列分析模型(AR,MA,ARMA,ARIMA)_人的抱怨源自,自我无能的愤怒-CSDN博客_时间序列分析模型

知乎 移动平均模型 8.4 移动平均模型 - 知乎

知乎 自回归模型 自回归模型 - 知乎

自回归模型(AR Model)自回归模型(AR Model)_shigangzwy的博客-CSDN博客_自回归模型

为什么常常用AR模型代替ARMA模型

为什么常常用AR模型代替ARMA模型_deco1515的专栏-CSDN博客

时间序列预测基础教程系列(7)_如何用自回归模型(AR)预测时间序列预测(Python)

时间序列预测基础教程系列(7)_如何用自回归模型(AR)预测时间序列预测(Python)_日拱一卒-CSDN博客_python自回归模型

statsmodels AR官方文档

https://www.statsmodels.org/stable/generated/statsmodels.tsa.ar_model.AR.html?highlight=ar#statsmodels.tsa.ar_model.AR

statsmodels ARMA官方文档

https://www.statsmodels.org/stable/generated/statsmodels.tsa.arima_model.ARMA.html?highlight=arma#statsmodels.tsa.arima_model.ARMA

知乎 AR、MA及ARMA模型AR、MA及ARMA模型 - 知乎

如何确定ARIMA模型中参数p、d、q 如何确定ARIMA模型中参数p、d、q | 码农网

基于sarima模型的分析及预测 基于sarima模型的分析及预测 - 豆丁网

python 时间序列预测 —— SARIMA python 时间序列预测 —— SARIMA_颹蕭蕭-CSDN博客_python时间序列预测

趋势预测方法(三)ARMA ARIMA SARIMA模型预测_时序递推预测相关推荐

  1. 趋势预测方法(五)Holt-Winters模型_时序递推预测

    Holt-Winters模型 a基本原理: 该方法有点类似于MA(移动平均)的思路,是对MA的优化.主要因为MA的参数数量过多时,计算时间慢,且计算复杂.Holt-Winters利用三次指数平滑法,将 ...

  2. 机器学习模型 非线性模型_机器学习:通过预测菲亚特500的价格来观察线性模型的工作原理...

    机器学习模型 非线性模型 Introduction 介绍 In this article, I'd like to speak about linear models by introducing y ...

  3. bagging和时间序列预测_时间序列多步预测的五种策略

    通常,时间序列预测描述了预测下一个时间步长的观测值.这被称为"一步预测",因为仅要预测一个时间步.在一些时间序列问题中,必须预测多个时间步长.与单步预测相比,这些称为多步时间序列预 ...

  4. CC00034.bigdatajava——|Java方法封装.V16|——|Java.v16|费氏数列.v02|递推实现|

    一.费氏数列的递推实现 ### --- 案例题目~~~ --> 编程实现费式数列中第n项的数值并返回. ~~~ --> 费式数列:1 1 2 3 5 8 13 21 -- 二.递推实现原理 ...

  5. 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?(PHP 递推,动态规划)

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 递推规则详解 在一个2XN的长方形方格中铺满1X ...

  6. 趋势预测方法(四)高斯过程回归_时序概率性预测

    高斯过程回归(GPR) a基本原理: 利用高斯过程回归将可能的数据趋势曲线都保存下来(每条趋势曲线都有自己的置信度,在区间内呈高斯分布),最后在一张图中显示出来,再判断总体的趋势情况. b算法原理: ...

  7. python模型预测_《Python机器学习——预测分析核心算法》——1.5 构建预测模型的流程...

    本节书摘来异步社区<Python机器学习--预测分析核心算法>一书中的第1章,第1.5节,作者:[美]Michael Bowles(鲍尔斯),更多章节内容可以访问云栖社区"异步社 ...

  8. 趋势预测方法(一) 多项式拟合(最小二乘法)_函数拟合

    多项式拟合(最小二乘法) a基本原理: b拟合函数原理: c方法优缺点: 优点: 思想简单,实现容易.建模迅速,对于小数据量.简单的关系很有效. 解决回归问题,拥有很好的解释性. 是很多非线性模型的基 ...

  9. 趋势预测方法(二)其他函数拟合_函数拟合

    其它函数拟合 a基本原理: 给出公式的大致情况,自动去拟合出最优的参数.这里的其它指的是除多项式以外的拟合情况,包括三角函数.对数,以及一些复杂的复合函数. b拟合原理: 总体思路类似于最小二乘法的拟 ...

最新文章

  1. Eclipse for Android 开发环境搭建及各种坑
  2. PC网页实现九宫格切图功能
  3. 【2017年第1期】大数据能力开放平台创新和发展
  4. Qt——P25 QListWidget控件
  5. adb.exe可能被其他程序关闭_如何开启或关闭MacBook
  6. Oracle学习方法
  7. win11使用win10右键菜单的四种办法
  8. 如何开通电子邮箱的SMTP功能
  9. 玩转外贸LinkedIn必备的三大特质,以及突破六度人脉技巧
  10. 数据分析 知识体系 Python篇
  11. 电商网站产品需求文档目录
  12. 吉首大学2019年程序设计竞赛(重现赛) 干物妹小埋(线段树求最长上升子序列)
  13. 58显示服务器异常怎么回事,手机登录云服务器异常
  14. PAT-1036 跟奥巴马一起编程
  15. ant--Java工程打包工具
  16. 成功率100%的通达信指标公式,你敢相信吗?
  17. VTK 3D图像显示
  18. Linux运维工程师有“钱途”吗?
  19. 计算机操作系统分页试题,计算机操作系统典型例题解析之二
  20. 儿童剧本杀行业是好生意吗?剧本杀门店管理系统

热门文章

  1. 百度媒体云播放器用法
  2. 在 svg 中绘制箭头
  3. 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具
  4. CIVIC DILL MIX
  5. js禁用浏览器 pdf 打印、下载功能(pdf.js 禁用打印下载、功能)
  6. Faster-r-cnn cpu_tensorflow版 windows系统实现
  7. Pycharm报错:load() got an unexpected keyword argument ‘loader‘
  8. Qt5.6 编译后在 xp 系统下运行
  9. modbus 03 10消息实现
  10. java B2B2C 源码 多级分销Springboot多租户电子商城系统-springcloud项目redis分布式锁...