python数据分析与挖掘实战—第5章(挖掘建模)(3)

时序模式

常用时间序列模型如下:

模型名称描述
平滑法利用修匀技术,削弱短期随机波动的影响,包括移动平均法和指数平滑法
趋势拟合法建立回归模型,分为线性拟合和曲线拟合
组合模型长期趋势、季节变动、周期变动和不规则变动,分为加法模型和乘法模型
AR模型以前p期的序列值为自变量建立线性回归模型
MA模型以前q期随机扰动为自变量建立线性回归模型
ARMA模型AR+MA综合
ARIMA模型差分平稳序列
ARCH模型序列具有异方差性并且异方差函数短期自相关
GARCH模型广义ARCH模型,更能反映实际序列中的长期记忆性、信息的非对称性等性质

时间序列的预处理

  • 白噪声序列(纯随机序列):序列的各项之间没有任何相关关系,没有信息可提取的平稳序列
  • 平稳非白噪声序列:常数均值和方差
  • 非平稳序列:均值和方差不稳定,先转变为平稳序列,再进行分析

1.平稳性检验

(1)时序图检验,序列值始终在一个常数附近随机波动,而且波动的范围有界;如果有明显的趋势性或者周期性,那它通常不是平稳序列。
(2)自相关图检验,平稳序列具有短期相关性,随着延迟期数k的增加,平稳序列的自相关系数(延迟k期)会比较快的衰减趋向于零,并在零附近随机波动,而非平稳序列的自相关系数衰减的速度比较慢。
(3)单位根检验,如果存在单位根就是非平稳时间序列。

2.纯随机性检验

也称白噪声检验,一般是构造检验统计量来检验序列的纯随机性,常用的统计量有Q统计量、LB统计量,由样本各延迟期数的自相关系数可以计算得到。如果p值显著大于显著性水平α,则表示该序列不能拒绝纯随机的原假设,可以停止对该序列的分析。

1. 平稳时间序列

模型自相关系数(ACF)偏自相关系数(PACF)
AR( p )拖尾p 阶截尾
MA( q )q 阶截尾拖尾
ARMA(p,q)p 阶拖尾q 阶拖尾

三者都是常数均值和常数方差

建模步骤如下:
在这里插入图片描述

  • 计算ACF和PACF
  • ARMA模型识别,模型定阶
  • 估计模型中未知参数的值并进行参数检验
  • 模型检验
  • 模型优化
  • 模型应用:进行短期预测

2. 非平稳时间序列

  • 确定性因素分解的时序分析:长期因素、季节变动、循环变动和随机扰动
  • 随机时序分析:为了弥补确定性因素分解方法的不足,随机时序分析可以建立ARIMA模型、残差自回归模型、季节模型、异方差模型等

ARIMA模型建模步骤:
在这里插入图片描述
下面应用以上的理论知识,对某餐厅的销售数据进行建模:

数据集概况:

#ARIMA模型
import pandas as pd

#参数初始化
discfile = 'G:/Python数据分析与挖掘实战/chapter5/demo/data/arima_data.xls'
forecastnum = 5
data = pd.read_excel(discfile, index_col='日期')
data.head()

输出结果:        
日期         销量   
2015-01-01  3023
2015-01-02  3039
2015-01-03  3056
2015-01-04  3138
2015-01-05  3188

1.检验序列的平稳性

#时序图
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
%matplotlib

#中文和负号的正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
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('原始序列的ADF检验结果为:',ADF(data['销量']))
#返回值依次为:adf、pvalue、usedalg、nobs、critical values、icbest、regresults、resstore 

原始序列的ADF检验结果为: (1.8137710150945274, 0.9983759421514264, 10, 26,
 {'1%': -3.7112123008648155, '5%': -2.981246804733728, '10%': -2.6300945562130176}, 299.46989866024177)

在这里插入图片描述
在这里插入图片描述

  • 时序图显示该序列具有明显的单调递增趋势,可以判断为是非平稳序列
  • 自相关图显示自相关系数长期大于零,说明序列间具有很强的长期相关性
  • 单位根检验统计量对应的p值显著大于0.05,不能拒绝原假设,即认为该序列为非平稳序列

2.对原始序列进行一阶差分,并进行平稳性和白噪声检验

(1)差分,再做平稳性判断

#差分后的结果
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot() #时序图
plt.show()

plot_acf(D_data).show() #自相关图

print('差分序列的ADF检验结果为:',ADF(D_data['销量差分'])) #平稳性检测

输出结果:
差分序列的ADF检验结果为: (-3.1560562366723532, 0.02267343544004886, 0, 35, 
{'1%': -3.6327426647230316, '5%': -2.9485102040816327, '10%': -2.6130173469387756}, 287.5909090780334)

在这里插入图片描述
在这里插入图片描述

  • 一阶差分后的序列的时序图在均值附近比较平稳的波动
  • 自相关图有很强的短期相关性
  • 单位根检验p值小于0.05
  • 所以一阶差分后的序列是平稳序列

(2)平稳非白噪声检验

#白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox
print('差分序列的白噪声检验结果为:',acorr_ljungbox(D_data, lags=1)) #返回统计量和p值

差分序列的白噪声检验结果为: (array([11.30402222]), array([0.00077339]))

输出的p值远小于0.05,所以一阶差分之后的序列是平稳非白噪声序列。

3.对一阶差分之后的平稳非白噪声序列拟合ARMA模型

(1)人为识别
在这里插入图片描述
从一阶差分后自相关图显示出1阶截尾,偏自相关图显示出拖尾性,所以可以考虑MA(1)模型拟合1阶差分后的序列,即对原序列建立ARIMA(0, 1, 1)模型。

(2)相对最优模型识别

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

from statsmodels.tsa.arima_model import ARIMA

#定阶
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('BIC最小的p值和q值为:%s、%s' % (p,q))

输出结果:
BIC最小的p值和q值为:01

在这里插入图片描述
p值为0、q值为1时最小BIC值为:422.510082。

下面对一阶差分后的序列MA(1)模型进行分析:

model = ARIMA(data, (p,1,q)).fit()
print(model.summary2())

在这里插入图片描述

  • 模型检验:残差为白噪声序列,p值为0.627016(不明白)
  • 参数检验和参数估计:在这里插入图片描述

4.ARIMA模型预测

应用ARIMA(0, 1, 1)对销售数据做为期5天的预测:

model.forecast(5)

(array([4873.9665477 , 4923.92261622, 4973.87868474, 5023.83475326,
        5073.79082178]),
 array([ 73.08574262, 142.32680643, 187.54283213, 223.80283273,
        254.95705912]),
 array([[4730.72112437, 5017.21197102],
        [4644.96720157, 5202.87803086],
        [4606.3014882 , 5341.45588128],
        [4585.18926146, 5462.48024505],
        [4574.0841683 , 5573.49747526]]))

利用模型向前预测的时期越长,预测误差将会越大。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1. 数据预处理的目的是什么? 数据预处理的目的是为了减少或消除数据中的噪声、缺失值、异常值等问题,使得数据更加干净、准确、可靠,为后续的数据分析建模提供良好的数据基础。 2. 数据清洗的主要步骤有哪些? 数据清洗的主要步骤包括数据去重、缺失值处理、异常值处理、数据类型转换和数据标准化等。 3. 数据去重的方法有哪些? 数据去重的方法包括基于列去重、基于行去重和基于列和行的去重。基于列去重是指对某一列中的重复数据进行去重,基于行去重是指对数据表中的重复行进行去重,基于列和行的去重是指同时对某一列和数据表中的重复行进行去重。 4. 缺失值处理的方法有哪些? 缺失值处理的方法包括删除缺失值、插值法、使用相似样本填补缺失值等。删除缺失值是指直接删除包含缺失值的行或列;插值法是指通过对已有数据进行插值估计缺失值;使用相似样本填补缺失值是指利用具有相似特征的样本来填补缺失值。 5. 异常值处理的方法有哪些? 异常值处理的方法包括基于统计学方法、基于聚类方法和基于规则的方法。基于统计学方法是指利用统计学方法对数据进行描述和分析,发现异常值并进行处理;基于聚类方法是指利用聚类算法将数据分成不同的类别,对于不属于任何类别的数据视为异常值并进行处理;基于规则的方法是指利用领域知识或经验规则对数据进行分析和处理。 6. 数据类型转换的方法有哪些? 数据类型转换的方法包括数值型类型转换、字符型类型转换和日期型类型转换等。数值型类型转换是指将数据从字符串类型转换为数值类型,字符型类型转换是指将数据从数值类型转换为字符串类型,日期型类型转换是指将数据从字符串类型转换为日期类型。 7. 数据标准化的方法有哪些? 数据标准化的方法包括最小-最大标准化、z-score标准化和小数定标标准化等。最小-最大标准化是指将数据缩放到[0,1]区间内;z-score标准化是指将数据转换为均值为0,标准差为1的正态分布;小数定标标准化是指将数据除以一个比较大的基数,使得所有数据都在[-1,1]之间。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值