python下的时间序列模式处理及实现

时序模式

基本概念及流程

  • 时间序列数据的分析流程

    1.对时间序列数据进行平稳性检验
    检查方法:单位根检验,时序图检验,自相关图检验
    2.判断是否为平稳序列如果为平稳序列则进行白噪声检验(纯随机性检验),如果为非平稳序列就进行差分运算将其转换为平稳序列在进行白噪声检验(纯随机性检验)。
    3.不是白噪声序列则计算ACF和PACF,如果为白噪声序列则终止分析。
    4.模型识别(最小信息准则,拖尾和截尾)

    5.参数估计,模型检测

  • 什么是时间序列数据?

    时间序列数据(time series data)是在不同时间上收集到的数据,用于所描述现象随时间变化的情况。这类数据反映了某一事物、现象等随时间的变化状态或程度。

  • 时间序列的预处理

    拿到一个观察值序列后,首先要对它的纯随机性和平稳性进行检测,这两个重要的检验成为序列的预处理。根据检验的结果可以把序列分为不同的类型,对不同类型的序列会采取不同的分析方法。

    纯随机序列又叫做白噪声序列,序列的各项之间没有任何的相关性,序列在进行完全无序的随机波动,这种序列没有分析的价值,白噪声序列是没有信息可提取的平稳序列。

    对于平稳非白噪声序列,它的均值和方差是常数,对于这种序列通常建立一个线性模型来拟合该序列的发展,并借此提取该序列的有用信息。ARMA模型是最常用的平稳序列拟合模型。

    对于非平稳序列,由于它的均值和方差不稳定,处理方法一般是将其转变为平稳序列,这样就可以应用有关平稳时间序列的分析方法,如建立ARMA模型进行分析。如果一个时间序列模型经差分运算后具有平稳性,则称该模型为差分平稳序列,AMIRA模型进行分析。、

  • 怎么查看平稳性检测结果?

    单位跟检验件:不存在单位根即为平稳序列;在python中就是statsmodels中的ADF检验,返回值的结果依次是为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore;第一个是adt检验的结果,简称为T值,表示t统计量。第二个简称为p值,表示t统计量对应的概率值。主要看p值p值大于0.05判断为非平稳序列,小于0.05判断为平稳序列。

    白噪声检验:

    时序图检测:平稳序列的时序图显示该序列值始终在一个常数附近随机波动,而且波动的范围有界;如果表现出明显的趋势线或周期性,通常不为平稳序列。

  • 什么是拖尾和截尾?

    截尾是在置信区间内,ACF或PACF在某阶段后恒等于零(或在0附近随机波动)

    拖尾是在置信区间内,ACF或PACF始终有非零取值,不呈现在某节后就恒等于零(或在0附近随机波动)

拖尾和截尾的判断

出现以下情况,通常视为(偏)自相关系数d阶截尾:
1)在最初的d阶明显大于2倍标准差范围
2)之后几乎95%的(偏)自相关系数都落在2倍标准差范围以内
3)且由非零自相关系数衰减为在零附近小值波动的过程非常突然

出现以下情况,通常视为(偏)自相关系数拖尾:
1)如果有超过5%的样本(偏)自相关系数都落入2倍标准差范围之外
2)或者是由显著非0的(偏)自相关系数衰减为小值波动的过程比较缓慢或非常连续

模型选择

ARMA模型识别原则

统计量平稳AR§模型平稳MA(q)模型平稳ARMA(p,q)模型
均值常数常数常数
方差常数常数常数
自相关系数ACF拖尾q阶截尾p阶拖尾
偏自相关系数PACFp阶截尾拖尾q阶拖尾

参数估计(定阶)

通过拖尾和截尾对模型进行定阶的方法,往往具有很强的主观性。回想我们之前在参数预估的时候往往是怎么做的,不就是损失和正则项的加权么?我们这里能不能结合最终的预测误差来确定p,q的阶数呢?在相同的预测误差情况下,根据奥斯卡姆剃刀准则,模型越小是越好的。那么,平衡预测误差和参数个数,我们可以根据信息准则函数法,来确定模型的阶数。预测误差通常用平方误差即残差平方和来表示。

AIC准则
AIC准则全称为全称是最小化信息量准则(Akaike Information Criterion),计算公式如下:
AIC = =2 *(模型参数的个数)-2ln(模型的极大似然函数)

BIC准则
AIC准则存在一定的不足之处。当样本容量很大时,在AIC准则中拟合误差提供的信息就要受到样本容量的放大,而参数个数的惩罚因子却和样本容量没关系(一直是2),因此当样本容量很大时,使用AIC准则选择的模型不收敛与真实模型,它通常比真实模型所含的未知参数个数要多。BIC(Bayesian InformationCriterion)贝叶斯信息准则弥补了AIC的不足,计算公式如下:

BIC = ln(n) * (模型中参数的个数) - 2ln(模型的极大似然函数值),n是样本容量

模型检验

建模前,检验数据是否满足白噪声检验,非白噪声序列才能建模

建模后,检验残差是否满足白噪声检验,通过检验,模型才能成立 (残差应该是白噪声序列)

读取残差resid = model.resid

使用 ljungbox 检验残差是否是白噪声(残差无自相关性)
acorr_ljungbox( resid, lags=1 )

模型预测

del.resid

使用 ljungbox 检验残差是否是白噪声(残差无自相关性)
acorr_ljungbox( resid, lags=1 )

模型预测

利用模型镶嵌预测的时间越长,预测的误差将会越大,这是时间预测模型的典型特点。

具体代码实现

import pandas as pd
import numpy as np
data=pd.read_excel('a.xls',index_col = u'日期')
data['销量']=data['销量'].astype(float)
from matplotlib import style
style.use('ggplot')
#时序图
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,lags=35).show()
#平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
print('原始序列的ADF检验结果为:', ADF(data['销量']))
#差分后的结果
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值
pmax = int(len(D_data)/10) #一般阶数不超过length/10
qmax = int(len(D_data)/10) #一般阶数不超过length/10
from statsmodels.tsa.arima_model import ARIMA
bic_matrix = [] #bic矩阵
for p in range(pmax+1):
    tmp = []
    for q in range(qmax+1):
        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().astype(float).idxmin() 
#先用stack展平,然后用idxmin找出最小值位置。
print(u'BIC最小的p值和q值为:%s、%s' %(p,q)) 
model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型
model.summary2() #给出一份模型报告
model.forecast(5) #作为期5天的预测,返回预测结果、标准误差、置信区间。
resid = model.resid #残差检验
acorr_ljungbox(resid, lags=1 )

BIC矩阵显示不了问题的解决方法

BIC矩阵显示值全部为空,大部分原因是因为statsmodels的版本过高导致的,可以降低statsmodels的版本来解决该问题,推荐使用0.12.1版本。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一. 课程介绍本课程结合Python进行统计与数据分析的原理讲解与实战,涵盖了大部分统计&数据分析模型,特别是当前比较主流的算法:参数估计、假设检验、线性回归、广义线性回归、Lasso、岭回归、广义可加模型、回归样条等;机器学习经常用到的主成分分析、因子分析、典型相关分析、聚类分析等;各种非参数统计模型,包括非参数统计推断、尺度推断、位置推断、非参数核密度估计、非参数回归等。本课程主要针对有一定Python编程基础、即将毕业参加工作的的大三大四学生,或者已经参加工作需要提升自己数据分析能力以及转行从事IT行业尤其是数据&大数据分析工作的初入职场者,或者正在攻读硕博士学位需要学习和掌握量化研究方法的研究生。本课程对于即将从事机器学习、深度学习&人工智能相关工作的程序员也有很大帮助,有利于打好坚实的理论基础。二. 课程目录第0章 课程导学第1章 数据描述性分析1.1 描述统计量1.2 数据的分布1.3 概率分布函数的图形1.4 直方图、经验分布函数与QQ图1.5 多元数据的数据特征与相关性分析1.6 多元数据的基本图形表示第2章 参数估计2.1 点估计2.2 区间估计第3章 假设检验3.1 基本原理3.2 参数检验第4章 回归分析4.1 回归分析的概念与一元线性回归4.2 多元线性回归及统计量解析4.3 逐步回归与模型选择4.4 回归诊断4.5 广义线性回归4.6 非线性回归第5章 方差分析5.1 单因素方差分析5.2 双因素方差分析第6章 判别分析与聚类分析6.1 判别分析6.2 聚类分析第7章 主成分分析、因子分析与典型相关分析7.1 主成分分析7.2 因子分析7.3 典型相关分析第8章 非参数统计8.1 经验分布和分布探索8.2 单样本非参数统计推断8.3 两独立样本的位置与尺度判断8.4 多组数据位置推断8.5 分类数据的关联分析8.6 秩相关与分位数回归8.7 非参数密度估计8.8 一元非参数回归三. 讲师简介主讲人李进华博士,本、硕、博皆就读于武汉大学信息管理学院,2005年获博士学位进入211高校任教,2012年受聘为教授。从事信息管理与数据分析方面的教学、科研与系统开发工作20余年,具备深厚理论修养和丰富实战经验。是中国最早从事Java开发的程序员和Oracle数据库的DBA之一。曾带领团队开发《葛洲坝集团三峡工程指挥中心三期工程施工管理系统》、《湖北省财政厅国有企事业单位资产管理系统》等大型MIS。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃栀.ら

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值