程贤福,马晓冬,曾建邦,李晓静
(华东交通大学载运工具与装备教育部重点实验室,江西 南昌 330013)
锂离子电池因其高能量密度、高功率密度、较长的使用寿命等突出优点而被广泛作为新能源汽车的动力源,但通常需要上百块电池单体串并联成组才能满足对续航里程及电压的要求[1-2]。然而,由初始生产工艺造成的差异会在后续使用过程中不断放大,造成电池单体的不一致性故障,严重影响电池寿命,甚至车辆安全[3]。因此,对动力电池进行不一致性故障诊断,实时识别异常单体,对减少车辆的危害具有重要的现实意义。
不一致性故障直观表现在如下两个方面:一是动力电池单体性能参数不一致,包括内阻、容量和阻抗;二是电池工作状态不一致,主要有工作电压和荷电状态[4-5]。目前,按照电池单体不一致性故障诊断的研究方法不同,大致可分为统计分析方法、数据聚类分析方法、离群点检测方法、神经网络法等[6-9]:侯永平等[10]选用熵值法对循环工况中的电流密度进行权重分析,利用统计学参数变异系数和相对极差来衡量电池单体的电压一致性;曾建邦等[11]在K-means 聚类算法的基础上,通过优化聚类簇数和初始中心选择,提出一种基于动态k 值的Kmeans++聚类的动力电池电压不一致故障识别方法,该方法能够快速识别潜在异常单体;檀斐[12]利用小波分析,提取诊断特征向量,设计故障诊断BP 神经网络,用于诊断电池单体不一致故障。在线故障识别与预警方面的相关研究较少,Gao 等[13]结合了加速自适应矩估计算法、深度置信网络和皮尔逊系数,提出了一种基于自适应深度置信网络的电动汽车充电过程中故障预警方法,该方法实现了电动汽车在线充电过程中的电压故障预警;Hong 等[14]提出了一种基于熵的电动汽车电池电压异常检测,方法通过对车辆的实时电压波动数据的在线监测,在基于香浓熵的分析方法下识别了异常单体。
综上,目前针对动力电池不一致性单体的研究主要集中在异常单体的识别上,尽管这些方法均能在一定程度上识别出异常单体 (往往包括正常单体),但对异常单体进行预警的研究较少且大都比较复杂。为此,本文提出了一种将孤立森林算法与滑动窗口相结合的动力电池异常单体识别与预警方法。首先,利用滑动窗口将一串时间序列的数据分割成多个子数据集,每一串子数据集相当于一个时间段,将流入滑动窗口的子数据集单独构建孤立森林诊断模型;其次,根据每一个窗口诊断的得分情况,判断该时间段的单体是否异常,以此实现异常单体的识别与预警;最后,根据孤立森林模型识别出的正常样本与异常样本得分情况,采用数学统计的方法来确定阈值,实现对样本数据更直观的分析。
本文通过采集新能源车辆的动力电池数据,验证提出的基于孤立森林与滑动窗口的动力电池异常单体识别与预警方法的性能,并对比评估其他算法的性能,为实现动力电池异常单体识别与预警提供参考。
孤立森林(isolated forest,IF)是一种采用集成学习策略的典型异常检测算法[15-16],该算法构建并融合多个子检测器以获得较好的检测性能,具有相对较低的复杂度和较高的准确率。其原理是不断对数据集进行切割,直到每个数据都成为孤立的点,在孤立森林中异常点被认为是容易孤立的点,即正常的数据需要多次切割才能被识别,而异常点则容易被切割出来。通过将各点被孤立时距离根节点的路径长度与标准值进行比较从而判断是否为离群点。孤立森林算法主要步骤如下:
步骤1 从预处理完的数据集中随机选择φ 个子样本作为采样数据集,并放入树的根节点;
步骤2 从样本中随机指定一个维度d,随机产生一个切割点p 来切割样本(该切割点存在于当前节点维度的最大与最小之间);
步骤3 切割后的数据会再分成两部分,维度小于p 的放在子节点的左边,维度大于p 的放在子节点的右边;
步骤4 在子节点中重复操作步骤2 和步骤3,不断分割数据,直到无法分割出新的子节点。
算法通过引入异常得分来判断数据是否为异常点,异常得分定义如下
式中:n 为数据集;x 为样本点;文献[16]指出E(h(x))为x 的平均路径长度期望值;c(n)为标准平均路径长度,公式如下
式中:H(n)为调和数H(n)=lnn+ξ,ξ 为欧拉常数。
式(1)中S 范围在0~1,当S 越接近1,说明该数据点越有可能发生异常,当S 小于0.5 时,可判定数据没有异常,当S 处于0.5 时,可认为数据不具备明显异常特征,有待观察。
在实际应用过程,模型涉及几个重要参数,如表1所示。文献[16]指出,当树的个数(n_estimators)为100,子采样个数(max_samples)为256 个时,孤立森林的准确率就接近收敛。另外本文在经过多次数据验证后发现将子树的特征(max_features)与异常比例(con_tamination)分别设置为10 与0.05 时模型的性能最佳。
表1 孤立森林模型参数设置Tab.1 Parameter setting of isolated forest model
滑动窗口(sliding windows,SW)常用于在线信息的访问,通过窗口的滑动,不断去除旧时刻的数据,添加新时刻的数据,实现数据的更新[17]。换言之,滑动窗口算法在一个特定大小的数据集上进行操作,而不在整个数组上操作,这种做法降低了问题的复杂度,也可以实现对数据的在线检测。一般的,一条长度为n 的数据表示为
式中:y(t)为t 时刻采集的数据。
在对数据分割过程中,设定(w,s)对数据进行分割,其中w 为滑动窗口的分割长度,s 为分割一次之后移动的步长,连续滑动(n-w)/s 次,形成多个等长度的子数据片段,如图1 所示。
图1 滑动窗口原理图Fig.1 Schematic diagram of sliding window
动力电池发生不一致性故障的单体电压与正常的单体电压有所差异,且一个电池包里发生异常的单体个数通常较少,符合孤立森林算法的数据要求,因此可以结合孤立森林算法复杂度低,效率高的特点进行异常单体的检测。
本文针对电池包的单体电压数据,提出一种基于滑动窗口和孤立森林的异常单体识别与预警方法。通过历史数据训练得到孤立森林诊断模型,同时创建一个滑动窗口分割数据集,每当有新的数据流入滑动窗口,旧数据将被剔除,实现窗口的滑动。窗口滑动时将触发模型重新计算该窗口下的数据,每计算完一次,补充新的数据进入模型中,实现诊断模型的更新。本文提出的方法主要有以下几个步骤,流程图如图2 所示。
图2 基于孤立森林算法异常单体检测流程图Fig.2 Flow chart of anomaly detection based on isolated forest algorithm
1)确定阈值。将动力电池的历史电压数据作为数据集,构建孤立森林诊断模型,计算正常样本与异常样本的得分,对得分情况进行统计区分,进而得到不同样本的得分区间,根据得分的界限来设定异常阈值。
2)创建滑动窗口。将有序的动力电池电压数据按照时间序列分割为多个子数据集,每一个子数据集作为一个单独的数据段流入孤立森林诊断模型,每计算完一次,将旧数据剔除,流入新的数据,直至所有数据计算完成。
3)异常识别与预警。利用孤立森林算法依次对窗口中的数据进行计算,与此同时统计各个单体在不同窗口下的得分情况,此外将一个窗口记作一个时间点,当所有数据计算完成之后,将各单体得分与故障阈值进行比较,当某个单体在每个时间点下的得分都超过阈值时,该单体被诊断为异常单体,若某个单体的得分随时间增大并且超过阈值,则可以将超过阈值的时间与实际车辆报警时间对比,达到预警效果。
根据标准《电动汽车远程服务与管理系统技术规范》(GB/T 32960),新能源汽车公司要将车辆的数据上传至大数据车联网监控平台,包括总电压、单体电压、电流、荷电状态、温度等电池数据及其他参数。车辆启动过程中,车上的传感器时刻在检测车辆数据,能够做到实时监控在线车辆的运行状态和各种数据。平台上积累了大量历史数据,可以为电池不一致性单体检测算法提供训练基础,又可以接入实时数据,为实现不一致性单体在预警提供数据基础。
本文以江西江铃集团新能源汽车有限公司车联网平台提供的车辆数据作为研究对象,进行电池异常单体的识别与预警。该平台提供的数据包括电池单体个数、总电压、总电流、单体电压、报警状态等电池参数。图3 所示为报警车辆与未报警车辆一个月的充电单体电压曲线图,其中图3(a)与图3(b)为报警车辆的单体电压图与充电数据片段。从图中可以看出前几次充电时各单体的电压波动稳定,而且没有出现离群的电池单体。然而在后续充电过程中,55 号单体的电压出现明显的离群现象,且随着充电次数的增加离群程度越来越大,可以认为该单体出现了不一致性问题。图3(c)和图3(d)为正常车辆的单体电压图和充电数据片段,从图中可以看出该车辆的电池在多次充电下各单体的电压均相似,没有出现明显的异常。综上,报警车辆的某个单体会出现电压离群现象,且不同单体电压之间的差异在一定程度上反映了不一致性程度,因此可以利用算法辨识正常与异常单体。
图3 报警与未报警车辆电池单体电压分布图Fig.3 Cell voltage distribution diagram of alarm and non-alarm vehicles
孤立森林是一种无监督的异常检测算法,它没有明确的界限辨别正常值和异常值,因此需要设定阈值。阈值的设定可以使诊断结果更加清楚,一般可以通过经验设置阈值,也可以通过统计学知识计算阈值。本文通过对正常样本和异常样本得分区间进行统计来确定阈值。为确保抽取的样本数据具有代表性,本文选取样本的方法为:将样本按照数据量大小分为3 组,这3 组按照充电次数再分为3 小组,总共9 小组。为避免偶然性,再从每个小组中随机抽取3 辆车组成27 辆车辆作为样本。按照此方法从正常车辆(超1 000 辆)中选取27 辆作为未报警车辆(运行超10 000 km 以上),再从出现过不一致性故障报警的车辆(超100 辆)中随机27 辆作为报警车辆(运行超10 000 km 以上),车辆的数据选取时间截止到2022 年2 月。对车辆数据进行预处理之后,提取电池电压数据作为故障阈值模型的输入数据,电池相关参数描述如表2 所示。将这两类车的电池单体电压数据输入到孤立森林模型中进行得分计算,阈值统计结果如图4 所示,从图中看出在得分0.75 处存在分界现象,其中有3 辆车的得分存疑,在可接受范围内。因此本文通过孤立森林计算的阈值得分T=0.75,凡是超过阈值的便识别为异常单体,得分越高说明异常越明显。
表2 电池相关参数Tab.2 Battery-related parameters
图4 异常识别模型的阈值统计图Fig.4 Threshold statistical diagram of anomaly recognition model
确定阈值之后,就可以通过单体得分的变化来判别其是否异常。选取报警车辆A 作为异常识别算法的案例分析,提取该车报警当月的充电电压数据,报警时刻的部分电压图如图5 所示。
图5 车辆A 报警片段单体电压图Fig.5 Vehicle A monomer voltage diagram
图中32 号和98 号单体电压出现离群,发生报警时刻98 号单体电压出现波动。异常识别步骤如下:首先对数据进行预处理,剔除无效值,再选取出现报警之充电电压片段作为模型的输入数据,其次采用滑动窗口对这段数据进行分割,滑动窗口大小为(w,s),其中w 和s 预设为20。w 表示一次计算的窗口大小,s 为数据前移步长,计算完成后前移s,形成新的滑动窗口,直至所有数据计算完成。
将该方法与原始孤立森林算法进行对比,对比结果如图6 所示。从图中看出两个方法均能识别出32 号单体,而滑窗孤立森林比原始的算法多识别出98 号单体。分析原始电压图5 可以看出,32 号和98号单体在之后的充电过程中发生明显的离群现象,其中32 号单体电压长期低于其他电压,这类异常比较明显,两个方法都能识别出,而98 号单体电压只是在某一时刻发生异常波动,考虑到孤立森林算法对局部数据不敏感,因此无法识别这种细微的变化。而引入滑动窗口之后将数据细分之后,加强了算法对局部数据的计算能力,因此滑窗孤立森林法可以正确识别出98 号单体。
图6 车辆A 异常识别结果图Fig.6 Vehicle A anomaly recognition result diagram
为进一步验证该方法的有效性,本文引入查准率(Precision)、查全率(Recall)、F1-score3 个指标来给予评判,并与文献[9]所提出的局部离群因子(LOF)异常检测算法进行对比。其中,查准率表示算法识别的结果中识别正确的概率,查全率表示真正发生不一致的单体被算法识别出的概率。F1-score为前二者的综合得分,用以评价方法的好坏。
式中:FP 表示实际是异常单体,预测结果是正常单体;FN 表示实际是正常单体,预测结果是异常单体;TN 表示实际是异常单体,预测也是异常单体;β用于调整权重,在本文中Precision 和Recall 同样重要,故将β 取1。
基于选取的27 辆不一致性故障车辆的电池数据进行分析,计算所有车辆的整体指标数据,结果如表3 所示。从表3 可以看出滑窗孤立森林查准率和查全率都很高。尽管原始孤立森林的查准率是1,然而其查全率过低,无法正确识别所有单体。而LOF 算法对局部数据比孤立森林算法更加敏感[18],这也导致该算法与滑动窗口结合时将一些正常单体误认为异常单体从而降低了查准率。最后根据综合评价F1-socre得分的情况来看,方法SW-IF 的得分最高,因此本文提出的方法更加适用于动力电池异常单体的识别。
表3 不同方法性能指标对比Tab.3 Comparison of performance indexes of different methods
在异常识别模型的基础上实现对车辆的实时预警。选取报警车辆发生报警故障时的充电电压数据作为预警模型的输入数据,利用滑动窗口分割数据集,并将每一次窗口记作一个时间点,每滑动一次窗口就生成一个新的时间点,对应的每个窗口就有一个得分结果,以此类推直到所有数据计算完成,最后得到单体得分随时间变化的趋势图,根据单体的得分趋势与故障阈值进行比较实现对电池单体的预警。
为验证不同窗口大小对预警模型的影响,选取4 辆有报警片段报警车的电压数据,并对其设置多组窗口大小进行预警时间的计算,结果如图7 所示。从图中可以看出,当窗口大小为15 左右时,预警的效果最好;而当窗口过大时,则出现无法预警的结果。这表明如果窗口过小,不仅会导致计算时间过长,也会将部分正常的单体被误认为异常单体;窗口过大,电压的波动会被湮灭,导致无法识别出异常单体从而无法体现出预警时间。故将滑动窗口大小设置在15 左右较为合适。
图7 不同窗口对预警时间的影响Fig.7 Impact of different windows on alert time
当滑动窗口为15 时,4 辆报警车辆的所有电池单体得分随时间变化的结果如图8 所示,图中竖点划线表示平台报警的时间点,横点划线表示算法预警点。从图中看出A、B 车中3 号和32 号单体得分始终超过阈值,说明这两个单体一直都处于异常状态,而另外几个单体得分则出现从正常得分区间上升到异常区间的现象,这表明当单体得分超过故障阈值之后,算法才进行预警。与车辆报警时间相比,算法提前预警的时间分别为3.62、0.2、1.65、2.25 h。本文提出的方法可以在单体电压未出现明显离群现象时便能识别出其有所端倪,并且提前对异常电池进行预警。因此本文所提出的方法可以对动力电池异常单体进行有效识别与预警。
图8 4 辆车在滑动窗口大小为15 时的预警效果图Fig.8 Early warning effect of four vehicles at sliding window size of 15
本文针对新能源动力汽车电池单体不一致性故障辨识问题,提出了一种基于孤立森林与滑动窗口的异常识别与预警方法。通过对车联网平台提供的电池使用数据进行分析,得到了如下结论。
1)通过统计正常样本与异常样本得分区间情况的方法得到本文提出的异常识别模型的阈值T=0.75,可准确、直观地对正常电池数据和异常电池数据进行分析。
2)基于孤立森林与滑动窗口的异常识别模型比LOF 异常检测模型具有更高的查准率和查全率。滑动窗口方法的引入,克服了孤立森林对局部位置识别不佳的问题,同时该方法能够识别出车辆充电过程中突发的不一致性故障单体。
3)采用滑动窗口结合孤立森林算法的方法可以建立异常单体的实时预警模型,在滑动窗口大小为(15,15)时,对故障的预警效果最好。
(致谢:感谢江西江铃集团新能源汽车有限公司为本文提供的数据支持。)