使用Python建立时间序列(ARIMA、MA、AR)预测模型

您所在的位置:网站首页 highlight歌曲王者 使用Python建立时间序列(ARIMA、MA、AR)预测模型

使用Python建立时间序列(ARIMA、MA、AR)预测模型

2023-03-12 11:08| 来源: 网络整理| 查看: 265

文章内容整理自网上内容,作个人笔记分享使用,如有错误欢迎大家指正。o(`ω´ )o

文章目录 时间序列定义1)数据导入和处理2)数据格式转换3)平稳性检验2)KPSS 测试消除趋势 移动平均消除趋势和季节性变化1.差分Differencing2. 分解 Decomposing 预测时间序列ARIMAAR model 自回归模型MA model 移动平均模型Combined Model 预测 参考资料

时间序列定义

时间序列(Time Series):按照时间的顺序吧一个随机事件变化发展的过程记录。最常见的时间序列应用,例如每个地区的降雨量、一天的温度变化情况等等。

1)数据导入和处理

数据来源&介绍 数据集包含了两组数据:数据里包含了月份以及每月的乘客数量。

import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline from matplotlib.pylab import rcParams rcParams['figure.figsize']=15,6 #数据导入和查看 data=pd.read_csv('Airpassengers.csv') print(data.head()) print('\nData Types:') print(data.dtypes)

在这里插入图片描述

2)数据格式转换

将数据中的时间信息转换成索引。

#格式转换 dateparse=lambda dates: pd.datetime.strptime(dates,'%Y-%m') data=pd.read_csv('Airpassengers.csv',parse_dates=['Month'],index_col='Month',date_parser=dateparse) data.head() # parse_dates:指定包含日期时间信息的列。例子里的列名是'Month‘ # index_col:在TS数据中使用pandas的关键是索引必须是日期等时间变量。所以这个参数告诉pandas使用'Month'列作为索引 # date_parser:它指定了一个将输入字符串转换为datetime可变的函数。pandas 默认读取格式为'YYYY-MM-DD HH:MM:SS'的数据。如果这里的时间格式不一样,就要重新定义时间格式,dataparse函数可以用于此目的。 #查看数据的索引 data.index

在这里插入图片描述

注意到这里: dtype='datetime64[ns] 就可以确定是时间对象。这样将数据格式转换成Series object 就可以避免每次使用时都要提到列名。

3)平稳性检验 #导入包 from statsmodels.tsa.stattools import adfuller def test_stationarity(timeseries): #Determing rolling statistics rolmean=timeseries.rolling(12).mean() rolstd=timeseries.rolling(12).std() #Plot rolling statistics: orig=plt.plot(timeseries,color='blue',label='Original') mean=plt.plot(rolmean,color='red',label='Rolling Mean') #均值 std=plt.plot(rolstd,color='black',label='Rolling Std') #标准差 plt.legend(loc='best') plt.title('Rolling Mean & Standard Deviation') plt.show(block=False) #Perform Dickey-Fuller Test: print('Results of Dickey-Fuller Test:') dftest=adfuller(timeseries,autolag='AIC') dfoutput=pd.Series(dftest[0:4],index=['Test Statistic','p-value','#Lags Used','Number of Observations Used']) for key,value in dftest[4].items(): dfoutput['Critical Value (%s)'%key]=value print(dfoutput) #检验结果 test_stationarity(ts)

在这里插入图片描述 在这里插入图片描述 虽然时间序列中的平均偏差不是很小,但很明显,这不是一个平稳的时间序列。此外,测试统计远远超过临界值。

在上面的例子中,检验统计量>临界值,这意味着序列是非平稳的。

2)KPSS 测试

KPSS测试,(Kwiatkowski-phillips-schmidt-Shin Test) 不如ADF方法流行。KPSS检验的原假设和备择假设与ADF检验相反。!!! H0:序列是趋势平稳的 H1: 序列有一个单位根序列。(不是平稳的)

# define function for ADF from statsmodels.tsa.stattools import kpss def kpss_test(timeseries): #Perform KPSS Test: print('Results of KPSS Test:') kpsstest=kpss(timeseries,regression='c') kpss_output=pd.Series(kpsstest[0:3],index=['Test Statistic','p-value','#Lags Used']) for key,value in kpsstest[3].items(): kpss_output['Critical Value (%s)'%key]=value print(kpss_output) kpss_test(train['#Passengers'])

在这里插入图片描述 结果显示TS>cv, p



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3