使用Python建立时间序列(ARIMA、MA、AR)预测模型 |
您所在的位置:网站首页 › highlight歌曲王者 › 使用Python建立时间序列(ARIMA、MA、AR)预测模型 |
文章内容整理自网上内容,作个人笔记分享使用,如有错误欢迎大家指正。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)将数据中的时间信息转换成索引。 #格式转换 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'])
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |