劉博嵩,郭 鵬,雷 萌
(華北電力大學 控制與計算機工程學院,北京 102206)
近年來,風力發電規模在我國迅速增長[1]。風電機組 SCADA運行數據可以用來評估機組發電性能和健康狀態[2-4]。建立風電機組健康劣化監測系統,實時分析 SCADA運行數據,及時發現風電機組健康劣化,對保障機組安全、提高發電量有重要意義。
風電機組運行狀態隨風速時變,其異常數據類型復雜,所以對風電機組進行健康劣化監測具有一定難度。文獻[5]采用隨機森林的袋外估計進行特征選擇,使用XGBoost算法搭建風電機組故障分類模型,取得了較好的效果。文獻[6]使用深度全連接神經網絡構建分類模型,以判斷葉片結冰狀態;但由于風電機組故障類型繁多,不同故障的數據特征各不相同,所以模型訓練集很難包含所有種類故障數據的全部特征。因此,使用分類模型對機組健康狀態進行監測具有一定缺陷。文獻[7]利用機組正常運行數據建立了馬氏(Mahalanobis)參考空間,通過比較模型預測值與參考空間的相對關系來監測機組運行情況。此方法只能判斷單個運行數據的異常狀態,未引入時間尺度對風電機組健康劣化情況進行整體判斷。文獻[8]采用偏最小二乘法建立功率曲線模型,應用模糊綜合評價指數對機組每日發電性能進行評價;但其以“日”為單位的發電性能評價實時性較差。文獻[9]分別采用線性和威布爾分布模型建立了風電機組功率曲線模型,在監測階段采用控制圖和殘差分析方法對發電性能異常進行檢測;但使用該方法需大量異常數據才能使線性或威布爾分布指標產生明顯異常變化,實時性一般。文獻[10]采用高斯過程監督學習建立多變量功率曲線模型,使用序貫概率比檢驗(SPRT)分析模型預測殘差,并對發電性能劣化進行監測預警。文獻[11]采用兩步法對風電機組發電性能進行監測:第一步,針對風電機組歷史數據采用極限學習機建立發電性能基準模型并對待監測數據進行功率預測。第二步,使用風速與預測功率2變量建立Copula相關模型,采用Copula模型參數作為衡量發電性能的指標。文獻[10,11]所述方法受風電機組數據質量影響較大,實際應用時需設計前置算法對原始 SCADA數據中的正常數據進行提取。
文獻[12]對比了 4種異常值檢測算法對風電機組數據的識別效果。實驗表明,相比于其他算法,孤立森林算法具有更高的精度。孤立森林算法可以判斷每一數據點的孤立情況,無需前置算法即可實現風電機組正常數據提取并判斷實時運行數據的健康劣化程度。但是,文中孤立森林算法對高密度異常數據識別的效率還有待提高。為解決此問題,本文設計一種基于孤立森林的MKIF算法,并將其與滑動窗口算法相結合,建立MKIF健康劣化監測預警模型,實現風電機組實時工作狀態評估。
本文的實驗機組為某風電場編號為 E17的1.5 MW變槳變速機組。機組SCADA系統以10 min為間隔,記錄重要傳感器測量數據。運行數據中,風速-功率特征最能反映機組的工作狀態。將每一條運行數據中的風速和功率構成一個數據對,于是形成風速-功率坐標系下的一個功率散點。E17機組2019年1月至4月共產生16 335條運行數據,功率散點分布情況如圖1所示。

圖1 E17機組數據分布情況Fig. 1 Data distribution of E17 unit
風電機組功率散點分布特征如下:
(1)風電機組正常運行數據散點密集分布,構成“功率主帶”。額定風速以下,機組處于最大風能追蹤階段,風速和功率特征呈現三次方關系。在額定風速以上,機組調節槳距角大小控制輸出功率在額定值附近變化。功率主帶呈現水平分布。在實際應用中,可以直接將輸出功率大于等于額定功率的數據標記為正常值。
(2)異常功率點類型。①底部堆積數據。風電機組停機檢修或風速低于切入風速時,機組理論輸出功率為零。如果數據表現為“大量異常數據圍繞功率零值附近密集分布”,可將其直接去除。②欠發異常數據:風電機組老化、葉片受損、葉片結冰等問題會造成機組發電性能劣化,產生欠發異常數據。與功率主帶中正常數據相比,欠發異常點在同風速下發出的有功功率明顯偏小,分布在功率主帶右側。③限負荷異常數據:當機組因電網調度需求人為限功率或因部分部件溫度異常自動限功率時,風電機組會提前變槳,并將實發有功功率限制在一個較低的設定值附近。限負荷異常數據位于功率主帶右側,呈水平分布,通常密度較高且槳距角不為零。④傳感器故障異常數據:持續的傳感器故障會產生大量密集分布的異常點。風速計異常數據密度較高,且數據中槳距角變量與正常數據無異、異常特征不明顯,識別難度較大。
MKIF風電機組健康劣化監測預警模型如圖2所示,分為建立健康基準模型和在線健康評估2部分。

圖2 MKIF風電機組健康劣化監測預警模型Fig. 2 MKIF wind turbine health deterioration monitoring and early warning model
(1)建立健康基準模型:考慮功率散點的總體分布特性,設計一種基于孤立森林的MKIF算法。該算法使用小批量K均值聚類確定MKIF搜索樹分裂節點的數量和位置,并定義MKIF異常得分以判斷數據的異常程度。MKIF算法不需對原始數據進行區間劃分,可以通過綜合距離和密度特征,依照功率散點的總體分布形狀識別出全局稀疏點,進而提取出風電機組功率主帶并生成拒絕閾值。功率主帶和拒絕閾值構成了風電機組健康基準模型。
(2)在線健康評估:在監測階段,使用MKIF算法將實時待監測數據與功率主帶數據相比較,使用MKIF異常得分評判每一條實時數據偏離功率主帶的程度。當實時數據異常得分大于基準模型拒絕閾值時,認定該數據為健康劣化數據。同時為了避免如偶發傳感器故障、通訊異常、啟停機等產生的偶發異常數據造成的誤報警,引入滑動窗口算法監測時間序列數據的健康劣化率。當窗口內數據健康劣化率大于設定閾值時,發出風電機組健康劣化預警。
孤立森林(isolation forest)算法可以提取出風電機組功率主帶數據作為健康基準,并以得分的形式量化每一數據點偏離功率主帶的程度。
異常值檢測主要分為2步,即使用原始數據構建二叉搜索樹(孤立樹,iTree)和異常得分計算。算法的核心在于構建孤立樹。
孤立樹的構建過程如下:給定一個數據集D={d1,d2,···,dn},隨機選擇D中數據的一個屬性H和它的分裂臨界點r。使用臨界點r將數據集D劃分為左子樹和右子樹2部分。以此方法構造孤立樹,直到每一子樹中只剩下一條數據或樹達到最大深度。
孤立森林算法通過隨機采樣提取D的子集來保證孤立樹的多樣性。一定數量的孤立樹便可組成孤立森林。
對于每一個數據點di,遍歷每一顆孤立樹,di的總體異常得分為:


式中:t為樹的數量;M為樹T的深度;k為出口節點包含數據的個數;c(ψ)為二叉搜索樹失敗查詢的平均路徑長度,由式(3)及式(4)給出。

式中:H(ψ-1)為調和數,其中ψ為采樣規模;ζ為歐拉常數,取值約為0.577 216。
數據異常得分S(di,ψ)越高,其為異常值的可能性越大。當所有數據的異常得分均約為0.5時,認為數據集D中沒有明顯異常值。
傳統孤立森林算法中的孤立樹是使用二叉樹的結構構建的,且其分裂臨界點r是隨機選擇的。由于原始數據具有多樣性,二叉樹結構無法很好地表征原始數據分布情況,且其引入的隨機因素可能會造成算法精度低、穩定性差。
針對這些問題,文獻[13,14]提出使用聚類的概念來擴充樹,使孤立樹脫離經典的二叉搜索樹結構。文中使用了肘部法則來判斷最佳聚類個數。但是,用肘部法則對聚類效果進行評價時僅能考慮簇內和方差(SSE),未能針對簇間距離進行評判;文獻[13]中定義的數據異常得分取值范圍不固定且普遍為負值,無法直觀地從異常得分來準確判斷一個樣本的孤立程度。
為克服以上缺點,本文設計了基于孤立森林的MKIF算法:將小批量K均值引入孤立森林搜索樹的劃分過程中。
MKIF使用聚類算法確定孤立樹分裂節點的數量和位置,在構造孤立樹的過程中調用聚類算法的次數極高;所以,聚類算法的時間復雜度大大影響了MKIF算法的運行效率。小批量K均值聚類使用部分數據來更新模型參數,其收斂速度比K均值算法更快[15];但小批量K均值算法同樣需要事先確定K的個數。本文使用輪廓系數(silhouette coefficient)來解決這個問題。
對于數據集中樣本di,假設樣本di被聚類到簇A,其輪廓系數si定義為:

式中:ai為樣本di與同一類別中所有其他點之間的平均距離,以體現凝聚度;bi為樣本di與下一個距離最近的簇中的所有其他點之間的平均距離,以體現分離度。
樣本di的輪廓系數si的取值范圍為[-1,1]。輪廓系數越大,樣本越適合所在簇,聚類效果越好。
本文采用輪廓系數來監督小批量K均值聚類,可以在保障聚類效果的基礎上降低聚類時間復雜度,非常適合風電機組這樣的大規模數據的分析處理。
MKIF算法孤立樹的構建流程如如下:在數據集D中隨機選擇一個特征H,并將D劃分為C個子樹。根據文獻[13]給出的經驗,子樹的個數從2~4中選取。使用小批量K均值算法在不同子樹個數(K個數)情況下分別對數據集D的特征H進行聚類,并計算對應子樹個數的輪廓系數。選取輪廓系數最大的作為最終的子樹個數,并記下此時聚類中心和聚類邊界的位置。如此構造孤立樹,直到每一子樹中只剩下一條數據或樹達到最大深度。
MKIF算法異常得分定義如下:
對于數據點di,在第j次劃分子樹時產生的異常得分值為:

式中:d(di,cc)為di到cc的歐氏距離;dmax(cl,cc)為cc到cl的最大距離;cc為樣本di所屬類的中心;cl為di所屬類的邊界。
數據點di的最終異常得分為:

式中:N為樹的最大深度;t為搜索樹的數量;M為第T顆搜索樹劃分子樹的次數。
樣本點MKIF得分的取值范圍為S(di)∈[0,N]。MKIF異常得分越高,則說明樹的平均深度越高、樣本點與聚類中心的平均距離越遠,樣本點的孤立程度越高。
在用MKIF算法建立風電機組健康基準模型時,首先按本節所述方法構建孤立樹,并計算每一數據點的異常得分;然后根據預先設定的置信度B(本文選擇90%和80%),選擇異常得分較低的B數據作為正常數據組成功率主帶,并取功率主帶中最大的異常得分值作為拒絕閾值。功率主帶和MKIF拒絕閾值即構成了風電機組健康基準模型,可作為判斷風電機組健康狀態的標尺。
為了更加直觀地展示出MKIF算法的優勢,使用傳統孤立森林算法和 MKIF算法對一組隨機生成的二維數據進行分析。圖3示出了對于一個位于邊界的紅色方形目標點,2算法對笛卡爾坐標系的劃分過程以及生成的樹結構。①傳統孤立森林算法隨機選取分裂節點,交替對數據集的橫縱坐標進行劃分,最終產生的孤立樹深度為9。其二叉樹的結構與樣本分布情況關聯性不高,相似樣本數據往往會被劃分到不同子葉。該算法異常得分值與孤立樹深度密切相關,對分割點的位置非常敏感,不確定性強。②MKIF算法孤立樹分割點的數量和位置均由聚類算法得出,穩定性強。在實際應用中使用少量孤立樹組成孤立森林即可獲得較好的異常值和新奇值檢測效果。最終產生的孤立樹深度為4,遠低于傳統算法,運算時間大幅縮短。圖3中MKIF孤立樹的結構能很好地表征樣本分布情況。

圖3 孤立樹構建示意圖Fig. 3 Schematic diagram of isolation tree construction
在劣化監測階段,對每一個新的監測數據,MKIF算法實時計算其在孤立樹中的位置及異常得分,進而實現對比分析監測數據與功率主帶健康基準模型的位置關系。當監測數據異常得分大于基準模型拒絕閾值時,認定該數據為健康劣化數據。
風電機組運行過程中,隨機、偶發傳感器故障、信號噪聲、啟停機過渡過程等會產生偶發劣化數據。為發現風電機組系統持續的健康問題,減少誤報警率并保證健康監測的實時性,采用滑動窗口對時間序列運行數據進行劣化監測。設滑動窗口內監測數據的個數為Nwin,滑動窗口內監測數據更新個數為Nupd,如圖4所示。

圖4 滑動窗口算法原理Fig. 4 Principle of sliding window algorithm
對滑動窗口內的每個監測數據采用拒絕閾值進行劣化判別。定義窗口內運行數據劣化率為:

式中:Ndeg為窗口內劣化數據個數。
設定風電機組健康劣化報警閾值為Valm。當滑動窗口內劣化率高于報警閾值時,即Rdeg>Valm時,發出風電機組劣化預警。預警時刻為該滑動窗口內最后一個監測數據對應的時間。
為檢驗本文設計的MKIF算法在建立風電機組健康基準模型方面的效果,將E17機組2019年1月至4月的運行數據送入傳統孤立森林和MKIF算法進行識別。首先,將功率小于零的運行數據直接剔除,并將高于額定功率的數據標記為正常值。同時,為了更加準確地分離出限功率異常數據,將每條運行數據中的風速、功率、槳距角 3個特征作為傳統孤立森林和MKIF算法的輸入,功率主帶提取結果如圖5所示。
圖5(a)為用孤立森林算法識別異常數據提取功率主帶建立健康基準模型的結果。圖中的限功率和風速計異常數據點密度高,在二叉搜索樹中具有較高的平均深度,被識別為正常值。
由圖 5(b)可知:MKIF的搜索樹結構可以更好地表達出數據分布情況。在異常得分數據中引入了點到聚類中心的距離,降低了算法對密度的敏感程度,將遠離功率主帶的分布密度高的限功率和風速計異常數據點準確識別為異常,準確提取出功率主帶作為健康基準。

圖5 MKIF算法功率主帶提取結果Fig. 5 Power main band extraction result of MKIF
圖5(c)所示為置信度B=80%時,MKIF算法功率主帶提取效果。可以看出,置信度取值對功率主帶提取效果影響較小。當置信度較低時,算法會將大量零功率附近的數據點識別為異常。實際應用中,可適當設置一個較小的置信度(如85%)以提高算法的適用性。
考慮到用傳統孤立森林算法建立的基準模型精度較低且包含大量異常數據,不能滿足劣化監測的需求,故本文僅使用MKIF健康基準模型對風電機組健康劣化情況進行監測預警。
針對E17機組,在提取出功率主帶并建立風電機組健康基準模型之后(B=90%),將5月9日0:00時開始的120條運行數據作為監測數據執行健康劣化預警,其中的劣化數據分布情況如圖 6所示,均位于功率主帶右側。

圖6 劣化數據分布情況Fig. 6 Deterioration data distribution
實驗機組運行數據采樣間隔為10 min。由于采樣間隔較長,為提高檢測的實時性,設置滑動窗口內監測數據的個數Nwin為18個(3 h),窗口更新數據個數Nupd為3個(0.5 h),劣化報警閾值Valm=30%。圖7為5月9日0:00時開始的各滑動窗口劣化率變化趨勢。圖8為第12、14、19和第25個滑動窗口監測運行數據與健康基準模型的對比圖。
在圖7中,實驗機組從第12個滑動窗口開始出現健康劣化。在第14個滑動窗口劣化率達到38.9%,超過報警閾值Valm=30%,即在第60個監測數據,也即9日10:00時,發出風電機組劣化預警,距離首次出現健康劣化數據的第12個滑動窗口僅滯后6個數據點約1 h。若SCADA系統的數據采集間隔更短,則本劣化預警模型的實時性更強。

圖7 滑動窗口健康劣化監測Fig. 7 Degradation monitoring in sliding windows

圖8 滑動窗口內數據分布情況Fig. 8 Data distribution in sliding windows
將風電機組健康劣化數據各參數與功率主帶中正常數據的各個參數進行比對分析,能夠確定機組健康劣化的原因。如圖9所示,5月9日健康劣化數據的齒輪箱油溫均超過70 ℃,明顯高于同工況下功率主帶數據的齒輪箱油溫:推斷為此時實驗機組齒輪箱運行異常,齒輪箱油溫超過設定報警值導致機組被迫在額定風速以下提前變槳限制機組出力,進而使風電機組出現健康劣化。

圖9 齒輪箱油溫劣化數據Fig. 9 Gearbox oil temperature of deterioration data
為驗證本文劣化報警閾值設置的合理性,使用MKIF風電機組健康劣化預警模型對E17機組2019年10月運行狀態進行長期監測,結果如圖10所示。圖中,10月9日15時左右,風電機組產生了4組偶發異常數據,導致機組健康劣化率增加到22%。MKIF健康劣化監測預警模型在10月12日10時與10月28日16時2次報警。查閱機組運行日志:風電機組在10月13日02時與10月29日20時2次故障停機,其余時間工作正常。機組運行情況與模型監測預警結果相符。因此,本文將劣化報警閾值Valm設置為30%,這樣即可在保證靈敏度的基礎上降低偶發異常數據對劣化監測的影響,使模型具有較好的預警效果。

圖10 健康劣化長期監測結果Fig. 10 Results of long-term monitoring of health deterioration
提出了基于孤立森林的MKIF算法:應用小批量K均值聚類自適應確定MKIF搜索樹的結構,并采用異常得分從全局的角度判斷每一數據點的孤立程度。使用MKIF算法提取出高質量的風電機組功率主帶作為健康基準,以標識單個數據的運行狀態。引入滑動窗口算法判斷時間序列數據的健康劣化率,確定機組健康劣化時段。針對不同故障類型,比對正常數據與劣化數據參數,分析健康劣化原因。
實例驗證表明,MKIF算法具有更高的建模精度,算法提取出的功率主帶數據能夠更好地表征風電機組正常工作狀態。構造的風電機組健康劣化監測模型能夠實時監測機組工作狀態,并準確識別出實驗機組齒輪箱異常。