王 平,吳文波,馬毅華,許 江,宗智誠
(上海申鐵信息工程有限公司,上海 200071)
客流量是鐵路客運組織的依據,準確預測客流量能夠輔助客運部門合理規劃與管理客運運營,更好地滿足旅客出行需求和提升客服質量,對于增加鐵路客運收益和降低運營風險具有重要意義。新冠肺炎疫情爆發以來,國家鐵路正常運營遭受嚴重影響,對鐵路客運運營的短期影響尤為顯著[1],2020 年上半年全國鐵路發送旅客8.18 億人次,同比下降53.9%[2]。隨著我國進入“后疫情時期”,鐵路客流正逐步回升,但也呈現出較大波動,面對鐵路提質增效的任務,準確預測客流量顯得愈發重要。
目前,國內關于鐵路客流量預測已有不少的研究,采用的方法主要包括:灰色預測法[3-4]、支持向量回歸機[5-6]、組合預測法[7]等。這些鐵路客流量方法各有優勢,針對的預測對象也有所不同,但在樣本數據集選擇方面,極少有研究使用新冠肺炎疫情期間鐵路客流數據進行預測。此外,新冠肺炎疫情期間,鐵路客流存在較大的波動性和隨機性,加大了準確預測客流量的難度,亟需探索新的客流量預測方法。
本文嘗試采用極端梯度提升(XGBoost,eXtreme Gradient Boosting)模型,以上海站為例,選用包含新冠肺炎疫情期間的樣本數據,研究將XGBoost 模型應用于鐵路大型客運站客流量的預測。
新冠肺炎疫情爆發前,鐵路客流量呈現一定的周期性波動,新冠肺炎疫情在國內爆發后,鐵路客流量出現斷崖式下跌。以上海站為例,2016 年—2021 年客流量總體變化趨勢如圖1 所示。結合圖2,黃色曲線為新冠肺炎疫情本土確診人數曲線,藍色曲線為客流量曲線,紅色豎線是客流量出現斷崖式下跌的時間點,對應日期為2020 年1 月23 日,正是新冠肺炎疫情在國內爆發的時間。此后,客流量雖有一定回升,但整體仍低于新冠肺炎疫情前的同期客流量。為此,考慮將新冠肺炎疫情本土新增確診人數和本土現存確診人數作為反映疫情因素的特征,以期提高預測的敏感度與準確性。

圖1 2016 年—2021 年上海站客流量總體變化趨勢

圖2 新冠肺炎疫情本土確診人數和客流量關系曲線
觀察圖3,夏季8 月份的客流量略高于其它月份,而冬季2 月份的客流量略低于其它月份。

圖3 上海站1 年內客流量變化(1 月—12 月)
出現這種現象的主要原因是:
(1)溫暖天氣相較于寒冷天氣更適宜出行;
(2)8 月份正值我國鐵路暑運期間,鐵路客流以學生暑假返家、開學返校為主。
天氣溫暖和寒冷可以采用氣溫進行量化,以便于算法處理。春運時間為每年農歷臘月十五—次年正月廿五,暑運時間為每年7 月初—9 月初。如圖4所示,1 月和2 月氣溫最低,對應春運的時間區間,7 月和8 月氣溫最高,對應暑運的時間區間,即春運和暑運與氣溫高低強相關。為此,本文選取氣溫(包括當日最高氣溫和當日最低氣溫)作為天氣特征納入預測模型。

圖4 上海市1 年內氣溫變化(1 月—12 月)
以1 個星期為單位,對2016 年1 月1 日—2021年5 月17 日上海站的客流量進行分析,如圖5 所示。星期六客流量在1 個星期中為最高,星期五其次,其它日無顯著差異。

圖5 上海站1 個星期內客流量變化(2016 年1 月1 日—2021 年5 月17 日)
進一步分析同一時期內節假日對上海站客流量的影響,如圖6 所示。
由圖6 可知,節假日相比工作日客流量有明顯的增加,節假日前1 天客流量不僅顯著高于工作日客流量,并且略高于假期平均客流量,而假期中第2 天的客流量與工作日無明顯差異。

圖6 上海站節假日客流量變化(2016 年1 月1 日—2021 年5 月17 日)
為此,細化日期屬性,法定節假日和周末統稱為假期,將月份、星期、當天是否為假期、前1 天是否為假期、第2 天是否為假期作為日期特征納入預測模型。
XGBoost 是由陳天奇等人[8]提出的一種改進的梯度提升決策樹(GDBT,Gradient Boosting Decision Tree)算法。
對于一個給定n個樣本的數據集D={(xi,yi)}(i=1,2,···,n),xi表示第i個樣本的特征值集合,yi表示第i個樣本的標簽值,則基于數據集D訓練得到的具有K個基學習器的XGBoost 預測模型為

XGBoost 模型的目標函數L包含2 部分:

在尋找最佳fk(xi)的過程中,通過不斷迭代來最小化目標函數,第t次迭代的目標函數可改寫為

對式(4)進行二階泰勒近似展開,去掉常數項,其中,gi和hi分別是損失函數l的一階導數和二階導數,即有

對式(5)進行優化,定義Ij={i|q(xi)=j}為落入葉子節點j的樣本集合,可計算出最優權重和相應的最優值為

相比于傳統的GDBT 算法,XGBoost 模型利用了損失函數的二階導數信息,能加快算法收斂,并且在目標函數中增加了正則懲罰項,可降低模型復雜度,從而防止模型過擬合。
基于XGBoost 的鐵路客流量預測方法是一種綜合多因素方法,考慮疫情、天氣、日期等因素對鐵路客流量的影響,具體步驟為:
(1)收集客流數據以及影響客流量的主要因素的歷史數據,進行數據預處理,生成用于XGBoost模型的樣本數據;
(2)將樣本數據劃分為訓練數據集和測試數據集2 部分;
(3)運用k折交叉驗證將訓練數據集劃分為k份,每次選擇其中k-1 份作為訓練集,另外一份作為驗證集,對XGBoost 模型進行訓練,并使用網格搜索(Grid Search)進行參數優化,得到最佳預測模型;
(4)使用訓練好的XGBoost 模型對測試數據集進行預測。
從鐵路客票系統中抽取上海站2016 年1 月1 日—2021 年5 月17 日的共計1965 天的客流量數據,另從互聯網上收集同一時間段內新冠肺炎疫情本土新增確診人數和本土現存確診人數、上海市每日最高與最低溫度,以及假期日期。將前85%數據(即2016 年 1 月 1 日—2020 年 7 月 27 日的客流量數據)作為訓練樣本和驗證樣本,后15%數據(即2020 年7 月 28 日—2021 年 5 月 17 日的客流量數據)作為測試樣本,進行如下處理:
(1)對日期特征進行預處理,對月、星期進行One-hot 編碼,對假期進行啞編碼,將編碼后的數據轉化為有監督的數據集;
(2)考慮到當日客流量除受到同期因素的影響,還可能與前期值有關,采用客流量的滯后變量作為特征;
(3)為了消除預測的隨機波動,利用簡單移動平均法,生成前5 天平均客流量和前10 天平均客流量作為客流量特征。
預處理后的有監督數據集輸入列數為36 列,輸出列數為1 列??紤]到樣本容量較小,在模型訓練階段,采用k 折交叉驗證(k=5)進行訓練,以提升模型性能。
建模軟件選用Python 3.8,將預處理后的數據輸入XGBoost 模型,使用Grid Search 進行參數搜索,尋找模型最優參數。XGBoost 模型的學習率設置為0.02,葉子節點訓練樣本最小數量設置為50,迭代算法為GDBT。
圖7 為上海站實際客流量與XGBoost 模型預測結果對比,紅色曲線為實際客流量,綠色曲線為使用XGBoost 模型經1 685 次迭代計算后得到上海站客流量預測結果。

圖7 上海站實際客流量與XGBoost 預測結果(2020 年7 月28 日—2021 年5 月17 日)
使用擬合度R2對XGBoost 模型的預測誤差進行量化分析,擬合度R2的計算方法為

將測試樣本的真實值和預測值代入公式(10),計算得到R2=0.812;由圖7 和R2可知,XGBoost 模型的總體預測效果較好,但預測的峰谷值偏差較大,究其原因可能是新冠肺炎疫情導致的“報復性”出游,使得節假日旅客出行規模相較于以往同期呈現出更強的波動性和隨機性,例如:2021 年5 月1 日上海站客流量是2020 年同期的1.76 倍,在最近的6年間僅次于2019 年5 月1 日客流量,如表1 所示。

表1 2016—2021 年上海站客流量(從大到小排序)
基于XGBoost 模型,選取新冠肺炎疫情、天氣、日期等影響鐵路客流量的主要因素為特征,以上海站為例,對后疫情時期近一年的鐵路客流量進行預測,預測擬合度R2=0.812,總體預測效果較好,但預測的峰谷值偏差較大。
后續將考慮更為精準地選取影響鐵路客流量的相關因素,通過優化預測模型的特征集,以進一步提高客流量預測的準確性。比如:新冠肺炎疫情數據僅依靠本土新增確診人數與本土現存確診人數無法反映對鐵路客流量的影響,可加入疫情防控應急響應等級等因素;目前的預測模型以氣溫代替春運和暑運的因素,后續可考慮在XGBoost 預測模型中增加春運和暑運具體日期因素。