【挖掘模型】: Python 主要时序模式算法—StatsModels库

数据源:arima_data.xls
arima_data.xls
数据结果
Paste_Image.png
ARIMA模型包
    # 使用该模型需要一些列判别操作
        # 平稳性检测 -》 白噪声检验 ——》 是否差分 -》 AIC和BIC指标 --> 模型定阶 --》预测
        # acf()  计算自相关系数
            # autocorr = acf(data,unbiased = False,nlags = 40,qstat = False,fft = False ,alpha = None)
            # data_观测值序列(时间序列,dataFrame or Series)
            # autocorr_观测值序列自相关函数
            # 其他为可选参数,如 qstat = True,同事返回Q统计量和对应的p值
        # plot_acf()/plot_pacf()   画自相关系数图和偏相关系数图
            # p = plot_acf(data) 
            # 返回一个Matplotlib对象,可以用show()方法显示图像
        # adfuller()  对观测值序列进行单位根检验(ADF test)
            # h = adffuller(Series,maxlag = None,regression = 'c',autolag = 'AIC',store = False,regresults = False)
            # 输入参数Series为一维观测值序列,依次返回adf,pvalue,usedlag,nobs,critical,values,icbest,regresults,resstore
        # diff()  对观测值序列进行差分计算
            # D。diff()_D为dataframe 或者 Series
        # arima  设置时序模式的建模参数,创建ARIMA时序模型
            # arima = ARIMA(data,(p,d,q)).fit()
            # data参数为输入时间序列,d为差分次数
        # summary()/summary2()   生成已有模型报告
            # 包含模型系数,标准误差,p值,AIC和BIC值等
        # aic/bic/hqic  计算模型的AIC、BIC、HQIC值
            # arima.aic/arima.bic/arima.hqic
        # forecast()   预测
            # a,b,c = arima.forecase(num)
            # num为预测的天数,a_返回的预测值,b_预测的误差,c_预测值置信区间
        # acorr_ljungbox()  检测是否为白噪声序列
            # acorr_ljungbox(data,lags=1)
            # lags 为滞后数,返回统计量和p值
源代码
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt

#参数初始化
discfile = 'F:/python 数据挖掘分析实战/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()
# 从该图说明自相关系数长期大于0,序列间有很强的长期相关性

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

#差分后的结果,对原始数据进行一阶拆分,并进行平稳性和白噪声检验
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot() #时序图


plt.show()
plot_acf(D_data).show() #自相关图,在均值附近比较平稳的波动,自相关图有很强的短期性,显示一阶截尾

print(u'原始序列的ADF检验结果为:', ADF(D_data[u'销量差分']))
# 单位根检验P值小于0.05,所以一阶差之后的序列是平稳序列



#白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1)) #返回统计量和p值
#输出的P值远小于0.05,所以一阶差分之后的序列是平稳非白噪声序列

from statsmodels.graphics.tsaplots import plot_pacf
plot_pacf(D_data).show() #偏自相关图,显示出拖尾性,本来从自相关图和偏自相关图可以看出p,q...看不懂

"""
#第二步、确定p、q,---》 0,1
res = sm.tsa.arma_order_select_ic(
    D_data.dropna(), 
    max_ar=8, 
    max_ma=8, 
    ic=['aic', 'bic', 'hqic'], 
    trend='nc'
)
"""



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)) 

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

参考资料:《Python数据分析与挖掘实战》

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

推荐阅读更多精彩内容