李 翔,沈艷霞
(江南大學(xué) 物聯(lián)網(wǎng)技術(shù)應(yīng)用教育部工程研究中心,江蘇 無錫 214122)
電力負(fù)荷預(yù)測作為電力系統(tǒng)部門的一項(xiàng)重要工作,對保證電力系統(tǒng)的合理規(guī)劃與調(diào)度、提高經(jīng)濟(jì)效益具有十分重要的意義[1]。準(zhǔn)確的電力負(fù)荷預(yù)測能夠?yàn)殡娋W(wǎng)規(guī)劃提供更好的指導(dǎo),有利于電力系統(tǒng)的安全穩(wěn)定運(yùn)行,使電能得到更充分的利用。
電力負(fù)荷預(yù)測中,傳統(tǒng)的時間序列模型(如自回歸滑動平均模型、Prophet、馬爾科夫鏈等)對于數(shù)據(jù)波動性不大、平穩(wěn)性較好的序列具有較好的預(yù)測效果,但是難以捕捉非平穩(wěn)序列中復(fù)雜的時間依賴關(guān)系。人工智能領(lǐng)域的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法也被廣泛應(yīng)用于負(fù)荷預(yù)測,常見的預(yù)測模型有支持向量機(jī)、極限學(xué)習(xí)機(jī)、長短期記憶(Long Short-Term Memory,LSTM)神經(jīng)網(wǎng)絡(luò)等[2,3]。文獻(xiàn)[4]按照重要程度對輸入特征進(jìn)行篩選,并使用貝葉斯優(yōu)化的極限梯度提升(eXtreme Gradient Boosting,XGBoost)模型進(jìn)行負(fù)荷預(yù)測。文獻(xiàn)[5]對原始負(fù)荷數(shù)據(jù)進(jìn)行經(jīng)驗(yàn)?zāi)B(tài)分解,建立了基于注意力機(jī)制的門控循環(huán)單元網(wǎng)絡(luò)并對各分量預(yù)測,將各預(yù)測值疊加形成最終的預(yù)測值。通過對原始序列進(jìn)行分解處理,降低了原始序列的非平穩(wěn)定性和復(fù)雜性。此外,對分解后的子序列進(jìn)行建模預(yù)測,有效提高了模型的預(yù)測精度。然而,單一模型難以全面挖掘數(shù)據(jù)之間的變化規(guī)律,也限制了模型的泛化性。文獻(xiàn)[6]基于特征選擇的方式,采用Stacking集成學(xué)習(xí)融合多種算法進(jìn)行負(fù)荷預(yù)測。文獻(xiàn)[7]通過Stacking 算法融合多層門控循環(huán)單元網(wǎng)絡(luò)實(shí)現(xiàn)風(fēng)電功率預(yù)測。文獻(xiàn)[8]利用改進(jìn)的螢火蟲算法優(yōu)化核嶺回歸模型中的參數(shù),通過Stacking 算法融合各核嶺回歸模型對風(fēng)速序列進(jìn)行預(yù)測。集成學(xué)習(xí)方式可以結(jié)合多個模型的優(yōu)勢,整體提升了模型的預(yù)測性能。
由于以上文獻(xiàn)均采用傳統(tǒng)的Stacking 模型,忽略了基學(xué)習(xí)器在交叉驗(yàn)證時所形成的不同模型之間的差異性,影響了模型的預(yù)測精度。文獻(xiàn)[7]和文獻(xiàn)[8]均使用了Stacking 進(jìn)行建模,但并沒有對原始序列進(jìn)行分解處理,仍未降低序列的非平穩(wěn)性和復(fù)雜性?;诖耍瑢瑒哟翱谔幚砗蟮呢?fù)荷序列進(jìn)行自適應(yīng)噪聲完備集合經(jīng)驗(yàn)?zāi)B(tài)分解(Complete Ensemble Empirical Mode Decomposition with Adaptive Noise,CEEMDAN),并重構(gòu)其模態(tài)分量[9]。根據(jù)Stacking 集成學(xué)習(xí)模型中不同學(xué)習(xí)器的預(yù)測精度,對其在測試集上的預(yù)測結(jié)果分配權(quán)重,利用改進(jìn)的Stacking 模型融合LSTM神經(jīng)網(wǎng)絡(luò)、XGBoost、K 最鄰近(K-Nearest Neighbor,KNN)模型以及多層感知機(jī)(Multilayer Perceptron,MLP)實(shí)現(xiàn)短期電力負(fù)荷預(yù)測。
考慮到電力負(fù)荷數(shù)據(jù)較強(qiáng)的時序關(guān)聯(lián)性,對數(shù)據(jù)集中的負(fù)荷數(shù)據(jù)按滑動窗口方式進(jìn)行處理(見圖1),將特征負(fù)荷序列x(i)和目標(biāo)負(fù)荷序列y(i)分別作為模型的輸入和輸出。其中,x(i)表示過去i天的歷史負(fù)荷序列,y(i)表示第i+1 天的負(fù)荷序列。
圖1 滑動窗口處理方式
對滑動窗口處理后的電力負(fù)荷序列進(jìn)行CEEMDAN 分解,分解算法的步驟如下。
(1)設(shè)原始電力負(fù)荷序列為x(t),第i次添加高斯白噪聲后,新的電力負(fù)荷序列xi(t)為
式中:εk為第k個信噪比;ωi(t)為第i次加入的高斯白噪聲序列。
(2)對xi(t)進(jìn)行經(jīng)驗(yàn)?zāi)B(tài)費(fèi)解(Empirical Mode Decomposition,EMD),得到第1 個模態(tài)分量IMF1(t)和第1 個剩余分量r1(t)為
(3)對新的信號r1(t)+ε1E1[ωi(t)]進(jìn)行EMD 分解,得到第2 個模態(tài)分量IMF2(t)為
式中:E1(·)為EMD 分解產(chǎn)生的第1 個模態(tài)分量的算子。
(4)重復(fù)步驟(3)的計(jì)算過程,得到第k+1個模態(tài)分量和剩余分量。
(5)當(dāng)達(dá)到EMD 的停止條件時,分解結(jié)束,原始電力負(fù)荷序列被分解為若干個模態(tài)分量和1 個剩余分量。為了適應(yīng)后續(xù)的預(yù)測模型,將需要得到的IMF 數(shù)量作為CEEMDAN 分解結(jié)束的停止條件[10]。
為了降低模型在時間和計(jì)算上的復(fù)雜度,將各模態(tài)分量重構(gòu)為高頻分量和低頻分量。假設(shè)電力負(fù)荷序列經(jīng)過CEEMDAN 分解成m個不同的內(nèi)涵模態(tài)分量(Intrinsic Mode Functions,IMF),本文將前m-1個分量重構(gòu)為高頻分量H,第m個分量為低頻分量L,重構(gòu)方式為
由于重構(gòu)得到的高頻序列和低頻序列中負(fù)荷數(shù)據(jù)的傳輸方式相同,為了方便描述,將特征負(fù)荷序列用Xi表示,將目標(biāo)負(fù)荷序列用Yj表示,其中Xi=(xi,xi+1,…,xi+N-1),則輸入向量分別為(x1,x2,…,xN),(x2,x3,…,xN+1),(xn,xn+1,…,xn+N-1),對應(yīng)的標(biāo)簽分別為(YN+1,YN+2,…,Yn+N)。
Stacking 集成學(xué)習(xí)框架通過對多種不同算法的融合,從整體上提升模型的性能。Stacking 框架由2 層學(xué)習(xí)器構(gòu)建而成。第1 層中包含多個基學(xué)習(xí)器,第2層中包含1 個元學(xué)習(xí)器,如圖2 所示。
圖2 Stacking 集成學(xué)習(xí)框架
首先,將劃分后的數(shù)據(jù)集輸入第1 層的基學(xué)習(xí)器中,各基學(xué)習(xí)器分別預(yù)測并輸出其預(yù)測值;其次,將輸出的預(yù)測值及其對應(yīng)的標(biāo)簽作為新數(shù)據(jù)集,以此訓(xùn)練第2 層的元學(xué)習(xí)器;最后,由元學(xué)習(xí)器輸出最終預(yù)測值。
Stacking 框架中,第1 層基學(xué)習(xí)器采用LSTM、XGBoost 以及KNN。LSTM 網(wǎng)絡(luò)可以很好地學(xué)習(xí)序列中的時間依賴關(guān)系,在時間序列建模上有一定的優(yōu)勢。KNN 算法訓(xùn)練時間快,算法復(fù)雜度較低。XGBoost 對上一步預(yù)測的殘差進(jìn)行擬合,可使模型訓(xùn)練更加充分。第2 層元學(xué)習(xí)器采用MLP,利用神經(jīng)網(wǎng)絡(luò)進(jìn)一步擬合預(yù)測值和原數(shù)據(jù)集標(biāo)簽,從整體上提升模型的預(yù)測能力。
2.2.1 LSTM
LSTM 網(wǎng)絡(luò)解決了循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)中存在的梯度消失和爆炸問題,通過隱藏層不斷地將上一時刻的信息傳遞至下一時刻,同時結(jié)合當(dāng)前時刻的輸入得到對應(yīng)輸出。設(shè)置本文模型中基學(xué)習(xí)器LSTM 的輸入向量為Xi,輸出向量為。
2.2.2 XGBoost
XGBoost 模型不同于大多數(shù)回歸模型采用原始數(shù)據(jù)進(jìn)行擬合,而是通過擬合上一步預(yù)測的殘差不斷逼近真實(shí)值,從而逐步提升模型的精度。
XGBoost 模型的預(yù)測值可以表示為
式中:表示預(yù)測值;K表示模型所用樹的數(shù)量。
XGBoost 模型的目標(biāo)函數(shù)為
目標(biāo)函數(shù)中第1 項(xiàng)表示預(yù)測值y^i 和真實(shí)值yi的誤差,第2 項(xiàng)表示所有樹的復(fù)雜度之和。通過最小化目標(biāo)函數(shù)的方式完成對函數(shù)集fk(x)的學(xué)習(xí),最后通過累加K棵樹的預(yù)測值實(shí)現(xiàn)負(fù)荷預(yù)測。設(shè)置本文模型中基學(xué)習(xí)器XGBOOST 的輸入向量為Xi,輸出向量為。
2.2.3 KNN
KNN 回歸是一種監(jiān)督學(xué)習(xí)算法,通過搜索歷史樣本中與預(yù)測樣本最接近的K個樣本,并根據(jù)平均屬性值進(jìn)行負(fù)荷預(yù)測。設(shè)置本文模型中基學(xué)習(xí)器KNN 的輸入向量為Xi,輸出向量為。
2.2.4 MLP
MLP 是一種全連接神經(jīng)網(wǎng)絡(luò)。數(shù)據(jù)由輸入層傳入隱藏層后,隱藏層中的神經(jīng)元對數(shù)據(jù)進(jìn)行分析和運(yùn)算,并將結(jié)果傳至輸出層,由輸出層對其處理后得到最終的輸出。假設(shè)MLP 輸入向量為X,經(jīng)過運(yùn)算得到
式中:W1、W2為權(quán)重;b1、b2為偏置。
第2 層學(xué)習(xí)器通過擬合訓(xùn)練集的預(yù)測值與其對應(yīng)的真實(shí)值來訓(xùn)練MLP 模型,將測試集的預(yù)測值輸入訓(xùn)練好的MLP 中,從而得到最終的預(yù)測值。
在CEEMDAN-Stacking 模型中,電力負(fù)荷數(shù)據(jù)的傳輸方式具體如下。
(1)經(jīng)過CEEMDAN 分解與模態(tài)重構(gòu)后,數(shù)據(jù)以滑動窗口的形式傳入模型,輸入為Xi,輸出為Yj。將數(shù)據(jù)按一定的比例劃分為訓(xùn)練集和測試集,分別記作Dtrain和Dtest。
(2)將訓(xùn)練集Dtrain劃分為k份,對于每一個基學(xué)習(xí)器(以LSTM 為例),將其中的k-1 份合并為訓(xùn)練集,另1 份作為驗(yàn)證集。在k輪訓(xùn)練中均采用k-1組數(shù)據(jù)訓(xùn)練LSTM,再用訓(xùn)練好的LSTM 對驗(yàn)證集中的特征負(fù)荷序列Xi進(jìn)行預(yù)測,輸出對應(yīng)的預(yù)測值,將其構(gòu)成的集合記為M1。同理,將基學(xué)習(xí)器XGBoost 的預(yù)測值構(gòu)成的集合記為M2,將基學(xué)習(xí)器KNN 的預(yù)測值構(gòu)成的集合記為M3。(3)在每個基學(xué)習(xí)器中(以LSTM 為例),對于測試集中每個樣本的特征負(fù)荷序列Xi,采用訓(xùn)練好的LSTM 模型進(jìn)行預(yù)測,得到k個預(yù)測值,yi,2,…,yi,k。對預(yù)測值取平均得到=(yi,1+yi,2+…+yi,k)/k,將預(yù)測值構(gòu)成的集合記為N。同理,將基學(xué)習(xí)器XGBoost 和KNN 的預(yù)測值構(gòu)成的集合分別記為N2、N3。
(4)將上述M1、M2、M3組合成新的訓(xùn)練集M,將N1、N2、N3組合成新的測試集N。利用新訓(xùn)練集M訓(xùn)練元學(xué)習(xí)器MLP,基于訓(xùn)練完成后的MLP 模型對新測試集N進(jìn)行預(yù)測,分別得到高頻分量和低頻分量的預(yù)測值,最后將二者的預(yù)測值疊加形成最終的預(yù)測值。
第1 層基學(xué)習(xí)器中以LSTM 為例,其他基學(xué)習(xí)器預(yù)測方式與LSTM 相同,Stacking 模型結(jié)構(gòu)如圖3、圖4 所示。
圖3 Stacking 第1 層結(jié)構(gòu)
圖4 Stacking 第2 層結(jié)構(gòu)
傳統(tǒng)Stacking 模型通過取平均的方式得到測試集的預(yù)測結(jié)果,忽視了各模型之間不同的預(yù)測效果,沒有將預(yù)測效果好的模型凸顯出來,同時預(yù)測效果差的模型也同等程度地參與其中。此時,應(yīng)該賦予預(yù)測效果好的模型更大的權(quán)重,同時削弱預(yù)測效果差的模型帶來的影響。改進(jìn)傳統(tǒng)Stacking 模型中對測試集的預(yù)測值取平均的方式,具體的權(quán)重分配機(jī)制如下。
(1)在訓(xùn)練集中記錄預(yù)測值和真實(shí)值Ytrue的平均相對誤差(Mean Absolute Percentage Error,MAPE),分別記作MAPE1,MAPE2,…,MAPEk,計(jì)算
(2)根據(jù)k個不同模型的預(yù)測效果確定對應(yīng)的權(quán)重α(q=1,2,…,k),則
(3)輸出測試集中各樣本最終的預(yù)測值=α1yi,1+α2yi,2+…+αkyi,k。
(4)對其他基學(xué)習(xí)器采用同樣的改進(jìn)方式,綜合計(jì)算后得到測試集的最終預(yù)測值。
以基學(xué)習(xí)器LSTM 為例,改進(jìn)Stacking 模型中的權(quán)重分配機(jī)制如圖5 所示,其他基學(xué)習(xí)器與之相同。
圖5 改進(jìn)Stacking 模型中的權(quán)重分配機(jī)制
短期電力負(fù)荷預(yù)測流程如圖6 所示。
圖6 短期電力負(fù)荷預(yù)測流程
(1)將原始電力負(fù)荷序列按滑動窗口的方式處理,分成若干段特征負(fù)荷序列和目標(biāo)負(fù)荷序列。
(2)對滑動窗口處理后的負(fù)荷序列進(jìn)行CEEMDAN 分解,將分解后的各分量重構(gòu)為高頻分量和低頻分量。
(3)將重構(gòu)后的高頻分量和低頻分量均采用改進(jìn)Stacking 模型進(jìn)行預(yù)測,得到高頻分量和低頻分量的預(yù)測值。
(4)疊加高頻分量和低頻分量的預(yù)測結(jié)果,得到最終的電力負(fù)荷預(yù)測結(jié)果。
數(shù)據(jù)集采用EMC 公司提供的電力負(fù)荷數(shù)據(jù)集,電力負(fù)荷數(shù)據(jù)顆粒度為30 min,即一天包含48 個電力負(fù)荷數(shù)據(jù)點(diǎn)。本實(shí)驗(yàn)將2020 年2 月1 日—2021 年8 月31 日的數(shù)據(jù)作為訓(xùn)練集,2021 年9 月1 日—10月31 日的數(shù)據(jù)作為驗(yàn)證集,2021 年11 月1 日—11月30 日的數(shù)據(jù)作為測試集,利用過去7 天的數(shù)據(jù)預(yù)測未來1 天的電力負(fù)荷。為了便于后續(xù)模型的訓(xùn)練,對數(shù)據(jù)進(jìn)行歸一化處理,歸一化公式為
式中:xnew為歸一化后的數(shù)據(jù);xmax為數(shù)據(jù)中的最大值;xmin為數(shù)據(jù)中的最小值。
采用均方根誤差(Root Mean Squared Error,RMSE)、 平均絕對誤差(Mean Absolute Error,MAE)、MAPE 來評價模型誤差,即
式中:yi表示i時刻的實(shí)際值;表示i時刻的預(yù)測值。
對滑動窗口處理后的負(fù)荷序列進(jìn)行CEEMDAN分解,發(fā)現(xiàn)當(dāng)分解層數(shù)為5 時,CEEMDAN 分解取得不錯的效果。通過CEEMDAN 分解后的各模態(tài)分量表現(xiàn)出較好的平穩(wěn)性,各個模態(tài)之間差異明顯且無模態(tài)混疊現(xiàn)象。隨機(jī)選取其中一段序列,分解結(jié)果如圖7 所示。實(shí)驗(yàn)中將前4 個分量重構(gòu)為高頻分量H,后1 個分量為低頻分量L,采用最終的預(yù)測模型對重構(gòu)后的各分量進(jìn)行預(yù)測。
圖7 CEEMDAN 分解結(jié)果
模型中基學(xué)習(xí)器采用LSTM、XGBoost、KNN,元學(xué)習(xí)器采用MLP。設(shè)置LSTM 堆疊層數(shù)為2 層,學(xué)習(xí)率為0.001,優(yōu)化器為Adam。XGBoost 中的n_estimators 設(shè)置為36;KNN 中的n_neighbors 設(shè)置為30。元學(xué)習(xí)器MLP 中隱藏層為1 層,隱藏層中神經(jīng)元數(shù)量為256 個。
3.4.1 CEEMDAN 分解后的Stacking 模型與單一模型對比實(shí)驗(yàn)
不同模型的預(yù)測精度對比結(jié)果如表1 所示。
表1 不同模型預(yù)測精度對比
由表1 可知,CEEMDAN-Stacking 模型相比CEEMDAN-LSTM 模型、CEEMDAN-XGBoost 模型以及CEEMDAN-KNN 模型,其RMSE、MAE 以及MAPE均達(dá)到了最低,說明Stacking 模型綜合了LSTM 模型、XGBoost 模型以及KNN 模型各自的優(yōu)勢,從整體上提升了模型的預(yù)測精度[10,11]。
3.4.2 CEEMDAN-Stacking 與Stacking 對比實(shí)驗(yàn)
分解后的模型預(yù)測精度對比如表2 所示。
表2 分解后模型預(yù)測精度對比
CEEMDAN-Stacking 模型相對于未經(jīng)過分解處理的Stacking 模型,其RMSE、MAE、MAPE 均有所降低,證明了負(fù)荷序列經(jīng)過CEEMDAN 分解處理后可以有效提升模型的預(yù)測精度。
負(fù)荷預(yù)測曲線如圖8 所示。
圖8 CEEMDAN-Stacking 與Stacking 模型預(yù)測結(jié)果對比
未經(jīng)過分解處理的Stacking 模型雖然能夠預(yù)測負(fù)荷的變化趨勢,但是其對真實(shí)負(fù)荷序列的擬合能力較弱[12]。經(jīng)過CEEMDAN 分解處理后,Stacking 模型對電力負(fù)荷的預(yù)測值與真實(shí)值更為接近,模型的預(yù)測能力得到了較大的提升。
3.4.3 改進(jìn)型CEEMDAN-Stacking 與CEEMDANStacking 對比實(shí)驗(yàn)
改進(jìn)后的模型預(yù)測精度對比如表3 所示。
表3 改進(jìn)后模型預(yù)測精度對比
由表3 可知,改進(jìn)型CEEMDAN-Stacking 模型相對于CEEMDAN-Stacking 模型,其RMSE、MAE、MAPE 均有所降低。負(fù)荷預(yù)測曲線如圖9 所示。
圖9 改進(jìn)型CEEMDAN-Stacking 與CEEMDAN-Stacking 模型預(yù)測結(jié)果對比
在大多數(shù)時間段內(nèi),改進(jìn)型CEEMDAN-Stacking模型對真實(shí)負(fù)荷序列的擬合能力更強(qiáng)。改進(jìn)型CEEMDAN-Stacking 模型根據(jù)學(xué)習(xí)器不同的預(yù)測效果賦予其相應(yīng)的權(quán)重,優(yōu)化了第2 層元學(xué)習(xí)器的輸入,從而得到更加準(zhǔn)確的預(yù)測結(jié)果。
改進(jìn)型CEEMDAN-Stacking 負(fù)荷預(yù)測模型以電力負(fù)荷時間序列為主線,對滑動窗口處理后的負(fù)荷序列進(jìn)行CEEMDAN 分解并重構(gòu)其模態(tài)分量。在預(yù)測模型部分,結(jié)合LSTM 算法、XGBoost 算法、KNN算法以及MLP 算法的優(yōu)點(diǎn),采用Stacking 集成學(xué)習(xí)模型將其融合,并通過精度賦權(quán)的方式對傳統(tǒng)Stacking 模型進(jìn)行改進(jìn),進(jìn)一步提升了模型的預(yù)測性能。相較于CEEMDAN-LSTM 模型、CEEMDANXGBoost 模型、CEEMDAN-KNN 模型、Stacking 模型以及CEEMDAN-Stacking 模型,改進(jìn)型CEEMDANStacking 模型具有更高的預(yù)測精度和工程實(shí)用價值。