python之时间序列算法(ARMA)
关于时间序列的算法,我想把它们分成两类:
基于统计学的⽅法。
基于⼈⼯智能的⽅法。
豆渣的营养价值传统的统计学的⽅法:从最初的随机游⾛模型(RW)、历史均值(HA)、马尔科夫模型、时间序列模型和卡尔曼滤波模型。RW和HA依赖与理论假设,并未考虑交通流的波动性,以致预测结果与现实存在很⼤差异;⽽马尔科夫模型、时间序列模型和卡尔曼滤波模型则根据现有道路的历史交通流数据假定交通流符合某种概率分布,从⽽进⾏训练,估计出模型参数。今天我们介绍最经典的统计学算法——⾃回归滑动平均模型(ARMA)。
1.介绍ARMA
⼤家都知道,统计学处理数据,对数据的要求极为严格,需要在做分析之前,对数据进⾏假设检验,参数估计等等,ARMA模型也不例外。需要对时间序列的随机性和平稳性进⾏检验,根据检验的结果,可将序列分为不同的类型:
纯随机序列(⽩噪声序列):序列的各项之间没有任何的相关关系,序列在进⾏完全⽆序的波动,对于这样的序列,ARMA选择放弃分析。
平稳⾮⽩噪声序列:平稳的意思指该序列的均值和⽅差是常数,对于该类型的数据,我们通常建⽴⼀个线性拟合该序列的发展,⽐如使⽤ARMA。
⾮平稳序列:它的均值和⽅差不稳定,处理⽅法⼀般是将其转化为平稳性数据,然后再使⽤ARMA算法。
2.平稳性检验
2.1 平稳时间序列的定义
这⾥我们主要记住时间序列的任何⼀个时刻的序列值都是⼀个随机变量,然后求他们的均值和⽅差。
2.2 平稳性检验的⽅法
关于平稳性检验,画图是较为简单的⽅法,⼀般情况下,先画个图再再觉得要不要进⾏下⼀步的检验。
3.ARMA 模型介绍
ARMA模型可以分为两个部分,AR模型和MA模型部分。
AR模型:在t时刻的随机变量的取值是关于过去p期,,
,… 多元线性回归。认为主要受到过去p时间的影响。误差项是当期的随机扰动。
韩国歌手
MA模型:在t时刻的随机变量的取值是关于过去q期随机扰动项,,,… 多元线性回归。认为主要受到过去q时间随机扰动的影响。是的均值。(有限阶的MA模型⼀定是平稳的)
在这⾥解释⼀下随机扰动:是指的波动不确定的部分,我们就⽤⽆穷阶的AR模型来表⽰。
ARMA模型:在t时刻的随机变量的取值是关于过去p期,,,…和过去q期随机扰动项,,,… 的多元线性回归。
某个时间序列经过预处理,被判定为平稳⾮⽩噪声序列,就可以利⽤ARMA模型进⾏建模。
面朝大海春暖花开4.⾮平稳时间序列分析
其实我们获取的数据多情况下是⾮平稳的数据,因⽽学会对⾮平稳数据的分析才更加重要。我们把⾮外貌特征
平稳的时间序列的分析主要分为两类:
X (t )x (t )x (t −1)x (t −2)x (t −3)x (t )ε(t )X (t )x (t )ε(t −1)ε(t −2)ε(t −3)x (t )μX t X (t )X (t )x (t )x (t −1)x (t −2)x (t −3)ε(t −1)ε(t −2)ε(t −3)
诃子肉的功效与作用
确定性因素分析:把所有的序列的变化都归结于4个因素(长期趋势、季节变动、循环变动和随机波动)的综合影响。其中前两个因素规律较为明显,容易分析,⽽后两个因素的随机性较⼤,难以确定和分析。拟合的模型经常不够理想。
随机时序分析:为了弥补确定性因素分析的不⾜,我们使⽤随机序列模型来进⾏分析。可以建⽴的模型有ARIMA、残差⾃回归模型、季节模型、异⽅差模型等。这⾥我们主要介绍ARIMA,记得多了个I。
对⾮平稳的时间序列进⾏分析主要是将⾮平稳的序列转化为平稳的序列,然后再进⾏时间序列的建模。差分运算就是最常⽤的⽅法,通过将相距⼀定距离的两个序列的值进⾏减法运算后,许多⾮平稳序列就会显⽰出平稳数据的特征。这时称这个序列为差分平稳序列。然后就可⽤ARMA模型进⾏拟合。⽽ARIMA就是差分运算和ARMA模型的组合。会了ARMA就会了ARIMA!
5.ARMA案例
先介绍⼀下python中数理统计的库==StatModels ==这⾥⾯主要包含了统计学的⼀些计算⽅法。
开始啦!我们这⾥以⾮平稳数据为例,先看看数据,只有⽇期和销量标签。
1.获取数据,画图,发现有递增的趋势,所以不是平稳时间序列数据。
import pandas as pd
import matplotlib.pyplot as pltk房
aphics.tsaplots import plot_acf
discfile ='C:\\Urs\\Administrator\\Desktop\\python-code\\《Python数据分析与挖掘实战(第2版)》源数据和代码\\《Python数据分析与挖掘实战(第2版)》源数据和代码-各章节\\chapter5\\demo\\data\\arima_data.xls'
#forecastnum = 5
#读取⽂件
data = pd.read_excel(discfile, index_col = u'⽇期')
#补全中⽂
data.plot()
plt.show()
2.⾃相关图和平稳性检验发现真的是⾮平稳序列,⾃相关图有⼀半⼤于0,说明有很强的长期相关性。
# 平稳性检测
# ⾃相关图
aphics.tsaplots import plot_acf
plot_acf(data).show()
# 平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))嗜睡的原因
# 返回值依次为adf、pvalue、udlag、nobs、critical values、icbest、regresults、resstore
3.⼀阶差分、平稳性和⽩噪声检验
# 差分后的结果
D_data = data.diff().dropna()
草莓蛋糕lumns =[u'销量差分']
D_data.plot()# 时序图
plt.show()
plot_acf(D_data).show()# ⾃相关图
aphics.tsaplots import plot_pacf
plot_pacf(D_data).show()# 偏⾃相关图
print(u'差分序列的ADF检验结果为:', ADF(D_data[u'销量差分']))# 平稳性检测
# ⽩噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的⽩噪声检验结果为:', acorr_ljungbox(D_data, lags=1))# 返回统计量和p值