衛錚錚,單杏花,王洪業,呂曉艷,張軍鋒
(中國鐵道科學研究院集團有限公司 電子計算技術研究所,北京 100081)
客流預測是鐵路路網規劃、線路及場站設計、鐵路運營等工作的重要基礎[1]。客流預測研究領域有許多分支和分類,通常按預測對象的不同,將鐵路客流預測劃分為區域客流預測、線路客流預測和列車客流預測。
我國幅員遼闊、地廣人多,鐵路網縱橫交錯,鐵路運營情況復雜,市場影響因素較多,客流預測工作難度較大。在鐵路客流預測工作中,目前存在的主要問題有:
(1)影響鐵路客流需求的因素較多,若僅運用鐵路客運業務歷史數據進行預測,當遇到客運需求出現較大變化的情況時,預測模型無法感知外部相關因素對鐵路客流的影響,造成預測誤差較大。
(2)針對不同的預測對象,一種鐵路客流預測方法往往會得到不同的預測結果,沒有哪一種預測方法適用于不同層面的鐵路客流預測應用需求。實際應用中,從事客流預測業務的工作人員往往依賴直覺與經驗,每一種預測方法對于不同使用者及不同預測業務,預測準確性會有很大的波動。
針對多層面、不同時期、不同類型的鐵路客流預測應用需求,結合近幾年的應用經驗,提出鐵路客流預測系統的總體架構、模型及鐵路客流預測系統的基本功能,以利于為相關研究提供豐富、便利的數據資源和分析評價工具,基于統一的系統平臺集成各類鐵路客流預測算法模型,更好地滿足中國國家鐵路集團有限公司(簡稱:國鐵集團)及各鐵路局集團公司各類鐵路客流預測業務需求。
在客運大數據平臺支撐下,除了充分利用客運數據外,采集和整合影響鐵路客流的其它相關數據,如輿情數據、天氣數據、競爭市場的運力數據及價格數據等,為各類預測算法模型的應用提供豐富的數據資源和便利的數據處理環境。
客流預測是做好開行方案、收益管理的基礎,是做好鐵路客運運營決策的重要基石。面向鐵路多層面(國鐵集團、鐵路局集團公司、站段)、不同時期(即期、近期、中遠期)、不同類型的客流預測業務需求,研究基于大數據技術的鐵路客流預測方法和分析模型,構建較為完備的鐵路客流預測算法庫,逐步提高鐵路客流預測準確性[2]。
為各類客流預測算法模型[3]提供便利的測試環境,可對預測算法模型的效果和適用性進行定量分析,建立客流預測結果分析評價體系[4],逐步形成預測方案應用規范、業務涵蓋廣泛、功能日趨完善的鐵路客流預測系統。
鐵路客流預測系統由沙盤演練數據區與預測算法平臺2 部分組成,其總體架構,如圖1 所示。沙盤演練數據區以線下方式部署運行,主要是運用單機版的仿真平臺、分布式在線算法庫、分布式離線算法庫,對客流預測方案進行測試和評估;通過沙盤演練數據區測試和評估的客流預測方案,經開發后集成到預測算法平臺中,預測算法平臺以線上方式部署運行。

圖1 客流預測系統總體架構示意
沙盤演練數據區主要包括仿真平臺、分布式在線算法演練庫(客流預測結果是通過在線運行算法模型即時計算得到)、分布式離線算法演練庫(客流預測結果是通過離線運行算法模型計算生成,并存儲在數據庫中)。
其中,仿真平臺基于RStudio 環境創建,運用R 語言編寫的腳本來調用運行在RServer 上的客流預測算法組件,并運用ShinyServer 實現算法可視化,對預測效果進行評估,生成客流預測分析報告,用以確定最終的客流預測方案。
在分布式在線算法演練庫中,預測算法所使用的訓練數據是從相關業務系統中以切片為單位獲取的實時數據,如客票營銷系統中的余票數據、實時用戶點擊日志流數據等,運用實時大數據處理框架Storm,對這些預測算法組件進行實時演練。
分布式離線算法演練庫基于Spark 大數據平臺創建,運用SparkR、PySpark、Scala 改為分布式算法實現;在分布式離線算法演練庫中,預測算法所使用的訓練數據是從相關業務系統中獲取的、以天為單位的時間切片數據,如客票營銷系統中的運能、運量數據等。
預測算法平臺包含人機交互預測和定時批量離線預測2 類算法組件。
其中,人機交互預測算法組件采用R、Python、Java 語言開發,由前端應用模塊使用Java 接口來調用。
定時批量離線預測算法組件的運行過程是:(1)由用戶在數據維護模塊中定義并設置好定時預測對象;(2)由Gbase 每天批量處理好預測算法所需運能、運量數據,并將數據推送到Hive 中;(3)由預測算法平臺通過Spark 調用定時批量離線預測算法組件,對存儲在Hive 中的運能、運量數據進行處理,生成的預測結果存儲在HDFS 中;(4)預測算法平臺從Kafka 消息隊列讀取余票數據及相關日志,將其交由Storm 進行實時處理,依據客票銷售情況對預測結果進行修正。
客流預測系統主要包括交互預測、批量預測、數據維護、預測方法評價、特征監控、系統管理6個功能模塊。系統用戶劃分為超級用戶和普通用戶2 類;其中,超級用戶可使用系統的所有功能,包括預測方法評價、批量預測、交互預測,以及數據維護、特征監控、系統管理等管理功能;普通用戶只能使用交互預測、批量預測,以及數據維護功能,如圖2 所示。

圖2 客流預測系統功能結構
按照不同的客流預測對象類型,交互預測分為3 類:區域客流預測、列車客流預測和線路客流預測;用戶通過操作界面選擇客流預測對象類型,系統處理后返回預測結果。
(1)區域客流預測
區域客流預測是對指定區域范圍內的整體,或區域范圍內指定起點與終點(OD,Origin to Destination)間的客流情況進行動態分析預測的過程和結果。
(2)列車客流預測
列車是指載客列車的整體,或者OD 間運載旅客的列車車次;對列車整車客流或指定列車某個OD的客流進行動態預測和展示。
(3)線路客流預測
對指定線路上的站到站進行動態客流預測和展示。
批量預測的預測對象分為鐵路局、站段和車站3 類,用戶可在數據維護模塊的操作界面中選擇預測對象類型,并設置更新頻率,系統按照用戶設置定時進行離線批量預測。
(1)區域客流預測統計
對指定區域的客流預測結果進行統計分析和展示。
(2)列車客流預測統計
對指定列車的客流預測結果進行統計分析和展示。
(3)線路客流預測統計
對指定線路的客流預測結果進行統計分析和展示。
用戶可在數據維護模塊中選定預測對象、完成事件定義和標注數據異常。
(1)預測對象設定:設置系統進行批量預測的預測對象;
(2)事件定義設置:設置事件的類型、發生時間,便于預測和分析事件對客流的影響;
(3)預測對象異常標注:對預測結果誤差較大的預測對象進行標注,便于后續持續優化客流預測。
(1)預測方法比選:對于相同的預測對象,采用不同的預測方法可能得到不同的預測效果。針對某一種預測對象,選用多種預測算法模型,通過歷史數據進行預測處理,比較這些預測算法模型的應用效果,選擇出最適用于這種預測對象的預測方法。
(2)預測方法融合:針對某一類預測對象,嘗試組合運用多種預測方法,探索適用于這類預測對象的融合方法。
分別對預測對象在區域、車站、車次的特征進行抽取和分析,對這些特征進行監控;若模型所涉及的特征有明顯變化,需及時對模型進行調整。
提供監控系統運行狀態、管理用戶及權限的工具,確保系統能夠穩定、可靠、安全地運行。
(1)數據傳輸監控:監測系統數據傳輸是否正常、客運基礎數據是否在客運大數據平臺中成功生成,發現異常時告警提示。
(2)系統狀態監控:監測系統主要組件、功能模塊、任務等運行狀態是否正常,發現異常時告警提示。
(3)用戶管理:創建用戶,指定用戶可查看的客流預測結果的范圍。
按照數據處理流程的共性和差異,客流預測處理流程可劃分為2 大類:站站/車車預測和同一類站、車預測,如圖3 所示。

圖3 客流預測處理流程分類
4.1.1 站站/車車預測
站站/車車預測,就是各個維度的客流預測對象的訓練數據以該預測對象的歷史數據為選取對象,所對應的預測對象滿足歷史數據的累積要求,通常歷史數據至少累積1 年以上。具體過程為:
(1)對原始客流數據進行非限化處理,然后分析客流波動,將各維度預測對象的客流波動進行切分,對一年中平穩時段和非平穩時段進行時間點分割;
(2)分別對各時段的數據進行異常值識別,并將識別出來的異常值以某一統計量進行替換;
(3)將處理后的數據作為圖1 中各種算法組件的輸入;其中,以上車人數為訓練數據的算法模型主要有移動平均、時序回歸、時序分解、往年比例、周期因子法、指數平滑、加/乘法模型[5];以預售數據為訓練數據的算法模型主要有線性回歸、Pick up(增量預測);
(4)運用加權回歸、Stack 方法[6],對由上述2種算法模型處理得到的預測值進行融合,最終得到更為穩定、精確的預測結果,或在線下采用模型比選的方式,選出最為精確的預測結果。
4.1.2 同一類站、車預測
同一類站、車預測:各個維度的客流預測對象的訓練數據以該對象的同一類的歷史客流數據為對象,對其進行預測。這類預測適用于預測對象的歷史數據累積少于半年或缺少歷史數據的情況,如新設立站點或新開列車。
這類預測根據客流特征及線路、車站、車次在業務上的特征進行分類,將天氣數據及事件數據引入到模型中,運用XGBoost、Rigde 回歸[7]等算法解決受極端天氣或特定事件因素影響的客流預測問題。當受調圖影響時,新的列車或新開的站運用配流、調和的方法對其進行預測,調整。
客流預測數據處理的基本流程,如圖4 所示。

圖4 客流預測數據處理基本流程示意
針對不同維度的客流預測,如發送量[8]、線路OD、車次、車次-OD,基本的數據處理流程為:
(1)從數據倉庫中抽取運能、運量數據,將節日、天氣、事件等特征加入到客流預測模型中,利用客流歷史數據對客流預測模型進行對比篩選,然后再加入數據非限化處理,將需求受限的數據還原為需求數據的估計。
(2)對節假日、普通工作日的客流數據進行建模,分別對這2 類不同時間段的建模數據進行異常值識別、替換。
(3)判斷預測時段是否為節假日;若為節假日,對進入預售期的客流和預售期之外的客流,分別使用節假日的歷史客流數據、客票預售數據進行預測;若為工作日,對進入預售期的客流和預售期之外的客流,分別使用工作日的近期及同期歷史客流數據、客票預售數據進行預測。
(4)運用業務經驗以及相應規則,對預測結果進行修正,以適應業務應用需求。
針對多層面、不同時期、不同類型的鐵路客流預測業務需求,依托鐵路客運大數據平臺,構建鐵路客流預測系統,能夠在同一系統平臺上完成客流預測方案的測試、評價和規范化應用。基于分布式算法庫,充分利用歷史售票數據,并考慮年度、季節、星期、時間、節假日、重大事件、天氣等各類影響因素,提供不同角度、不同粒度、不同時期的客流預測功能,根據線路性質(客運專線、既有線)、列車性質(動車、普通旅客列車)進行客流預測,支持人機交互預測和定時批量離線預測2 種應用模式,可為各類客運業務分析人員提供定制化客流預測數據,為票額智能預分、列車開行方案設計等客運業務提供準確、可靠的決策依據。
2019 年以來,鐵路客流預測系統已在多個鐵路局集團公司技術科及客運部開展實際運用,系統運行穩定,對未來客流變化情況預測準確度較高,且可根據實時客運數據,對客流預測結果進行即時更新和校正,為列車開行及調整、票額預分發揮了重要的指導作用。