python最简单的时间序列预测,python 时间序列模型
为什么要用Python?经典的Python机器学习库Scikit-learn,没有内置用于时间序列分析的API,但是Python也有时间序列模型,主要是statsModels的tsa模块,ARMA,ARIMA等算法。此外,在模型建模所需的一系列判别操作和检查中,还提供了平滑度检查、白噪声检查、是否有差异(熊猫库中有差异方法)、AIC和BIC模型的步长确定等方法和功能。
导入模块
import panda aspportnumpyasnpimportmatplotlib。pyplotportstatmodels。apiassmfromstatmodels。graphics.api导入6是时序图数据. plot一家餐厅的销售数据=pd.read _ excel (Timelist.xlsx ,index_col= date )。
稳定性检查:
从图中可以看出,时间序列是不稳定的,但是否稳定也可以通过adf检查或Kpss检查来判断。
from stats models . TSA . stattoolsportfuller,kpssADF=adfuller(data[销售数量])# print)df test)ADF out=PD . ser rer("暂停的观察次数")print (ADF输出(KPSS测试=KPSS))
结果表明,adf检测到的P值远大于0.05,而KPSS检测到的P值与0.05相差不大,可以判断该时间序列是不稳定的。ADF检测:
静态测试1.813771
p值0.998376
滞后用户10.000000
KS检验:(0.4503223095873123,0.05546452172960678,10,{10%: 0.347, 5%: 0.463, 2.5%: 0.574)
差分处理
对不稳定数据进行处理,并进行差分处理。
Diff1=data.diff(1) #主差异处理diff 1=diff 1 . dropna))diff 1 . columns=[][差异销售]
差异后,检查平滑度。
Print ("ADF检测差异后的稳定性")ADF=ADfuller) diff1)("差异销售"(print) ADF2))))))))))))。
检测结果表明,p值为0.022,小于0.05,差值后序列稳定(-3.5656236723537,0.026744048798,0,35,(1%):-3。56666.76667676667
白噪声检测,结果:[统计,p值]
Fromstatsmodels。统计数据。诊断ImportCORR _ LjungboxPrint(白噪声检测结果:,acorr_ljungbox) diff1,lags=1))
白噪声检测结果表明,0.00077的P值远小于0.05,因此差分序列是稳定的非白噪声序列。白噪声检测结果:(array([11.30402222]],array) [0.0077339])
模型步骤
1)根据序列的自相关和偏自相关特性确定灰度。
fromstatsmodels . graphics . tsaplotsportplot _ ACF,plot_pacf#一阶差分的时间序列的均值和方差几乎是稳定的,所以差分数d可以设为1。#自相关图和偏相关图plot _ acf (diff1)。show () plot _ acf (diff1)。show())。
一阶差分后序列的自相关图
一阶差分后序列的偏自相关图
2)通过相对最优的模型辨识,得到bic信息最少的模型阶数。
from stats models . TSA . ARIMA _ model import # step,一般p,q的最大值为数据长度的十分之一qmax=int(len(data)/10)qmax=int(len)data)/10)BIC _矩阵=[] forpinrange) pmax1q)。适合(。bic)除外:tmp . append(none)BIC matrix . append。
计算出的BIC数据是432。46360 . 38686868686
423.628276 426.073601楠楠
楠楠
430.317524楠楠436.334434343436
BIC的p和q的最小值是0和1。
建立ARIMA (0,1,1)模型
模型=ARIMA(数据,(0,1,1))。适合)))))。
模型检查
需要检查模型检测的残差是否为白噪声序列,然后才能进行预测。
Resids=model.resid # residual,#表示残差是纯随机序列,即白噪声序列print( residual的白噪声检测结果:,acorr_ljungbox(resids,lags=1))要求检测残差独立性,durbin_watson是print(Durbin_Watson检测结果)和sm。统计数据。
检测结果如下:白噪声检测的P值为0.95,残差为白噪声,durbin_watson检测结果为1.973,2附近表示满意残差独立,qq图显示正态分布残差的白噪声检测结果:(arrarason
durbin_watson试验的结果:19960.688686866617
现在,您可以使用训练好的模型进行预测。
Print(model.forecast(5))预测5天的返回结果:预测结果、标准误差、置信区间(array ([266288,2023))。50866.68668686661
5073.78819955]、
数组([73.08574135、142 . 68322、187、223 . 22236736767
254.95712673]、
数组([ 4730.72083205,5017.2116737 ],[ 4644.96626651,5202.87721258 ]),
[ 4606.29994008,5341.45451235 ],[ 4585.18710806,5462.4783177 ],
[ 4574.08141355,5573.49498555 ] )
PRED=模型。预测(2015 . 2 . 7),)2015 . 2 . 15),dynamic=true,typ=levels )预测的时间段是2015-02-074873。
2015-02-08 4923.921740
2015-02-09 4973.877226
2015-02-10 5023.832713
2015-02-11 5073.788200
2015-02-12 5123.743686
2015-02-13 5173.699173
2015-02-14 5223.654660
2015-02-15 5273.610146
频率:D、数据类型:float64
预测趋势图
fig,ax=PLT . subplots(ax=data . loc(2015/1/20(:)。plot)ax)fig=model . plot _ predict())ax
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。