时间序列相关算法与分析步骤
1.纯随机序列(白噪声序列),这时候可以停止分析,因为就像预测下一次硬币哪一面朝上一样毫无规律。
2.平稳非白噪声序列,它们的均值和方差是常数,对于这类序列,有成熟的模型来拟合这个序列在未来的发展状况,如AR,MA,ARMA等(具体模型算法及实现在后面)
3.非平稳序列,一般做法是把他们转化为平稳的序列,在按照平稳序列的算法进行拟合。如果经过差分后平稳,则应使用ARIMA模型进行拟合。
注:本文模型采用的数据为某餐厅一个多月内的销量数据,包含两个特征:时间和销量
Q1:序列的平稳性用什么来衡量呢?
方法1:
根据时序图和自相关图的特征做出主观的判断,如下图:
时序图:
自相关图:
从上图可以基本看出,自相关系数的绝对值长期都保持了较大的值,所以可以判断上述时间序列存在自相关性。
平稳的序列自相关图和偏自相关图不是拖尾就是截尾。
截尾就是在某阶之后,系数都为 0 。
拖尾就是有一个衰减的趋势,但是不都为 0 。
从自相关图来看,呈现三角对称形式,不存在截尾或拖尾,属于单调序列的典型表现形式,原始数据属于不平稳序列。
注:
如果自相关是拖尾,偏相关截尾,则用 AR 算法
如果自相关截尾,偏相关拖尾,则用 MA 算法
如果自相关和偏相关都是拖尾,则用 ARMA 算法, ARIMA 是 ARMA 算法的扩展版,用法类似 。
相关系数的计算方法:
VAR表示方差
方法2:
根据单位根检验
如果存在单位根,则此序列为随机非平稳序列
Q2:平稳序列应该怎么分析呢?
目前最常用的拟合平稳序列的模型为ARMA(Autoregressive moving average)模型,全称是自回归移动平均模型,他又可以分为AR模型,MA模型和ARMA模型三大类。
1.自回归AR(p)模型
自回归模型描述的是当前值与历史值之间的关系。
2.移动平均MA(q)模型
移动平均模型描述的是自回归部分的误差累计。
3.ARMA(p,q)模型
ARMA(p,q)模型中包含了p个自回归项和q个移动平均项,ARMA(p,q)模型可以表示为:
当q=0时,是AR(p)模型
当p=0时,是MA(q)模型
一般分析步骤:
Q3:非平稳序列怎么分析呢?
从上面的模型中可以看出,如果是非平稳序列,我们需要先把它转为平稳序列之后再进行分析。
一般我们使用ARIMA(Autoregressive Integrated Moving Average model)进行分析
ARIMA(p,d,q)中,AR是”自回归”,p为自回归项数;MA为”滑动平均”,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。
“差分”一词虽未出现在ARIMA的英文名称中,却是关键步骤。
Q4:举个栗子看下呗!
读取数据
#-*- coding: utf-8 -*-
#arima时序模型import pandas as pd#参数初始化
discfile = '../data/arima_data.xls'
forecastnum = 5#读取数据,指定日期列为指标,Pandas自动将“日期”列识别为Datetime格式
data = pd.read_excel(discfile, index_col = u'日期')
自相关检测
#时序图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
data.plot()
plt.show()#自相关图
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data).show()#平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))
#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、
自相关图
可以看出自相关系数的绝对值长期都保持很大,多以基本判断存在自相关性。
ADF检测结果p值显著大于0.05(p=0.9983),最终判断为非平稳序列
一阶差分后继续检测
#差分后的结果
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot() #时序图
plt.show()
plot_acf(D_data).show() #自相关图
from statsmodels.graphics.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值
上图是差分后的销量结果
自相关图显示出1阶截尾的性质
偏自相关图显示出1阶拖尾的性质
从ADF的结果(p=0.0226)和自相关图以及偏自相关图中可以看出一阶差分后的序列是平稳的非白噪声序列。
给ARIMA模型定阶
从一阶差分后的序列是平稳的非白噪声序列可以看出ARIMA模型中的d=1
定阶方法:
1.人为判断:自相关图显示出从第1阶之后的截尾性质,偏自相关图从第1阶之后显示出拖尾的性质,所以人为判断使用MA(1)模型,即ARMA(0,1,1)
2.相对最优模型识别,当p和q均小于等于3的所有组合的BIC信息量,取其中BIC信息量达到最小的模型阶数。
#定阶
pmax = int(len(D_data)/10) #一般阶数不超过length/10
qmax = int(len(D_data)/10) #一般阶数不超过length/10
bic_matrix = [] #bic矩阵
for p in range(pmax+1):tmp = []for q in range(qmax+1):try: #存在部分报错,所以用try来跳过报错。tmp.append(ARIMA(data, (p,1,q)).fit().bic)except:tmp.append(None)bic_matrix.append(tmp)bic_matrix = pd.DataFrame(bic_matrix) #从中可以找出最小值p,q = bic_matrix.stack().idxmin() #先用stack展平,然后用idxmin找出最小值位置。
print(u'BIC最小的p值和q值为:%
- 17
BIC矩阵
取其中BIC信息量达到最小的模型阶数。
确定p=0,q=1
拟合模型
model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型
model.summary2() #给出一份模型报告
model.forecast(5) #作为期5天的预测,返回预测结果、标准误差、置信区间。
最终得到模型的预测结果
数据和完整代码可以通过在留言中留下邮箱获取哦~
时间序列相关算法与分析步骤相关推荐
- ML之GB:GB算法相关论文、相关思路、关键步骤、代码实现、配图集合、案例应用之详细攻略
ML之GB:GB算法相关论文.相关思路.关键步骤.代码实现.配图集合.案例应用之详细攻略 目录 GB算法相关文献.论文 GB算法关键步骤 GB算法代码实现 GB案例应用 1.GB用于回归 2.GB用于 ...
- 脑电图源成像:分析步骤的实践回顾
脑电图(EEG)是测量人脑神经元活动的最古老的技术之一.随着数字技术的进步,脑电图分析已经从单纯的随时间变化的幅度和频率变化的视觉检测,发展到对记录信号的时空特征的全面探索.如今,脑电图(EEG)被认 ...
- 论文学习——一种基于DTW的符号化时间序列聚类算法
文章目录 1 摘要 2 引言 2.1 类似的工作 SAX 2.2 本文成果 3 相关知识 3.1 极值点EP 成为关键点KP 的条件 3.2 DTW距离 3.3 基于Normal矩阵的谱平分法 4 本 ...
- 时间序列常用算法总结
时间序列预测算法总结 文章目录 时间序列预测算法总结 前言 一.基于统计的时序数据建模方法 1.1传统时序数据建模方法 1.1.1周期因子法 1.1.2移动平均法 1.1.3ARIMA模型 1.1.3 ...
- 【时间序列】ICDM2021时间序列相关研究论文汇总
IEEE ICDM(International Conference on Data Mining)是世界上数据挖掘领域的顶级会议之一,该会议涵盖了数据挖掘的所有方面,包括算法.软件.系统和应用,旨在 ...
- Gradient Boost 算法流程分析
Gradient Boost 算法流程分析 2012-10-31 19:57 2635人阅读 评论(0) 收藏 举报 分类: 算法学习(15) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- 时间序列分类算法简介及其在能耗数据分类上的应用
本文首先简要介绍最近几年来时间序列分类算法的最新研究成果,包括dynamic time warping的各种改进技术和相关研究,以及最新的聚合式算法(ensemble algorithm).其次以根据 ...
- Adaboost算法原理分析和实例+代码(简明易懂)
Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333 ...
- 聚类分析与相关算法(Kmeans等)详解
聚类分析与相关算法详解 1 距离度量 1.1欧几里得距离定义 1.2其他距离度量的补充 1.3余弦距离 1.4简单匹配系数 1.5jaccard系数 1.6海明距离 2 聚类问题 2.1非监督学习中的 ...
最新文章
- 砂.随笔.三十一.息斯敏
- AI:人工智能的多模态融合模型的简介、发展以及未来趋势
- memcpy实例(一)
- 有点小激动-Index Condition Pushdown Optimization
- elk中kibana中如何显示写入elasticsearch的数据
- CSS使用display:incline与float:left的区别:脱离文档流 参差不齐
- Android之用 ExpandableListView使用解析(三级列表的实现)
- java与android https,java – Https连接Android
- python setup.py install 出错_python setup.py install 失败
- 目标检测二十年间的那些事儿——从传统方法到深度学习
- pl/mysql安装_MySQL安装
- WIN2K8R2安装MySQL5.7及Tomcat8.5
- 记录一次由于流的read(byte[3 * 1024], 0, len); 读取不足定义的长度,引发的线上bug
- 面向电缆行业的高级计划与排程(商简SPS)解决方案
- 集美大学 - 2840 - 实验7-3 - 编程题
- 计算机检测不到蓝牙,图解Win10 1809系统中检测不到蓝牙设备的方法
- npm install安装失败,报错记录之The operation was rejected by your operating system. node-sass无法安装,且禁用淘宝镜像
- 3653: 谈笑风生
- TortoiseGit小乌龟安装配置及使用
- 《游戏学习》街头霸王HTML游戏源码