陈 庄 周 籴(重庆理工大学计算机科学与工程学院 重庆 400054)
在城市智能化的过程中,对城市居民用水量的科学合理预测是对用水资源合理管理、调度和规划的基础。由于受不同社会环境因素(如温度、季节变化和节假日等)和客观因素(如管道破裂、紧急停水等突发状况)的影响,用户用水量会在一定范围内波动。在市政工程中,为人民生活提供持续稳定优质的供水服务是保证民生必不可少的一环。与此同时,随着城市发展速度不断加快,居民对水资源管理也有了更高的要求,这意味着供水企业也需要不断地升级服务来满足城市发展和消费者基本生活的需要。因此,考虑主要用水影响因素并利用历史用水数据对用户用水量进行预测就变得极为重要,具有较强的理论意义与应用价值。
由于传统抄表存在工作量大、易出差错和抄表环境复杂等客观问题。近年来,重庆市已经开始以电子抄表的方式代替传统人工的抄表方式。首先通过扫描RFID标签获得水表和用户的基本信息,并录入用户水表的止码;然后将用户信息、抄表记录等上传到企业的数据库中,经企业数据管理人员审核过后,最终作为公司向用户收费的凭证标准。虽然电子抄表的效率已经在传统抄表基础上得到提升,但在实际操作过程中,大量冗杂的数据仍然会给后台的工作人员带来较大的数据审核压力。据调查可知,对20万条以上的数据进行审核时,水务企业每月需安排40人以上来完成。因此如何减少企业人员的审核数据的压力同时保证数据的正确性,是水务企业工作中所需解决的一个重要问题。
为解决上述问题,本文使用某水务公司2017年3月—2018年9月的抄表数据作为研究数据,基于用户的用水记录,对用户用水规律和影响因素进行分析,最终实现对用户用水情况的有效预测。预测模型通过最大信息系数检测变量之间的相关性,根据最大信息系数得出的相关性指标来构造XGBoost初始网络,经过训练和测试,生成最终的用户用水量预测模型。并对居民下个用水周期的用水量进行预测和分析,逐步提升预测结果的精度,通过与实际数据对比,验证该方法的有效性。
在以往的研究工作中,学者们基于不同的用水量预测模型,对用水预测相关问题进行了多角度研究,较典型的有区域用水量预测和城市用水量预测。如高学平等[1]基于PCA-RBF神经网络模型对城市用水量预测等;李晓英等[6]基于GRA-MEA-BP耦合模型的城市需水预测研究;杨皓翔等[7]基于加权灰色-马尔可夫链模型的城市需水预测。已有研究主要聚焦于整体区域的用水量预测,而针对单一用户的用水预测研究较少。基于此,本文结合最大信息系数和XGBoost算法对用户用水量进行了预测。
最大信息系数(MIC)是以互信息为基础[5],用于各种不同变量之间非线性相关性进行检测,最终得到变量之间的依赖关系强度的度量,是信息论和概率的结合[10]。最大信息系数具有普适性和均衡性,其中普适性借助MIC可以发现变量之间的函数关系和非函数关系;均衡性借助MIC可以用来横向和纵向比较不同变量的关系强度。
最大信息系数的定义如下:设有序数据集D={(xi,yi),i=1,2,…,n},D⊂R2,将数据集D中的点落入由x轴和y轴划分成x×y的二维网格G中,落入G中格子的点的概率分布为D|G。x和y均为正整数,最大互信息定义为:
I*(D,x,y)=maxI(D|G)
(1)
最大互信息系数是指通过所有可能的网格划分G上互信息的最大值I(D|G),表示在x×y网格概率分布D|G情况下的互信息[3]。其中在所有x×y的格子中,互信息的计算式表示为:
(2)
最大信息系数取M(D)x,y中最大值,计算式为:
(3)
式(2)是寻找所有x×y的格子中最大互信息,并将获得的最大互信息进行归一化,将计算所得的最大互信息除以二维网格G中的最小值,确保每个元素MIC的取值范围在[0,1]之间[5];归一化后通过式(3)获得最大值作为该数据集的MIC值。设置合适的B(|D|)值,使其增长速度远小于D增长速度。Reshef等[4]建议设置B(|D|)=D0.6。
用户用水量情况和诸多客观环境因素相关,不同的影响因素会导致用户用水量差异,同种因素因为不同的用户群体也会有所差异[2]。而采用MIC可以分析出变量之间的相关性,定量表达出用户用水量和不同影响因素之间的关联程度。
近年来,XGBoost算法模型已经在各类数据科学竞赛以及工业界中得到广泛应用,并取得了优异的成绩。经过不断优化,XGBoost的树模型处理表格数据的过程不仅高效且具有较好的精确性。除此以外,相比于传统的神经网络,XGBoost的参数调节更简易且支持并行计算,拥有更快的训练速度,预测的准确率也有较大提升。鉴于此,在MIC的基础上,本文使用XGBoost预测模型作为用户用水量数据预测模型。
XGBoost是在GBDT(Gradient Boosting Decision Tree)基础上发展起来。GBDT算法在2015年由Chen等[8]提出,由于该算法只针对一阶的导数值展开,难以分布式实现,模型的训练速度低,同时对系统的硬件配置的要求也比较高。XGBoost则在此模型基础上进行了优化,在相同的预测效果下,XGBoost迭代的次数更少,除此以外还支持并行处理,有效降低了预测模型的复杂程度。
1.2.1XGBoost组成
XGBoost算法由模型、参数和目标函数三部分组成,对数据产生规律进行建模的问题通常会形式化为一个最小化目标函数的问题[8]。目标函数Obj(x)由损失函数L(x)和正则项Ω(x)组成,表示为:
Obj(x)=L(x)+Ω(x)
(4)
式中:损失函数L(x)是反映模型与实际数据差距,选择与训练数据拟合最优的模型,包含回归和分类损失函数;正则项Ω(x)是为了选择最简单的模型,一方面通过最小化损失函数以提高预测效果,保证预测值和真实值之间的误差最小。另一方面通过对损失函数中的相关参数进行限制,并在损失函数后面添加一个额外项,也就是正则项,使预测模型更加精简,最终达到误差和复杂度的综合最优。
1.2.2XGBoost原理
在实际的生产应用中,数据集往往是非标准化的,一棵CART决策树常常无法进行有效的学习和预测,实践中常常需要综合多棵树的预测结果来提升模型的准确率[9]。XGBoost的算法思想是先采用简单的模型拟合数据,在得到一个结果之后,不断向模型中添加层数较浅的决策树。随着添加的树的增加,XGBoost算法预测模型的复杂度也会逐渐升高,并不断地对上次预测的残差值进行二阶泰勒展开,直到预测模型复杂度接近数据本身,最后将每棵树对应的预测值加起来就是该样本的最终预测值[11]。
假设模型中有k棵树,F是决策树空间,XGBoost的模型表示为:
(5)
XGBoost算法所对应的目标函数则为:
(6)
(7)
式中:T为树叶子节点数;ω为叶子权重值;γ为叶子树惩罚正则项,有剪枝功能;λ为叶子权重惩罚正则项。在XGBoost算法中,新生成的树需要拟合上次的预测的残差值,预测函数的表达式可以转换为:
(8)
同时目标函数可以改写成:
(9)
下一步工作是找到一个最小化的目标函数f(t),利用二阶可导f(t)=0,函数取得极值,故对目标函数Obj(φ)中损失函数泰勒二阶展开式表示为:
(10)
(11)
Ij={i|q(xi)=j}
(12)
式(12)也可以作为一个评分函数来衡量结构树q的质量优劣。XGBoost预测算法在生成CART树时考虑了树的复杂度,因此能有效减小模型文件大小。同时XGBoost通过拟合上一轮损失函数的二阶导展开,使得预测模型的迭代次数更少,准确性也更高。在系统资源占用方面,XGBoost在选择最佳切分点时进行并行实现,极大提高了运行速度。
本文实验数据来源于重庆市中陆承大科技有限公司,包含重庆市铜梁区在2016年3月—2018年9月间约15万块水表的230万条用户用水记录。本文实验分为数据预处理、学习预测和结果分析三个阶段,实验环境为PC,CPU Intel 2.3 GHz,RAM为12 GB,使用Windows 10操作系统,预测模型均使用Python实现。
在扰动方面,使用最近半年用户用水量的平均值作为部分缺失值数据的补充,同时考虑用水量数据的统计学特征,对训练数据的进行异常值判定和剔除操作,从而保证数据的有效性。数据集的划分采用常用的数据留出法,将数据集按照训练集和测试集7 ∶3的比例划分,训练集训练对应的模型,测试集评估测试误差,作为对泛化误差的估计。
数据预处理阶段,需要对用户用水记录进行统计,按照用水区域和每月用水量等得到有价值的特征,在模型特征提取层面,采用MIC分析了各种因素和用户用水量的相关性,衡量相关因素对用户用水量影响大小,预测方法流程如图1所示。
基于MIC-XGBoost的用户用水量预测模型的主要有以下3个步骤:
(1) 通过已有或政府公开的信息,收集多方面用户用水量影响因素的数据,将数据预处理,对缺失值数据填充并进行平滑化处理;
(2) 运用MIC计算各影响因素与用户用水量之间潜在的关联程度,依据关联程度值大小对不同影响因素排序,获得关键关联因素;
(3) 分别建立面向不同影响因素的MIC-XGBoost预测模型,选择合适的参数,对预处理好的数据样本进行训练,做出对应影响因素下的用户用水量预测,得到最终的用户用水量预测结果。
在训练和测试阶段,由于数据的随机性,通过Boost构建多个若分类器,增强模型的健壮性,同时将超出预期值的数据拉到正常范围,解决超出理想数据的正常样本,提高了模型的复杂度和和兼容性。
为了验证基于MIC和XGBoost预测方法的有效性和合理性,将数据集分为标准的训练集、验证集和测试集。算法是以MIC检测变量之间的相关性为基础,根据MIC的相关性关系构造出新的XGBoost的预测网络结构,通过参数调节来不断优化用户用水量预测模型,最终生成预测效果良好的网络预测模型,实现预测目的。预测模型采用四个指标作为预测算法的性能评价标准,包括均方根误差(Root mean square error,RMSE)、拟合优度R2、相对误差和平均绝对百分比误差(Mean absolute percent error,MAPE)。
(13)
(14)
(15)
式中:xobs,i表示真实值;xpred,i表示预测值;xavg,i表示真实值的均值。RMSE可以很好地反映出预测模型的误差大小;拟合优度R2能反映预测模型对数据拟合的好坏程度。
MIC-XGBoost混合算法预测模型主要分为两个阶段,首先用MIC得到两个变量之间相互关联度,发现数据之间被抑制的关系(线性关系或非线性关系),用以提高数据利用率;然后通过得到MIC处理后的模型特征,作为XGBoost算法预测模型的输入,直到训练结束。基于此,提出了基于MIC-XGBoost算法用户用水量数据预测方法。
2.3.1用户用水影响因素分析
对于一个固定的用水用户,有诸多因素影响用户用水量变化,可根据MIC值确定变量之间的相关性。具体地,某一因素与固定因素之间的最大信息系数MIC值越大,该因素的重要性越高。
本文实验考察了用水量和其他客观因素之间的关系。影响用户用水的因素有温度、季节、节假日及一些供水系统特殊的突发事件,通过使用最大信息系数检验与用水量之间的关系,得到用户用水及其影响因素之间的最大信息系数值,如图2所示。随着数据规模的增大MIC值都随着增大而增大;在同等数据规模下,MIC的值大小与影响因素有关,其中影响用户用水量最重要的因素是温度,其次是季节和节假日。
图2 用水量与各影响因素的MIC值
2.3.2用户用水量预测效果分析
在各种影响用户用水量的因素当中,如何找到其中最重要的影响因素是本文研究的一项比较重要的工作。利用MIC发掘变量之间的相关关系,是将变量之间的关系量化成指标的一个有效手段,再与XGBoost算法相结合得到用户用水预测模型。
为了对比得到的数据预测模型,本文采用不同影响因素MIC值结合XGBoost预测算法得到不同的预测曲线,不同的影响因素下预测用水曲线及实际用水曲线如图3-图7所示。
图3 温度MIC-XGBoost预测图
图5 节假日MIC-XGBoost预测图
图7 XGBoost预测图
由图3-图7可知,模型拟合效果最佳的是温度MIC-XGBoost预测算法。表1为测试集的预测性能指标结果,明显可见基于MIC的XGBoost预测算法的用户用水量预测的预测效果,均优于使用单一XGBoost算法进行预测,其中采用最大相关系数中相关系数较大的值,预测效果更佳。
由于XGBoost自身支持并行化,都有较好的拟合度,另外基于MIC的XGBoost预测算法在拟合度、RMSE、MAPE、相对误差,这些预测性能都要优于单一的XGBoost预测模型,同时随着MIC系数增大,用户用水量预测性能指标都呈现出更优的指数。在影响用户用水量的因素中,温度与用户用水量的MIC值最大,即温度与用户用水量相关性最高。基于温度MIC-XGBoost的预测算法在拟合度比直接使用XGBoost算法预测高出21%,RMSE值也更低。由此可知,基于MIC-XGBoost预测算法对用户用水量有较高的预测精度,是一种比较有效的用户用水量预测方法。
本文提出了基于MIC-XGBoost预测算法模型实现单一用户用水量的预测,以重庆市铜梁区用户实际用水量为预测基础,检验其效果并得到以下结论:
(1) 通过最大信息系数量化影响用户用水量的因素,结合XGBoost算法,其学习能力和预测精度均优于单一的XGBoost预测模型,解决了XGBoost在处理模型训练时存在的训练复杂化问题,有利于防止过拟合,从而提高模型的泛化能力,获得了良好的预测效果。
(2) 用户用水量因素的选取在一定程度上影响着MIC-XGBoost预测模型的预测效果,当MIC值越大,变量之间相关性越高,结合XGBoost算法,使得预测精度有所提高,在水表用水数据审核和数据准确性具有可靠的参考价值。
(3) 在抄表数据预测应用中,选择准确率最高的基于温度的MIC-XGBoost预测算法作为抄表数据过滤的依据,预测值和真实值误差在±2之见,则自动过滤,不需要人工审核,将原来20万条以上的审核数据降低到3万~5万条,在保证数据准确性同时极大减轻了公司的审核压力。
但本文是针对单一影响因素对用户用水量的MIC-XGBoost预测模型,综合因素下对于用户用水量影响还有待进一步研究。