曹旦旦, 范書瑞, 張 艷, 夏克文
(河北工業大學電子息信工程學院, 天津 300401)
如何精確地預測短時間內某區域需要的共享單車數量從而合理地進行調度是一個亟待解決的問題。現如今已經有一些機器學習方法,比如隨機森林、支持向量機等都已經在共享單車的研究中被廣泛使用。文獻[1]采用傳統最小二乘法(ordinary least square,OLS)線性模型、二分類和多分類Logit模型等對單車需求量進行預測,但是需要大量觀測數據,且具有明顯的局域性,回歸關系不能很好符合實際情況;Bacciu等[2]、Bajari等[3]采用支持向量機和隨機森林模型預測,但是并沒有詳細介紹如何預測短時間內的單車使用量情況。
為了提高計算精度、準確預測每天每小時的紐約市共享單車需求量,其預測方法已由以往的機器學習模型,如隨機森林(random forest,RF)、支持向量機(support vector machine,SVM)和人工神經網絡(artificial neural network,ANN)等[4],向深度學習方法轉變。BP神經網絡具有良好的組織和適應性,其數據樣本經過自己學習的過程,就能夠解決非線性問題[5],但是不足之處就是在訓練的過程中容易形成局部的最大值和最小值的現象;循環神經網絡(recurrent neural network,RNN)擅長處理連續的時間序列數據,但運算中容易發生梯度消失、梯度爆炸等問題。針對RNN模型存在的不足來進行改進得到的模型就是長短期記憶(long short-term memory,LSTM)模型,直到現在該模型已經在很多時間序列研究領域被廣泛使用并得到了較好的效果[6-8]。在爬取紐約共享單車數據的基礎上對數據進行特征分析,分析影響單車需求量的主要因素;并提出基于LSTM循環神經網絡方法對共享單車短時需求量進行預測,然后與傳統的RNN和BP神經模型預測結果比較。預期LSTM模型在該數據集上能有一個較好的預測效果。
LSTM最初是在1997年由Hochreiter等[9]提出,是在循環神經網絡RNN的基礎上改進而來的[10]。LSTM神經網絡和RNN不同的地方是,它不僅增加了具有保存以往信息的記憶存儲單元,通過反向傳播算法[11]對數據進行訓練,它還解決了RNN梯度消失和長期依賴性缺失的問題。LSTM廣泛應用于各個方面,比如自然語言翻譯和語音識別等,還可以應用于時間序列的預測[12],都具有較好的效果。
LSTM的網絡結構是利用門的控制機制來工作的,包含一個記憶細胞和3個控制門,分別為輸入門、輸出門和遺忘門[13]。網絡結構如圖1所示。圖1中的3個方框代表細胞在不同時序的狀態,中間方框中帶有的小框是激活函數為Sigmoid的前饋網絡層[14],具有tanh的小方框是具有激活函數tanh的前饋網絡層,Xt代表t時刻的輸入,ht代表t時刻細胞的狀態值。LSTM各個門的工作原理如下。

圖1 LSTM網絡結構Fig.1 LSTM network structure

it=δ[Wi(Xt,ht-1)+bi]
(1)
(2)
其次,計算遺忘門在時間t的激活值ft,公式為
ft=δ[Wf(Xt,ht-1)+bf]
(3)
通過上述兩個步驟,就能夠計算出來細胞在時間t的狀態更新值Ct,公式為
(4)
計算輸出門的值,公式為
Ot=δ[Wo(Xt,ht-1)+bo]
(5)
ht=OttanhCt
(6)
經過上面的4個計算步驟,LSTM就可以有效地利用輸入來使其具有長時期的記憶功能。
首先,在Windows操作環境下構建CPU版本的Tensorflow框架。Tensorflow不但能實現深度學習算法,還能實現例如回歸預測、聚類分析等算法。LSTM模型使用Tensorflow提供的LSTMCell模塊進行搭建,該模塊將LSTM的隱藏層封裝在Tensorflow內,并包含3個門結構,分別是遺忘門、輸入門和輸出門結構,隱藏層的數目要根據實際情況來定,所設置的隱藏層的數目為10。為了避免出現過擬合現象,采用Dropout機制來增強模型的泛化能力。
以往的搭建網絡的過程是以網絡節點為單位來進行網絡布局,而使用Tensorflow搭建LSTM框架的過程是以網絡層數為單位來進行模型的構建,Tensorflow中的LSTMCell包含多個網絡節點的輸入和輸出層,它們都由向量表示,向量的長度就是該層節點的個數。
在搭建模型和訓練模型的過程中,最重要的一點是參數的初始化,不同類型的特征參數需要進行不同類型的初始化,這對模型的訓練效果具有十分重大的影響。對連續性參數變量初始化的方式為:dummies=pd.get_dummies(rides[each],prefix=each, drop_first=False),初始化離散參數變量的方法是:mean, std =data[each].mean(), data[each].std()。用批量隨機梯度下降法對模型進行訓練。
在Windows7系統中使Anaconda Navigator3(Jupyter notebook),Python3.6為實驗平臺進行仿真實驗,將Tensorflow所提供的LSTM等神經網絡模型用于仿真實驗。
采用網絡爬蟲的方法,從美國國家海洋和大氣管理局官方網站氣象服務中心提供的紐約市歷史天氣數據集中爬取紐約市的歷史氣象數據,所爬取的數據范圍從2015年1月—2018年12月的小時數據,共計48個月,共35 064條數據。其中某些數據存在缺失現象,其數據字段如表1所示。

表1 實驗中使用的數據集Table 1 Data set used in the experiment
3.3.1 氣象因子的影響
共享單車是一種受氣象影響顯著的交通工具,圖2所示為2015—2018年紐約地區共享單車租借總量與4種氣象因子的相關性熱力分布圖。

圖2 氣象因子與單車使用量的相關性熱力圖Fig.2 Correlation between meteorological factors and bicycle usage
由圖2可得,共享單車需求量與4種氣象因子之間都存在相關性。溫度與租車人數正相關,寒冷抑制租車需求;濕度與租車人數負相關,雨雪天氣抑制了單車租借需求;單車需求量與溫度和濕度的相關性最高,分別為0.41和-0.19。
3.3.2 時間因子的影響
(1)共享單車使用量受時間影響,利用2015—2018年美國紐約地區共享單車項目數據進行時序變化規律分析,結果如圖3所示。
共享單車使用在2015年1月—2018年12月期間,總體用量逐年上升,每一年從1月開始租車人數就迅速增加,直到6月用車人數最多,隨后至10月用車人數緩慢減少,在10月之后大幅減少,這顯然與季節有關。在1月、2月和12月這樣的比較冷的季節,用車的人數工作日高于非工作日;在溫暖和涼爽的季節(5—11月),用車的人數非工作日數高于工作日。可以得出結論,時間因素如年和月份也會對租借數量產生重大影響,因為月份和季節對租借數量的影響是一致的,月份更詳細,因此要留下月份特征,刪除季節特征。
(2)圖4和圖5進一步考察了2015—2018年平均每小時和每星期對共享單車的使用量的影響,并繪制折線圖和箱線圖。

圖4 2015—2018年平均每小時共享單車使用量Fig.4 Average bicycle usage per hour for 2015—2018

圖5 2015—2018年平均每星期共享單車使用量Fig.5 Average bicycle usage per week in 2015—2018
從圖5中可以看出,周一到周五租車人數相對較多,每天有兩個高峰期,分別是7:00—8:00點左右和17:00—18:00點左右,正好是工作日的上下班高峰期;此外,從12:00—16:00點的使用量較高,這進一步反映了時間段,特別是高峰時段,是影響自行車需求的重要因素。
(1)填寫缺失數據:通過上述方法獲得的數據為不完整數據,需要填寫缺失數據以便于在接下來的預測工作中使用。
(2)虛擬變量:通過Pandas庫中的get_dummies()函數對季節、月份和天氣等離散變量創建二進制虛擬變量。
(3)調整目標變量:為了更輕松地訓練模型,需要將溫度、濕度和風速等連續變量標準化,使它們的均值為0,標準差為1;同時保存換算因子,在后續進行預測時可以還原數據,其公式為
(7)
式(7)中:max表示所選取的數據中特征的最大值;min表示數據特征的最小值;xij為原始數據;Xij為標準化后的數據。
3.5.1 評價指標
為了評估LSTM預測模型的預測性能,選擇均方根誤差(root mean square error,RMSE)指數來評估模型的預測精度,RMSE是用來衡量模型預測值與真實值之間的偏差的物理量,值越小,預測出來的效果越好,公式為
(8)

3.5.2 網絡模型的擬定
研究使用單層的LSTM模型對紐約市共享單車需求量進行預測。利用深度學習庫中Tensorflow 中所提供的LSTMCell模型來預測出每小時的單車需求量。通過add函數將多個網絡層進行線性堆疊。通過不斷的調試和搜索,最終確定的網絡結構參數的過程如下。
(1)層數設置:構建了單層LSTM模型結構,輸入的共享單車數據的總維數為60,所設定的的隱含層的數目為10層,輸入層是12,輸出層是1。
(2)參數設置:采用的激活函數為ReLU激活函數,每批次訓練樣本數batch_size設置為10,時間步長time_steps設置為10,學習率learning_rate設置為0.000 5,訓練數據的截斷長度num_steps為50,向量的維度lstm_size為256。為了在訓練的過程中防止過擬合現象發生,將每一層網絡節點的舍棄率Dropout設置為0.75。
(3)維度轉換:輸入特征時,需要將張量tensor轉換為二維計算,計算結果作為隱藏層的輸入。,最后再將 tensor 轉成三維作為 lstm cell 的輸入。通過get_batches批量處理數據。
3.6.1 網絡訓練
基于紐約市2015—2018年每小時的共享單車使用量數據35 064條,其中訓練數據35 033條,剩下的數據用于測試。每次訓練的樣本數batch_size=10,訓練輪次數為epoch = 100,每輪指定模型的相應測試數據,并輸出每次訓練記錄。訓練模型時可以更改迭代次數,迭代的次數越多預測越準確,但缺點是需要的時間也長,本次實驗的迭代次數為6 600,使用的損失函數為均方誤差RMSE,選擇自適應矩估計Adam為優化器。圖6所示為模型在訓練的過程中損失函數下降的過程,從圖6中可以看到,模型在訓練集上的損失函數不斷下降并趨近于0。圖7所示為模型在驗證集上的預測精度變化過程,從圖7中可以看到,驗證集的精度逐漸上升并趨近于0.9,說明了所選擇的參數為該模型在該數據集下的最優參數組合。

圖6 訓練集損失變化曲線Fig.6 Training set loss curve

圖7 驗證集精度變化曲線Fig.7 Verification set accuracy curve
3.6.2 模型預測結果
經過訓練后的模型為最優的模型,用該模型對剩下31 d的數據進行測試,并將模型的預測值和實際值進行反歸一化處理,預測完后的模型所得出的RMSE=0.090,并將模型的預測值和實際值進行比較,比較的結果如圖8所示。從圖8中可以看出,LSTM模型能夠很好地預測數據,除了最后10 d,因為這10 d是節假日,自行車需求量和平時不一樣。預測的每小時使用量曲線和實際車輛使用量曲線趨勢相吻合,模型的擬合效果很好,滿足回歸預測過程中的經驗誤差要求。因此,LSTM預測模型在共享單車需求預測中是可行的。

圖8 LSTM神經網絡預測結果曲線Fig.8 LSTM neural network prediction result graph
3.6.3 預測模型對比
(1)預測誤差對比。利用BP神經網絡模型和RNN循環神經網絡對同樣的共享單車數據集進行模型搭建并預測,并將預測結果和真實結果進行反歸一化處理,并計算出預測結果值和實際需求量結果值的差值即預測誤差,其預測誤差曲線如圖9所示。由圖9可得,LSTM神經網絡模型在共享單車數據集上的預測效果最好,不僅能夠很好地預測數據的變化趨勢,而且預測誤差最小。而RNN循環神經網絡和BP神經網絡對共享單車數據的預測結果和預測誤差都稍差于LSTM模型。所以在共享單車需求量預測方面,LSTM模型更加合理。

圖9 3種網絡模型預測誤差對比Fig.9 Three network model prediction error comparison chart
(2)評價指標對比。上述3個模型擬合完所有數據后所得到的RMSE和預測精確度如表2所示。根據表2中每個模型的性能指標結果,LSTM模型的RMSE最小值為0.090,預測精度高達0.860,模型的擬合效果最好,變量對預測值的解釋能力最強;RNN相比LSTM較弱,這是由于RNN在模型訓練過程中存在梯度爆炸和梯度彌散的現象,而LSTM正好解決了這個問題;BP神經網絡的性能最差,預測精度最低,RMSE最大,綜合來看LSTM的性能最好。

表2 不同模型的評價指標對比Table 2 Comparison of evaluation indicators of different models
針對如何精確地預測一個區域小時級別的共享單車需求量的問題,通過爬取紐約共享單車數據集并分析各個特征變量對單車租借總量的影響,最后采用LSTM神經網絡對紐約市共享單車每小時時需求量進行預測。經過實驗得到以下結論。
(1)影響單車需求量的主要因素包括溫度、節假日、季節以及早晚高峰時間段等因素,最主要的是溫度的影響和早晚上班高峰時間段(7:00—8:00點和17:00—18:00點)的影響比較大。
(2)與傳統BP神經網絡算法和循環神經網絡RNN算法相比,LSTM模型預測精度最高,值為0.860,預測誤差較小,且預測結果曲線與真實結果曲線相吻合,可以用來對共享單車短時需求量進行預測。