導讀
駕車導航服務是數字地圖提供的核心功能。通常而言,用戶在發起導航之前會對比高德前端展示的三條路線(如下圖),以決定按照哪條路線行駛。

而預估到達時間是用戶參考的最為重要的指標之一。給定一條路線,對應的預估到達時間的計算需要兩組信息輸入,分別是實時路況信息和歷史速度信息(歷史速度信息指的是對應的平均通行時間)。其中實時路況信息,對短時(例如60分鍾以內)路況預測幫助較大;而歷史速度信息對長時(例如60分鍾以上)路況預測幫助較大。一般來說,對於未來2小時以上的路況預測而言,當前時刻的路況信息幫助十分有限,也可以理解為歷史速度信息基本處於絕對主導的地位。
因此在長距離路線的預估到達時間計算中,歷史速度至關重要,其預測的准確性直接影響預估到達時間,進而影響用戶選擇及體驗。我們希望能夠通過建模的方式提高歷史速度的預測准確率。
歷史平均法的不足
以往預測歷史速度的方式是歷史平均值法,主要是將歷史上過去某時間段同一特征日同一時間段(例如8:00-8:10)經過同一條路段的所有車輛的用時求平均,這種方法的假設是“歷史即未來”。該方法對於3個月內常發性震盪走勢比較適合,但針對有特定趨勢的走勢(如上升走勢),效果不會太好。
該方法不足之處有以下三點:
-
對於異常點敏感
-
無法利用時域序列的演化趨勢(trend)信息
-
無法利用去年同期的車輛行駛規律
下面我們用一個分析過的badcase來具體說明,如下圖:
上圖顯示了北京市某路段在過去連續若干周里確定特征日(周五)及確定時間批次(12:10-12:20)上各自的平均旅行時間。如圖所示,近期旅行時間已逐漸升高,且去年同期旅行時間也已經升高,但是使用歷史平均值法計算的歷史速度信息卻顯著偏小,與未來一周對應時間段的真實旅行時間偏差近三倍。
通過前期的case調研分析,發現部分路段的歷史速度曲線呈現出時效性、年度周期性特征。

上圖為某段道路從20170501到20190103期間某個時間批次的旅行時間變化,可以發現,每到暑假期間,該路段旅行時間顯著增大,呈現出明顯的年度周期性。
本項目旨在解決歷史平均值法存在的不足,其中,由於年度周期性問題導致的惡劣badcase占比較大,故着重解決年度周期性問題。
機器學習解題
基於TCN模型的歷史速度問題建模
歷史平均值方法簡單粗暴,但也能取得相當不錯的效果,對於具有年度周期性&時效性的路段,僅僅通過統計近期的信息會損失一定的精度,這時把去年的相關信息融合進來就顯得特別重要,該問題是個典型的時序建模問題,本文基於TCN構建歷史速度周期性問題解決方案。
我們的目標是構建一個基於歷史信息(某時間段&去年同期:同一段道路、確定特征日、確定時間批次)和道路屬性來預測未來一周歷史速度的機器學習模型,解決歷史平均值法存在的問題,從歷史速度信息維度提高預估到達時間的准確率,解決惡劣bacase。
TCN簡介
時間卷積網絡(TCN)可以作為一般的序列建模架構,且擁有非常好的效果。TCN顯著的特點有如下幾點:
-
架構中的卷積存在因果關系,這意味着從未來到過去不會存在信息泄漏。
-
卷積架構可以將任意長度的序列映射到固定長度的序列。
-
利用殘差模塊和空洞卷積來構建長期依賴關系。
TCN 論文圖:TCN 架構的組成元素。左圖為空洞系數 d=1, 2, 4、卷積核大小 k=3 的空洞因果卷積,感受野能覆蓋輸入序列中的所有值。右圖為TCN 殘差塊,當殘差輸入和輸出有不同的維度,我們會添加一個 1x1 的卷積。
網絡架構
上圖為整個模型的框架圖,主要分為動態特征提取模塊和靜態特征模塊,其中動態特征的提取基於TCN模型實現,而靜態特征則直接和提取出的動態特征進行連接之后使用。具體說明見下文。
動態特征提取
該模塊的主要目標是通過TCN模型去學習旅行時間的曲線走勢特征,這里的動態特征指的是從今年和去年對應的一定數量的平均旅行時間構成的序列中提取出的走勢特征。
本文將今年和去年對應的平均旅行時間序列作為一個雙通道序列放進TCN模型中學習,旨在利用TCN強大的時序建模能力,同時結合今年和去年的走勢特征,更加准確的預測未來一周的走勢(上升、下降或震盪)。
針對該類序列建模問題,已有成熟的RNN技術,而且目前更新的TCN技術也已出現。在項目開展過程中,分別使用了RNN、LSTM和TCN來做序列建模,實驗結果表明,使用TCN進行序列特征提取效果最好,相對於RNN約有1.39%的效果收益,相對於LSTM約有0.83%的效果收益,而且由於TCN模型是基於卷積網絡實現的,訓練速度更快,所以本項目中采用TCN進行動態特征提取。
靜態特征
這里的靜態特征主要指一些人工提取的特征,用以加強模型表達能力。具體如下:
-
道路屬性特征:路長、路寬、車道數、車道寬度、最大限速等
-
時間屬性特征:前三天對應時間批次旅行時間、前七天對應時間批次旅行時間均值、去年同期前后兩個平均旅行時間(同一特征日&同一時間批次)
道路屬性特征主要考慮不同的道路通行能力不一樣,會在一定程度上影響車輛通行速度。
時間屬性特征主要分三方面:
- 前三天對應時間批次旅行時間-考慮到時效性問題,越靠近預測天則可靠性越大,例如,最近幾天道路施工,車道速度受到影響;但該特征也會對基於特征日的建模產生一定影響,因為車輛出行規律大部分情況下跟周幾特征日有關,而與非特征日的關聯較小(除特別情況,如活動舉辦、連續數天施工)。案例見下圖。

圖中為某段道路連續85天某時間批次上的旅行時間變化趨勢圖,從圖中可以看到,該曲線呈現先平穩后上升的趨勢,第85天的旅行時間與前面的關系不大,而與近期關系較大(近期一直較擁堵),尤其是近三天。
-
前七天對應時間批次旅行時間均值-該特征為近期旅行時間的一個統計指標,旨在反映近一周的通行狀況,作用同上。
-
去年同期前后兩個平均旅行時間(同一特征日&同一時間批次)
模型效果
本文所采用的基於TCN建模方法,能夠從動態和靜態特征中提取出駕駛規律信息,包括異常點的識別過濾、旅行時間的趨勢變化信息和年度周期信息,給出更符合預期的預測值,較好的解決當前歷史平均值法的弊端,可以部分解決惡劣badcase發生的問題。具體效果說明如下:
異常值自動過濾

上圖中case,從整體上來看,旅行時間在70s上下浮動,而局部某些點是異常偏大的(當天可能發生了交通事故等),屬於異常點,在預測未來歷史速度信息走勢的時候,應該忽略,TCN模型成功的忽略了這些異常點,但歷史均值法則會將其納入計算,導致算出的平均旅行時間偏大。
趨勢信息提取

上圖中case,從曲線走勢來看,旅行時間近期有所上升,所以下周的平均旅行時間大概率還是會延續這種趨勢,可以看出,TCN模型比較好的學習到了這種趨勢信息,預測效果較好,但歷史平均值法,由於前期很長一段時間旅行時間都很小,導致算出的平均旅行時間也偏小。
年度周期性的引入

上圖中case,從圖中可以看出,今年前11周都比較平穩,第12周旅行時間突然上升,但只從今年信息中我們無法得知第12周這天是否是異常值,從而模型無法准確給出第13周的預測值,但從去年對應的13周的數據中可以發現,去年對應的時間在第12和13周都上升了,從而模型可以確定今年第13周大概率還是會繼續升高(根據年度周期性),但使用歷史平均值法給出的平均旅行時間則明顯偏小。
評測結果
該項目在某一周的case集合上的評測效果:
-
基線-歷史平均值法的badcase率為11.0‰;
-
對照-基於TCN的方法的badcase率為10.1‰。
可以看出,本文所采用的方法相對基線惡劣badcase率下降幅度較大,說明引入年度周期性可以解決部分惡劣badcase。
小結
本文將TCN模型進行工業化實踐,幫助建模歷史速度問題,並結合特征工程(提取動態、靜態特征,引入年度周期性等),成功的解決了現有模型的不足,並在實際應用中取得了不錯的效果,為將來的時序性問題探索了一條可行的路徑。對現有TCN模型框架所做改動較小,后續可進一步探索,針對特定問題做一些定制化的改進。