时间序列分析 - ARMA, ARIMA, SARIMA

2024-02-16 01:38

本文主要是介绍时间序列分析 - ARMA, ARIMA, SARIMA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【目标数据】

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

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

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

 

自协方差与自相关系数

时间序列在t时刻记作Xt,在s时刻记作Xs,那么这两个时刻对应的时间序列的自协方差的计算公式为:

\gamma(t,s)=E[(Xt-\bar{Xt})(Xs-\bar{Xs})]

假设时间间隔t-s=k, 并且假设时间序列的均值为常数u, 那么上述公式可以写成

\gamma(k)=\gamma(t,s)=E[(Xt-\mu )(Xs-\mu)]

自相关系数的表达式为:

\rho (k)=\rho (t,s)=\frac{\gamma (t,s)}{\sqrt{​{\sigma_{t}^{2} }}\sqrt{​{\sigma_{s}^{2} }}}

如果方差恒定,上述公式可以写成:

\rho (k)=\frac{\gamma (k)}{\sigma ^{2}}

 

【平稳性】

满足以下三个条件即为宽平稳:

1)均值为常数

2)自协方差仅与时间差相关,与具体时刻无关

3)自相关系数仅与时间差相关,与具体时刻无关。或者说方差为常数。

非平稳的时间序列可以通过差分使其变为平稳的时间序列。

 

【平稳性检验】

ADF检验(单位根检验):

单位根检验是指检验序列中是否存在单位根,如果存在单位根就说明是非平稳时间序列。

python的statsmodels.tsa.stattools.adfuller提供了单位根检验方法。

 

【滞后算子表示法】

时间序列中,通常用L或者B表示之前的若干值,假设时间序列为:

X=\{X_{1},X_{2},\dots \}\,

那么对于t>1:

\,LX_{t}=X_{​{t-1}} 或者

{\displaystyle \,BX_{t}=X_{t-1}}  或者

\,X_{t}=LX_{​{t+1}}\;t\geq 1\, 或者

\,L^{​{-1}}X_{​{t}}=X_{​{t+1}}\, 以及

\,L^{k}X_{​{t}}=X_{​{t-k}}.\,

 

【ARMA】

Autoregressive–moving-average model 自回归移动平均

包含对过去值的p阶回归以及过去error误差的q阶移动平均。

如果用AR(p)来描述,公式可以写成:

X_{t}=c+\sum _{i=1}^{p}\varphi _{i}X_{t-i}+\varepsilon _{t}.\,


其中\varepsilon _{t}是高斯白噪声。

用MA(q)来描述,公式为:

X_{t}=\mu +\varepsilon _{t}+\sum _{i=1}^{q}\theta _{i}\varepsilon _{t-i}\,

μ 是 X_{t}的均值 (often assumed to equal 0),  \varepsilon _{t}, \varepsilon _{t-1},... 是白噪声.

将AR与MA综合起来,可以表示为:

X_{t}=c+\varepsilon _{t}+\sum _{i=1}^{p}\varphi _{i}X_{t-i}+\sum _{i=1}^{q}\theta _{i}\varepsilon _{t-i}.\,

忽略常数项c,将X移至等号左侧,用滞后算子表示法:

\left(1-\sum _{i=1}^{p}\varphi _{i}L^{i}\right)X_{t}=\left(1+\sum _{i=1}^{q}\theta _{i}L^{i}\right)\varepsilon _{t}\,,

简化表示:

\varphi (L)X_{t}=\theta (L)\varepsilon _{t}\,或者 {\frac {\varphi (L)}{\theta (L)}}X_{t}=\varepsilon _{t}\,.

其中:

\varphi (L)=1-\sum _{i=1}^{p}\varphi _{i}L^{i}.\,     \theta (L)=1+\sum _{i=1}^{q}\theta _{i}L^{i}.\,

 

【ARIMA】

Autoregressive integrated moving average

对于非平稳并且非周期的时间序列,可以通过差分操作使之变为平稳时间序列,差分是指将当前时刻的值减去前一时刻的值,得到的时间序列还可以继续差分下去,比如总共进行了d次差分操作,那么叫做d阶差分,因此ARIMA在ARMA的基础上进行了d阶差分操作以后的公式为:

{\displaystyle \left(1-\sum _{i=1}^{p}\phi _{i}L^{i}\right)(1-L)^{d}X_{t}=\left(1+\sum _{i=1}^{q}\theta _{i}L^{i}\right)\varepsilon _{t}\,}

 

【SARIMA】

周期性时间序列,可以作为ARIMA的扩展,因此,首先需要去除周期性,去除的方式是在周期间隔上做一次ARIMA,此时可以得到一个非平稳非周期性的时间序列,然后在此基础之上再一次使用ARIMA进行分析。可以表示为:

ARIMA(p, d, q) × (P, D, Q)S ,其中各参数含义为:

  • P: 周期性自回归阶数.
  • D: 周期性差分阶数.
  • Q: 周期性移动平均阶数.
  • S: 周期时间间隔.

p,d,q的含义与上面的ARIMA里面含义相同。

举个例子:对于周期为12的非平稳时间序列,那么ARIMA(3,1,0) x (2,1,0)12的含义为:

D=1意味着当前时刻t的值与过去一个周期时间点t-12的1阶差分,

P=2意味着当前时刻t的值是过去两个周期时间点t-12以及t-24的回归。

处理以后得到的时间序列再通过ARIMA(3,1,0)进行分析。

 

参考:

https://en.wikipedia.org/wiki/Autoregressive%E2%80%93moving-average_model

https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average

https://en.wikipedia.org/wiki/Lag_operator

https://machinelearningmastery.com/sarima-for-time-series-forecasting-in-python/

 

这篇关于时间序列分析 - ARMA, ARIMA, SARIMA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713135

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl