为啥使用Python?,虽然经典的Python机器学习库scikit-learn中并没有内置时间序列分析的API,但是Python中也有时间序列模型,主要是统计分析库statsModels中的tsa模块,内置了ARMA,ARIMA等算法模型;另外,在使用模型建模的时候,需要进行的一系列判别操作及检验也都提供了方法和函数,比如:平稳性检验,白噪声检验,是否差分(pandas库带有差分方法),AIC,BIC模型定阶等等。
导入模块
数据时序图()()
平稳性检测:
从图上看时间序列是不平稳的,我们可以通过adf检验来判断是否平稳,也可使用Kpss检验
,kpssadf=adfuller(data['销量'])一阶差分处理diff1=()=['差分销量']
差分后在进行平稳性检测
print('差分后再ADF检测平稳性')adf2=adfuller(diff1['差分销量'])print(adf2)检测结果如下:p值为0.022,小于0.05,可以判定,差分后的序列已经平稳
白噪声检测,返回结果:[统计量,pvalue]
_ljungboxprint('白噪声检测结果:',acorr_ljungbox(diff1,lags=1))白噪声检测结果,p值0.00077远远小于0.05,所以差分后的序列是平稳非白噪声序列
模型定阶
1,通过序列的自相关图和偏自相关图的性质进行定阶
_acf,plot_pacf自相关图和偏相关图plot_acf(diff1).show()plot_pacf(diff1).show()
一阶差分后的序列自相关图
一阶差分后序列的偏自相关图
2,通过相对最优模型识别,取bic信息量最小的模型阶数
_modelimportARIMA残差,残差独立性检测,durbin_watson在2附近说明满足残差独立性print('durbin_watson检测结果:',_watson(resids))预测5天的,返回结果:预测结果,标准误差,置信区间pred=('2015/2/7','2015/2/15',dynamic=True,typ='levels')#预测的时间段预测趋势图
fig,ax=()ax=['2015/1/20':].plot(ax=ax)fig=_predict('2015/2/7','2015/2/15',dynamic=True,ax=ax,plot_insample=False)()