需要完整代码和论文私信我
电力系统负荷预测分析
摘 要
电力系统的电力负荷预测在现实中有着重要的作用,其预测结果直接影响能源的合理利用和电力的供需平衡,以及给社会带来的经济效益与社会效益。电力系统负荷预测是需要根据电力负荷的历史数据,与相关历史天气数据等天气影响,经济状况、社会现状等基础数据作为预测支撑对未来一段时间内的系统负荷做出预测。电力系统负荷预测对于电力系统安全、可靠、经济运行具有重要意义。电力系统负荷预测一般以预测时间周期进行分类,一般有短期、中期和长期电力系统负荷预测。
针对第一题第一小问,它属于短期预测,我们直接使用某地区电网间隔 15 分钟的负荷数据对电力系统负荷的总功率进行预测,使用ARIMA、Prophet、LightGBM、Xgboost、LSTM和GRU模型对未来10天的电力负荷进行预测,其中LSTM和GRU模型的预测精度的R²系数达到了0.96101和0.98527,效果非常好。
针对第一题第二小问,它属于中期预测,所以我们使用了某地区电网间隔 15 分钟的负荷数据与气象数据进行特征结合构造相关的时间序列特征数据,使用Prophet、LSTM、GRU和Seq2seq等模型对未来三个月的电力系统负荷进行预测,其中LSTM和GRU的预测精度的R²系数分别为0.82129和0.93423,Seq2seq模型的预测精度的R²系数达到了0.96440。Seq2seq模型在长时间序列预测中的多步特征输入与多步预测的任务中体现出非常好的效果。
针对第二题第一小问,通过高于1.5倍标准误差来获取突变的时间点和值,然后根据疫情、国家政策、气象条件、节假日四个方面对突变的原因进行分析。
针对第二题第二小问,它属于中期预测,我们将各行业每天用电负荷相关数据与气象数据进行结合实现特征构建,构建出20个天气特征和时间特征,使用Seq2seq模型对各行业的未来3个月的电力系统负荷进行预测。由于可训练数据过少,在结合其他特征的情况下,发现大工业类型行业的最大值有功功率电力系统负荷预测精度R²系数有0.72082,在最小值有功功率预测的精度值R²系数仅有0.26212,其他行业的均普遍较低。
针对第二题第三小问,基于上述两问的结果分析,基于国家“双碳”目标对各个行业未来负荷影响提出“能源消费端,坚持节能优先,着力提高能源利用效率”等一系列针对性建议。
本文使用了传统的ARIMA和Prophet模型、LightGBM和Xgboost机器学习模型以及LSTM、GRU和Seq2seq深度学习模型实现对电力系统负荷的短期和中期预测,其中Seq2seq与GRU模型在电力系统中期短期负荷预测中的精度非常高。本文的高精度的短中期电力负荷系统预测模型对于电力系统运行的可靠性有着重要的意义,可以更好的为电力系统提供运行、规划、保护依据,对未来的电力系统负荷预测具有参考意义。
关键词:电力系统负荷预测;时间序列;特征构建;循环神经网络
目 录
第1章 绪论
1.1 问题背景
电力系统负荷(电力需求量,即有功功率)预测是指充分考虑历史的系统负荷、经济状况、气象条件和社会事件等因素的影响,对未来一段时间的系统负荷做出预测。负荷预测是电力系统规划与调度的一项重要内容。短期(两周以内)预测是电网内部机组启停、调度和运营计划制定的基础;中期(未来数月)预测可为保障企业生产和社会生活用电,合理安排电网的运营与检修决策提供支持;长期(未来数年)预测可为电网改造、扩建等计划的制定提供参考,以提高电力系统的经济效益和社会效益。
复杂多变的气象条件和社会事件等不确定因素都会对电力系统负荷造成一定的影响,使得传统负荷预测模型的应用存在一定的局限性。同时,随着电力系统负荷结构的多元化,也使得模型应用的效果有所降低,因此电力系统负荷预测问题亟待进一步研究。
1.2 问题重述
1.地区负荷的中短期预测分析
(1)根据附件1提供的某地区电网间隔15分钟的负荷数据,建立中短期负荷预测模型,利用模型对该地区电网未来15分钟的负荷就行预测,并分析其预测精度。
(2)利用所建立的模型对该地区电网未来3个月日负荷的最值进行预测,算出达到相应负荷最值的时间,并分析其预测精度。
2.行业负荷的中期预测分析
(1)分析4个行业用电负荷突变的时间、量级和可能的原因。
(2)通过问题1中得到的不同行业电力系统负荷的相关数据指标,并对提供的数据,用所建立的模型赖预测各行业未来3个月日负荷最值的预测结果,并对其预测精度进行分析。
(3)根据各行业的实际情况,研究国家“双碳”目标对各行业未来用电负荷可能产生的影响,并对相关行业提出有针对性的建议。
1.3 本文主要工作和创新点
1.3.1 主要工作
本文的主要工作如图1.1所示。
图1.1总体模型架构
1.3.2 创新点
本文的创新点主要是对短中期的电力系统负荷进行多模型对比,对比传统的ARIMA、Prophet模型,LightGBM与Xgboost机器学习模型和LSTM、GRU与Seq2seq模型在电力系统负荷中短期预测上的预测精度,并且使用天气气象数据与时间数据进行时间序列特征构建,助于预测中期的电力系统负荷。
1.4 本文研究意义
中国的电力行业还处在不断摸索和改革的过程中,随着电力系统负荷结构的多元化,也使得模型应用的效果有所降低。本文利用各行业的电荷数据,通过数据挖掘技术手段挖掘其中潜在的有用信息,建立起一套高效的电力系统负荷预测方法,对掌握各行业的生产和经营状况、复工复产和后续发展走势有着重要的意义。
除此之外,本有将有助于为电力系统调度运行提供依据,对于短期预测结果,可用于对各发电厂电量来合理安排发电机组的启停,并作为拟定用户发电计划的参考依据。对于中期预测结果,可用于调整月度发电计划、制定机组的大修计划等。通过本文的数据预测模型,电力系统负荷的预测结果得到大幅度提高,甚至无需具备专业的电力系统知识,即能做出正确的预测,规避不必要的浪费和风险。
从研究方法论的角度看,在大数据的时代进程之下,各种预测方法也随之愈加发展成熟,不断搜寻更新更好的算法注入到新环境下有着很大的实用价值。深度学习方法相较于传统负荷预测模型而言,打破了其应用的局限性,对提升精度具有极大的价值。而随着电力系统负荷结构的多元化,深度学习技术的快速发展,无疑为电力系统负荷预测研究提供了新的方法支持。
第2章 相关理论及算法介绍
2.1 相关知识
2.1.1 气象条件
气象条件的变化直接影响着负荷曲线的变动,如高温天气,因空调使用率增高而导致负荷升高。
2.1.2 节假日
通常节假日期间负荷水平有一定下降,但并非绝对;如春节,因春节期间工厂等工业停工进而负荷下降。
2.13 社会事件
一些重大的社会事件的发生影响电力需求的变化进而导致电力负荷的变化。
2.2 相关理论
2.2.1 缺失值处理
最常用的处理缺失值的方法包括数据删除和数据填补两种。一般来说,我们更倾向于保留数据而不是删除。
(1)数据删除
直接删除有缺失值的时间段。
(2)数据填补
基于完整数据集的其他值填补缺失值。
①移动平均法
移动平均法是一种简单平滑预测技术,它的基本思想是:根据时间序列资料、逐项推移,依次计算包含一定项数的序时平均值,以反映长期趋势的方法。因此,当时间序列的数值由于受周期变动和随机波动的影响,起伏较大,不易显示出事件的发展趋势时,使用移动平均法可以消除这些因素的影响,显示出事件的发展方向与趋势,然后依趋势线分析预测序列的长期趋势。其计算方法如公式(2-1)所示:
Ft=(At-1+At-2+At-3+…+At-n)n
(2.1)
其中,Ft
表示对下一期的预测值,n
表示移动平均的时期个数At-1
表示前期实际值,At-2
,At-3
,At-n
代分别表示前两期、前三期直至前n
期的实际值。
②插值法
插值法根据已知的数据序列,找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计。选取已知的两点(x0
,y0
)和(x1
,y1
),假设缺失值与两点存在未知线性函数f
的拟合分布,则缺失点处值如公式(2-2)所示:
f(x,y)=f(x0)+w(f(x1)-f(x0))
(2.2)
2.2.2 归一化处理
Xnorm=X-XminXmax-Xmin
(2.3)
其中,Xnorm
为归一化后的数据,X
为原始数据,Xmax
、Xmin
分别为原始数据集的最大值和最小值。
2.2.3 评价指标
客观全面地分析预测结果,对于评价负荷预测模型的效果有着重要意义。本文基于人工智能算法构建主预测模型,采用误差大小和模型训练时间作为评价预测模型的标准。误差越小、训练时间越短,表明该模型的预测精确度越高、性能越好。
文中采用MSE、RMSE、MAE和TT作为评价预测结果优劣的标准,具体表示形式如下:
(1)均方误差(MSE)
MSE=1ni=1n(yi-yi)2
(2.4)
(2)均方根误差(RMSE)
RMSE=1ni=1n(yi-yi)2
(2.5)
(3)平均绝对误差(MAE)
MAE=1ni=1nyi-yi
(2.6)
(4)R²分数
R2=1-i=1n(yi-yi)2i=1n(yi-yi)2
(2.7)
(5)训练时间(TT)
TT=T2-T1
(2.8)
其中,n
表示样本数量,yi
表示第i
个样本的真实值,yi
表示第i
个样本的预测值,T2
为训练结束的实时时间,T1
为训练开始时的实时时间。
2.3 算法介绍
prophet算法采用的是加性模型,由四个项组成:
y(t)=g(t)+s(t)+h(t)+ϵ(t)
(2.9)
其中,g(t)
表示趋势项,它表示时间序列在非周期上面的变化趋势;s(t)
表示周期项,或者称为季节项,一般来说是以周或者年为单位;h(t)
表示节假日项,表示时间序列中那些潜在的具有非固定周期的节假日对预测值造成的影响;ϵ(t)
即误差项或者称为剩余项,表示模型未预测到的波动,ϵ(t)
服从高斯分布。
Prophet算法就是通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。
(1)趋势项模型g(t)
趋势项有两个重要的函数,一个是基于逻辑回归函数的,另一个是基于分段线性函数的。
①基于逻辑回归的趋势项
g(t)=C(t)1+exp(-(k+a(t)Tδ)∙(t-(m+a(t)Tγ)))
(2.10)
a(t)=(a1(t),⋯,aS(t))T,δ=(δ1,…,δS)T,γ=(γ1,…,γS)T
其中,C(t)
表示承载量,它是一个随时间变化的函数,限定了所能增长的最大值。
k
表示增长率。m
表示偏移量,当增长率k调整后,每个changepoint点对应的偏移量m
也应该相应调整以连接每个分段的最后一个时间点,表达式如下:
γj=(sj-m-l<jγl)∙(1-k+l<jδlk+l≤jδl)
(2.11)
②基于分段线性函数的趋势项
g(t)=(k+a(t)Tδ)∙t+(m+a(t)Tγ)
(2.12)
其中,k表示增长率,δ
表示增长率的变化量,m
表示偏移量。
(2)季节性趋势s(t)
由于时间序列中有可能包含多种天,周,月,年等周期类型的季节性趋势,因此,傅里叶级数可以用来近似表达这个周期属性。
使用傅立叶级数来模拟时间序列的周期性:假设P表示时间序列的周期,P=365.25表示以年为周期,P=7表示以周为周期。它的傅立叶级数的形式都是:
s(t)=n=1N(ancos(2πntP)+bnsin(2πntP))
(2.13)
N表示希望在模型中使用的这种周期的个数,较大的N值可以拟合出更复杂的季节性函数,然而也会带来更多的过拟合问题。
(3)节假日效应h(t)
对于第i个节假日来说,Di
表示该节假日的前后一段时间。为了表示节假日效应,需要一个相应的节假日函数,同时需要一个参数κi
来表示节假日的影响范围。假设有L个节假日,那么节假日效应模型就是:
h(t)=Z(t)κ=i=1Lκi∙1{t∈Di}
(2.14)
Z(t)=(1t∈D1},…,1t∈DL})
(2.15)
κ=(κ1,…,κL)T
(2.16)
其中,κ~Normal(0,v2)
并且该正太分布是受到v=holidays_prior_scale这个指标影响的。
ARIMA模型的全称是自回归移动平均模型,是用来预测时间序列的一种常用的统计模型,一般记作ARIMA(p,d,q)。其中p是数据本身的滞后数,是AR模型即自回归模型中的参数。d是时间序列数据需要几次差分才能得到稳定的数据。q是预测误差的滞后数,是MA模型即滑动平均模型中的参数。
(1)p参数与AR模型
AR模型描述的是当前值与历史值之间的关系,滞后p阶的AR模型可以表示为:
yt=u+θ1yt-1+θ2yt-2+…+θpyt-p+et
(2.17)
其中u
是常数,et
代表误差。
(2)q参数与MA模型
MA模型描述的是当前值与自回归部分的误差累计的关系,滞后q阶的MA模型可以表示为:
yt=u+et+θ1et-1+…+θqet-q
(2.18)
其中u
是常数,et
代表误差。
(3)d参数与差分
yt=Yt-Yt-1
(2.19)
一阶差分:
yt=(Yt-Yt-1)-(Yt-1-Yt-2)
(2.20)
二阶差分:
yt=u+θ1yt-1+θ2yt-2+…+θpyt-p+et+θ1et-1+…+θqet-q
(2.21)
(4)ARIMA=AR+MA
ARIMA模型使用步骤:
①获取时间序列数据;
②观测数据是否为平稳的,否则进行差分,化为平稳的时序数据,确定d;
③通过观察自相关系数ACF与偏自相关系数PACF确定q和p。
XGBoost是一种Boosting型的树集成模型,在梯度提升决策树GBDT基础上扩展,能够进行多线程并行计算,通过迭代生成新树,即可将多个分类性能较低的弱学习器组合为一个准确率较高的强学习器。XGBoost采用随机森林对字段抽样,将正则项引入损失函数中,从而防止模型过拟合,并降低模型计算量。具体算法步骤如下:
①优化目标。假设模型具有k个决策树,即:
yi=i=1kfk(xi),fk∈F
(2.22)
其中,xi
是第i个输入样本,yi
为经过映射关系fk
计算出的预测值;F为所有映射关系集合。优化目标以及损失函数为:
L(t)=i=1nl[yi,y(t-1)i+ft(xi)]+Ω(ft)
(2.23)
其中,L(t)
为第t次迭代时目标函数,n为样本数量,y(t-1)i
为第t-1次迭代时模型的预测值,ft(xi
)为新加入的函数,Ω(ft
)为正则项。
②对L(t)
进行二阶泰勒展开和移除常数项操作后可得:
L(t)≅j=1T[(i∈Ijdi)wj+12(i∈Ijgi+λ)wj2]+γN
(2.24)
其中,di
为l对y(t-1)i
的一阶导数,gi
为对y(t-1)i
的二阶导数,N为叶子节点个数,Ij
为每个叶子节点上样本集合,wj2
为每个叶子节点分数的L2
模的平方,λ
和γ
为比重系数,防止产生过拟合。
LightGBM 是一个梯度Boosting框架,使用基于决策树的学习算法。它可以说是分布式的,高效的,有以下优势:
①更快的训练效率;
②低内存使用;
③更高的准确率;
④支持并行化学习。
实验证明,在某些数据集上使用LightGBM并不损失精度,甚至有时还会提升精度。以下为两种主要算法。
(1)GOSS 算法
输入:训练数据,迭代步数d,大梯度数据的采样率 a,小梯度数据的采样率b,损失函数和若学习器的类型(一般为决策树);
输出:训练好的强学习器;
①根据样本点的梯度的绝对值对它们进行降序排序;
②对排序后的结果选取前 a*100%的样本生成一个大梯度样本点的子集;
③对剩下的样本集合(1-a)*100%的样本,随机的选取b*(1-a)*100% 个样本点,生成一个小梯度样本点的集合;
④将大梯度样本和采样的小梯度样本合并;
⑤将小梯度样本乘上一个权重系数;
⑥使用上述的采样的样本,学习一个新的弱学习器;
⑦不断地重复①~⑥步骤直到达到规定的迭代次数或者收敛为止。
通过上面的算法可以在不改变数据分布的前提下不损失学习器精度的同时大大的减少模型学习的速率。
(2)EFB算法
步骤如下:
①将特征按照非零值的个数进行排序;
②计算不同特征之间的冲突比率;
③遍历每个特征并尝试合并特征,使冲突比率最小化。
LSTM通过引入了三个门来控制信息的传递,分别是遗忘门ft
、输入门it
和输出门ot
,三个门的作用为:
(1)遗忘门:控制上一时刻的内部状态ct-1
需要遗忘多少信息;
(2)输入门:控制当前时刻的候选状态ct
有多少信息需要保存;
(3)输出门:控制当前时刻的内部状态ct
有多少信息需要输出给外部状态ht
。
原理如图2.1所示。
图2.1 LSTM内部结构
计算步骤如下:
①先利用上一时刻的外部状态ht-1
和当前时刻的输入xt
,计算出三个门的值,以及候选状态ct
;
it=σ(Wixt+Uiht-1+bi)
(2.25)
ft=σ(Wfxt+Ufht-1+bf)
(2.26)
ot=σ(Woxt+Uoht-1+bo)
(2.27)
ct=tanh(Wcxt+Ucht-1+bc)
(2.28)
②结合遗忘门ft
和输入门it
来更新内部状态ct
,也称之记忆单元;
ct=ft⨀ct-1+it⨀ct
(2.29)
③结合输出门ot
,将内部状态ct
的信息传递给外部状态ht
。
ht=ot⨀tanh(ct)
(2.30)
GRU的结构比LSTM更为简单一些,GRU只有两个门,更新门zt
和重置门rt
。
(1)更新门:控制当前状态ht
需要从上一时刻状态ht-1
中保留多少信息,以及需要从候选状态ht
中接受多少信息;
(2)重置门:用来控制候选状态ht
的计算是否依赖上一时刻状态ht-1
。
zt=σ(Wzxt+Uzht-1+bz)
(2.31)
rt=σ(Wrxt+Urht-1+br)
(2.32)
ht=tanh(Whxt+Uh(rt⨀ht-1)+bh)
(2.33)
ht=zt⨀ht-1+(1-zt)⨀ht
(2.34)
图2.2 GRU内部结构
Seq2Seq是一个Encoder–Decoder结构的网络,它的输入是一个序列,输出也是一个序列。Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder将这个固定长度的向量变成可变长度的目标的信号序列。
(1)模型框架
在NLP任务中,其实输入的是文本序列,输出的很多时候也是文本序列。
(2)编码解码器结构
①编码器处理输入序列中的每个元素(在这里可能是1个词),将捕获的信息编译成向量(称为上下文内容向量)。在处理整个输入序列之后,编码器将上下文发送到解码器,解码器逐项开始产生输出序列。
②上下文向量
(a)输入的数据(文本序列)中的每个元素(词)通常会被编码成一个稠密的向量,这个过程叫做word embedding。
(b)经过循环神经网络(RNN),将最后一层的隐层输出作为上下文向量。
(c)encoder和decoder都会借助于循环神经网络(RNN)这类特殊的神经网络完成,循环神经网络会接受每个位置(时间点)上的输入,同时经过处理进行信息融合,并可能会在某些位置(时间点)上输出。
RNN需要许多输入向量来处理它们并输出其他向量。大致可以如下图2.3所示,假设每个矩形都有一个矢量深度和下图中其他隐藏的特殊特性。
图2.3 RNN类型
第3章 数据预处理及因子筛选
3.1 数据的获取
本文通过Jupyter的python接口对数据进行读取,结果共包含三种类型的数据:区域15分钟负荷数据、行业日负荷数据、气象数据。其中,区域15分钟负荷数据,记录了128156条某地区电网2018年1月1日至2021年8月31日间隔15分钟,一天共记录96次的电力系统负荷数据;行业日负荷数据,包含了该地区四个行业总计3610条从2019 年1月1日至2021年8月31日用电日负荷最大值和最小值数据;气象数据,包含了该地区2018年1月1日至2021年8月31日主要的气象数据,记录了1345条天气状况、最高温度、最低温度、白天风力风向、夜晚风力风向等气象指标。
3.2 数据预处理
图3.1数据预处理流程图
本文所用数据存在着大量的缺失,严重影响到数据挖掘建模的执行效率,甚至可能导致挖掘结果的偏差,所以进行数据清洗就显得尤为重要,数据清洗完成后接着进行或者同时进行数据集成、转换、规约等一系列的处理,这就是数据预处理的过程。数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具。特征构建则是通文本处理等方法初步构建出对建模有用的数据指标因子,进一步提高建模效率。本章描述数据预处理及特征构建的过程,其流程图如上图3.1所示。
3.2.1 数据分析
对区域15分钟负荷数据分析,如下图3.2所示,面积图中出现大量白色坑洼的形状,说明该时间段内存在缺失值,所以在对数据进行预处理时,要考虑时间序列对缺失值的影响,选择适当的填补方法。
图3.2 2018-2021年区域15分钟缺失情况
对行业日负荷数据最小值占比情况分析,如下图3.3和3.4所示,用电日负荷最高的行业是大工业,占比达到80%;其次是商业,占比16%;第三的是普通工业,占比3%;最后是非普工业,占比1%。其中,非普工业存在大量的数据缺失,而且各个行业日用电负荷比例不均衡,所以在对数据进行预处理时,按行业分别处理。
图3.3各行业用电日负荷缺失情况
图3.4各行业用电日负荷最小值占比情况
3.2.2 缺失值分析与处理
3.2.2.1 缺失值分析
每个特征因子或多或少都存在缺失值,如果某个特征因子缺失的样本比例极大,则采取剔除的方式处理。因为如果使用其他方式进行填补将会极大降低整体数据的可信性,故需要剔除。
如果某个特征因子缺失的样本比例适中,则采用填补的方式进行处理。同时考虑到不同行业对各项指标缺失值衡量的标准是不统一的。因此对处于该区间数据的缺失值,将0值当作空白值,同时对行业进行分类,对需要填充缺失值的行业数据进行均值填补。
如果某个特征因子缺失的样本较少,则根据不同附件中缺失值数据的特点,采用插值或移动平均法进行填补。
处理缺失值的数学模型如下:
Γ极大,剔除该特征因子Γ适中,用均值填补Γ极小,用插值法/移动平均法填补
其中,Γ
表示样本的缺失比例。
3.2.2.2 缺失值处理
对于提供的附件数据,本文采用上述的三种方法对缺失值进行处理。
步骤 1:剔除缺失比例极大的数据
行业日负荷数据中非普工业的数据从2019年1月1日到2019年10月9日开始缺失,缺失比例为29%,对于小型数据来说是属于缺失比例较大的,为保证时间的完整性,故将其剔除。同时对于四个行业共同缺失2021年1月24日的数据,缺失数目较少,故用插值法对其填补。经过数据填充,行业日负荷数据由3610条增加到3614条。行业日负荷数据缺失值如图3.5所示。
图3.5 2019-2021年四个行业的数据
步骤 2:移动平均法填补缺失值
区域15分钟负荷数据中一个小时有4个数据,则一天有96个数据,考虑到移动平均法的核心思想是取出缺失值发生之前的一段滚动时间内的值,计算其平均值或中位数来填补缺失值,符合该附件数据的时间特性,故对其缺失值进行移动平均法进行填充。经过数据填补,区域15分钟负荷数据由128156条增加到128544条。区域15分钟负荷数据缺失值如下图3.6所示。同时观察到2018年9月份前的某地区电网负荷数据没有与后面的数据那样呈现出季节性,如下图3.7所示,考虑到负荷降低可能是国家颁布的某些政策或其他因素影响,故后续预测时只考虑2018年9月之后的负荷数据。
图3.6 2018年-2021年每隔15分钟的数据
图3.7 2018年-2021年区域15分钟负荷
3.2.3 重复值处理
气象数据中没有缺失值,但是有重复值,为了避免影响建模效果,故将其剔除。重复的气象数据如表3.1所示。
表3.1气象数据重复值
日期 | 天气状况 | 最高温度 | 最低温度 | 白天风力风向 | 夜晚风力风向 | 重复个数 |
2018年1月1日 | 多云/多云 | 22℃ | 12℃ | 无持续风向<3级 | 无持续风向<3级 | 2 |
2020年7月4日 | 雷阵雨/雷阵雨 | 27℃ | 27℃ | 无持续风向1-2级 | 无持续风向1-2级 | 2 |
2020年7月5日 | 多云/多云 | 35℃ | 27℃ | 无持续风向1-2级 | 无持续风向1-2级 | 2 |
2020年12月3日 | 晴/晴 | 21℃ | 11℃ | 北风1-2级 | 北风1-2级 | 2 |
2021年6月4日 | 大雨/小雨 | 28℃ | 23℃ | 北风1-2级 | 北风1-2级 | 3 |
3.2.4 天气特征分析与处理
对于数据特征的构建的部分数据可见如下表,特征标签除了“行业类型”、“日期”、“有功功率最大值(kw)”、“有功功率最小值(kw)”、“日期1”,其他的均为构建的特征数据。特征名称及特征解释可见如下表3.2。
表3.2气象特征数据
特征名称 | 特征解释 | 特征名称 | 特征解释 |
最高温度 | 当天的最高温度 | 每天第n小时 | 每天的第几个小时 |
最低温度 | 当天的最低温度 | 每周第n天 | 每周的第几天 |
天气1_0 | 当天的天气情况1 | 每年第n周 | 每年的第几个星期 |
天气2_0 | 当天的天气情况2 | 每天第n时间段 | 每天的第几个时间段 |
天气状况 | 当天的天气情况 | 第n季节 | 每年的第几个季节 |
白天风力风向 | 当天白天的风力风向 | 是否月初 | 当天是否在每月第一天 |
夜晚风力风向 | 当天夜晚的风力风向 | 是否月末 | 当天是否在每月最后一天 |
第n年 | 第几年 | 是否季初 | 是否在季节的第一天 |
每年第n月 | 每年的第几个月 | 是否季末 | 是否在季节的最后一天 |
每年第n天 | 每年的第几天 | 是否周末 | 是否在每一周最后一天 |
第4章 基于机器学习算法的问题一研究
4.1 第一小问模型的建立与分析
4.1.1 思路分析
图4.1 问题一第一小问思路
第一小问题目要求对未来的10天(960条15min)的数据进行预测,由于数据中的时间间隔较短,并且预测的时间长度为10天,所以我们不将附件3中的天气因素对电力负荷影响的情况考虑进去,所以第一小问使用到的数据只是附件1中每隔15min的电力系统负荷数据。并且对电力负荷数据进行归一化处理,消除奇异电力负荷样本数据导致的不良影响,可以提升模型的预测精度。
由于第一小问我们需要预测未来10天(960条15min)的电力负荷数据,所以我们选取已有数据的后1000条数据作为我们的测试样本,检查模型预测的精度。测试样本数据不能放入到模型中训练,容易导致模型在测试中出现过拟合的现象,因为如果你的测试数据已经在模型中训练过了,在测试的时候会出现“信息泄露”的情况,这是由于模型在训练的时候已经对测试数据进行了“学习”。测试数据选择在训练数据之后的数据,因为我们需要保证数据的时序性。
由于机器学习模型无法直接对时间序列数据进行训练预测,所以我们需要将时间序列数据转换成机器学习中的监督学习的实验数据,例如我们拥有时间序列数据:[1,2,3,4,5],我们需要设计算法对其进行转换,假如我们使用前2步的数据实现预测后一步的数据,那上述的数据将变成X=[1,2],Y=[3];X=[2,3],Y=[4];X=[3,4],Y=[5],将时间序列数据转换成机器学习中的监督学习数据,用于机器学习模型的训练。思路流程图如上图4.1所示。
由于在数据分析时发现,每天的电力负荷数据都有一个周期性的特征,所以在第一小问中我们使用96条数据(1天)预测后一条的数据。
对于LSTM、GRU和Seq2seq等模型我们都将模型设定在本地环境或者是云服务器环境的GPU(图形处理器)上训练,加快模型的训练速度和预测速度。
4.1.2 模型构建
4.1.2.1 ARIMA模型分析
ARIMA(自回归综合移动平均线)是两个模型AR(自回归)和MA(移动平均线)的组合。它有3个超参数-P(自回归滞后),d(微分阶),Q(移动平均),分别来自AR,I和MA分量。AR部分是前期与当前时间段之间的相关性。为了消除噪声,使用了MA部分。I部分结合在一起的AR和MA部分。所以我们需要实现ARIMA算法并且去预测的时候,我们需要确定三个参数P、D和Q。我们需要借助ACF(自相关函数)和PACF(部分自相关函数)绘图。ACF和PACF图用于求ARIMA的P和Q值。我们需要检查,在x轴上的哪个值,在y轴上第一次下降到0,则一般P和Q值选择为当前的x,即从PACF(y=0)得到P,从ACF(y=0)得到Q。
查看ACF和PACF,确定P和Q,我们可以发现P和Q都可以选择为1。
图4.2 ACF与PACF图
参数选择好后,使用Python自带的statsmodels库实现ARIMA模型,使用的参数如上所述,模型的拟合效果可见如下图,其中蓝色的部分属于真实数据,黄色部分的数据属于拟合数据。我们可以很明显发现模型的拟合效果并不好,在某些部分模型的拟合状态表现并不出色,它未能学习实验数据中的规律,在预测的时候可能模型带有线性预测的方式预测数据,显得模型在某些阶段的拟合效果都呈“线性”
图4.3 ARIMA模型拟合效果
选择数据的后1000条数据作为测试数据,用于评估模型的精度,因为我们需要评估未来10天(960条15min)的数据,其他的数据选择上述的参数继续重新的训练。得到1000条测试数据预测的误差结果可见如下表4.1。
表4.1误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 94321321.45316 | 12352.86842 | 10322.35323 | 0.16247 | 192s |
4.1.2.2 Prophet模型分析
本文使用实现该模型的编程语言是Python,基于facebook开源的Fprophet库实现。我们首先将前述部分处理好的实验数据,切分后1000条的数据作为测试集,其他的数据作为训练数据输入到模型中进行训练。
模型训练效果图可见如下,蓝色的数据除了后1000条数据其他的都为模型的拟合数据,红色的全部均为真实数据,蓝色数据的后1000条的数据为测试数据,是属于在模型训练拟合完毕之后进行模型预测得到的。
图4.4 Prophet模型的拟合效果
由于模型的预测效果较好,为了直观展示数据的预测效果,取出后1000条预测的数据进行展示,效果可见如下图。我们发现数据的预测情况都比较好,除了一些高峰预测效果不足。个人认为这是模型在预测的过程中具有“保守”的机制,在一些过于高或者是过于低的点,预测得到的数据都不会太高或者是太低。
图4.5 Prophet模型的预测效果
对于全部1000条测试数据预测的误差结果可见如下表。我们可以看到R²系数达到0.86336,比上述的ARIMA模型的精度高许多,是因为prophet模型对于周期性特征比较明显的时间序列数据的训练和预测效果都很好,它擅长处理具有季节性特征大规模的时间序列数据,在电力系统负荷数据中,数据本身含有较多的季节性特征。
表4.2误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 76587037.94186 | 8751.40206 | 7005.21820 | 0.86336 | 546s |
4.1.2.3 LightGBM模型分析
使用LightGBM模型对训练数据进行训练,对测试数据进行预测,分析精度,模型的预测效果可见如下,我们可以很明显发现该模型对于周期性特征标明显的时间序列数据拟合效果非常差,从另外一种角度看,可能是该模型对于时间序列的特征数据学习得还不足够。
图4.6 LightGBM模型预测效果
我们直接查看模型的预测精度,我们可以看到R²系数非常低,只有0.03062,比上述的ARIMA模型的预测精度还低。
表4.3误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 625101763.51921 | 25002.03519 | 21756.22483 | 0.03062 | 18.3s |
4.1.2.4 XGBoost模型分析
使用XGBoost对训练数据进行训练,对测试数据进行预测,模型的预测效果可见如下图4.7。我们可以发现该模型的预测效果与LightGBM模型的预测效果非常类似。
图4.7 XGBoost模型预测效果
在具体的预测精度上,Xgboost的R²系数与LightGBM的R²系数相差不大,说明了传统的机器学习模型在单纯时间序列数据中的学习效果并不好,需要加入其他的时间序列特征数据辅佐学习。
表4.4误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 618028569.01498 | 24860.18039 | 21647.86006 | 0.0332 | 15.1s |
4.1.2.5 LSTM模型分析
使用tensorflow框架实现RNN系列的LSTM模型,对训练数据进行输入,预测测试数据,我们可以看到1000条测试数据的预测情况可见如下图。对比上述4个模型,LSTM的模型的效果是最好的,我们可以看到1000条数据的总体预测效果都与真实值非常接近。
图4.8 LSTM模型预测效果
为了更加明显查看模型的预测效果,我们直接查看测试数据的最后100条数据的预测效果,可见如下图4.9,我们仔细看还是可以看到LSTM模型的预测得到的数据的规律特征基本与真实数据的一直,并且预测得到的预测数据均在真实数据的上方。
图4.9 后100条测试数据预测效果
为了对比模型的训练时间,直接把模型的迭代次数epoch全部设置为50次,模型数据读取的数据样本批次batch_size都设定为64。我们可以看到模型在前几个epoch的loss就已经接近平稳了。
图4.10 LSTM模型的训练损失
查看LSTM模型的预测精度,我们可以发现R²系数已经达到了0.96101,模型的训练时间为48.4s,因为模型在GPU上运行,所以运行时间会比较快。
表4.5误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 24057649.22168 | 4904.85976 | 3864.78760 | 0.96101 | 48.4s |
4.1.2.6 GRU模型分析
我们使用RNN系列的另外一个模型GRU对训练数据进行训练,对测试数据进行预测,我们可以看到总体的预测效果要比LSTM模型的要较好一些。
图4.11 GRU模型预测效果
我们直接选择预测数据的后100条数据进行查看,我们可以很明显发现,GRU模型的预测效果要比LSTM模型的要好,预测值与真实值之间非常的接近。
图4.12 后100条测试数据预测效果
图4.13 GRU模型的训练损失
对比LSTM的预测精度,我们可以看到GRU模型的预测精度R²系数已经达到了0.98527,要比LSTM的要大约0.02,并且训练时间也要比LSTM模型的要短。这是因为GRU只含有两个门控结构,且在超参数全部调优的情况下,与LSTM的性能相当,但是GRU结构更为简单,参数比LSTM 少,模型训练样本就会较少,所以模型的训练时间要比LSTM的短,但是模型的精度并不比LSTM逊色,此次实验中GRU在精度和速度上都要比LSTM好。
表4.6误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 9091717.41301 | 3015.24749 | 1571.40683 | 0.98527 | 17.5s |
4.1.3 模型对比与选择
表4.7 6种模型性能对比
指标 | MSE | RMSE | MAE | R² | 训练时间 | |
模型 | ARIMA | 94321321.45316 | 12352.86842 | 10322.35323 | 0.16247 | 192s |
Prophet | 76587037.94186 | 8751.40206 | 7005.21820 | 0.86336 | 546s | |
XGBoost | 618028569.01498 | 24860.18039 | 21647.86006 | 0.0332 | 15.1s | |
LightGBM | 625101763.51921 | 25002.03519 | 21756.22483 | 0.03062 | 18.3s | |
LSTM | 24057649.22168 | 4904.85976 | 3864.78760 | 0.96101 | 48.4s | |
GRU | 9091717.41301 | 3015.24749 | 1571.40683 | 0.98527 | 17.5s |
我们可以发现GRU模型无论是精度还是从训练时间上都比LSTM模型要好,所以本小问将使用训练好的GRU模型对未来10天(960条)的数据进行预测,我们采用的是递归预测的方法,通过模型输入已有数据的最后96条作为数据输入,预测下一条数据,将预测结果作为模型的输入数据保留,再进行预测下一条的数据,再重复上述的操作,一共递归预测960次(10天),得到我们需要预测的结果。该方法有一个很大的弊端,就是预测得到的结果它们的误差是累积,预测的数据越多得到的误差累积得越多。但是因为此处我们只需要预测未来10天的数据,时间长度较短,所以直接选择递归预测的方法预测未来10天(960条)的数据。本文给出预测得到实验数据前96条如表4.8所示。
表4.8 10间隔15分钟负荷预测结果(前96条)
时间 | 负荷预测 | 时间 | 负荷预测 | 时间 | 负荷预测 |
2021-9-1 00:00 | 221427.8 | 2021-9-9 00:00 | 210484.06 | 2021-9-17 00:00 | 258960.94 |
2021-9-1 00:15 | 215679.0 | 2021-9-9 00:15 | 209311.95 | 2021-9-17 00:15 | 255515.6 |
2021-9-1 00:30 | 211990.97 | 2021-9-9 00:30 | 206187.08 | 2021-9-17 00:30 | 253143.81 |
2021-9-1 00:45 | 211262.02 | 2021-9-9 00:45 | 208684.52 | 2021-9-17 00:45 | 250798.6 |
2021-9-2 00:00 | 219326.88 | 2021-9-10 00:00 | 221628.69 | 2021-9-18 00:00 | 259049.53 |
2021-9-2 00:15 | 213334.02 | 2021-9-10 00:15 | 222434.3 | 2021-9-18 00:15 | 255025.11 |
2021-9-2 00:30 | 209692.44 | 2021-9-10 00:30 | 219341.6 | 2021-9-18 00:30 | 252172.6 |
2021-9-2 00:45 | 209609.83 | 2021-9-10 00:45 | 222297.19 | 2021-9-18 00:45 | 249118.4 |
2021-9-3 00:00 | 217853.27 | 2021-9-11 00:00 | 235833.7 | 2021-9-19 00:00 | 255962.17 |
2021-9-3 00:15 | 211616.8 | 2021-9-11 00:15 | 237244.27 | 2021-9-19 00:15 | 251034.2 |
2021-9-3 00:30 | 208017.75 | 2021-9-11 00:30 | 233598.6 | 2021-9-19 00:30 | 246764.56 |
2021-9-3 00:45 | 208241.28 | 2021-9-11 00:45 | 236939.38 | 2021-9-19 00:45 | 242753.55 |
2021-9-4 00:00 | 216015.05 | 2021-9-12 00:00 | 250436.73 | 2021-9-20 00:00 | 248594.11 |
2021-9-4 00:15 | 209449.58 | 2021-9-12 00:15 | 251415.89 | 2021-9-20 00:15 | 242479.72 |
2021-9-4 00:30 | 204893.89 | 2021-9-12 00:30 | 247039.16 | 2021-9-20 00:30 | 238120.83 |
2021-9-4 00:45 | 204781.36 | 2021-9-12 00:45 | 248089.0 | 2021-9-20 00:45 | 234141.25 |
2021-9-5 00:00 | 212259.19 | 2021-9-13 00:00 | 258676.88 | 2021-9-21 00:00 | 240707.22 |
2021-9-5 00:15 | 206002.77 | 2021-9-13 00:15 | 256711.0 | 2021-9-21 00:15 | 234487.81 |
2021-9-5 00:30 | 200930.27 | 2021-9-13 00:30 | 251478.61 | 2021-9-21 00:30 | 231190.45 |
2021-9-5 00:45 | 197812.12 | 2021-9-13 00:45 | 250404.4 | 2021-9-21 00:45 | 227772.98 |
2021-9-6 00:00 | 206514.53 | 2021-9-14 00:00 | 258885.02 | 2021-9-22 00:00 | 235240.86 |
2021-9-6 00:15 | 202395.5 | 2021-9-14 00:15 | 254484.25 | 2021-9-22 00:15 | 229098.27 |
2021-9-6 00:30 | 197951.8 | 2021-9-14 00:30 | 249110.48 | 2021-9-22 00:30 | 225745.95 |
2021-9-6 00:45 | 197025.44 | 2021-9-14 00:45 | 247101.14 | 2021-9-22 00:45 | 222286.58 |
2021-9-7 00:00 | 205184.56 | 2021-9-15 00:00 | 255200.94 | 2021-9-23 00:00 | 229589.69 |
2021-9-7 00:15 | 201049.1 | 2021-9-15 00:15 | 251507.27 | 2021-9-23 00:15 | 222630.52 |
2021-9-7 00:30 | 196834.55 | 2021-9-15 00:30 | 248013.14 | 2021-9-23 00:30 | 218873.38 |
2021-9-7 00:45 | 196738.81 | 2021-9-15 00:45 | 246758.19 | 2021-9-23 00:45 | 214993.3 |
2021-9-8 00:00 | 206312.83 | 2021-9-16 00:00 | 256162.36 | 2021-9-24 00:00 | 222351.06 |
2021-9-8 00:15 | 202739.69 | 2021-9-16 00:15 | 253338.69 | 2021-9-24 00:15 | 215974.17 |
2021-9-8 00:30 | 199064.0 | 2021-9-16 00:30 | 251079.78 | 2021-9-24 00:30 | 212531.94 |
2021-9-8 00:45 | 199793.28 | 2021-9-16 00:45 | 249499.81 | 2021-9-24 00:45 | 209415.48 |
4.2 第二小问的分析
4.2.1 思路分析
图4.14问题一第二小问思路
本题思路如上图4.14所示。由于本题第二小问需要预测未来3个月的日负荷,时间周期长度要远远长于问题一第一小问,所以需要使用到附件3中该地区的天气特征,进行特征构建,加强模型预测的记忆力和预测能力。对于特征的构建我们考虑了两种特征,第一种是天气特征,第二种是时间特征。
其中第一种特征分两种小特征:
1、连续型的天气特征,例如最高温度和最低温度,
2、离散型的天气特征,例如风力状况、天气状况等。
第二种时间特征也与上类似。
1、连续型的时间特征,例如每天第n个小时、每年第n天、每年第n月等
2、离散型的时间特征,例如是否在月初、是否在周末、是否在月末等。
以上的特征都充分考虑到了时间序列中的周期性特征,该部分特征无论是在普通的机器学习模型中还是深度学习的循环神经网络中都能很容易学习到数据的周期性特征,比赛背景中的重复考虑历史的特征因素。
由于该问需要预测未来三个月的电力负荷数据,对于递归实现预测的方法实现不了,因为我们没有可供预测输入的特征数据,所以本小问我们使用时间序列方法中预测未来数据的一种方法,就是实现多步预测,多步预测即输入过去单天或是多天的单维或多维的时间序列特征数据,实现一次性预测未来多天数据的方法。该方法也需要对时间序列数据以及其特征数据进行转换,转成机器学习中的监督学习类型的特征数据,具体实现的方法与上述第一小问类似,只是加入了多种特征变量数据。多步预测方法可以在GRU模型和LSTM模型中实现,我们需要对模型的数据输入与数据输出进行更改,模型的输入一般为[samples,timesteps,n_features],我们需要更改的为时间步长与特征维度,也就是timesteps,n_features,对于模型的输出我们直接设定为我们需要预测的时间步长即可,而Seq2Seq模型可以直接实现多输入多输出的特点。多步预测的代价是算力成本与内存成本,虽然多步预测没有递归预测的误差累积,可是在计算方面的代价非常大。
由于ARIMA模型在问题一的第一小问中呈现的效果并不好,此问需要预测的时间长度会更加长,所以我们不使用ARIMA模型。
4.2.2 模型分析
(1)Prophet模型
由于prophet模型是属于单特征输入的模型,无法加入其他的变量特征,所以我们只能选择输入时间序列数据的时间数据进行训练预测。我们可以看到,prophet模型在季节性较强的时间序列中体现的总体的效果还是可观的。
图4.15 Prophet模型的预测效果
我们选择预测数据的一部分进行仔细查看分析,我们可以发现该模型的预测能力并不好,在某些时间段真实数据与预测数据之间的差距还是有的。
图4.16 部分测试数据的拟合效果
我们直接查看模型的预测精度,发现模型的R²系数只有0.66446,偏低。
表4.9误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 206772887.58734 | 14379.59970 | 10636.53529 | 0.66446 | 763.2s |
(2)XGBoost模型
图4.17 XGBoost模型的预测效果
表4.10误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 747199931.33504 | 27334.95805 | 22773.42450 | 0.0212 | 42.1s |
(3)LightGBM模型
图4.18 LightGBM模型预测效果
表4.11误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 822113223.45823 | 28672.51687 | 23419.78515 | 0.0315 | 39.2s |
(4)LSTM模型
图4.19 LSTM模型预测效果
图4.20 后100条测试数据预测效果
图4.21 LSTM模型的训练损失
表4.12误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 111349561.24729 | 10552.23016 | 8670.49496 | 0.82129 | 261.4s |
(5)GRU模型
使用GRU模型对训练数据进行训练,对测试数据进行测试,查看模型的总体预测效果,具体可见如下图4.22所示。
图4.22 GRU模型的预测效果
图4.23 后100条测试数据的预测效果
图4.24GRU模型的训练损失
表4.13误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 40982003.10939 | 6401.71876 | 4085.90188 | 0.93423 | 147.9s |
(6)Seq2seq模型
使用Seq2seq模型对已准备好的数据进行训练,对测试数据进行预测,对于总体的预测效果可见如下图4.25,我们可以发现Seq2seq模型的预测效果非常好。
图4.25 Seq2seq模型的预测效果
我们选择100条预测数据进行查看分析,我们可以看到seq2seq模型在部分的时间点的预测值与真实值几乎相等。效果要比GRU模型和LSTM模型要好,这是因为Seq2seq模型属于encoder-decoder结构的一种,它直接使用两个RNN,一个RNN作为encoder,另一个RNN作为decoder,我们此处直接将2个GRU么作为Seq2seq模型的encoder和decoder,所以它取得的效果要比单独的GRU模型要好。
图4.26 后100条测试数据的预测效果
图4.27 Seq2seq模型的训练损失
我们可以看到seq2seq模型的预测精度达到了0.96440,模型的效果比LSTM和GRU的都要好。
表4.14误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 22184374.28901 | 4710.02912 | 2610.03022 | 0.96440 | 186.4s |
4.2.3 模型对比与选择
表4.15 6种模型性能对比
指标 | MSE | RMSE | MAE | R² | 训练时间 | |
模型 | Prophet | 206772887.58734 | 14379.59970 | 10636.53529 | 0.66446 | 763.2s |
XGBoost | 747199931.33504 | 27334.95805 | 22773.42450 | 0.0212 | 42.1s | |
LightGBM | 822113223.45823 | 28672.51687 | 23419.78515 | 0.0315 | 39.2s | |
LSTM | 111349561.24729 | 10552.23016 | 8670.49496 | 0.82129 | 261.4s | |
GRU | 40982003.10939 | 6401.71876 | 4085.90188 | 0.93423 | 147.9s | |
Seq2seq | 22184374.28901 | 4710.02912 | 2610.03022 | 0.96440 | 186.4s |
通过表4.15可知,由于seq2seq模型的效果最好,所以我们使用该模型预测未来3个月的数据(8640条的数据),由于数量比较大,我们此处只展示前10天的预测值和日负荷的最大最小值以及相应达到最大最小值的时间,具体可见如下表。实现方法主要是对预测的数据进行分组,以96个数据(一天)进行分组分割,使用python的max()和min()函数对其实现找出当前96个数据(日负荷)中的最大值和最小值,以及相对应的时间,所得到的预测结果如表4.16所示。
表4.16未来3个月日负荷最大值最小值预测结果(前10天)
天数\标签 | 日负荷最大值 | 时间 | 日负荷最小值 | 时间 |
第1天 | 251705.36 | 2021-9-1 18:15 | 196408.19 | 2021-9-1 8:00 |
第2天 | 269712.2 | 2021-9-2 13:15 | 195893.3 | 2021-9-2 8:00 |
第3天 | 272861.0 | 2021-9-3 13:15 | 198549.55 | 2021-9-3 7:00 |
第4天 | 271592.1 | 2021-9-4 13:15 | 200284.53 | 2021-9-4 7:00 |
第5天 | 270970.6 | 2021-9-5 13:15 | 199892.89 | 2021-9-5 7:00 |
第6天 | 272957.78 | 2021-9-6 13:15 | 196983.44 | 2021-9-6 6:00 |
第7天 | 263006.47 | 2021-9-7 17:15 | 197717.64 | 2021-9-7 8:00 |
第8天 | 252653.42 | 2021-9-8 17:15 | 198571.38 | 2021-9-8 8:00 |
第9天 | 270470.16 | 2021-9-9 18:15 | 195260.44 | 2021-9-9 8:00 |
第10天 | 269862.47 | 2021-9-10 13:15 | 195605.45 | 2021-9-10 7:00 |
第5章 基于多种算法的问题二研究
本题通过问题一求解出来的效果最好的seq2seq模型来对该地区各行业未来3各月日负荷最大值和最小值的结果进行预测。同时第一小问通过1.5倍标准差找出负荷突变时间,结合国家政策、重大事件以及气象等原因对其分析,最后根据国家“双碳”目标的执行对各行业未来影响提出具有针对性的建议。问题二的思路流程图如图5.1所示。
图5.1问题二思路
5.1第一小问的分析
本文通过找出各个行业的标准差,然后将各行业中当天与前一天相比高于1.5倍标准差的值视为突变值,所得突变点如图5.2所示。
图5.2 各行业电力突变情况
上图中,绿色的点代表观测点,红色的点代表突变点,根据以上结果,将突变点进行时间汇总,得到的结果如表5.1所示。
表5.1高于1.5倍标准差突变时间点汇总
行业 | 突变时间 |
大工业 | 2019-6-16、2019-6-17 |
商业 | 2020-7-13、2020-9-7、2020-9-21 |
普通工业 | 2019-5-13、2019-6-10、2019-6-16、2019-6-17、2019-7-1、2019-7-8、2019-9-9、2019-9-16、2020-6-1、2020-6-8、2020-6-15、2020-6-22、2020-6-28、2020-7-6、2020-7-13、2020-8-24、2020-8-31、2020-9-7、2020-9-14、2021-5-17、2021-6-15、2021-6-21、2021-6-28、2021-7-5 |
非普工业 | 2020-7-13、2020-9-7、2020-9-21 |
大工业电力负荷突变时间有2个,商业3个,普通工业24个,非普工业3个。可以发现,除了普通工业,其余行业突变点均只有个位数,说明它们对人们的日常生活起到不少作用。
本文将从以下四个方面来进行分析各行业用电负荷突变的原因。
①疫情方面的影响
为了减轻疾病的传播,许多国家采取了各种减少社会活动的措施,包括旅行禁令、城市封锁和居家工作的政策。新冠疫情席卷全球、深刻影响人类生活生产活动的同时,也给电力行业带来一系列变化和挑战。
电力系统负荷呈现一定的季节性,如图5.3所示。本文以2020年为分界线,将该图划分为3个阶段,分为“疫情前”、“疫情高峰”和“疫情好转”阶段。每年的1月到3月,都会出现一段用电低谷时间,那么本文以“疫情前”阶段出现的低谷点水平画出一条直线作为“平常低谷线”,可以明显看到,“疫情高峰”阶段的低谷点与“平常低谷线”的距离很长,急剧的电力下降表明以上措施极大地改变了人们的工作和生活方式,从而导致电力需求的显著变化。此后,需求平稳抬升,至5月下旬已接近去年水平。
图5.3 每年1-3月负荷总体对比
②国家政策的影响
2020年9月国家提出碳减排两阶段目标(简称“双碳”战略目标),各行业的用电负荷情况也因此发生了突变,如图5.4和图5.5所示。在国家提出“双碳”目标后,各行业用电负荷在一段时间内是下降的。
图5.4 2019-2021年大工业和商业用电负荷情况
图5.5 2019-2021年非普工业和普通工业用电负荷情况
③节假日的影响
我们知道,元旦、春节、清明节、劳动节、端午节、中秋节、国庆节是法定节假日,周末是休息日,在这些时间段,各行业的电力用电负荷情况都是会受到影响的。这里本文休息日以11月份为例,节假日以春节和国庆节为例,通过绘制折线图将突变点呈现出来。如图5.6和图5.7所示。
图5.6 各个行业工作日与休息日负荷情况
图5.7 各个行业节假日负荷情况
④气象条件的影响
大工业:以突变时间2019-6-16为例,通过与天气数据匹配可知,前一天该地区天气状况是多云,而当天天气是雷阵雨,在如此恶劣天气的干扰下,电力用电负荷明显增加,两天之间负荷差值为8万7千多,量级程度为万级别。
商业:以突变时间2020-7-13为例,通过与天气数据匹配可知,前一天该地区天气状况是多云,而当天天气晴朗,最高温度达到了36摄氏度,在如此炎热的天气下,电力用电负荷明显增加,两天之间负荷差值为2万1千多,量级程度为万级别。
普通工业:以突变时间2019-5-13为例,该地区当天和前一天天气状况均为多云,加上天气炎热,最高温度达到了33摄氏度,高温天气使得行业用电负荷增加,两天之间负荷差值为5千多,量级程度为千级别。
非普工业:以突变时间2020-9-7为例,通过与天气数据匹配可知,该地区当天和前一天天气状况均为雷阵雨,再加上天气炎热,最高温度达到了33摄氏度,几天的暴雨使得行业用电负荷增加,两天之间负荷差值为1千300多,量级程度为千级别。
5.2第二小问模型的建立与分析
5.2.1 思路分析
该小问与第一大题第二小问类似,需要预测未来3个月的用电负荷最大值和最小值,不过该小问需要对数据按照行业的类型进行区分,对不同行业的用电负荷最大值最小值进行预测,由于需要预测未来三个月的电力负荷数据,所以我们需要使用到附件3中的天气气象特征数据,加强模型的预测能力。
5.2.1 模型选择
我们先对大工业类型的用电负荷进行分析,查看该行业的有功功率最大值和有功功率最小值的用电负荷情况。我们先对大工业用电负荷的有功功率最大值进行预测分析。
图5.8 大工业用电负荷情况
由于上述多次实验表明,在此次的竞赛数据集中LSTM、GRU和Seq2seq都具有较好的效果,其中Seq2seq模型的精度在三个模型中最高。所以本小问直接使用Seq2seq模型对各个类型行业的用电负荷最大最小值进行预测并且分析其精度。
我们将已有的大工业行业的电力负荷数据进行分割,选择最后的90个数据(默认3个月)作为我们的测试集,其他的用于模型训练。
Seq2Seq
使用Seq2seq模型对大工业的有功功率最大值数据进行训练,其中大工业的有功功率最大值的预测效果可见如下图。
图5.9 大工业用电负荷预测
我们选择模型预测的后60天数据进行查看。
图5.10 电力负荷预测
查看模型训练过程中的损失情况
图5.11 损失值
查看模型在90天测试数据中的预测精度
表5.2误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 22431622.86413 | 4736.20342 | 3816.31042 | 0.72082 | 62.2s |
我们可以发现R²系数只有0.72082,经过多次的模型参数调整和天气特征的重新构建,精度最高也只有0.72082。所以我们认为是训练的数据过于少,因为大工业的数据仅有973天,选择后90天作为测试数据,那么仅有883天的数据可以输入到模型中训练,虽然加上了天气数据的特征,当时训练数据还是太少,并且我们可以从大工业用电负荷的有功功率最大值最小值的图进行分析,可以发现该行业的电力负荷突变点非常多,并且电力负荷的周期性特征并不明显。所以在这种情况下,数据量少自然预测得到的精度也非常低。
我们对大工业有功功率电力负荷最小值进行预测。
图5.12 大工业用电负荷预测
图5.13 电力负荷预测
图5.14 损失值
表5.3误差结果
指标 | MSE | RMSE | MAE | R² | 训练时间 |
数值大小 | 123602472.06916 | 11117.66487 | 6363.04293 | 0.26212 | 57.1s |
对于其他的行业的做法与上一致,此处不再展开一一展示,具体各个行业的结果可以在附件中查看。下表展示有功功率最大值的四个行业前10天的预测数据。
表5.4四个行业的有功功率最大值预测
天数\标签 | 大工业 | 非普工业 | 普通工业 | 商业 |
第1天 | 118234.33 | 3456.3316 | 6477.9364 | 64373.8582 |
第2天 | 127383.7914 | 3445.0172 | 11173.9704 | 75715.2143 |
第3天 | 130624.1294 | 2757.9704 | 10322.0262 | 133013.9442 |
第4天 | 133884.6344 | 2230.2156 | 10023.3055 | 98365.1308 |
第5天 | 133705.4784 | 3453.4576 | 7792.3842 | 133336.1868 |
第6天 | 129028.277 | 3304.534 | 7106.9399 | 95776.0591 |
第7天 | 130521.5716 | 2983.4472 | 9490.039 | 139406.0587 |
第8天 | 130512.3166 | 2877.7188 | 10037.5823 | 138429.8141 |
第9天 | 126342.6202 | 2529.9556 | 10373.2095 | 124090.8492 |
第10天 | 123890.6018 | 1983.122 | 10089.6846 | 145948.7153 |
5.3第三小问的分析
5.3.1电力系统负荷分析
为了方便看各行业一年用电总负荷,本文将每一天的负荷值进行汇总。通过图5.15可以看到,各行业用电情况(除2019年)分别是大工业>商业>普通工业>非普工业,前两个行业用电负荷突破了千万级别,而且大工业的用电负荷占据了二分之一,如图5.16所示。相比与前两个行业,普通工业和非普工业用电负荷则显得微不足道。
图5.15 不同行业用电年负荷最值
图5.16不同行业用电年负荷最值占比情况
5.3.2国家“双碳”目标对各行业的影响
国家为能源变革提出了战略目标“双碳”。“双碳”指的是“碳中和”和“碳达峰”。“碳达峰”指国家承诺在2030年前,二氧化碳的排放达到峰值后慢慢减少,且不再增长。“碳中和”指到2060年,对于已经排放的二氧化碳,采取必要措施。所以,国家“双碳”目标对各行业用电负荷影响主要会体现在以下三个方面:
(1)传统煤电受到限制
首先煤电是主要的碳排放原因,煤电是国家能源发电的主力军,也是二氧化碳污染的主要来源,面对能源变革,节能减排减碳的压力,传统煤电也面临着淘汰的风险。
(2)市场化电力占比高
由于目前电力供需格局发生变化,不少地区发生电力短缺,而采取的限电措施,这说明,电力过剩和电力短缺会同时存在,随着电力市场化改革,电力市场化将得到提升,未来对于各个行业的低碳改革,市场化的电力占比也会更高。
(3)传统发电与新能源共同发展
由于“双碳”目标的提出,导致煤电面临淘汰风险,那么新能源的开发就更为重要,我国大部分依赖传统煤电的发电模式也将慢慢改变,转而更替的是,风电,水电、光电、储能技术等,都将与传统煤电一体化发展。
各行业具体可能受到的影响:
①大行业
一是产能和产量面临调整,落后产能和过剩产能加快退出。二是产能结构面临升级,低端供给过剩和高端供给不足的局面逐步转变。三是生产工艺和技术落后,推动能效降低。
②商业
一是经济增长方式将产生重要变革,向绿色、低碳、循环发展转变,向集约化、高质量发展转变,向可持续发展转变。二是能源资源环境承载能力面临严峻挑战。
③普通工业
一是产能发展空间受限,项目审批难度增加,生产成本提升,落后产能和过剩产能加速退出。二是技术进步和转型升级亟需加快,技术发展推动煤炭利用效率提升,生产工艺向低碳技术转变。
④非普通工业
一是需要尽快优化能源消费结构。二是产业结构和布局面临调整,落后产能逐步淘汰。
5.3.3相关行业的建议
①大工业
要调整进出口政策,严禁新增产能,加强政策引导和行业规范管理,优化工艺结构,推动技术进步。通过技术创新、理念创新、模式创新、体制机制创新,充分促进上下游产业合作,大力推动碳达峰碳中和工作,发展先进脱碳技术,先进节能和回收利用技术。
②商业
构建清洁低碳、安全高效的能源供给体系,推动可再生能源替代优化能源生产布局,提升能源供给质量和效率。能源消费端,坚持节能优先,着力提高能源利用效率。
③普通工业
要持续促进行业产能优化,推动全过程节能降耗,加快技术创新,深入落实绿色低碳理念。能源技术方面,要推动清洁低碳能源开发利用技术、资源回收利用技术、碳捕集封存技术发展,通过技术升级降低可再生能源开发利用成本,推动智能电网、储能技术发展,加快发展氢能、核能等替代能源。
④非普工业
要在严控产能下实现有序发展,优化生产工艺和流程,完善标准体系,做好技术储备,保障资源能源安全。
第6章 总结
电力系统负荷预测的精度对于整个电力系统的可靠性运行来说是非常重要的。电力负荷预测准确度的提高,不仅保证了电力系统负荷预测的可靠性,还能够保证社会电力能源例如企业生产和社会用电稳定供应。电力系统负荷预测还能对于电网改造等计划的制定具有良好的参考性,能够提高电网公司的经济效益,达到节能减排,降低成本的效果,同时还能提高电力系统的经济效益和社会效益。
在本文中,我使用深度学习的LSTM、GRU和Seq2seq模型与传统的ARIMA、Prophet模型以及Xgboost和LightGBM机器学习模型进行对比,在电力系统负荷预测中,深度学习模型LSTM、GRU和Seq2seq模型的预测精度都比其他模型要高。在预测未来10天的电力系统负荷总有功功率中,LSTM模型的预测精度R²系数达到0.96101,而GRU模型的预测精度R²系数已经达到了0.98527,效果非常好。在预测未来3个月的电力系统负荷总有功功率中,LSTM模型的预测精度R²系数为0.82129,GRU模型的预测精度R²系数为0.93423,而Seq2seq模型非常适合在时间序列中多变量多步输入进行多步预测输出,所以Seq2seq模型对未来3个月的电力系统负荷总有功功率的预测精度达到了0.96440
在本文中,GRU模型的预测精度要比LSTM模型的要好,而且GRU模型的参数相对于LSTM模型而言,GRU 的模型结构更为简单,而且参数量比LSTM 少,模型训练样本就会较少,GRU模型的训练时间要比LSTM的短,在算力成本与时间成本上都要优于LSTM模型,而且本文中的GRU模型的预测精度并不比LSTM逊色。而在时间序列的多变量特征和时间步数多步输入进行多步时间序列预测输出的任务中,基于Seq2seq模型的输入encoder和输出的decoder机制,它表现的预测效果要优与LSTM和GRU模型。
本文使用深度学习模型与其他模型进行对电力系统负荷进行预测对比,发现深度学习模型在本文的实验中都具有良好的效果,对未来电力系统负荷预测的预测精度非常高,为未来的电力系统负荷预测研究提供了可靠的参考性。
基于以上模型,本文对各个相关行业提出针对性建议,能够让它们在未来电力系统发展中受到的影响较少,提高各个行业的经济效益。
[1] 王闯,兰程皓,凌德祥,等. LSTM模型在电力系统负荷预测中的应用[J]. 电力大数据,2021,24(1):17-24.
[2] 王大庆,吴学志. 电力系统负荷预测研究综述与发展[J]. 建筑工程技术与设计,2018(25):2814.
[3] 周伊玲. 电力系统短期负荷预测方法研究综述[J]. 百科论坛电子杂志,2020(12):1692-1693. DOI:10.12253/j.issn.2096-3661.2020.12.3622.
[4] 余俊杰. 基于改进EMD和GRU的短期电力负荷预测研究[D]. 湖北:湖北工业大学,2021.
[5] 金航. 基于改进深度循环神经网络的短期电力系统负荷预测方法[D]. 华北电力大学,2021.
[6] 郝洪全. 基于深度学习的电厂负荷短期预测研究[D]. 天津:天津理工大学,2021.
[7] 李松岭. 基于TensorFlow的LSTM循环神经网络短期电力负荷预测[J]. 上海节能,2018(12):974-977. DOI:10.13770/j.cnki.issn2095-705x.2018.12.007.
[8] 罗育辉. 基于深度学习的电力负荷预测方法研究[D]. 广东:广东工业大学,2020.
[9] 孟醒,邵剑飞. 基于深度学习的电力负荷预测方法综述[J]. 电视技术,2022,46(1):44-51. DOI:10.16280/j.videoe.2022.01.012.
[10] 董彦军,王晓甜,马红明,等. 基于随机森林与长短期记忆网络的电力负荷预测方法[J]. 全球能源互联网,2022,5(2):147-156. DOI:10.19705/j.cnki.issn2096-5125.2022.02.006.
[11] 宁欣. 基于深度学习的短期电力负荷预测模型[D]. 天津:天津工业大学,2020.
[12] 魏健,赵红涛,刘敦楠,等. 基于注意力机制的CNN-LSTM短期电力负荷预测方法[J]. 华北电力大学学报(自然科学版),2021,48(1):42-47. DOI:10.3969/j.ISSN.1007-2691.2021.01.05.
[13] 周朝勉. 基于注意力机制与时间卷积的短期电力负荷预测研究[D]. 江西:南昌大学,2021.
[14] 龚飘怡,罗云峰,方哲梅,等. 基于Attention-BiLSTM-LSTM神经网络的短期电力负荷预测方法[J]. 计算机应用,2021,41(z1):81-86. DOI:10.11772/j.issn.1001-9081.2020091423.
节假日情况
数据预处理:processing.csv
问题一第一小问结果:第一题第一小问.csv
问题一第二小问结果:第一题第一小问.csv
附件2和3特征数据.csv
区域15分钟时间完整_smoth填充.csv
代码部分