CNN做时间序列预测_Python时间序列预测实战(电力负荷预测)

CNN做时间序列预测_Python时间序列预测实战(电力负荷预测)_第1张图片

这是我之前工作做的一个项目

import 
data_history 
import 
data_history 
#很多台区在2017-08-14之前都存在负荷空值,要把这些时间段去掉
#将索引变为列,方便之后格式转换
#将含有时序数据的字段转化为datetime64格式

CNN做时间序列预测_Python时间序列预测实战(电力负荷预测)_第2张图片
原始时间序列图

平稳性检测与平稳化处理

ARMA模型要求输入的时间序列类型数据具有平稳性,所以在进行时间序列预测之前,要对时间序列数据进行平稳性的检验和处理。

ADF是一种常用的单位根检验方法,它的原假设为序列具有单位根,即非平稳,对于一个平稳的时序数据,就需要在给定的置信水平上显著,拒绝原假设。

通常的平稳化处理方法主要有:对数变换、移动平均、指数平滑、以及差分。其中差分的平稳化处理效果最好,我们在这里采用差分的方法来平稳化时间序列。(差分过程写主程序里了)

from 

CNN做时间序列预测_Python时间序列预测实战(电力负荷预测)_第3张图片
ADF检验,检验结果为平稳

建模并确定模型的最佳阶数

将平稳化的趋势因素和随机因素代入ARMA模型之中,但要做出最终的预测,还需要确定模型的阶数(p, q)。一个好的模型通常要求残差序列方差较小,同时模型页相对简单,即要求阶数较低。因此我们需要一个准则来比较不同阶数的模型之间的优劣,从而确定最合适的阶数。

贝叶斯信息准则:定义

使得BIC达到最小值的p即为该准则下的最优AR模型的阶数。

我们采用一种循环的方式,在1-20的范围内寻找能令模型的bic属性最小的阶数值,则此阶数值就是最合适的模型阶数。

#利用贝叶斯信息准则(BIC)寻找最佳阶数,使得BIC达到最小值的(p, q)即为该准则下的最优模型的阶数

预测

由于季节性因素是以年为单位循环变动的,那么对季节性因素的预测只需要简单的将上一年的负荷数据照搬到下一年即可。

假如分解出来的趋势因素和随机因素又做了一次平稳化处理的话,则要将趋势因素、随机因素的预测结果做相应的还原。然后将季节性因素、趋势因素、随机因素的预测结果加到一起,就是完整的预测结果

#样本外预测
#根据增长率反推“S”型曲线的阶段
#根据所得到的“S”型曲线的阶段,进行增长率预测
#季节变动每一年都是一样的,预测季节因素只需要将前一年的数据复制到新一年即可
industry_type 
df_forecast 

分解时间序列

电力负荷时间序列数据具有非常鲜明的季节性特征和趋势特征,每一个年度的用电数据在节假日的波动上往往具有很大的相似性,而后一年的电力数据往往要比前一年的电力数据高一些。

季节性因素以年为周期,而趋势因素则有很强的线性特征,这两者相对比较好预测。时间序列数据分离出季节性因素和趋势因素后还剩下随机因素,分解后可以避免三种变动因素之间互相影响,并且可以单独测定每种变动的影响程度,从而提高预测精度。因此,我们采用季节分解法来对电力负荷时间序列数据进行分解。

def 

CNN做时间序列预测_Python时间序列预测实战(电力负荷预测)_第4张图片
时间序列进行季节性分解之后的结果
from 

CNN做时间序列预测_Python时间序列预测实战(电力负荷预测)_第5张图片
历史数据与总体预测结果
import 
from 

CNN做时间序列预测_Python时间序列预测实战(电力负荷预测)_第6张图片
只查看预测结果

你可能感兴趣的:(CNN做时间序列预测)