Python数据挖掘建模 chapter_8 时间序列算法

1.常用时间序列模型

平滑法移动平滑法,指数平滑法
趋势拟合法线性拟合,曲线拟合
组合模型受长期趋势,季节变动,周期变动,不规则变动等要素影响
AR模型以前q期序列值为自变量
MA模型随机变量与前q期随机扰动有关
ARMA模型与前q期序列值和随机扰动有关
ARIMA模型适用于差分平稳序列
ARCH模型可准确模拟序列值波动变化
GARCH模型广义ARCH模型,可反映序列长期记忆性、信息非对称性

2.预处理

平稳性检验:时序图检验、自相关图检验、单位更检验

非随机性检验


3.

数据举例

date sale_num
2015/1/1 3023
2015/1/2 3039
2015/1/3 3056
2015/1/4 3138
2015/1/5 3188
2015/1/6 3224
2015/1/7 3226
2015/1/8 3029
2015/1/9 2859
2015/1/10 2870
2015/1/11 2910
2015/1/12 3012
2015/1/13 3142
2015/1/14 3252


#-*- coding: utf-8 -*-

import pandas as pd

#参数初始化
discfile = 'data.xls'
forecastnum = 5

#读取数据,指定日期列为指标
data = pd.read_excel(discfile, index_col = u'date')

#时序图
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'sale_num']))
#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore
 
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值

from statsmodels.tsa.arima_model import ARIMA

data[u'sale_num'] = data[u'sale_num'].astype(float)
#定阶
pmax = int(len(D_data)/10) 
qmax = int(len(D_data)/10) 
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().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天的预测,返回预测结果、标准误差、置信区间。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值