基于XGBoost算法的光伏阵列故障诊断方法研究
2023-02-09段震清孙建民李庚达崔青汝
段震清,孙建民,梁 凌,李庚达,崔青汝,伍 权
(国家能源集团新能源技术研究院有限公司,北京 102209)
0 引言
由于地面光伏电站长期运行在野外恶劣环境中,且规模较大,随着其服役年限增加,光伏阵列的故障发生率逐渐升高。一旦光伏阵列发生故障,若不及时发现并处理,将会进一步酿成恶性事故。因此,快速有效地识别出光伏电站直流端的故障对提升其系统效率和降低维护成本具有重要的意义[1]。
文献[2-3]通过分析光伏方阵的I-V电气参数曲线与参考电气曲线之间的差异得出故障诊断结果,但该方法需要光伏阵列离线进行扫描,无法实现在线实时诊断与分析。文献[4-5]通过建立光伏阵列数学模型,计算出光伏阵列的理论输出功率,并与光伏阵列实际输出功率进行比较,进而实现光伏阵列故障诊断,但该方法的准确度依赖于模型的精度。文献[6-7]采用红外图像法,通过检测光伏组件在不同运行状态下对应的温度实现故障诊断,但红外图像易受外界影响,导致故障诊断会出现误差。文献[8]提出基于局部离群因子方法对光伏阵列是否发生异常进行检测,但该方法无法进一步判断出光伏阵列的故障类型。事实上,由于光伏阵列易受外界复杂环境的影响,导致其故障类型具有复杂性和耦合性,现有的故障诊断技术和方法难以满足光伏电站现场运行过程中诊断的需要。因此,快速有效地对光伏阵列进行实时在线故障诊断有待进一步完善与发展。
针对上述问题,本文提出了一种基于极度梯度提升(XGBoost)算法的光伏阵列故障诊断方法,首先建立光伏阵列仿真模型,通过分析正常、短路、开路、老化、阴影遮挡这5种光伏阵列运行状态的特性,提取出表征故障的特征变量;然后基于实验仿真数据构建XGBoost故障诊断模型;最后将5种光伏组件运行状态下的特征参数输入故障诊断模型,对故障模式进行识别与诊断验证。此外,XGBoost故障诊断模型会输出重要特征的排序,重要特征可以更好地识别光伏阵列故障类型。
本文所提到的数据处理、故障诊断模型及解释归因功能,将基于web系统以功能模块的方式嵌入部署在光伏电站生产管理大区(I区)的服务器监控系统上,基于I区服务器监控系统采集到光伏阵列数据,经数据处理、故障诊断等模块计算后,实现对光伏阵列的在线故障诊断,并及时发送故障报警,以便尽快实施故障维护。
XGBoost故障诊断模型工程化部署至现场的具体工作方式及流程为:首先,基于现场光伏阵列历史运行数据,经数据预处理后,离线构建XGBoost故障诊断模型,并将训练好的模型部署在现场;其次,基于I区服务器监控系统实时采集光伏阵列数据,传输至数据预处理模块,经数据清洗、特征处理后输入XGBoost故障诊断模型;最后,故障诊断模块根据光伏阵列的输出功率及气象信息,每天定时进行计算,以分析是否产生故障及故障类型;此外,通过XGBoost故障诊断模型重要性分析对导致光伏阵列产生故障的因素做解释归因。
1 光伏阵列典型故障的仿真和分析
1.1 建立光伏阵列仿真模型
以实际运行的光伏阵列的电气数据和气象环境数据为依据,主要对光伏阵列正常、短路、开路、老化、阴影遮挡这5种运行状态进行研究。为了得到不同条件下的数据样本,通过Matlab Simulink仿真技术建立光伏阵列仿真模型,以获取其不同运行状态下的数据[9-10]。
该光伏阵列仿真模型共有3串光伏组串,每串光伏组串由5个封装好的模块组成,每个模块内包含4块光伏组件,即每串光伏组串有20块光伏组件。光伏阵列仿真模型如图1所示。图中:T1为给定的环境温度特征变量;S1为给定的太阳辐照度特征变量;I为光伏阵列输出电流;U为光伏阵列输出电压;P为光伏阵列输出功率。
图1 光伏阵列仿真模型Fig. 1 Simulation model of PV array
搭建的光伏阵列仿真模型仅需根据光伏组件厂家提供的标准铭牌参数,就能在一定精度范围内还原光伏阵列在不同环境及运行状态下的输出特性。单块光伏组件的标准铭牌参数如表1所示。
表1 单块光伏组件的标准铭牌参数Table 1 Standard nameplate parameters of single PV module
本研究在太阳辐照度R为100~1000 W/m2、环境温度T为5~35 ℃范围内进行测量,采集5种运行状态下光伏阵列的电气参数和气象环境参数。
1.2 故障特征提取
特征变量之间具有交互作用,很难直接发现特征数据和故障之间的相关联系,当故障诊断模型中的特征变量之间存在多重共线性时,样本数据特征变量的选择不同将会导致预测结果的显著变化,进而会出现误判、漏判光伏阵列故障的现象。
本文使用皮尔森相关系数计算特征变量之间的相关性,当相关系数大于0.8时,认为两个特征变量高度线性相关,将在两个特征变量中舍去1个[11]。特征变量的共线性分析结果如图2所示。图中:Impp为光伏阵列的最大工作点电流;Umpp为光伏阵列的最大工作点电压;Pmpp为光伏阵列的最大工作点功率;Uoc为光伏阵列的开路电压;Isc为光伏阵列的短路电流。
根据图2的分析结果,本研究去除了太阳辐照度、光伏阵列的短路电流、光伏阵列的最大工作点功率这几个特征变量,最终保留环境温度、光伏阵列的开路电压、光伏阵列的最大工作点电流、光伏阵列的最大工作点电压作为故障诊断模型的输入特征。
图2 特征变量的共线性分析结果Fig. 2 Results of collinearity analysis of characteristic variables
1.3 故障特征数据分布
本研究使用的特征变量均为连续变量。观察特征变量的特征数据分布情况[12],其中,环境温度、光伏阵列的最大工作点电流和光伏阵列的最大工作点电压均属于正态分布,使用均值(mean)和标准差(standard deviation,SD)来描述特征数据分布情况;光伏阵列的开路电压为非正态分布,使用中值(median)和四分位数([Q1, Q3])来描述不满足正态分布的特征数据分布情况。光伏阵列不同运行状态下特征变量的统计描述如表2所示。
表2 光伏阵列不同运行状态下特征变量的统计描述Table 2 Statistical description of characteristic variables of PV array under different operating conditions
2 基于XGBoost算法的光伏阵列故障诊断方法
2.1 XGBoost故障诊断模型原理
XGBoost算法可对样本数据进行智能检测与识别,该算法把若干分类器整合为1个分类器,通过不断对误差进行进一步分类来解决一般机器学习算法泛化能力差、过拟合、准确率不高等问题,因此,十分适用于光伏阵列故障诊断样本数据少的情况。
XGBoost算法由华盛顿大学博士陈天奇于2014年提出,主要用于分类分析(处理离散数据)和回归树分析(处理连续数据),是一种集成式学习模型[13]。XGBoost算法要求每加入1棵树,均使目标函数结果最小。
目标函数包含损失函数L和正则函数Ω两项,损失函数用来计算预测结果和真实结果的误差,实际计算中基于最小误差对损失函数进行约束;正则函数用于检测模型的复杂度,避免出现过拟合或欠拟合[14]。正则函数和损失函数可以根据实际情况具体给定。
目标函数Obj(k)可表示为:
式中:i为第i个样本;n为样本总数;k为训练样本时的第k棵树(即预测中的迭代次数);yi为第i个样本的真实标签;为第i个样本的预测标签;fi为第i个样本在增加k棵树时相比k-1棵树时的误差。
对于正则函数的第k棵树,具体可表示为:
增加第k棵树后,相比第k-1棵树的误差值可表示为:
式中:ωq(xi)为第i个样本落在第k棵树的第q(xi)个叶子节点所得分数。
第k棵树的正则函数Ω(fk)可表示为:
式中:τ为1棵树上的叶子总数;j为第j个叶子;ωj为第j个叶子的得分值;γ和λ均为防止过拟合参数。
将式(1)~式(4)合并,并使用二阶泰勒公式,把对于样本的历遍转换成对叶子节点的历遍,目标函数变形为式(5),即:
式中:gi为第j个叶子节点里面的一阶梯度;hi为第j个叶子节点里面的二阶梯度;Ij为每个叶子节点里面的样本集合。
将式(7)代入式(6),可获得最终的目标函数,如式(8)所示。
对于光伏阵列故障诊断大数据而言,基于XGBoost算法来识别光伏阵列故障类型的研究很少。本研究使用仿真数据建立光伏阵列正常、开路、短路、老化、阴影遮挡5种运行状态下的XGBoost故障诊断模型,应用XGBoost算法识别光伏阵列故障类型。XGBoost算法优于其他的机器学习方法,即使采用预测结果和训练数据差值进行训练,也可以在树的不断迭代过程中提升准确率。此外,XGBoost故障诊断模型可以从数据训练过程中提炼并展示出模型学习比较重要的特征变量,这些重要特征变量有助于帮助光伏电站及时识别光伏阵列故障类型并进行有效维护。
本研究采用500例仿真数据,按照8:2的比例划分训练集和测试集。针对400例训练集数据,基于10折交叉验证将其平均分成10份,其中9份用于训练,1份用于验证。基于XGBoost算法的光伏阵列故障诊断方法的流程图如图3所示。
图3 基于XGBoost算法的光伏阵列故障诊断方法的流程图Fig. 3 Flow chart of fault diagnosis method for PV array based on XGBoost algorithm
2.2 模型性能度量指标
本研究选择的模型性能度量指标包括准确率(accuracy)、查全率(recall,又称召回率)、查准率(precision),以及F1评分。根据真实结果与预测结果的不同,将样本数据划分为真正例(TP)、真反例(TN)、假正例(FP)和假反例(FN)[15]。
准确率Acc表示查出的正确的样本数占样本总数的比值,其可表示为:
查准率Pre表示预测的正确的样本中有多少样本是有用的,其可表示为:
查全率Re表示有用的样本中有多少样本被查出,其可表示为:
F1评分表示查准率与查全率的调和平均值,F1评分更重视查准率与查全率两个指标中的较小值,较小值的变动比较大值的变动对F1评分的影响更大。F1评分可表示为:
2.3 模型诊断结果评价及特征变量重要性分析
基于测试集的5种光伏阵列运行状态下的100例数据,对XGBoost故障诊断模型的诊断结果进行评价。不同运行状态下模型性能度量指标的分析结果如表3所示。
表3 不同运行状态下模型性能度量指标的分析结果Table 3 Analysis results of model performance measurement index in different operating conditions
从表3可以看出:不同运行状态下,XGBoost故障诊断模型的准确率均为92%。在光伏阵列正常运行状态下,XGBoost故障诊断模型的查全率为85%,查准率为100%,F1评分为92%,其中查准率在4个指标中最优;在光伏阵列短路状态下,模型的查全率、查准率和F1评分均为95%,在4个指标中均为最优;在光伏阵列开路状态下,模型的查全率为83%,查准率为71%,F1评分为77%,其中查准率在4个指标中最低;在光伏阵列老化状态下,模型的查全率为89%,查准率为96%,F1评分为92%,其中查全率在4个指标中最低;在光伏阵列阴影遮挡状态下,模型的查全率为94%,查准率为93%,F1评分为88%,其中F1评分在4个指标中最低。综合来看,XGBoost故障诊断模型的准确率高达92%,查全率高达95%,查准率高达96%,F1评分高达95%。该结果表明,基于XGBoost算法的光伏阵列故障诊断方法可以有效应用于光伏阵列的故障类型识别。
训练好的XGBoost故障诊断模型会给特征变量打分并输出特征变量的重要性排序,排序的规则使用“weight”方法,即根据该特征变量在所有树中被用作分割样本的特征次数来表征特征变量的重要性。特征变量的重要性排序如图4所示。
图4 特征变量的重要性排序Fig. 4 Importance ranking of characteristic variables
从图4可以看出:特征变量的重要性排序从高到低依次为最大工作点电压、开路电压、最大工作点电流、环境温度。其中,最大工作点电压被认为是最重要的特征变量。
3 结论
针对目前光伏阵列故障诊断方法无法实时在线识别故障类型且准确率不高等问题,本文提出了一种基于XGBoost算法的光伏阵列故障诊断方法。首先建立光伏阵列仿真模型,针对正常、开路、短路、老化、阴影遮挡5种光伏阵列运行状态进行仿真,并获取有效数据;其次,分析仿真数据特征变量之间的共线性关系,提取有效的特征变量作为模型的特征变量输入;然后,基于特征变量构建了XGBoost故障诊断模型;最后依据模型性能度量指标对XGBoost故障诊断模型的诊断结果进行评价,并分析模型特征变量的重要性。研究得出以下结论:
1)该故障诊断方法不仅提高了光伏阵列故障诊断的准确率,而且提升了对光伏阵列故障类型的有效挖掘能力;
2)在一定的样本测试条件下,该故障诊断方法可实现对正常、开路、短路、老化、阴影遮挡5种光伏阵列运行状态的故障诊断,且故障诊断准确率可达到92%;
3) XGBoost故障诊断模型从数据训练过程中提炼并展示出对于模型学习而言比较重要的特征变量,这些重要的特征变量有助于帮助光伏电站及时识别光伏阵列的故障类型并进行有效维护;
4)该故障诊断方法能简单、高效、实时在线对样本数据进行故障诊断,可为光伏电站现场运维人员提供技术支持。