武 略 焦瑞莉* 夏江江
(1北京信息科技大學信息與通信工程學院,北京 100101;2中國科學院大氣物理研究所,北京 100029;3中國科學院大學,北京 100049)
山嶺地區地形條件復雜,受背風坡和迎風坡的影響,氣溫、風和能見度等要素在水平范圍變化劇烈。其中,風向作為常見的預報要素,具有重要的實際意義和很高的研究價值,尤其對山區的風力發電、基礎設施建設等具有重要意義。風向是2022年北京冬季奧運組委會十分關注的氣象條件之一[1],具有較大的波動性和不可預測性,對運動員的成績和安全有關鍵影響。
目前,風向主要通過物理建模、統計學和數據驅動3種方法進行預測。物理方法主要為模式的預報,例如歐洲中期天氣預報中心針對全球格點所做的預測數據,原理通常為分析大氣運動規律,構建物理學方程模擬地理環境和天氣狀況,從而推演風場的變化規律。此類預測方法需要掌握大氣的物理相互作用,并建立合理規范的重現方程,但是由于模式的物理化方案尚存在欠缺,許多計算參數也不確定,使近地面風場預報存在較大的誤差[2]。在統計學方法方面,Erdem等[3]利用自回歸滑動平均模型(auto regressive moving average,ARMA)對風向序列進行了分析和預測,曾曉青等[4]利用傳統的模式輸出統計法進行了風向矢量預測,祝 牧等[5]使用隨機Markov鏈擬合了風向的時間序列,并建立模型進行預測。近年來,更高效的數據驅動算法如機器學習和深度學習開始應用于風向預測。Mohandes等[6]提出利用支持向量機對風向進行預測,張東東等[7]將BP神經網絡應用在風力發電機的風向預測中,唐振浩等[8]基于SWLSTM算法對超短期風向進行了預測。
為滿足風向預報的需求,算法應有較高的準確率,還應易于操作維護、復雜度低、建模快。結合山區的地形條件和氣候變化,所選用的預測方法需對山脈地區的數據變化足夠敏感,既能分析突變的風向數據,又可解決預測不準確的問題,還需及時使用最新數據再次搭建模型反饋結果,實現靈活準確的預報目標。本文分別使用ARMA統計方法、XGBoost機器學習算法、LSTM深度學習算法對選定山區4個氣象站的時間觀測序列進行預測,比較3種算法的優劣,并在此基礎上添加風速序列,將風速和風向拆分為U、V風向,并對其分別進行預測,將結果合成后能更好地預測高山站風向,進而為2022年冬奧會的風向預測探索一種新方法。
為了更好地模擬山區風向的預測實況,選擇北京延慶燕山山脈的4個氣象觀測站作為試驗站點,站點信息見表1。觀測站記錄的風向數據以時間序列的形式每小時記錄1次,將此數據作為后續的分析數據。

表1 山區4個氣象觀測站點信息
1.2.1 自回歸滑動平均模型。自回歸滑動平均模型(ARMA)作為研究時間序列的經典方法,由自回歸模型(簡稱AR模型)與滑動平均模型(簡稱MA模型)根據數據自身結構特點組合而成[9]。一般用ARMA模型擬合時間序列,預測該時間序列的未來值[10]。ARMA模型可表示為ARMA(p,q),其中 p是自回歸階數,q是移動平均階數,如式(1)所示:
式中:xt-1、xt-2、 ……、xt-p為不同時間點記錄的指標數值;?1、?2、……、?p為自回歸系數;μt、μt-1、……、μt-q為不同時間點的白噪聲項;θ1、θ2、……、θq為移動回歸方程系數;xt表示時間點t指標數值。
使用ARMA時,需要先判斷所使用的序列是否平穩:若平穩,可直接使用ARMA模型;若非平穩,需要對原序列進行差分直至平穩,再使用ARIMA模型,其中I代表差分次數。根據序列自相關和偏相關系數來確定模型的選擇,需要定階來確定p和q。其中:p代表時間序列是否存在周期,比如氣溫和降水隨季節變化,就存在明顯的年周期性,在氣溫預測中,往年同期數據有著很高的參考價值;q則代表白噪聲項。常用的定階方法為AIC[11]或BIC準則,AIC準則(akaike information criterion)是擬合精度和參數個數的加權函數,BIC(bayesian information criterion)則改善了AIC準則在大樣本情況下模型不收斂的問題。在確定模型之后還需要檢驗模型,具體包括觀察殘差序列的隨機性、是否符合正態分布、是否為白噪聲。
在Python的使用中,通常從statsmodels包中調用ARMA,statsmodels是一個包含多種統計模型、適用于數據分析的Python模塊;也可使用其中的plot_acf和plot_pacf繪制序列的自相關與偏相關圖。預測結束后,對預測出來的數據進行逆差分操作,即得到最終預測結果。
1.2.2 極端梯度提升算法。極端梯度提升算法(extreme gradient boosting,XGBoost)是 Boosting 算法的其中一種,Boosting作為一種提升方法,通過擬合殘差進而優化目標函數,從而將一組弱分類器集合成強分類器。為防止過擬合,基于提升算法,XGBoost對損失函數進行二階泰勒展開,并且加入正則項,衡量目標函數的下降和模型的復雜水平[12]。模型公式如式(2)所示:
式中,y?i為輸出的預測值,K 為樹的數量,fk表示第k棵樹模型。
對每一棵樹進行訓練時,目標函數如式(3)所示:
式中:L為損失函數;N為樣本數;t表示訓練第t棵樹;ft表示第 t輪所生成的樹模型;Ω(fi)表示正則項。
樹的復雜度如式(4)所示:
XGBoost的主要參數:eta,即學習率參數,值越小,模型對數據的學習越精細;max_depth,樹的最大深度,用來避免過擬合,值越大,模型對局部樣本的學習更具體;min_child_weight,同樣避免過擬合;gamma控制節點分裂的標準,值越大,算法越保守;subsample,采樣率,用于調節模型擬合程度;colsample_bytree,用于選擇所生成樹的特征;n_estimators,迭代次數,即生成樹的個數。
調整參數時,使Python軟件中的GridSearchCV來尋找模型的最佳參數:先調節n_estimators,范圍從400到800,步長為100,確定最優值后縮小步長再次尋找。然后調節控制樹結構的min_child_weight和max_depth這2個參數;之后依次調節gamma、subsample和colsample_bytree;最后調節學習率,因為其數值較小,所以從0.01開始調節。由于分別預測了風速和風向,因而需要在每次使用新數據前開始調參,從而獲得最好結果。
1.2.3 長短期記憶網絡。長短期記憶網絡(long short memory network,LSTM)作為一種特殊的循環神經網絡,用于解決對較長序列訓練過程中的出現梯度消失與爆炸問題[13]。LSTM通過輸入門、輸出門和遺忘門的門控狀態來控制傳輸狀態,有選擇地記住、遺忘或更新歷史信息。其結構如圖1所示。
LSTM的遺忘門用來決定遺棄細胞狀態中的哪些信息,數學模型為:
式中:ft為遺忘門的輸出;σ為激活函數,取值范圍為[0,1];xt為 t時刻輸入;ht-1為 t-1 時刻輸出;Wf和bf為參數矩陣,下同。
輸入門的作用是選擇信息放入細胞狀態中,數學模型如式(6)(7)所示:
式中:it為輸入門輸出;tanh同為激活函數,取值范圍[0,1]。
在每次輸出之前,需要更新信息,丟棄舊狀態的某些信息,即:
式中:Ct為t時刻細胞狀態。
最后,輸出門控制信息輸出,ot代表輸出門的輸出,數學模型為:
基于輸入門、輸出門和遺忘門組成的結構特點,LSTM具有了對歷史信息選擇性遺忘或更新的能力,能夠更好地分析時間序列的變化趨勢,從而實現篩選過去信息并且結合當前信息,預測未來時刻信息的功能[14]。
在傳統的時間序列預測中,多采用單時間序列,即預測某個要素就采用該要素的時間序列進行分析。而風向作為記錄風吹來方向的氣象要素,如圖2所示,被劃分為16個方位,數值變化呈圓形循環,正是由于其360°變化的特征導致了風向預測的困難。例如,0°~22.5°的風向和 337.5°~360.0°的風向在實際中差別不大,都可稱為北風,但從算法的數值上看相差巨大。
在之前對風向預測的試驗中,嘗試了將標識的風向作為Label應用于機器學習,其得出的結果在實際中不符合邏輯:相差最遠的標簽在實際中卻擁有相距最近的角度。使用時間序列分析,則避免了設置Label這一尷尬問題,算法分析均是基于歷史數據,從變化趨勢得到預測值。
為了進一步解決風向預測的難點并嘗試新的預測方法,本研究針對風向的特殊性加入了風速序列,結合氣象學中風向風速的轉化公式,將其拆分成U、V風并分別進行預測,再將結果結合,以避免風向數值差異過大,進而與使用單一的風向序列預測結果進行對比。
1.3.1 風的U、V分量。傳統的風向以東、南、西、北作為標識,轉化到數值上為0°表示北風、90°表示東風。在氣象領域,風場是由U、V風速分量來組成的二維場[15]。因此,可將傳統的風進行轉換,分別為U風和V風。U為東西風,即用U的正負來代表風為東風或者西風,絕對值代表此方向上風速的大小,U為正,代表傳統意義上的西風,為負則代表東風;而V為南北風,正為南,負為北。在風速上,則是對傳統風進行矢量分解。具體公式如下:
式中:S為風速;D為風向。
1.3.2 風向評分。為檢驗風向預測的效果,本文將16個風向方位簡化為 8個, 即 0°~22.5°和 337.5°~360.0°記 為 北 風 、22.5°~67.5°記 為 東 北 風 、67.5°~112.5°記為東風,以此類推。這樣既能滿足需求,也簡化了數據量,并采用了風向的預報評分FaWD,計算公式為:
式中:SCr為該站點預報的風向預報得分(表2),例如實況風向為90°、預測風向為30°,則得分為0.6,Nf為預報的總次數。這樣既可以避免使用傳統預測中的均方根誤差進行評估而導致的結果混亂,還可以簡化計算過程,在得出結果后就可以獲得算法的評價。
為了使預測目標更具實際意義,同時更好地模擬冬奧會期間的實況,將風向的預測目標定為2019年2月4—20日共17 d每天8:00—17:00共10 h的風向,并將每天的預測得分進行平均再比較。

表2 8個風向的預報評分對照
對4個站點分別進行預測,結果如圖3所示。將每天的評分進行平均(表3),可以看到XGBoost在4個站中都獲得了最好的效果,相對ARMA最高可取得125%的提升效果(A1490),并且XGBoost在連續17 d中評分曲線較為平滑,相對ARMA在A1489中的評分呈上升趨勢,卻在A1490的2月4—10日中呈現極低的準確率,表明XGBoost相比傳統的時間序列預測方法不僅在精度上有了較大提升,也更加穩定;LSTM在A1489和A1490明顯優于ARMA,但在A1491和A1492的效果并不好,尤其在A1491的2月6日評分更是出現了0。具體分析這一日的預測結果,可以看到:此日的真實風向集中于230°~290°,屬于設立的西風范圍,而LSTM的預測結果包含多個方向,并不集中,從而導致評分為0;反而預測結果較為單一的ARMA卻在此站獲得了很好的效果,相對于在A1489和A1490低迷的表現,證明了ARMA方法在單一盛行風的站點可以獲得較好的效果,而在復雜風場則效果不佳。

表3 單時間序列下不同算法在各站點的評分
從圖3可以看出,隨著海拔的升高,3種算法的效果越來越貼近,在海拔為2 099.8 m的A1492站點中3種算法的差別很小,折線幾乎重合,證明結果與海拔存在關聯。為進一步驗證這種關系,將2月4—20日每小時的風向繪出散點圖(圖4)。可以看出,A1489站點的風向分布較為均勻,而A1491和A1492站點則在200°~350°分布較多,即站點盛行西風。這與李 炬等[16]在2020年對小海坨冬奧賽場的觀測試驗結果相符,同時也解釋了3種算法的預測結果較為接近的原因:2個站點以西風為主導,在此基礎上算法進行分析,預測結果會更加趨于西風,尤其是對ARMA這種非常依賴前期元素的預測模型。這也為后期的預測方法提供了思路,即先分析數據分布,探明數據規律,在算法預測基礎上進行再次訂正,從而進一步提高預測準確率。
雙時間序列即將風向、風速序列轉化為U、V風,使用算法對U、V風單獨進行預測,再將其合成為風向,預測結果如圖5所示。可以看出,采用雙時間序列進行預測后,LSTM在A1491站點的2月6日評分為0的情況得到了解決并且獲得了較高的評分,證明U、V風的轉換對風向的預測有著積極作用。
將每天的評分進行平均得到表4,可以看到:XGBoost在風向預測中依舊擁有很大的優勢,在A1489中相對ARMA最大能有115%的提升,4個站點平均后的得分達到了0.7,具有很好的效果;LSTM的效果優于ARMA、遜于XGBoost,這與使用單序列進行預測時相同。

表4 雙時間序列下不同算法在站點的評分
相對于表3的單序列預測結果,使用雙序列進行預測,XGBoost和LSTM都有提升,而ARMA基本沒有變化。具體觀察圖3和圖5可以看到,雙序列預測A1489中ARMA評分在后幾天的表現并不如單序列,但XGBoost在A1489和A1492中的評分相比單序列更為平滑。這表明將風速風向轉化后,傳統的時間序列統計方法過于依賴建模的數值,并不能分析出數據原來的變化規律,相對于ARMA來說U、V風是嶄新的輸入數據,而XGBoost和LSTM卻可以采用這一方法得到提升,進而驗證了此種方法的可行性。
本文基于山區4個氣象站點觀測數據,結合時間序列分析方法,使用傳統的ARMA分析、機器學習XGBoost方法和神經網絡LSTM對4個站點特定時期的風速和風向進行了預測。為了獲得更準確的結果,嘗試將單一的風向風速序列轉化成U、V風,分別預測,進而合成結果,從而避免風向的數值問題,結果表明:所使用的3種算法中,XGBoost不論是在預測精度還是穩定度上都優于傳統的ARMA分析方法,而神經網絡LSTM在時間序列的預測中并沒有取得很好的效果,同時訓練模型還需要耗費大量時間。風向散點圖可以反映山區海拔較高的站點經常盛行一種風。由于山谷、山脊地形地勢常形成這種盛行風,這也導致了在這幾個站點算法預測評分的高度重疊。這同時也對風向預測提供了一種思路:在獲得算法的預測結果后,可由預報員根據當地氣候特征,對預測結果進行人工訂正,以期獲得更好的預報效果。將風向風速轉化為U、V風并進行分析后發現,XGBoost和LSTM方法都有了提升,證明此種方法對提升風向的預測效果有著積極作用。尤其是XGBoost方法,在風的諸多試驗中都表明了其可成為山區風向預報的可靠方法。