胡郁蔥 張筑杰 王曉晴
(華南理工大學土木與交通學院1) 廣州 510641) (華南師范大學生命科學學院2) 廣州 510631)
共享自行車系統由于利用移動互聯網與傳統的公共自行車結合而擺脫了傳統停車樁的限制,通過與公共交通“最后一公里”銜接,給居民帶來了極大的便利.然而,共享自行車需求的區域不均衡性,導致局部區域的資源過剩與資源短缺矛盾突出,影響了用戶對共享自行車的使用意愿.合理確定使用需求,優化投放規模和調度策略是提高共享自行車資源使用效率的重要途徑,而其核心技術就是對共享自行車的短時需求進行預測,即在前一時段預測下一時段各站點的共享自行車需求數量,利用調度手段調整各站點自行車規模,以最大限度地滿足用戶需求.
國外對于有固定站點的公共自行車系統需求預測研究比較深入,針對性地對自行車站點的數據的規律進行研究,包括考慮自行車的歷史使用模式,乘客出行習慣的影響.其主要使用的預測方法主要包括數據挖掘的方法、機器學習方法及傳統的參數方法(如ARMA)[1-2].國內學者主要是基于交通出行理論[3],對公共自行車需求進行預測,以預測結果來確定調度車數并建立租賃點短期需求預測模型;也有對不同用地性質租賃點借還需求進行分析,對交通小區的公共自行車的需求量進行預測[4],國內學者們關注的多是宏觀上公共自行車系統整體的調配需求總量,較少對具體公共自行車站點的短時借還需求研究.
基于此,目前對無樁式共享自行車的短時需求預測的研究成果幾乎未見報道.總結國內外研究成果,針對自行車短時需求預測研究,主要存在以下兩個問題:
1) 研究的相關因素太少,多數研究為了簡化運算,選擇的相關因素(特征向量)都比較理想化,并沒有將天氣,特殊節假日等因素考慮進去,而自行車需求很大程度上會受到天氣,特殊節假日這些因素的影響;并且,現有研究多數只是針對單個站點的短時需求預測,而忽略了站點與站點之間的相關性.
2) 目前自行車短時需求預測方法,主要采用參數模型進行預測.常用的參數模型主要包括移動平均法、指數平滑法、Box-Jenkins、ARIMA等,這類方法大多都是非常有效的,而且得到的結果是嚴格的.但是這些方法是建立在有效的先驗知識(例如交通參數)的前提下的,并且依賴于一系列的假設,這往往無法解決一些高度非線性的,復雜的問題.
非參數模型在處理高度非線性數據比傳統參數模型具有優勢,其實現起來更加簡單.近年來,非參數模型開始廣泛應用于短時交通預測,主要有高斯最大似然估計、Kalman濾波模型、支持向量機模型、小波分析法、貝葉斯網絡等.非參數模型的優點是處理快速,可以對大量非線性,復雜的數據進行處理.
Xgboost算法屬于非參數模型,也是監督學習的一種[5].它是一種基于分類和回歸樹的算法,屬于連續的集成學習模型,其基本思想通過一系列弱分類器的迭代計算實現準確的分類效果.使用Xgboost的優勢在于快速對特征級數據進行訓練,預測結果精度高,并且Xgboost可以有效解決高維度問題,避免了“維度的詛咒”.由于其具有數據處理快和準確度較高的特點,Xgboost活躍于各種大型數據競賽中,在2015年的Kaggle的29個賽題中,17個賽題的解決方案使用了Xgboost算法.
為準確實現對共享自行車站點短時需求的預測,文中考慮加入天氣、特殊節日和站點之間相關性因素的影響,這會增加計算的復雜度,而應用Xgboost算法進行短時需求預測可以提高預測的精確度,并且能高效的處理短時需求預測問題.由于共享自行車企業一般不直接提供數據,本文以某市公共自行車系統數據模擬聚類后的共享自行車站點需求,使用Xgboost算法進行站點需求短時預測,并對該方法的效果進行了檢驗.
極端梯度提升樹(extreme gradient boosting,Xgboost)是梯度提升機器算法(gradient boosting machine)的擴展[6].Boosting是一種連續的集成學習模型,其基本思想通過一系列弱分類器的迭代計算實現準確的分類效果.該模型不斷迭代,每次迭代生成一棵新的樹,如何在每一步生成合理的樹是boosting分類器的核心.gradient boosting machine算法在生成每一棵樹的時候采用梯度下降的思想,以上一步生成的所有樹為基礎.在合理的參數設置下,Boosting算法往往要生成一定數量的樹才能達到令人滿意的準確率.
Xgboost的目標函數(包括訓練誤差和正則化項)為
(1)

數據主要來源于某市2015年1—8月的公共自行車數據,將其類比成已經過一次聚類后的共享自行車數據.整個數據集一共有2 132 694條記錄,訓練集里只有318個站點的數據.對于一些數據記錄不完整或者記錄較少的站點給予剔除,最后得出有效站點117個.數據包含的主要的信息包括:借車日期、借車時間、騎行分鐘、超時分鐘、借車站點號、車位、車卡、借車卡、還車站點號、還車車位、還車日期、還車時間、操作類型、操作名稱.另外,抓取該市2015年1—8月份的天氣信息,將天氣分成了四種情況晴天、陰天、雨天、暴雨.
主要選取2015年1月1日—8月24日的公共自行車的各站點借車數據作為訓練數據.考慮到每天站點借車數量較小,選取1 d作為時間間隔進行劃分,得出117個站點中,每個站點包含216組數據,將2015年8月25—31日1周的各站點借車數據作為測試數據,117個站點中每個站點包含7組數據.
2015年1月1日—8月31日部分站點的借車數量圖見圖1.由圖1可知,數據呈非線性,站點的借車數量的波動并沒有強規律性,隨時間波動的規律也不是很明顯,初步分析站點的借車數量受多種因素的影響,用傳統的參數方法難以準確預測.

圖1 部分站點借車數量圖
當站點數量較少時,可以直接進行相關分析之后再選取相關系數高的站點進行下一步分析.但是考慮到目前共享自行車的現狀,一個大城市虛擬停車站點數量通常超過幾千個,此時相關分析的時間復雜度為O(n)=n·n·y,n為站點數,y為站點的數據量,因此,當n和y都變得很大時,直接進行相關分析的時間復雜度呈指數級增加.此時,先進行聚類,再針對聚類的結果進行相關分析,可以提高算法的效率.
目前,主流的聚類算法有k-means (KM),EM算法(expectation maximization algorithm)還有sIB算法(sequential Information-bottleneck)[7].另外,在進行聚類分析之前要先確定聚類的類別的數量.主要的方法有DBI(davies-bouldin index)方法[8]、DI(dunn index)方法[9].DBI越小,說明聚類效果越好.相反,DI越高,聚類效果越好.DBI方法使用歐氏距離,在應用于k-means聚類方法上具有良好的效果.本文主要使用k-means聚類方法,并且采用歐式距離進行聚類,因此本文采用DBI方法來判斷聚類的類別的數量.
本文將自行車的站點定義為初始點,假設任意一點X為維度d,對于A,B兩點,則A=[a1,a2,…,ad],B=[b1,b2,…,bd],則A與B點的歐氏距離被定義為
(2)
然后根據DBI方法對聚類數量進行判斷,見圖2.由圖2可知,在k=9次,DBI值降到最低.根據肘部法則,確定最佳的聚類數量的值為9.

圖2 DBI指標圖
訓練數據中包含117個站點,以每個站點2015年1月1日—8月24日的每日借車數量作為該站點的向量,每個向量包含237個元素,共計117個向量,利用k-means聚類算法對這117個向量進行聚類,距離測度選用歐式距離,算法采用誤差平方和準則函數作為聚類準則函數,當算法迭代至14次,達到損失值最小,之后保持不變.
常用的相關分析的方法主要有圖表相關分析、協方差及協方差矩陣、相關系數(相關系數主要有Pearson相關系數、Spearman秩相關系數、Kendall相關系數)[10].由于圖表的相關分析局限于低維度的數據,當數據超過二維時,難以通過觀察圖表得出特征之間的相關性.另外,協方差通過數字衡量變量間的相關性,正值表示正相關,負值表示負相關,但無法對相關的密切程度進行度量.因此,本文選擇相關系數法進行相關分析.考慮到Spearman秩相關系數,Kendall 相關系數均需要利用數據的秩,在進行高維的相關分析均比較復雜,因此本文選擇Pearson相關系數進行相關分析.當相關系數超過0.5則認為兩種因素呈強相關關系.
根據聚類分析的結果,對各類別的站點之間進行相關分析.本文一共得出9類數據,表1為第3類的相關系數數據.

表1 部分站點相關系數表
由表1可知,各站點之間的相關系數均大于0.6,表示各站點呈強相關關系,這也反映出聚類結果的有效性.
但是,由于此時的相關分析是針對各站點同時期進行的,然而在進行某一站點需求預測時,并不能獲取其他與之相關站點的需求量,因為其他站點的需求量同樣是未知的.所以,要進一步對與該站點相關的幾個站點前幾期的需求進行相關分析, 得出該站點當天的需求量與其他與之相關的站點的前1 d的需求量相關性最高,并且隨著時間越長,相關性越低,因此,主要選取與該站點相關的其他站點的前1 d的需求量作為特征值.并對聚類行成的站點當天需求量與其他站點前1 d需求量進行相關分析,部分站點數據見表2.

表2 站點20與其他站點的前1 d需求量相關系數表
通過相關相關分析結果選取相關程度高的站點的前1 d需求量作為特征向量.如站點20,根據商標,站點30和170對應的相關系數大于0.5,故選取站點30,170的前1 d需求量作為其特征向量.
本文選取的特征向量主要包括前2周每天的借車數量、工作日、周末、天氣、寒暑假、特殊節假日、季節,其中前兩周每天的借車數量一共包含14個特征,工作日包含星期一至星期五5個特征,周末包括星期六,星期天2個特征,寒暑假則包含寒假,暑假2個特征,特殊節假日不具體細分,包含1個特征,季節包含冬天,春天,夏天3個特征,一共27個特征.根據相關分析的結果,加入新的特征向量.構建的特征向量為:前兩周每天的借車數量,工作日,周末,天氣,寒暑假,特殊節假日,季節,相關程度高的站點的前1 d借車數量.
而優化Xgboost的目標函數主要通過求解CART樹(回歸樹)的結構和葉分數.首先,目標函數的訓練誤差主要通過加法訓練進行優化,具體步驟如下.
…
(2)
運用加法訓練,分步驟優化目標函數,首先優化第一棵樹,結束之后再優化第二棵樹,直至優化完K棵樹.首先假設模型初始估計值,每次添加一個新的函數(樹),迭代計算第t輪模型輸出預測值.
然后對模型正則化項進行優化,將模型正則化項定義為葉結點總數和葉節點權值平方和函數.
(3)

Xgboost算法中對樹的復雜度項增加了一個L2正則化項,針對每個葉結點的得分增加L2平滑,目的也是為了避免過擬合.
然后將上文提到的特征值進行構建特征向量,利用Xgboost法進行預測當前時段的借還車數量,并計算目標函數 ,并找出最優樹結構和葉子節點的值.并對特征向量進行評分,按照特征向量的重要性進行排序.
對所有站點的特征重要性進行分析得出,前1 d借車數量對預測當天的借車數量影響最大,117個站點中105個站點的前1 d借車數量的重要性都是排第一的,所占比率為89.7%;當天的前2 d,前3 d的借車數量同樣對預測當天的借車數量影響也很大,前2 d借車數量的重要性都是排第二的站點所占比率為77.8%,前3 d的借車數量的重要性都是排第三的站點所占比率為52.1%.其他特征的重要性依次下降,因不同站點而異.
另外,冬天這個因素對大部分站點影響則很少,有14個站點中的冬天的重要性幾乎為0.而天氣因素的重要性在所有因素中除了前2周的借車數量這些因素之外,重要性最大.寒暑假因素則對于個別站點影響較大,比如,站點30,70,78則受暑假的影響較大,而站點84,158則受寒假的影響較大.特殊假節日這個因素對于部分站點影響較大,比如站點8,101,其重要性排在第六.
文中使用平均絕對誤差(mean absolute error,MAE),平均絕對百分比誤差(mean absolute percentage error,MAPE),均方根誤差(root mean square error,RMSE),模型訓練時間(time)四項指標對模型的精度和有效性進行評價.
2015年8月25—31日部分站點1周的預測值與真實值的對比圖見圖3,總體上利用Xgboost進行預測,預測值與真實值的十分接近,變化的趨勢也基本一致,比如,站點5,6,7(還有大部分站點),但是也有出現部分站點(如站點8),使用Xgboost對于一些波動比較大的數據無法準確預測.

圖3 部分站點真實值與預測值對比圖
另外,為分析本文方法的預測準確性與效率,將Xgboost和基于BP神經網絡的、基于參數方法ARMA的、基于K最近鄰方法的短時需求預測方法結果進行比較(訓練時間是包括所有站點的訓練時間).評價結果見表3.

表3 四種算法的1周的指標平均值對比表
分析上面的評價結果圖和表,比較所有預測數據的預測結果,Xgboost算法的預測效果好于其他算法:
1) Xgboost算法的MAE,MAPE均低于另外三個模型,說明其預測結果與真值的差距更小,模型精度更高.
2) Xgboost算法的RMSE也均低于另外三個模型,說明其預測結果與真值的偏差波動幅度更小,模型結果更可靠.
3) 模型的訓練時間,KNN與 Xgboost算法模型表現的最好,模型訓練時間在2 min以內,ARMA模型耗時最長.Xgboost算法計算速度也相當可觀,得益于其原生語言為C/C++,在進行節點的分裂時,支持各個特征多線程進行增益計算,因此算法計算速度更快.
而Xgboost的缺點使用Xgboost對于一些波動比較大的數據無法準確預測.對于當自行車站點數量比較少的情況下,整體站點的誤差容易受到個別誤差大的站點所影響,使得整體誤差變大.當自行車站點數量比較大的情況下,使用Xgboost進行預測整體的平均誤差比較小,使用Xgboost效果則比較好.
相對于以往的只是針對站點自身的需求數據進行短時需求預測的研究,從特征級的角度考慮了天氣因素,節假日因素,還有站點之間的相關性,并將這些因素加入到特征向量應用于共享自行車站點短時需求預測.并利用Xgboost算法求解,將結果與BP神經網絡模型、ARMA模型和K最近鄰算法進行了對比分析,得出Xgboost算法預測的效果最為穩定,各天的指標值波動都較小,具有很強的魯棒性.但是,在應用Xgboost算法的過程中,Xgboost對于一些波動比較大的數據無法準確預測,造成個別站點的誤差較大,后續可以針對這些特點對Xgboost算法進行改進.另外,所采用的數據為公共自行車數據,每日的借車數量相對較少,只是針對以天為時間間隔進行預測的實時性較低,未來使用共享自行車數據時,可以通過進一步分時段進行預測(例如分成每個小時的借車數量),以提高短時預測的實時性和精確度.