1. 引言
负荷预测是根据电力系统的运行特性、自然条件等诸多影响因素,基于电力负荷的过去和现在运行状况,推测未来某特定时刻数值 [1] 。精准的电力负荷预报是电力能源管理系统(EMS)合理安排生产调度计划、实现节能、经济运行的前提条件和重要保障。电力负荷预报要求预测值与实际负荷的偏差必须小于电网AGC (Automatic Generation Control)调节容量。由于目前电网AGC调节容量一般较小,对电力负荷预测模型精度提出了更高的要求,因此建立高性能实时电力负荷预报模型一直是学术界和工业界研究的热点 [2] 。
国内外许多学者对此进行了大量、深入的研究,提出了许多有效算法。传统的短期负荷预测方法 [2] 有回归分析法 [3] [4] 、时间序列法、卡尔曼滤波、外推法、指数平滑法、灰色预测法。随着机器学习理论的发展,人工神经网络 [5] 、支持向量机 [6] 、相关向量机等方法越来越广泛的用于负荷预测并取得令人满意的效果 [7] [8] [9] 。文献 [10] 将局部加权线性回归预测算法和云计算Mapreduce模型相结合建立了基于云计算的局部加权线性回归模型进行海量数据的短期负荷预测。文献 [11] 提出了一种主成分分析(PCA)和BP神经网络相结合的电力负荷预测方法。文献 [12] 针对AR无法接纳多源数据与BP神经网络算法结果受相似日影响大等弊端,提出一种优势互补的AR-ANN算法。由于电网规模不断扩大,负荷类型日趋多样化,数据数量和类型也在快速增加,上述方法在处理大量数据时有局限性,复杂的计算又使其运行时间显得较长。
XGBoost (Extreme Gradient Boosting) [13] 是一种通过一组弱分类器的迭代计算以实现准确分类效果的集成学习框架。XGBoost能够自动利用CPU的多线程并行计算,在算法的实现上又增加了正则项,极大地提高了模型运算效率,而且也使模型的泛化能力得到提升,在分布式应用上也有明显优势。相比于传统GBDT (Gradient Boost Decision Tree),XGBoost算法上使用了Taylor二阶信息,实现上采用了并行/多核计算方式,训练收敛更快速、准确率更高 [14] 。目前,在店铺销售预测 [15] 、事件分类 [16] 和客户行为预测 [17] 等方面,XGBoost已经得到广泛应用。
本文采用计算速度快、效果好的XGBoost算法构建电力负荷预测模型,预测因子包括干球温度、露点温度、时刻(小时)、星期几、是否为工作日、前一周同一时刻负荷、前一天同一时刻负荷、前24小时平均负荷,预报输出是未来一天24点电网负荷变化趋势。以某地区电力负荷预报为研究对象进行了实验验证,实验结果验证了本文所提方法的有效性。
2. 极限梯度提升模型原理
XGBoost是一个设计高效、灵活并且可移植的最优分布式决策梯度提升库,通过一组弱分类器的迭代计算实现准确的分类效果。它实现了梯度提升框架下的机器学习算法。基分类器是分类和回归树(CART)。通常一个基模型很难保障预测精度,常见的解决思路是采用树的集成模型,把多个树的预测综合在一起。假设有
个树,树集成模型为
(1)
其中
是函数空间
里面的一个函数,而
是包含所有回归树的函数空间。树集成模型参数包括每棵树的结构以及叶的得分,可以简单地使用函数
作为参数,
。目标函数包含损失函数和正则化项
(2)
其中,损失函数为平方误差
,正则化项
包括
和
正则。优化目标函数实际上是求解CART树的结构和叶分数,立即训练所有的树是不容易的,这要比传统的优化问题困难得多。文献 [18] 提出采用梯度方式,加法策略,即固定已经学到的树,保留原来的模型不变,一次添加一个新的树到模型中。一般假设模型预报初始化
,每次添加一个新的函数(树),迭代计算第
轮模型输出预报值
。
(3)
其中,
表示第
轮的模型预测,
表示保留前面
轮的模型预测,
表示加入一个新的函数。在实验中通常用式(4)
(4)
来计算
。其中,
表示步长或者收缩,这意味着我们不会在每个步骤中进行完全优化预留未来几轮的机会,有助于防止过度拟合。模型预报式(3)代入目标函数(2)式中,得到
(5)
根据Taylor二阶展式,简化目标函数中损失函数,重新定义目标函数:
(6)
其中,
,
,
为常数。移除常数项后,最终的目标函数只依赖于每个样本点在误差函数上的一阶
和二阶导数
。
(7)
假设
为决策树,叶结点数目为
,每个叶结点权重为
。决策树的学习过程,就是从根结点到叶结点细化的过程,树可以拆分成树结构部分
和叶权重部分
。结构函数
把输入样本x映射到叶结点
中,而
给定了叶权重。
(8)
其中
表示叶子向量,
表示树的结构。正则项表示决策树的复杂度,复杂度定义为叶结点总数和叶节点权值平方和函数。
(9)
其中,
表示
的
模平方,
表示叶结点总数。将式(8)和(9)代入目标函数(7)中,目标函数为
(10)
其中,
被定义为每个叶子上面样本集合
。定义
,
,从而
![](//html.hanspub.org/file/7-1580410x62_hanspub.png)
假设树的结构
固定,对
求偏导,得到叶结点最优权重和最优的目标值
(11)
(12)
表示树的结构分数,
越小,表示树的结构越好。对于当前的结点,采用贪心法进行子树的划分。每次尝试对已有叶结点加入一个分割点,枚举可行的分割点,选择目标函数最小、增益最大的划分。增益如式(13)
(13)
其中,
、
分别表示左边树、右边树的增益之和。
3. 实验结果和讨论
3.1. 电网负荷数据描述
电力系统负荷预报是电网系统建设、调度的重要依据,准确的电网负荷预报既能增强电力系统运行的安全性,又能改善电力系统运行的经济型。本文以电力系统负荷预报为应用研究背景,选取某市的历史小时负荷和温度观测数据 [19] ,又根据历史负荷数据构造了前一周同一时刻负荷、前一天同一时刻负荷、
前24小时平均负荷三个属性,即(1)
:前一周同一时刻负荷;(2)
:前一天同一时刻负荷;(3)
:前24小时平
均负荷。其中
表示第
天第
小时负荷(
表示日期,
表示小时)。完成属性构造以后,以干球温度、露点温度、一天中的小时、星期、是否为节假日、前一周同一时刻负荷、前一天同一时刻负荷、前24小时平均负荷作为输入变量,详见表1,以第二天24点负荷作为输出,建立负荷预测模型。为了构建电网
![](Images/Table_Tmp.jpg)
Table 1. Description of power load data
表1. 电网负荷数据描述
负荷预测模型,共收集某地区电网负荷数据(2004~2008年)样本43847条,选取其中35063条数据(2004~2007年)作为训练样本数据建立负荷预测模型。剩余8784条负荷数据(2008年)作为测试样本来检验所建模型性能。
3.2. 实验环境设置
电网负荷预报实验硬件平台为2.59 GHz的Intel core i7处理器,8G内存,64 bit Win10操作系统平台。模型实验编程语言为python2.7,需要安装一些数学分析和建模、机器学习库,如Numpy、Pandas、Matplotlib、XGBoost、Sklearn。本文数据分析和机器学习主要采用XGBoost工具,该软件包能够自动利用CPU的多线程并行计算,提升计算速度,同时引进模型复杂度控制和后期的剪枝处理改良算法准确度。
3.3. 电网负荷预测模型构建
本文使用XGBoost工具包进行建模,首先加载电网负荷数据集。XGBoost的参数可以分为三种类型:通用参数(General Parameters)、booster参数以及学习目标参数(Task Parameters)。本文的电网负荷预报问题属于回归问题,构建的XGBoost模型目标函数参数选取“count:poisson”,即泊松回归的负对数似然,利用程序内置的交叉验证函数,划分20%为验证集,80%为训练集,计算每次迭代的误差值确定最佳的num-round。通过交叉验证优化参数以后,最终确定模型的booster参数为:树的最大深度(max-depth)为6,迭代次数(num-round)为150,收缩步长(eta)为0.3。
3.4. 实验结果和讨论
本文采用XGBoost算法、随机森林算法、贝叶斯算法和KNN算法预测了某市2008年1月1日到2008年12月31日连续一年的负荷,结果如图1所示。
好的预报模型,模型误差自相关函数曲线近似为一个白噪声序列。图2给出了不同建模方法得到的模型误差自相关函数曲线。为了进一步对比不同模型预测精度,将电网负荷的实际值与模型预测值分别作为横、纵坐标,画出四种方法预测值与实际值散点图,并求出各个散点图回归线的斜率,结果如图3所示。图2和图3实验结果均表明相比随机森林、贝叶斯和KNN方法,XGBoost负荷预报模型性能最好。XGBoost、随机森林、贝叶斯以及KNN这几种建模方法得到的负荷预测值散点更加集中地分布在对角线
附近,且回归线的斜率接近于1,这进一步表明这四种模型得到的负荷值都比较接近于实际值。为了更好地描述不同算法模型的预测性能,采用平均绝对误差(MAE)、均方误差(MSE)、均方根误差(RMSE)、平均绝对百分误差(MAPE)四种评价指标作为各种方法预测效果判断的根据,即
(14)
(15)
(16)
(17)
![](//html.hanspub.org/file/7-1580410x92_hanspub.png)
Figure 2. Autocorrelation function of estimating error of different models
图2. 不同模型估计误差自相关函数
![](//html.hanspub.org/file/7-1580410x93_hanspub.png)
Figure 3. Scatter diagram of estimated and actual value by different models
图3. 不同建模方法的估计值与实际值散点图
式中,
表示第i个实际值,
表示第i个预测值,
表示第i个实际值与预测值的绝对误差。
图4给出的是四种算法模型预测结果的误差分布图。表2给出了四种模型下负荷预报误差和模型的训练时间结果。分析以上结果可见:
1) XGBoost模型和随机森林模型得到的电网负荷的预测值相比其他两种方法能够更好地拟合真实值的变化趋势,且能保证较高的精度,具有更好的预测性能。XGBoost和随机森林均采用集成学习框架,
![](//html.hanspub.org/file/7-1580410x97_hanspub.png)
![](//html.hanspub.org/file/7-1580410x98_hanspub.png)
![](//html.hanspub.org/file/7-1580410x99_hanspub.png)
![](//html.hanspub.org/file/7-1580410x100_hanspub.png)
Figure 4. Predictive error distribution for different models
图4. 不同模型预测误差分布
![](Images/Table_Tmp.jpg)
Table 2. Comparison of load forecasting error and model training time under different models
表2. 不同模型下负荷预报误差和模型训练时间比较
将弱分类器增强成强分类器。XGBoost在迭代优化过程中使用了目标函数的二阶泰勒展开近似,以最快的速度收敛到全局最优,因此XGBoost精度更高。
2) XGBoost和随机森林模型下得到的误差自相关函数曲线更加接近于白噪声序列。预测效果较理想。
3) 在预报误差方面XGBoost模型表现的最好,平均百分误差(MAPE)只有1.78%,随机森林方法达到了1.87%,贝叶斯和KNN算法误差较大。
4) 在模型的训练时间方面,KNN模型表现的最好,只用了0.08秒,随机森林耗时长。XGBoost原生语言为C/C++,在进行节点的分裂时,支持各个特征多线程进行增益计算,因此算法计算速度更快。
综合来看,基于XGBoost模型的电力负荷预测结果在预测精度和计算时间综合指标方面优于其他方法。
4. 结论
电力负荷预测是电力系统经济调度中的一项重要工作。本文以电力系统负荷预测为应用研究背景,采用XGBoost集成学习框架,利用其并行运算速度快、精度高、灵活性强、鲁棒性好的特点,构建了干球温度、露点温度、一天中的小时、星期、是否为节假日、前一周同一时刻负荷、前一天同一时刻负荷、前24小时平均负荷因子为输入未来一天24点电力负荷为输出的电网负荷预测模型。实验研究结果表明,该负荷预测模型预测结果能很好拟合实际负荷数据,平均百分误差在2%以下。相较于贝叶斯、KNN和随机森林方法,XGBoost负荷预测模型具有预测精度高,模型训练时间短等优势,可在一定程度上满足电网系统对电力负荷短期预报的工程需要,中长期电力负荷预报将在后续研究中逐步解决。