胡郁蔥 張筑杰 王曉晴
(華南理工大學(xué)土木與交通學(xué)院1) 廣州 510641) (華南師范大學(xué)生命科學(xué)學(xué)院2) 廣州 510631)
共享自行車系統(tǒng)由于利用移動互聯(lián)網(wǎng)與傳統(tǒng)的公共自行車結(jié)合而擺脫了傳統(tǒng)停車樁的限制,通過與公共交通“最后一公里”銜接,給居民帶來了極大的便利.然而,共享自行車需求的區(qū)域不均衡性,導(dǎo)致局部區(qū)域的資源過剩與資源短缺矛盾突出,影響了用戶對共享自行車的使用意愿.合理確定使用需求,優(yōu)化投放規(guī)模和調(diào)度策略是提高共享自行車資源使用效率的重要途徑,而其核心技術(shù)就是對共享自行車的短時需求進(jìn)行預(yù)測,即在前一時段預(yù)測下一時段各站點的共享自行車需求數(shù)量,利用調(diào)度手段調(diào)整各站點自行車規(guī)模,以最大限度地滿足用戶需求.
國外對于有固定站點的公共自行車系統(tǒng)需求預(yù)測研究比較深入,針對性地對自行車站點的數(shù)據(jù)的規(guī)律進(jìn)行研究,包括考慮自行車的歷史使用模式,乘客出行習(xí)慣的影響.其主要使用的預(yù)測方法主要包括數(shù)據(jù)挖掘的方法、機(jī)器學(xué)習(xí)方法及傳統(tǒng)的參數(shù)方法(如ARMA)[1-2].國內(nèi)學(xué)者主要是基于交通出行理論[3],對公共自行車需求進(jìn)行預(yù)測,以預(yù)測結(jié)果來確定調(diào)度車數(shù)并建立租賃點短期需求預(yù)測模型;也有對不同用地性質(zhì)租賃點借還需求進(jìn)行分析,對交通小區(qū)的公共自行車的需求量進(jìn)行預(yù)測[4],國內(nèi)學(xué)者們關(guān)注的多是宏觀上公共自行車系統(tǒng)整體的調(diào)配需求總量,較少對具體公共自行車站點的短時借還需求研究.
基于此,目前對無樁式共享自行車的短時需求預(yù)測的研究成果幾乎未見報道.總結(jié)國內(nèi)外研究成果,針對自行車短時需求預(yù)測研究,主要存在以下兩個問題:
1) 研究的相關(guān)因素太少,多數(shù)研究為了簡化運算,選擇的相關(guān)因素(特征向量)都比較理想化,并沒有將天氣,特殊節(jié)假日等因素考慮進(jìn)去,而自行車需求很大程度上會受到天氣,特殊節(jié)假日這些因素的影響;并且,現(xiàn)有研究多數(shù)只是針對單個站點的短時需求預(yù)測,而忽略了站點與站點之間的相關(guān)性.
2) 目前自行車短時需求預(yù)測方法,主要采用參數(shù)模型進(jìn)行預(yù)測.常用的參數(shù)模型主要包括移動平均法、指數(shù)平滑法、Box-Jenkins、ARIMA等,這類方法大多都是非常有效的,而且得到的結(jié)果是嚴(yán)格的.但是這些方法是建立在有效的先驗知識(例如交通參數(shù))的前提下的,并且依賴于一系列的假設(shè),這往往無法解決一些高度非線性的,復(fù)雜的問題.
非參數(shù)模型在處理高度非線性數(shù)據(jù)比傳統(tǒng)參數(shù)模型具有優(yōu)勢,其實現(xiàn)起來更加簡單.近年來,非參數(shù)模型開始廣泛應(yīng)用于短時交通預(yù)測,主要有高斯最大似然估計、Kalman濾波模型、支持向量機(jī)模型、小波分析法、貝葉斯網(wǎng)絡(luò)等.非參數(shù)模型的優(yōu)點是處理快速,可以對大量非線性,復(fù)雜的數(shù)據(jù)進(jìn)行處理.
Xgboost算法屬于非參數(shù)模型,也是監(jiān)督學(xué)習(xí)的一種[5].它是一種基于分類和回歸樹的算法,屬于連續(xù)的集成學(xué)習(xí)模型,其基本思想通過一系列弱分類器的迭代計算實現(xiàn)準(zhǔn)確的分類效果.使用Xgboost的優(yōu)勢在于快速對特征級數(shù)據(jù)進(jìn)行訓(xùn)練,預(yù)測結(jié)果精度高,并且Xgboost可以有效解決高維度問題,避免了“維度的詛咒”.由于其具有數(shù)據(jù)處理快和準(zhǔn)確度較高的特點,Xgboost活躍于各種大型數(shù)據(jù)競賽中,在2015年的Kaggle的29個賽題中,17個賽題的解決方案使用了Xgboost算法.
為準(zhǔn)確實現(xiàn)對共享自行車站點短時需求的預(yù)測,文中考慮加入天氣、特殊節(jié)日和站點之間相關(guān)性因素的影響,這會增加計算的復(fù)雜度,而應(yīng)用Xgboost算法進(jìn)行短時需求預(yù)測可以提高預(yù)測的精確度,并且能高效的處理短時需求預(yù)測問題.由于共享自行車企業(yè)一般不直接提供數(shù)據(jù),本文以某市公共自行車系統(tǒng)數(shù)據(jù)模擬聚類后的共享自行車站點需求,使用Xgboost算法進(jìn)行站點需求短時預(yù)測,并對該方法的效果進(jìn)行了檢驗.
極端梯度提升樹(extreme gradient boosting,Xgboost)是梯度提升機(jī)器算法(gradient boosting machine)的擴(kuò)展[6].Boosting是一種連續(xù)的集成學(xué)習(xí)模型,其基本思想通過一系列弱分類器的迭代計算實現(xiàn)準(zhǔn)確的分類效果.該模型不斷迭代,每次迭代生成一棵新的樹,如何在每一步生成合理的樹是boosting分類器的核心.gradient boosting machine算法在生成每一棵樹的時候采用梯度下降的思想,以上一步生成的所有樹為基礎(chǔ).在合理的參數(shù)設(shè)置下,Boosting算法往往要生成一定數(shù)量的樹才能達(dá)到令人滿意的準(zhǔn)確率.
Xgboost的目標(biāo)函數(shù)(包括訓(xùn)練誤差和正則化項)為
(1)
數(shù)據(jù)主要來源于某市2015年1—8月的公共自行車數(shù)據(jù),將其類比成已經(jīng)過一次聚類后的共享自行車數(shù)據(jù).整個數(shù)據(jù)集一共有2 132 694條記錄,訓(xùn)練集里只有318個站點的數(shù)據(jù).對于一些數(shù)據(jù)記錄不完整或者記錄較少的站點給予剔除,最后得出有效站點117個.數(shù)據(jù)包含的主要的信息包括:借車日期、借車時間、騎行分鐘、超時分鐘、借車站點號、車位、車卡、借車卡、還車站點號、還車車位、還車日期、還車時間、操作類型、操作名稱.另外,抓取該市2015年1—8月份的天氣信息,將天氣分成了四種情況晴天、陰天、雨天、暴雨.
主要選取2015年1月1日—8月24日的公共自行車的各站點借車數(shù)據(jù)作為訓(xùn)練數(shù)據(jù).考慮到每天站點借車數(shù)量較小,選取1 d作為時間間隔進(jìn)行劃分,得出117個站點中,每個站點包含216組數(shù)據(jù),將2015年8月25—31日1周的各站點借車數(shù)據(jù)作為測試數(shù)據(jù),117個站點中每個站點包含7組數(shù)據(jù).
2015年1月1日—8月31日部分站點的借車數(shù)量圖見圖1.由圖1可知,數(shù)據(jù)呈非線性,站點的借車數(shù)量的波動并沒有強(qiáng)規(guī)律性,隨時間波動的規(guī)律也不是很明顯,初步分析站點的借車數(shù)量受多種因素的影響,用傳統(tǒng)的參數(shù)方法難以準(zhǔn)確預(yù)測.
圖1 部分站點借車數(shù)量圖
當(dāng)站點數(shù)量較少時,可以直接進(jìn)行相關(guān)分析之后再選取相關(guān)系數(shù)高的站點進(jìn)行下一步分析.但是考慮到目前共享自行車的現(xiàn)狀,一個大城市虛擬停車站點數(shù)量通常超過幾千個,此時相關(guān)分析的時間復(fù)雜度為O(n)=n·n·y,n為站點數(shù),y為站點的數(shù)據(jù)量,因此,當(dāng)n和y都變得很大時,直接進(jìn)行相關(guān)分析的時間復(fù)雜度呈指數(shù)級增加.此時,先進(jìn)行聚類,再針對聚類的結(jié)果進(jìn)行相關(guān)分析,可以提高算法的效率.
目前,主流的聚類算法有k-means (KM),EM算法(expectation maximization algorithm)還有sIB算法(sequential Information-bottleneck)[7].另外,在進(jìn)行聚類分析之前要先確定聚類的類別的數(shù)量.主要的方法有DBI(davies-bouldin index)方法[8]、DI(dunn index)方法[9].DBI越小,說明聚類效果越好.相反,DI越高,聚類效果越好.DBI方法使用歐氏距離,在應(yīng)用于k-means聚類方法上具有良好的效果.本文主要使用k-means聚類方法,并且采用歐式距離進(jìn)行聚類,因此本文采用DBI方法來判斷聚類的類別的數(shù)量.
本文將自行車的站點定義為初始點,假設(shè)任意一點X為維度d,對于A,B兩點,則A=[a1,a2,…,ad],B=[b1,b2,…,bd],則A與B點的歐氏距離被定義為
(2)
然后根據(jù)DBI方法對聚類數(shù)量進(jìn)行判斷,見圖2.由圖2可知,在k=9次,DBI值降到最低.根據(jù)肘部法則,確定最佳的聚類數(shù)量的值為9.
圖2 DBI指標(biāo)圖
訓(xùn)練數(shù)據(jù)中包含117個站點,以每個站點2015年1月1日—8月24日的每日借車數(shù)量作為該站點的向量,每個向量包含237個元素,共計117個向量,利用k-means聚類算法對這117個向量進(jìn)行聚類,距離測度選用歐式距離,算法采用誤差平方和準(zhǔn)則函數(shù)作為聚類準(zhǔn)則函數(shù),當(dāng)算法迭代至14次,達(dá)到損失值最小,之后保持不變.
常用的相關(guān)分析的方法主要有圖表相關(guān)分析、協(xié)方差及協(xié)方差矩陣、相關(guān)系數(shù)(相關(guān)系數(shù)主要有Pearson相關(guān)系數(shù)、Spearman秩相關(guān)系數(shù)、Kendall相關(guān)系數(shù))[10].由于圖表的相關(guān)分析局限于低維度的數(shù)據(jù),當(dāng)數(shù)據(jù)超過二維時,難以通過觀察圖表得出特征之間的相關(guān)性.另外,協(xié)方差通過數(shù)字衡量變量間的相關(guān)性,正值表示正相關(guān),負(fù)值表示負(fù)相關(guān),但無法對相關(guān)的密切程度進(jìn)行度量.因此,本文選擇相關(guān)系數(shù)法進(jìn)行相關(guān)分析.考慮到Spearman秩相關(guān)系數(shù),Kendall 相關(guān)系數(shù)均需要利用數(shù)據(jù)的秩,在進(jìn)行高維的相關(guān)分析均比較復(fù)雜,因此本文選擇Pearson相關(guān)系數(shù)進(jìn)行相關(guān)分析.當(dāng)相關(guān)系數(shù)超過0.5則認(rèn)為兩種因素呈強(qiáng)相關(guān)關(guān)系.
根據(jù)聚類分析的結(jié)果,對各類別的站點之間進(jìn)行相關(guān)分析.本文一共得出9類數(shù)據(jù),表1為第3類的相關(guān)系數(shù)數(shù)據(jù).
表1 部分站點相關(guān)系數(shù)表
由表1可知,各站點之間的相關(guān)系數(shù)均大于0.6,表示各站點呈強(qiáng)相關(guān)關(guān)系,這也反映出聚類結(jié)果的有效性.
但是,由于此時的相關(guān)分析是針對各站點同時期進(jìn)行的,然而在進(jìn)行某一站點需求預(yù)測時,并不能獲取其他與之相關(guān)站點的需求量,因為其他站點的需求量同樣是未知的.所以,要進(jìn)一步對與該站點相關(guān)的幾個站點前幾期的需求進(jìn)行相關(guān)分析, 得出該站點當(dāng)天的需求量與其他與之相關(guān)的站點的前1 d的需求量相關(guān)性最高,并且隨著時間越長,相關(guān)性越低,因此,主要選取與該站點相關(guān)的其他站點的前1 d的需求量作為特征值.并對聚類行成的站點當(dāng)天需求量與其他站點前1 d需求量進(jìn)行相關(guān)分析,部分站點數(shù)據(jù)見表2.
表2 站點20與其他站點的前1 d需求量相關(guān)系數(shù)表
通過相關(guān)相關(guān)分析結(jié)果選取相關(guān)程度高的站點的前1 d需求量作為特征向量.如站點20,根據(jù)商標(biāo),站點30和170對應(yīng)的相關(guān)系數(shù)大于0.5,故選取站點30,170的前1 d需求量作為其特征向量.
本文選取的特征向量主要包括前2周每天的借車數(shù)量、工作日、周末、天氣、寒暑假、特殊節(jié)假日、季節(jié),其中前兩周每天的借車數(shù)量一共包含14個特征,工作日包含星期一至星期五5個特征,周末包括星期六,星期天2個特征,寒暑假則包含寒假,暑假2個特征,特殊節(jié)假日不具體細(xì)分,包含1個特征,季節(jié)包含冬天,春天,夏天3個特征,一共27個特征.根據(jù)相關(guān)分析的結(jié)果,加入新的特征向量.構(gòu)建的特征向量為:前兩周每天的借車數(shù)量,工作日,周末,天氣,寒暑假,特殊節(jié)假日,季節(jié),相關(guān)程度高的站點的前1 d借車數(shù)量.
而優(yōu)化Xgboost的目標(biāo)函數(shù)主要通過求解CART樹(回歸樹)的結(jié)構(gòu)和葉分?jǐn)?shù).首先,目標(biāo)函數(shù)的訓(xùn)練誤差主要通過加法訓(xùn)練進(jìn)行優(yōu)化,具體步驟如下.
…
(2)
運用加法訓(xùn)練,分步驟優(yōu)化目標(biāo)函數(shù),首先優(yōu)化第一棵樹,結(jié)束之后再優(yōu)化第二棵樹,直至優(yōu)化完K棵樹.首先假設(shè)模型初始估計值,每次添加一個新的函數(shù)(樹),迭代計算第t輪模型輸出預(yù)測值.
然后對模型正則化項進(jìn)行優(yōu)化,將模型正則化項定義為葉結(jié)點總數(shù)和葉節(jié)點權(quán)值平方和函數(shù).
(3)
Xgboost算法中對樹的復(fù)雜度項增加了一個L2正則化項,針對每個葉結(jié)點的得分增加L2平滑,目的也是為了避免過擬合.
然后將上文提到的特征值進(jìn)行構(gòu)建特征向量,利用Xgboost法進(jìn)行預(yù)測當(dāng)前時段的借還車數(shù)量,并計算目標(biāo)函數(shù) ,并找出最優(yōu)樹結(jié)構(gòu)和葉子節(jié)點的值.并對特征向量進(jìn)行評分,按照特征向量的重要性進(jìn)行排序.
對所有站點的特征重要性進(jìn)行分析得出,前1 d借車數(shù)量對預(yù)測當(dāng)天的借車數(shù)量影響最大,117個站點中105個站點的前1 d借車數(shù)量的重要性都是排第一的,所占比率為89.7%;當(dāng)天的前2 d,前3 d的借車數(shù)量同樣對預(yù)測當(dāng)天的借車數(shù)量影響也很大,前2 d借車數(shù)量的重要性都是排第二的站點所占比率為77.8%,前3 d的借車數(shù)量的重要性都是排第三的站點所占比率為52.1%.其他特征的重要性依次下降,因不同站點而異.
另外,冬天這個因素對大部分站點影響則很少,有14個站點中的冬天的重要性幾乎為0.而天氣因素的重要性在所有因素中除了前2周的借車數(shù)量這些因素之外,重要性最大.寒暑假因素則對于個別站點影響較大,比如,站點30,70,78則受暑假的影響較大,而站點84,158則受寒假的影響較大.特殊假節(jié)日這個因素對于部分站點影響較大,比如站點8,101,其重要性排在第六.
文中使用平均絕對誤差(mean absolute error,MAE),平均絕對百分比誤差(mean absolute percentage error,MAPE),均方根誤差(root mean square error,RMSE),模型訓(xùn)練時間(time)四項指標(biāo)對模型的精度和有效性進(jìn)行評價.
2015年8月25—31日部分站點1周的預(yù)測值與真實值的對比圖見圖3,總體上利用Xgboost進(jìn)行預(yù)測,預(yù)測值與真實值的十分接近,變化的趨勢也基本一致,比如,站點5,6,7(還有大部分站點),但是也有出現(xiàn)部分站點(如站點8),使用Xgboost對于一些波動比較大的數(shù)據(jù)無法準(zhǔn)確預(yù)測.
圖3 部分站點真實值與預(yù)測值對比圖
另外,為分析本文方法的預(yù)測準(zhǔn)確性與效率,將Xgboost和基于BP神經(jīng)網(wǎng)絡(luò)的、基于參數(shù)方法ARMA的、基于K最近鄰方法的短時需求預(yù)測方法結(jié)果進(jìn)行比較(訓(xùn)練時間是包括所有站點的訓(xùn)練時間).評價結(jié)果見表3.
表3 四種算法的1周的指標(biāo)平均值對比表
分析上面的評價結(jié)果圖和表,比較所有預(yù)測數(shù)據(jù)的預(yù)測結(jié)果,Xgboost算法的預(yù)測效果好于其他算法:
1) Xgboost算法的MAE,MAPE均低于另外三個模型,說明其預(yù)測結(jié)果與真值的差距更小,模型精度更高.
2) Xgboost算法的RMSE也均低于另外三個模型,說明其預(yù)測結(jié)果與真值的偏差波動幅度更小,模型結(jié)果更可靠.
3) 模型的訓(xùn)練時間,KNN與 Xgboost算法模型表現(xiàn)的最好,模型訓(xùn)練時間在2 min以內(nèi),ARMA模型耗時最長.Xgboost算法計算速度也相當(dāng)可觀,得益于其原生語言為C/C++,在進(jìn)行節(jié)點的分裂時,支持各個特征多線程進(jìn)行增益計算,因此算法計算速度更快.
而Xgboost的缺點使用Xgboost對于一些波動比較大的數(shù)據(jù)無法準(zhǔn)確預(yù)測.對于當(dāng)自行車站點數(shù)量比較少的情況下,整體站點的誤差容易受到個別誤差大的站點所影響,使得整體誤差變大.當(dāng)自行車站點數(shù)量比較大的情況下,使用Xgboost進(jìn)行預(yù)測整體的平均誤差比較小,使用Xgboost效果則比較好.
相對于以往的只是針對站點自身的需求數(shù)據(jù)進(jìn)行短時需求預(yù)測的研究,從特征級的角度考慮了天氣因素,節(jié)假日因素,還有站點之間的相關(guān)性,并將這些因素加入到特征向量應(yīng)用于共享自行車站點短時需求預(yù)測.并利用Xgboost算法求解,將結(jié)果與BP神經(jīng)網(wǎng)絡(luò)模型、ARMA模型和K最近鄰算法進(jìn)行了對比分析,得出Xgboost算法預(yù)測的效果最為穩(wěn)定,各天的指標(biāo)值波動都較小,具有很強(qiáng)的魯棒性.但是,在應(yīng)用Xgboost算法的過程中,Xgboost對于一些波動比較大的數(shù)據(jù)無法準(zhǔn)確預(yù)測,造成個別站點的誤差較大,后續(xù)可以針對這些特點對Xgboost算法進(jìn)行改進(jìn).另外,所采用的數(shù)據(jù)為公共自行車數(shù)據(jù),每日的借車數(shù)量相對較少,只是針對以天為時間間隔進(jìn)行預(yù)測的實時性較低,未來使用共享自行車數(shù)據(jù)時,可以通過進(jìn)一步分時段進(jìn)行預(yù)測(例如分成每個小時的借車數(shù)量),以提高短時預(yù)測的實時性和精確度.