Python数据挖掘013-时序模式

时序模式是数据挖掘中的第四种应用类别。

时序模式是基于时间序列的历史数据,来预测未来短期内的可能值。

image.png

1. 时间序列的预处理

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

对于纯随机序列,又称为白噪声序列,序列的各项之间没有任何相关关系。序列在进行完全无序的随机波动,可以终止对该序列的分析。因为白噪声序列是没有信息可以提取的平稳序列。

对于平稳非白噪声序列,它的均值和方差是常数,现有一套非常成熟的平稳序列的建模方法,通常是建立一个线性模型来拟合该序列,ARMA模型是最常用的平稳序列拟合模型。

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

1.1 平稳性检验

对于随机变量X,可以计算其均值和方差,对于两个随机变量X,Y,可以计算其协方差和相关系数,他们度量了两个不同事件之间的相互影响程度。

如何检验某一个序列是否为平稳序列?


image.png

具体的检验方法有两种:一种是根据时序图和自相关图的特征做出判断的图检验,该方法操作简单,应用广泛,缺点是带有主观性。另一种是构造检验统计量进行检验,目前最常用的方法是单位根检验。

1.2 纯随机性检验

如果一个序列是纯随机序列,那么它的序列值之间应该没有任何关系,即自相关系数=0,实际上这是一种理论上才会出现的理想状态,实际上纯随机序列的样本自相关系数不会绝对为0,当很接近零,并在0附近随机波动。

纯随机性检验也称为白噪声检验,常用的检验统计量有Q统计量,LB统计量,然后计算出对应的P值,如果P值显著大于显著性水平a,则表示该序列是纯随机性,可以终止对该序列的分析。

2. 平稳时间序列分析

ARMA模型是目前最常用的拟合平稳序列的模型,又可以细分为AR模型,MA模型和ARMA三大类。


image.png

某个时间序列经过预处理后,被判定为平稳非白噪声序列,就可以利用ARMA模型进行建模,计算出该序列的自相关系数和篇自相关系数,再由AP模型,MA和ARMA的自相关系数和偏自相关系数的性质,选择合适的模型。

image.png

3. 非平稳时间序列分析

自然界中绝大部分序列都是非平稳的,其分析可以分为确定性因素分解的时序分析和随机时序分析两大类。

确定性因素分解的方法把所有序列的变化都归纳为4个因素(长期因素,季节变动,循环变动和随机波动)的综合影响,其中长期趋势和季节变动的规律性信息通常比较容易提取,而由随机因素导致的波动则非常难确定和分析。

随机时序分析法是为了弥补确定性因素分解方法的不足,可以建立的模型由ARIMA模型,残差自回归模型,季节模型,异方差模型等。

3.1 差分运算

p阶差分:相距1期的两个序列值之间的减法运算称为1阶差分运算。
k步差分:相距k期的两个序列值之间的减法运算称为k步差分运算。

3.2 ARIMA模型

差分运算具有强大的确定性信息提取能力,许多非平稳性差分后会显示出平稳序列的性质,这时称这个非平稳序列为差分平稳序列。这个序列可以用ARMA拟合。ARIMA模型的实质就是差分运算和ARMA模型的组合。

一个案例:
首先判断时序数据是否为平稳性序列:使用时序图,自相关图,自相关系数,p值来判断,比如:
原始序列的时序图为:


image.png

自相关图为:


image.png
#自相关图
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data).show()

#平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
print('原始序列的ADF检验结果为:', ADF(data['销量']))
#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore

通过statsmodels的adfuller计算出p值为0.9984.显著大于0.05,表明该序列为非平稳序列。

做一阶差分:


image.png

p值为0.0226,小于0.05,故而为平稳序列。

白噪声检验:

p值为0.00077,小于0.05,所以一阶差分后的序列为非白噪声序列。综合为:一阶差分后的序列为平稳非白噪声序列。

故而可以用ARMA模型来拟合。

下面计算ARMA模型中的p,q,当p和q均小于等于3的所有组合的BIC信息量,取其中BIC信息量达到最小的模型阶数。

最终BIC最小的p值和q值为0,1

代码为:

from statsmodels.tsa.arima_model import ARIMA

data[u'销量'] = data[u'销量'].astype(float)
#定阶
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值为:%s、%s' %(p,q)) 

使用ARIMA模型建模并预测:

model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型
model.summary2() #给出一份模型报告
model.forecast(5) #作为期5天的预测,返回预测结果、标准误差、置信区间。

array([4873.9665477 , 4923.92261622, 4973.87868474, 5023.83475326,
5073.79082178]

4. 主要时序模式算法

时序模型的库主要是StatsModels,算法主要是ARIMA模型,在使用该模型进行建模时,需要进行一系列判别操作,主要包括平稳性检验,白噪声检验,是否差分,AIC和BIC指标值,模型定阶最后再做预测。

image.png

参考资料:

《Python数据分析和挖掘实战》张良均等

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,431评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,637评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,555评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,900评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,629评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,976评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,976评论 3 448
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,139评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,686评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,411评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,641评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,129评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,820评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,233评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,567评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,362评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,604评论 2 380

推荐阅读更多精彩内容

  • https://blog.csdn.net/BigData_Mining/article/details/8109...
    王金松阅读 3,182评论 0 0
  • 一、基本概念 1.随机时序分析的基本概念1)随机变量:简单的随机现象,如某班一天学生出勤人数,是静态的。2)随机过...
    apricoter阅读 6,574评论 0 10
  • 01 引言 上一篇推文【Python量化基础】时间序列的自相关性与平稳性着重介绍了时间序列的一些基础概念,包括自相...
    CuteHand阅读 5,447评论 0 7
  • 时间序列分析模型——ARIMA模型 一、研究目的 传统的经济计量方法是以经济理论为基础来描述变量关系的模型。但经济...
    Morphing0527阅读 12,208评论 0 8
  • 从校服时代到如今快披让婚纱,其中种种,只有当事人深谙其中的暗潮汹涌。 从校园爱情能走到现在,其中波折,岂是外人能看...
    我类林妹妹阅读 307评论 0 0