程賢福,馬曉冬,曾建邦,李曉靜
(華東交通大學載運工具與裝備教育部重點實驗室,江西 南昌 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)時,對故障的預警效果最好。
(致謝:感謝江西江鈴集團新能源汽車有限公司為本文提供的數據支持。)