吳文培,宋亞林,魏上斐
(河南大學(xué)智能網(wǎng)絡(luò)系統(tǒng)研究所,河南 開封 475000)
用電量預(yù)測(cè)是智能用電研究的重要問題之一,為國(guó)家電力資源的合理分配、地方供電平衡、線路電量損耗計(jì)算提供了重要參考信息,對(duì)智能用電管理工作具有積極的指導(dǎo)意義。
用電量預(yù)測(cè)是典型的時(shí)間序列預(yù)測(cè)問題,分析時(shí)間序列目的是預(yù)測(cè)未來發(fā)展趨勢(shì)。關(guān)于如何發(fā)掘用電量數(shù)據(jù)之間的規(guī)律,建立準(zhǔn)確可靠的數(shù)學(xué)模型,一直是中外學(xué)者們研究的問題[1]。傳統(tǒng)的預(yù)測(cè)方法如移動(dòng)平均法,是對(duì)時(shí)間數(shù)列進(jìn)行修勻處理[2],加大移動(dòng)平均法的期數(shù)(即加大n值)會(huì)使平滑波動(dòng)效果更好,但會(huì)使預(yù)測(cè)值對(duì)數(shù)據(jù)實(shí)際變動(dòng)更不敏感[3];移動(dòng)平均時(shí)距項(xiàng)數(shù)N為奇數(shù)時(shí),只需一次移動(dòng)平均,移動(dòng)平均值作為移動(dòng)平均項(xiàng)數(shù)中間一期的趨勢(shì)代表值;而當(dāng)移動(dòng)平均項(xiàng)數(shù)N為偶數(shù)時(shí),移動(dòng)平均值對(duì)應(yīng)的是偶數(shù)項(xiàng)的中間位置,無法對(duì)正某一時(shí)期,需要再進(jìn)行一次相臨兩項(xiàng)平均值的移動(dòng)平均,才能使平均值對(duì)正某一時(shí)期[4]。隨著人工智能的發(fā)展,各類機(jī)器學(xué)習(xí)算法與深度學(xué)習(xí)算法[5]涌現(xiàn)出來。如長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)[6](Long Short Term Memory Network,LSTM),能夠成功解決原始循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)難以記住時(shí)間間隔較長(zhǎng)的數(shù)據(jù)特征缺陷。RNN的梯度問題在LSTM及其變種里面得到了一定程度的解決[7],可以處理100個(gè)量級(jí)的序列,但對(duì)于1000個(gè)量級(jí)[8]及更長(zhǎng)的序列依然顯得棘手。隨機(jī)森林[9]能夠提供有效的方法來平衡數(shù)據(jù)集誤差,但在解決回歸問題時(shí),并不能給出一個(gè)連續(xù)的輸出[10]。當(dāng)進(jìn)行回歸時(shí),隨機(jī)森林不能夠做出超越訓(xùn)練集數(shù)據(jù)范圍的預(yù)測(cè)[11],這會(huì)導(dǎo)致在某些特定噪聲的數(shù)據(jù)進(jìn)行建模時(shí)出現(xiàn)過度擬合[12]。對(duì)于小數(shù)據(jù)或低維數(shù)據(jù)[13](特征較少的數(shù)據(jù)),并不能產(chǎn)生很好的分類(回歸)效果。Prophet模型具有簡(jiǎn)單、易解釋[14]的周期性結(jié)構(gòu),能很好地兼容并解釋節(jié)假日等時(shí)間節(jié)點(diǎn),但Prophet模型易在特殊時(shí)間點(diǎn)陷入過擬合[15],這將導(dǎo)致部分預(yù)測(cè)行為的誤差偏大。對(duì)此,本文提出了利用XGBoost模型優(yōu)化Prophet模型的策略,使融合模型兼具兩個(gè)子模型的優(yōu)勢(shì),減小預(yù)測(cè)誤差。實(shí)驗(yàn)證明,改進(jìn)后的預(yù)測(cè)模型X-Prophet,與原模型相比,預(yù)測(cè)誤差更小。
2017年2月,F(xiàn)acebook開源了一款基于 Python 和 R 語言的數(shù)據(jù)預(yù)測(cè)工具——“Prophet”[16]。該算法是基于時(shí)間序列分解和機(jī)器學(xué)習(xí)的擬合而設(shè)計(jì)的,不僅可以處理時(shí)間序列存在一些異常值的情況,也可以處理部分缺失值的情形,還能夠幾乎全自動(dòng)地預(yù)測(cè)時(shí)間序列未來的走勢(shì)。其中在擬合模型時(shí)使用了 pyStan 這個(gè)開源工具,因此能夠在較快的時(shí)間內(nèi)得到需要預(yù)測(cè)的結(jié)果。
Prophet是一種加法模型,由趨勢(shì)項(xiàng)、周期項(xiàng)、節(jié)假日項(xiàng)、誤差項(xiàng)四項(xiàng)組成
p(t)=g(t)+s(t)+h(t)+εt
(1)
g(t)表示趨勢(shì)項(xiàng),表示時(shí)間序列在非周期上面的變化趨勢(shì);s(t)表示周期項(xiàng),也可以稱為季節(jié)項(xiàng),默認(rèn)情況下,以周或年為單位;h(t)表示節(jié)假日項(xiàng),表示當(dāng)天是否存在節(jié)假日;表示誤差項(xiàng)。
趨勢(shì)項(xiàng)g(t)是Prophet中的一個(gè)重要項(xiàng),g(t)有兩個(gè)重要函數(shù),一個(gè)是基于分段線性函數(shù),另一個(gè)是基于邏輯回歸函數(shù)。
基于分段邏輯回歸增長(zhǎng)模型如
(2)
其中
a(t)=(a1(t),…,as(t))T
δ=(δ1,…,δs)T
γ=(γ1,…,γs)T
(3)
C(t)表示模型容量,k表示增長(zhǎng)率,δ表示增長(zhǎng)率的變化量。隨著t的增加,g(t)趨于C(t)。使用Prophet的growth=’logistic’的時(shí)候,需要提前設(shè)置好C(t)的取值。
基于分段線性函數(shù)的模型形如
g(t)=(k+a(t)δ)·t+(m+a(t)Tγ)
(4)
k表示增長(zhǎng)率,δ表示增長(zhǎng)率的變化量,m表示offset parameter。
周期(季節(jié))s(t)中的周期性函數(shù)可以通過正玄或余玄函數(shù)來表示。用傅立葉級(jí)數(shù)來模擬時(shí)間序列的周期性,如
(5)
對(duì)于以年為周期的序列(P=365.25),N=10;對(duì)于以周為周期的序列,N=3。參數(shù)可以形成向量
β=(a1,b1,…,aN,bN)T
(6)
當(dāng)N=10時(shí)
(7)
當(dāng)N=3時(shí)
(8)
因此,時(shí)間序列的季節(jié)項(xiàng)是:s(t)=x(t)β,β的初始化是β~Normal(0,σ^2)。σ=seasonality_prior_scale,σ值越大,表示季節(jié)的效果越明顯。
節(jié)假日項(xiàng)h(t)模型形如
Z(t)=(1{t∈Di},…,1{t∈DL}),k=(k1,…,kL)T
(9)
k的初始化是k~Normal(0,v^2),v=holidays_prior_scale,默認(rèn)值是10,當(dāng)值越大時(shí),表示節(jié)假日對(duì)模型的影響越大。
X-Prophet改進(jìn)模型是在原模型Prophet的基礎(chǔ)上,增加了一個(gè)置信值優(yōu)化模塊。該模塊的作用是結(jié)合Prophet和XGBoost兩個(gè)子模型,利用XGBoost模型優(yōu)化Prophet模型,減小模型預(yù)測(cè)誤差。X-Prophet模型如圖1所示。
圖1 X-Prophet模型圖
結(jié)合Prophet模型實(shí)現(xiàn)原理和流程分析,原數(shù)據(jù)經(jīng)過趨勢(shì)項(xiàng)、季節(jié)項(xiàng)、節(jié)假日項(xiàng)、誤差項(xiàng)處理后(參照式(1)),給出一系列預(yù)測(cè)值的置信區(qū)間,置信區(qū)間有上限yhat_upper和下限yhat_lower。每個(gè)時(shí)間節(jié)點(diǎn)上下限之間的所有值都有可能成為該時(shí)間節(jié)點(diǎn)的預(yù)測(cè)值。Prophet以每個(gè)時(shí)間節(jié)點(diǎn)預(yù)測(cè)值yhat作為最終預(yù)測(cè)結(jié)果。而節(jié)假日等特殊時(shí)間節(jié)點(diǎn)是時(shí)間序列預(yù)測(cè)問題中的一個(gè)重要特征,顯示加入對(duì)節(jié)假日等特殊時(shí)間節(jié)點(diǎn)的處理,對(duì)最終的預(yù)測(cè)結(jié)果有明顯的影響。對(duì)Prophet模型而言,其中h(t)項(xiàng)是對(duì)節(jié)假日的專門處理項(xiàng),為了將節(jié)假日效應(yīng)發(fā)揮至最大,模型默認(rèn)將節(jié)假日影響力參數(shù)置為最大值,以此提升整個(gè)模型的預(yù)測(cè)性能。但是最大節(jié)假日影響力參數(shù)易使Prophet模型在節(jié)假日等時(shí)間節(jié)點(diǎn)的預(yù)測(cè)行為陷入過擬合,影響模型的穩(wěn)定性,使預(yù)測(cè)誤差偏大。
XGBoost模型是一種強(qiáng)分類器模型[17],能夠快速準(zhǔn)確地挖掘數(shù)據(jù)中的節(jié)假日等特殊時(shí)間點(diǎn)的特征,而且該模型具有正則化項(xiàng),在對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行分析預(yù)測(cè)的過程中,能夠避免預(yù)測(cè)行為陷入過擬合[18]。因此,這里提出改進(jìn)模型X-Prophet。X-Prophet模型中增加預(yù)測(cè)值優(yōu)化模塊,如圖1所示。目的是通過優(yōu)化模塊引入XGBoost項(xiàng),利用XGBoost具有正則項(xiàng)的特性來優(yōu)化Prophet,使這兩個(gè)模型優(yōu)勢(shì)互補(bǔ),得到X-Prophet改進(jìn)模型,最終達(dá)到減小預(yù)測(cè)誤差,提高預(yù)測(cè)準(zhǔn)確率的目的。對(duì)于引入XGBoost優(yōu)化項(xiàng)后的X-Prophet模型,模型構(gòu)建可用如下公式表示
(10)
ft(x)=wq(x)
(11)
(12)
(13)
(14)
式(10)表示X-Prophet模型分析數(shù)據(jù)得到相應(yīng)時(shí)間點(diǎn)的最優(yōu)解;式(12)表示模型的懲罰項(xiàng) ,懲罰項(xiàng)用來控制模型的復(fù)雜度;式(13)表示模型的損失函數(shù),在每一輪迭代過程中,損失函數(shù)obj使得預(yù)測(cè)值和損失值的誤差和達(dá)到最小,即完成了最優(yōu)模型的構(gòu)建。式(14)表示模型的最終預(yù)測(cè)值。
3.2.1 數(shù)據(jù)集
本文的實(shí)驗(yàn)數(shù)據(jù)集采用的是數(shù)據(jù)平臺(tái)Kaggle提供的美國(guó)加州地區(qū)2008~2017年10年的小時(shí)用電數(shù)據(jù)。
3.2.2 模型構(gòu)建
對(duì)原數(shù)據(jù)進(jìn)行建模分析,為防止數(shù)據(jù)因?yàn)闀r(shí)間亂序?qū)?shí)驗(yàn)結(jié)果產(chǎn)生影響,預(yù)先對(duì)數(shù)據(jù)按時(shí)間進(jìn)行排序。X-Prophet模型進(jìn)行預(yù)測(cè)時(shí)需要兩列數(shù)據(jù)分別是‘ds’和‘y’,其中‘ds’表示時(shí)間戳,‘y’表示時(shí)間序列的值,因此,在處理數(shù)據(jù)時(shí),需要修改數(shù)據(jù)的列名。原數(shù)據(jù)也是兩列數(shù)據(jù),包括時(shí)間列和用電量列(k-Wh)。X-Prophet對(duì)缺失數(shù)據(jù)具有很好的處理方式,首先去除數(shù)據(jù)中的異常點(diǎn)(outlier),直接賦值為none,X-Prophet可以通過插值處理缺失值,所以這里不需要額外對(duì)原數(shù)據(jù)的缺失值進(jìn)行處理。通過以上對(duì)原數(shù)據(jù)的處理,得到處理后的數(shù)據(jù),如表1所示。
表1 預(yù)處理后的數(shù)據(jù)
周期性(季節(jié)性)是X-Prophet模型中的一個(gè)重要組成部分,采用標(biāo)準(zhǔn)傅里葉級(jí)數(shù),年、周的周期性(seasonality)近似值分別為20和6,周期性成分(seasonal component)在正常情況下是平滑狀態(tài)。如果時(shí)間序列超過兩個(gè)周期,X-Prophet將默認(rèn)適合每周和每年的季節(jié)性。對(duì)于日(sub-daily)時(shí)間序列,也將適合每日的季節(jié)性。節(jié)假日處理是X-Prophet模型中一個(gè)重要模塊,為了充分發(fā)揮X-Prophet的性能,本文加入節(jié)假日信息。因?yàn)椴捎玫拿绹?guó)加州的用電數(shù)據(jù),所以需要加入一些美國(guó)主要的節(jié)假日信息,如超級(jí)碗(橄欖球比賽),以及一些美國(guó)的傳統(tǒng)日期,如元旦、感恩節(jié)、圣誕節(jié)。節(jié)假日信息表如表2 所示。
表2 節(jié)假日信息表
將處理好的以“小時(shí)”為時(shí)間粒度的數(shù)據(jù),按訓(xùn)練集70%、測(cè)試集30%的比例進(jìn)行劃分,以便更好地評(píng)估X-Prophet模型預(yù)測(cè)的準(zhǔn)確率。改進(jìn)模型X-Prophet提供了一系列參數(shù)協(xié)助模型調(diào)優(yōu),表3是模型參數(shù)初始化列表。
表3 模型參數(shù)初始化表
選擇趨勢(shì)模型,控制參數(shù)是“growth”,默認(rèn)使用分段線性的趨勢(shì)“growth=linear”,但是如果認(rèn)為模型的趨勢(shì)是按照log函數(shù)方式增長(zhǎng)的,可設(shè)置growth=′logistic′從而使用分段log的增長(zhǎng)方式。默認(rèn)情況下,只有在時(shí)間序列的前80%才會(huì)推斷出突變點(diǎn),以便有足夠的長(zhǎng)度來預(yù)測(cè)未來的趨勢(shì),并避免在時(shí)間序列的末尾出現(xiàn)過度擬合的波動(dòng),默認(rèn)值可以在大多數(shù)情況下工作。修改changepoint_range參數(shù),changepoint_range=0.9表示將在時(shí)間序列的前90%處尋找潛在的變化點(diǎn)。如果趨勢(shì)的變化被過度擬合(即過于靈活)或者擬合不足(即靈活性不夠),可以利用輸入?yún)?shù) changepoint_prior_scale 來調(diào)整稀疏先驗(yàn)的程度。默認(rèn)下,這個(gè)參數(shù)被指定為 0.05 。增大該值,會(huì)導(dǎo)致趨勢(shì)擬合得更加靈活。如果發(fā)現(xiàn)節(jié)假日效應(yīng)被過度擬合了,可以通過設(shè)置參數(shù) holidays_prior_scale調(diào)整它們的先驗(yàn)規(guī)模來使之平滑,默認(rèn)情況下該值取 10 。減小該值會(huì)降低假期效果。seasonality_prior_scale 參數(shù)可以用來調(diào)整模型對(duì)于季節(jié)性的擬合程度。learning_rate表示學(xué)習(xí)率,可以縮減每一步的權(quán)重值,使得模型更加健壯;max_depth表示樹的最大深度,值越大,樹越復(fù)雜??梢杂脕砜刂七^擬合,典型值是3-10。
將訓(xùn)練集的數(shù)據(jù)作為模型的輸入數(shù)據(jù),查看預(yù)測(cè)的成分分析,如圖2所示。
圖2 預(yù)測(cè)成分分析圖
圖2給出了模型對(duì)訓(xùn)練集數(shù)據(jù)各成分單獨(dú)分析的結(jié)果。從上至下依次是美國(guó)加州地區(qū)2008~2014年用電量被Prophet加法模型分解的增長(zhǎng)趨勢(shì)(trend)、節(jié)假日趨勢(shì)(holidays)、周趨勢(shì)(weekly)、年度趨勢(shì)(yearly)、日趨勢(shì)(daily)。增長(zhǎng)趨勢(shì)中訓(xùn)練集到測(cè)試集10年的年用電量波動(dòng)不大,基本保持平衡;年度趨勢(shì)中,2月、8月、12月存在波峰,說明這三個(gè)月是加州地區(qū)每年用電量最多的月份;5月、10月存在明顯的波谷,說明這兩個(gè)月是加州每年用電量最少的兩個(gè)月。周趨勢(shì)中,周日到周二的用電量存在明顯的線性急速增長(zhǎng)趨勢(shì),接近正比。增長(zhǎng)趨勢(shì)到周二后消失,周二至周五,用電量波動(dòng)很小,基本趨向平穩(wěn)。周五至周六,用電量開始下降。說明每周周末用電量最低,周二至周五用電量最多,基本趨向平穩(wěn)。日趨勢(shì)中,每天4點(diǎn)是用電量的低谷,20點(diǎn)事用電量的高峰,0點(diǎn)到4點(diǎn)用電量存在明顯下降趨勢(shì),4點(diǎn)到10點(diǎn)明顯增長(zhǎng),10點(diǎn)到18點(diǎn)用電量趨勢(shì)基本維持平穩(wěn),20點(diǎn)到24點(diǎn),用電量迅速下降。
將訓(xùn)練集的數(shù)據(jù)分別作為Prophet模型和改進(jìn)后的X-Prophet模型的輸入,進(jìn)行數(shù)據(jù)分析,將訓(xùn)練好的模型用于測(cè)試集,對(duì)預(yù)測(cè)效果進(jìn)行分析。本文選用平均百分比誤差(MAPE)和均方根誤差(RMSE)作為評(píng)估原模型和改進(jìn)模型預(yù)測(cè)效果的標(biāo)準(zhǔn),表達(dá)式如下
(15)
(16)
observed為每個(gè)小時(shí)的實(shí)際用電量,predicted為每個(gè)小時(shí)的預(yù)測(cè)量,n為小時(shí)的總數(shù)。用以上誤差公式計(jì)算原模型和改進(jìn)模型在測(cè)試集數(shù)據(jù)上的預(yù)測(cè)誤差。Prophet模型誤差如表4所示;X-Prophet模型根據(jù)不同權(quán)值產(chǎn)生多組誤差,如表5所示。
表4 測(cè)試集Prophet模型誤差表
表5 權(quán)值系數(shù)w1和w2對(duì)應(yīng)的X-Prophet模型誤差
表5中數(shù)據(jù)顯示,當(dāng)w1=0.2,w2=0.8時(shí),改進(jìn)模型X-Prophet在測(cè)試集上的預(yù)測(cè)綜合誤差最小,即此時(shí)模型最優(yōu),MAPE=7.69,RMSE=1557.1。
Prophet模型和當(dāng)w1=0.2、w2=0.8時(shí)X-Prophet模型在測(cè)試集上的預(yù)測(cè)效果圖如圖3、圖4所示。
圖3 Prophet測(cè)試集預(yù)測(cè)效果圖
圖4 X-Prophet測(cè)試集預(yù)測(cè)效果圖
圖3、圖4中顯示,深灰色曲線表示測(cè)試集中用電量的預(yù)測(cè)值,淺灰色曲線表示用電量的真實(shí)值。結(jié)果表明改進(jìn)后的模型X-Prophet在測(cè)試集數(shù)據(jù)上的的曲線擬合效果比Prophet模型要好。
對(duì)比Prophet模型在測(cè)試集上的預(yù)測(cè)誤差,以及w1=0.2,w2=0.8時(shí)X-Prophet模型的預(yù)測(cè)誤差,見表6。
表6 兩種模型誤差對(duì)比表
分析上表發(fā)現(xiàn),與原模型相比,改進(jìn)后的模型在測(cè)試集上,預(yù)測(cè)誤差MAPE減少了約11%,RMSE同樣減少了約11%。改進(jìn)后的模型具有更準(zhǔn)確的預(yù)測(cè)結(jié)果。
綜上所述,改進(jìn)模型X-Prophet與原模型Prophet相比,預(yù)測(cè)誤差更小,模型更穩(wěn)定,預(yù)測(cè)效果更佳。
本文提出了一種基于Prophet的改進(jìn)預(yù)測(cè)模型X-Prophet。該模型引入了優(yōu)化項(xiàng)XGBoost對(duì)Prophet預(yù)測(cè)值進(jìn)行優(yōu)化,使Prophet與XGBoost優(yōu)勢(shì)互補(bǔ),提高預(yù)測(cè)準(zhǔn)確率。實(shí)驗(yàn)結(jié)果表明,與原模型相比,X-Prophet改進(jìn)模型使預(yù)測(cè)誤差減小了約11%,在預(yù)測(cè)行為上比原模型具有更高的準(zhǔn)確性。