党存禄 武文成 李超锋 李永强
(1. 兰州理工大学电气工程与信息工程学院 兰州 730050; 2. 甘肃省工业过程先进控制重点实验室 兰州 730050; 3. 兰州理工大学电气与控制工程国家级实验教学示范中心 兰州 730050)
负荷预测作为电力系统调度的重要手段之一,对电网调度、可靠运作以及提高企业的利润有着非常积极的作用,因此也在电力系统领域与负荷预测相关的预测算法层见叠出[1-2]。时间序列法是传统负在预测中过分倚重时间因素,而忽略了其他影响因素[3]。事实上,短期负荷曲线变化中影响最大的是气象因素[4]。如果进行短期负荷预测时不考虑气象因素会致使预测误差较大[5]。人工神经网络、专家系统方法、灰色数据理论以及模糊负荷预测理论等是现代负荷预测理论的典型代表[6]。这些预测方法虽然可以达到较好的预测效果,但是过多的超参数调优、数据预处理过程中标签信息偏移和对计算机性能的要求过高,限制了其在短期负荷预测中的应用[7]。
随着计算机以及人工智能等技术的发展,涌现出大量以神经网络为代表的智能算法,并在预测领域得以应用[8]。在种类繁多的预测方法中人工神经网络(Artificial neural network,ANN)以及它的优化算法已经被应用于各个行业的预测中。文献[9]提出由于ANN 算法的自学习能力可以较好地解决复杂非线性回归问题,因此ANN 也能应用于同属非线性回归问题的电力负荷预测。但训练速度慢、模型训练过程中需要人为设置以及大量超参的调整是ANN 算法不可忽视的缺点[10]。除此之外,文献[11]提出陷入局部最优解甚至无法收敛得到最优解,从而导致预测结果偏差过大是ANN 面临的最大问题。深度学习(Deep learning,DL)概念出现后,深度神经网络(Deep neural network,DNN)及其优化算法得到了广泛应用[12]。文献[13]中提出DNN 在处理复杂模型的过程中对超参数的依赖程度比ANN 略低。但是,DNN 的训练通常需要大量的训练数据,这使得DNN 无法直接应用于具有小规模数据的任务。DNN 的模型特别复杂,训练的过程中对计算机的配置要求很高。除此之外,DNN 的超参数过多,模型训练过程中需要对大量的超参数进行调节,且DNN 要求对数据进行预处理,无法处理文字标签。
CatBoost 是俄罗斯Yandex 公司在2017 年开源的基于GBDT 机器学习框架的机器学习库[14]。该库结构简单,对于类别型特征有较好的识别能力,而且降低了对超参数的要求。本文尝试采用CatBoost算法进行电力系统短期负荷预测,验证CatBoost 算法的预测能力并加以应用。
短期负荷预测作为电力系统重要的组成之一,能够合理的预测指定日期不同时刻的负荷量是其最终目标[15]。电力调度部门的经济调度、控制机组调配等都需要实现精准的负荷预测,电力企业的生产计划也同样依靠负荷预测来规划设计[16]。
短期负荷预测精度受很多因素的影响,随机性和不确定性是其主要特点[17]。而负荷的随机变化在不同时间上又存在明显的周期性。因此,短期负荷变化是时间序列中的非平稳随机过程[18]。
在电力系统短期负荷预测中,常选择具有代表性和高影响力的历史数据。主要有以下几种数据:① 历史负荷数据;② 日期类型数据;③ 天气情况数据等[19]。
电力系统短期负荷预测的核心是:① 获取真实可靠的历史数据;② 搭建有效的负荷预测模型。随着科技的发展,电力系统的信息管理系统逐步建立、气象数据精确度不断提高,用户可以随时获取可靠的历史负荷数据和气象数据。因此,在未来建立有效的负荷预测模型是提高短期负荷预测能力的主要任务[20]。
Boosting 作为集成算法的代表,能够减少监督学习中的偏差和方差,是一种把弱学习器转化为强学习器的机器学习算法[21]。图1 中,n 个点的训练集,在初始训练样本上为每一个点赋予权重在训练过程中,每次训练的结果是训练集中点的权重会根据上次的基学习器 ym(1 ≤ m <M)的表现进行调整。然后根据新的样本对下一个基学习器 1my+进行训练;这样重复训练直到基学习器的数量等于预设值M。可以看到,越往后之前的基学习器上出错的点权重越高。最后让M 个基学习器加权结合得到Boosting 的数学模型,如式(1)所示
梯度提升算法(Gradient descend boosting)是基于Boosting 的很有代表性的算法之一,它的第m 个基学习器建立都是在第m-1 次基学习器损失函数的梯度下降方向[21]。损失函数(Loss function)可以衡量上一轮基学习器的出错程度。如果基学习器能够让损失函数不断下降,则说明我们的基学习器一直在改进。而要实现基学习器不断改进的方法就是让损失函数空间的梯度下降。
假设函数的参数是 P = { p0, p1, p2,…} , F ( x; P)是参数为P 的x 的函数,即预测函数。预测函数由多个基学习器加权结合,如式(2)所示
式中 β——每个基学习器的权重;
α ——基学习器中的参数。
通过优化{ , }β α 也就是P,可以达到优化F 的目的[22]。
(1) 可加的参数P 的梯度表示。
P 的likelihood 函数 ( )PΦ ,也就是 ( ; )F x P 的损失函数如式(3)~(4)所示
由于 ( ; )F x P 的可加性,所以对于P 有
式中0p ——一个初始猜测。
因此,可以通过对 ( )PΦ 求导,将P 的优化过程转化为一个梯度下降的过程,假设现有m-1 个基学习器(前m-1 个基学习器都固定),若要得到第m个基学习器的参数mp ,首先需要对前m-1 个基学习器求参数 1mP-梯度,得到损失函数最快下降的方向mg ,如式(6)~(7)所示
可得第m 个基学习器的参数 pm
式中 ρ——常数。
(2) 可加的函数的梯度表示。
将参数P 的可加性推广至函数空间,可以得到式(10)
式中 fi( x )——基学习器。
同样,我们可以得到函数F(x)的梯度下降方向g(x),如式(11)所示
最终可以得到第m 个模型 fm( x )的表达式,如式(12)所示
(3) 通用的Gradient descent Boosting 的框架。
式中 ( xi,yi)——样本点。
计算其在模型 F ( x; β , α )下的损失函数,使得这个损失函数最小的{ β , α} ,就是最优的{ β , α} 。
式中mβ ,mα ——两个m 维的参数。
对于数据点 xi都可以得到一个 gm( xi),可得完整梯度下降方向,如式(15)~(16)所示
在mα 的基础上,可以得到mβ 。
最终得到通用的Gradient descent Boosting 的框架,如式(19)所示
在Gradient descend Boosting 算法中最常用的基学习器是决策树(一般是CART),梯度提升树 (Gradient boosting decision tree,GBDT)算法。决策树对数值特征有很好的识别能力,但是实际应用中,许多数据集包含分类特征,分类特征对预测也很重要。分类特性是一种具有离散值集的特性,这些值彼此之间没有必要进行比较(例如,负荷预测中工作日和非工作日)。在GBDT 算法中在训练前将它们转换为数字是处理分类特征最常用的方法。
GBDT 算法在处理类别型特征(Categorical features)时,常用Categorical features 对应的标签的平均值来替代。因此标签平均值常作为决策树中节点分裂的标准。这种方法被称为Greedy target-based statistics,简称Greedy TBS,如式(20)所示
但是,这种方法会使得特征中比标签包含更多的信息。所以一旦用标签的平均值来代替特征,在训练集和测试集数据结构和分布不同的情况下就容易出现条件偏移的情况。
CatBoost 算法在GBDT 的基础上能够更优地处理Categorical features[23]。CatBoost 通过添加先验分布项的方式改进Greedy TBS,减少了噪声和低频数据对于数据分布的影响,如式(21)所示
式中 P——先验项;
a——权重系数。
对于类别数较少的特征,先验项的添加有利于噪音数据的减少。在解决回归问题中,通常取数据集的均值作为先验项。也可以采用多个数据集排列,但是直接计算会增加模型过拟合的几率。CatBoost利用oblivious 树作为基学习器,oblivious 树中每个叶子节点的索引被编码为长度与树深度相等的二进制矢量。这种计算节点值的方式避免了直接计算过拟合的问题,而且oblivious 树的整个级别上使用相同的分割准则,因此oblivious 树能达到平衡,不易过拟合。
用数字替换Categorical features 的另一种方法是计算该Categorical features 在数据集出现的频率。这是一种简单但强大的技术,在CatBoost 算法中也有实现。它自动采用特殊的方式处理Categorical features。首先对Categorical features 进行统计,计算某个类别特征出现的频率,之后加上超参数,生成新的数值型特征。这样在数据的预处理过程中就不需要人为处理Categorical features。
选取两地区电力负荷值(间隔15 min 采样一次,每天96 点)、该时间段的气象数据(最高最低温度、平均温度、相对湿度以及降雨量)以及日期类型(工作日与非工作日分别量化为0 和1,在CatBoost 算法中不做量化,作为标签列)进行负荷预测。历史数据取2014 年12 月23 日前20 天数据,对2014 年12 月23 日当天的负荷进行预测。为了对CatBoost算法的预测能力进行评估,本文选取了BP 神经网络(Back propagation neural network)、决策树算法(Decision tree)、梯度提升树算法(GBDT)、K最近邻分类算法(K-Nearest neighbor,KNN)等算法做负荷预测,与CatBoost 算法预测结果比较。本文中算法程序的编程环境为Python 3.6(64 位),数据可视化采用Excel,数据取自“中国电机工程学会杯”全国大学生电工数学建模竞赛的标准数据集。
在电力负荷数据建模过程中,都要进行数据预处理。针对负荷数据的预处理方式有很多,根据不同算法的需求,主要有数据变量转换、缺失值处理、数据标准化等。然后根据建立的模型的需要,划分出训练样本集合。取前N 天的数据作为训练集和测试集,进行模型训练。
预测模型如图2 所示(N=20)。
为了能有效判断一个预测模型的性能,需要在输出数据集上评价预测模型的准确率。模型的预测效果评价方法很多,衡量的指标有绝对误差(Absolute error)、相对误差(Relative error)平均绝对误差(Mean absolute error,MAE)、均方误差(Mean squared error,MSE)、均方根误差(Root mean squared error,RMSE)和平均绝对百分误差(Mean absolute percentage error,MAPE)等。本文中选用的评估方式是MAE、MAPE 和RMSE。
表1 是上述几种预测算法对2014 年12 月23日地区1 和地区2 负荷预测结果的误差数据统计。
CatBoost 算法的优势在于它降低了模型对许多超参数的需求。因此本文中试验大多采用默认的超参数设置,而且在数据的前期处理中不再需要将数据的文本特征转换成数字。
利用对2014 年12 月23 日前20 天的两个地区历史数据进行负荷预测的结果如图3~4 所示。
从图3 中可以看到,在地区1 的负荷预测结果中,所有算法均能够有效地预测出2014 年12 月23日地区1 的负荷峰值和谷值时间和以及负荷变化的趋势,但是误差较大,特别是GBDT 和BP 神经网络,精度都没有CatBoost 算法高。图4 中,当预测的对象发生变化,各个算法的输入变成地区2 时,预测的结果发生了一定的变化,但是精度依然没有CatBoost 算法高。这也说明对于默认超参的CatBoost 算法可以应用于不同的数据集。
从表1 中可以看出,CatBoost 算法相对其他几种算法预测的误差最低,能够进行有效的短期负荷预测。
针对传统电力系统负荷预测算法数据预处理过程当中大量的超参数调节以及数值强行代替标签时容易发生条件偏移的问题,首先选取两地区20 天的数据用于训练CatBoost 模型,其次将预测结果与其他常见智能算法进行分析和对比,最后根据仿真可得出如下结论。
(1) 将CatBoost 算法应用于电力系统负荷预测可减小模型训练过程中对超参数的依赖,降低了模型过拟合的机率,增强了算法的通用性;在数据预处理过程中无需用数值强行代替标签,能有效防止特征标签条件偏移,有助于在数据集中存在更具描述性的类别特征标签时提高预测的精度。
(2) 在采用了真实数据的情况下,CatBoost 算法能够胜任小数据量情况下的回归问题。仿真结果也显示其预测结果能够有效地显示负荷变化的趋势和具体的负荷值,且通过对预测结果的分析显示具有较低的误差。