王 平,吳文波,馬毅華,許 江,宗智誠
(上海申鐵信息工程有限公司,上海 200071)
客流量是鐵路客運(yùn)組織的依據(jù),準(zhǔn)確預(yù)測(cè)客流量能夠輔助客運(yùn)部門合理規(guī)劃與管理客運(yùn)運(yùn)營,更好地滿足旅客出行需求和提升客服質(zhì)量,對(duì)于增加鐵路客運(yùn)收益和降低運(yùn)營風(fēng)險(xiǎn)具有重要意義。新冠肺炎疫情爆發(fā)以來,國家鐵路正常運(yùn)營遭受嚴(yán)重影響,對(duì)鐵路客運(yùn)運(yùn)營的短期影響尤為顯著[1],2020 年上半年全國鐵路發(fā)送旅客8.18 億人次,同比下降53.9%[2]。隨著我國進(jìn)入“后疫情時(shí)期”,鐵路客流正逐步回升,但也呈現(xiàn)出較大波動(dòng),面對(duì)鐵路提質(zhì)增效的任務(wù),準(zhǔn)確預(yù)測(cè)客流量顯得愈發(fā)重要。
目前,國內(nèi)關(guān)于鐵路客流量預(yù)測(cè)已有不少的研究,采用的方法主要包括:灰色預(yù)測(cè)法[3-4]、支持向量回歸機(jī)[5-6]、組合預(yù)測(cè)法[7]等。這些鐵路客流量方法各有優(yōu)勢(shì),針對(duì)的預(yù)測(cè)對(duì)象也有所不同,但在樣本數(shù)據(jù)集選擇方面,極少有研究使用新冠肺炎疫情期間鐵路客流數(shù)據(jù)進(jìn)行預(yù)測(cè)。此外,新冠肺炎疫情期間,鐵路客流存在較大的波動(dòng)性和隨機(jī)性,加大了準(zhǔn)確預(yù)測(cè)客流量的難度,亟需探索新的客流量預(yù)測(cè)方法。
本文嘗試采用極端梯度提升(XGBoost,eXtreme Gradient Boosting)模型,以上海站為例,選用包含新冠肺炎疫情期間的樣本數(shù)據(jù),研究將XGBoost 模型應(yīng)用于鐵路大型客運(yùn)站客流量的預(yù)測(cè)。
新冠肺炎疫情爆發(fā)前,鐵路客流量呈現(xiàn)一定的周期性波動(dòng),新冠肺炎疫情在國內(nèi)爆發(fā)后,鐵路客流量出現(xiàn)斷崖式下跌。以上海站為例,2016 年—2021 年客流量總體變化趨勢(shì)如圖1 所示。結(jié)合圖2,黃色曲線為新冠肺炎疫情本土確診人數(shù)曲線,藍(lán)色曲線為客流量曲線,紅色豎線是客流量出現(xiàn)斷崖式下跌的時(shí)間點(diǎn),對(duì)應(yīng)日期為2020 年1 月23 日,正是新冠肺炎疫情在國內(nèi)爆發(fā)的時(shí)間。此后,客流量雖有一定回升,但整體仍低于新冠肺炎疫情前的同期客流量。為此,考慮將新冠肺炎疫情本土新增確診人數(shù)和本土現(xiàn)存確診人數(shù)作為反映疫情因素的特征,以期提高預(yù)測(cè)的敏感度與準(zhǔn)確性。
圖1 2016 年—2021 年上海站客流量總體變化趨勢(shì)
圖2 新冠肺炎疫情本土確診人數(shù)和客流量關(guān)系曲線
觀察圖3,夏季8 月份的客流量略高于其它月份,而冬季2 月份的客流量略低于其它月份。
圖3 上海站1 年內(nèi)客流量變化(1 月—12 月)
出現(xiàn)這種現(xiàn)象的主要原因是:
(1)溫暖天氣相較于寒冷天氣更適宜出行;
(2)8 月份正值我國鐵路暑運(yùn)期間,鐵路客流以學(xué)生暑假返家、開學(xué)返校為主。
天氣溫暖和寒冷可以采用氣溫進(jìn)行量化,以便于算法處理。春運(yùn)時(shí)間為每年農(nóng)歷臘月十五—次年正月廿五,暑運(yùn)時(shí)間為每年7 月初—9 月初。如圖4所示,1 月和2 月氣溫最低,對(duì)應(yīng)春運(yùn)的時(shí)間區(qū)間,7 月和8 月氣溫最高,對(duì)應(yīng)暑運(yùn)的時(shí)間區(qū)間,即春運(yùn)和暑運(yùn)與氣溫高低強(qiáng)相關(guān)。為此,本文選取氣溫(包括當(dāng)日最高氣溫和當(dāng)日最低氣溫)作為天氣特征納入預(yù)測(cè)模型。
圖4 上海市1 年內(nèi)氣溫變化(1 月—12 月)
以1 個(gè)星期為單位,對(duì)2016 年1 月1 日—2021年5 月17 日上海站的客流量進(jìn)行分析,如圖5 所示。星期六客流量在1 個(gè)星期中為最高,星期五其次,其它日無顯著差異。
圖5 上海站1 個(gè)星期內(nèi)客流量變化(2016 年1 月1 日—2021 年5 月17 日)
進(jìn)一步分析同一時(shí)期內(nèi)節(jié)假日對(duì)上海站客流量的影響,如圖6 所示。
由圖6 可知,節(jié)假日相比工作日客流量有明顯的增加,節(jié)假日前1 天客流量不僅顯著高于工作日客流量,并且略高于假期平均客流量,而假期中第2 天的客流量與工作日無明顯差異。
圖6 上海站節(jié)假日客流量變化(2016 年1 月1 日—2021 年5 月17 日)
為此,細(xì)化日期屬性,法定節(jié)假日和周末統(tǒng)稱為假期,將月份、星期、當(dāng)天是否為假期、前1 天是否為假期、第2 天是否為假期作為日期特征納入預(yù)測(cè)模型。
XGBoost 是由陳天奇等人[8]提出的一種改進(jìn)的梯度提升決策樹(GDBT,Gradient Boosting Decision Tree)算法。
對(duì)于一個(gè)給定n個(gè)樣本的數(shù)據(jù)集D={(xi,yi)}(i=1,2,···,n),xi表示第i個(gè)樣本的特征值集合,yi表示第i個(gè)樣本的標(biāo)簽值,則基于數(shù)據(jù)集D訓(xùn)練得到的具有K個(gè)基學(xué)習(xí)器的XGBoost 預(yù)測(cè)模型為
XGBoost 模型的目標(biāo)函數(shù)L包含2 部分:
在尋找最佳fk(xi)的過程中,通過不斷迭代來最小化目標(biāo)函數(shù),第t次迭代的目標(biāo)函數(shù)可改寫為
對(duì)式(4)進(jìn)行二階泰勒近似展開,去掉常數(shù)項(xiàng),其中,gi和hi分別是損失函數(shù)l的一階導(dǎo)數(shù)和二階導(dǎo)數(shù),即有
對(duì)式(5)進(jìn)行優(yōu)化,定義Ij={i|q(xi)=j}為落入葉子節(jié)點(diǎn)j的樣本集合,可計(jì)算出最優(yōu)權(quán)重和相應(yīng)的最優(yōu)值為
相比于傳統(tǒng)的GDBT 算法,XGBoost 模型利用了損失函數(shù)的二階導(dǎo)數(shù)信息,能加快算法收斂,并且在目標(biāo)函數(shù)中增加了正則懲罰項(xiàng),可降低模型復(fù)雜度,從而防止模型過擬合。
基于XGBoost 的鐵路客流量預(yù)測(cè)方法是一種綜合多因素方法,考慮疫情、天氣、日期等因素對(duì)鐵路客流量的影響,具體步驟為:
(1)收集客流數(shù)據(jù)以及影響客流量的主要因素的歷史數(shù)據(jù),進(jìn)行數(shù)據(jù)預(yù)處理,生成用于XGBoost模型的樣本數(shù)據(jù);
(2)將樣本數(shù)據(jù)劃分為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集2 部分;
(3)運(yùn)用k折交叉驗(yàn)證將訓(xùn)練數(shù)據(jù)集劃分為k份,每次選擇其中k-1 份作為訓(xùn)練集,另外一份作為驗(yàn)證集,對(duì)XGBoost 模型進(jìn)行訓(xùn)練,并使用網(wǎng)格搜索(Grid Search)進(jìn)行參數(shù)優(yōu)化,得到最佳預(yù)測(cè)模型;
(4)使用訓(xùn)練好的XGBoost 模型對(duì)測(cè)試數(shù)據(jù)集進(jìn)行預(yù)測(cè)。
從鐵路客票系統(tǒng)中抽取上海站2016 年1 月1 日—2021 年5 月17 日的共計(jì)1965 天的客流量數(shù)據(jù),另從互聯(lián)網(wǎng)上收集同一時(shí)間段內(nèi)新冠肺炎疫情本土新增確診人數(shù)和本土現(xiàn)存確診人數(shù)、上海市每日最高與最低溫度,以及假期日期。將前85%數(shù)據(jù)(即2016 年 1 月 1 日—2020 年 7 月 27 日的客流量數(shù)據(jù))作為訓(xùn)練樣本和驗(yàn)證樣本,后15%數(shù)據(jù)(即2020 年7 月 28 日—2021 年 5 月 17 日的客流量數(shù)據(jù))作為測(cè)試樣本,進(jìn)行如下處理:
(1)對(duì)日期特征進(jìn)行預(yù)處理,對(duì)月、星期進(jìn)行One-hot 編碼,對(duì)假期進(jìn)行啞編碼,將編碼后的數(shù)據(jù)轉(zhuǎn)化為有監(jiān)督的數(shù)據(jù)集;
(2)考慮到當(dāng)日客流量除受到同期因素的影響,還可能與前期值有關(guān),采用客流量的滯后變量作為特征;
(3)為了消除預(yù)測(cè)的隨機(jī)波動(dòng),利用簡單移動(dòng)平均法,生成前5 天平均客流量和前10 天平均客流量作為客流量特征。
預(yù)處理后的有監(jiān)督數(shù)據(jù)集輸入列數(shù)為36 列,輸出列數(shù)為1 列??紤]到樣本容量較小,在模型訓(xùn)練階段,采用k 折交叉驗(yàn)證(k=5)進(jìn)行訓(xùn)練,以提升模型性能。
建模軟件選用Python 3.8,將預(yù)處理后的數(shù)據(jù)輸入XGBoost 模型,使用Grid Search 進(jìn)行參數(shù)搜索,尋找模型最優(yōu)參數(shù)。XGBoost 模型的學(xué)習(xí)率設(shè)置為0.02,葉子節(jié)點(diǎn)訓(xùn)練樣本最小數(shù)量設(shè)置為50,迭代算法為GDBT。
圖7 為上海站實(shí)際客流量與XGBoost 模型預(yù)測(cè)結(jié)果對(duì)比,紅色曲線為實(shí)際客流量,綠色曲線為使用XGBoost 模型經(jīng)1 685 次迭代計(jì)算后得到上海站客流量預(yù)測(cè)結(jié)果。
圖7 上海站實(shí)際客流量與XGBoost 預(yù)測(cè)結(jié)果(2020 年7 月28 日—2021 年5 月17 日)
使用擬合度R2對(duì)XGBoost 模型的預(yù)測(cè)誤差進(jìn)行量化分析,擬合度R2的計(jì)算方法為
將測(cè)試樣本的真實(shí)值和預(yù)測(cè)值代入公式(10),計(jì)算得到R2=0.812;由圖7 和R2可知,XGBoost 模型的總體預(yù)測(cè)效果較好,但預(yù)測(cè)的峰谷值偏差較大,究其原因可能是新冠肺炎疫情導(dǎo)致的“報(bào)復(fù)性”出游,使得節(jié)假日旅客出行規(guī)模相較于以往同期呈現(xiàn)出更強(qiáng)的波動(dòng)性和隨機(jī)性,例如:2021 年5 月1 日上海站客流量是2020 年同期的1.76 倍,在最近的6年間僅次于2019 年5 月1 日客流量,如表1 所示。
表1 2016—2021 年上海站客流量(從大到小排序)
基于XGBoost 模型,選取新冠肺炎疫情、天氣、日期等影響鐵路客流量的主要因素為特征,以上海站為例,對(duì)后疫情時(shí)期近一年的鐵路客流量進(jìn)行預(yù)測(cè),預(yù)測(cè)擬合度R2=0.812,總體預(yù)測(cè)效果較好,但預(yù)測(cè)的峰谷值偏差較大。
后續(xù)將考慮更為精準(zhǔn)地選取影響鐵路客流量的相關(guān)因素,通過優(yōu)化預(yù)測(cè)模型的特征集,以進(jìn)一步提高客流量預(yù)測(cè)的準(zhǔn)確性。比如:新冠肺炎疫情數(shù)據(jù)僅依靠本土新增確診人數(shù)與本土現(xiàn)存確診人數(shù)無法反映對(duì)鐵路客流量的影響,可加入疫情防控應(yīng)急響應(yīng)等級(jí)等因素;目前的預(yù)測(cè)模型以氣溫代替春運(yùn)和暑運(yùn)的因素,后續(xù)可考慮在XGBoost 預(yù)測(cè)模型中增加春運(yùn)和暑運(yùn)具體日期因素。