0x00 導言
在城市交通中,出租車出行占到相當一部分比例,出租車為城市的公共出行做出了許多貢獻,但也隨之帶來許多問題。隨着GPS設備的普及和設備本身精度的提高,大量出租車的GPS數據被傳輸、分類、收集,也由此對分析數據帶來便利,能從海量數據中尋找出有用的信息。在本專題中,將着重探討出租車繞路的問題。
出租車繞路是城市交通服務的頑疾,嚴重影響了乘客的乘坐體驗和對城市的印象,擾亂了正常行駛的秩序。在乘客投訴后,出租車中心往往需要人工查看繞路單,耗時耗力;且有些乘客(以外地游客為主)不知道如何投訴出租車司機,更使得司機逃脫處罰,技術的缺失助長了錯誤行為的囂張氣焰。因此,對出租車軌跡的挖掘,進而發現和判定繞路行為對於監管部門非常重要。
0x01 繞路定義及特征
出租車的繞路行為五花八門,某些司機喜歡故意在高架上繞遠路,某些司機並無明目張膽繞路,但小范圍繞路也能獲利匪淺。這些行為在時間和空間上呈現出不同的分布,給判定是否繞路帶來了不小的麻煩。下面將以一個實際的投訴例子說明繞路問題的復雜性。
本繞路行為發生在杭州市區,乘客從火車東站上車,目的地為江干區某小區,正常行駛距離(最短路徑)約為12公里,實際行駛距離15km。
圖中將三個月內所有從起點到終點的出租車軌跡繪制在地圖上,其中紅圈標出為起點,藍圈標出為終點。從圖中可知,大多數出租車司機采用B路線到達目的地,即在艮秋立交上高架,在清江立交下高架抵達江邊目的地,該路線在大部分情況下時間最短。但也有少數司機出於各種原因采用了不同的路線。例子中被投訴的出租車采取了A路線,即繞行石德立交上高架,該路線較正常B路線多行駛3-4公里,多收取乘客10元左右。也有少部分司機采取C路線,這條路線較正常路線近1-2公里。有部分司機走D路線抵達終點,這條路線與B路線距離大致相當,但由於地面道路紅綠燈較多故采用的司機較少。綜上可見,不同的司機會由於各自的原因采取不同的行駛習慣,使得繞路軌跡無法用單一的分類方法進行判定。
從分析中可知,繞路行為是軌跡異常的一種表現,但不完全等同於軌跡異常,它是一種特殊的軌跡異常。圖中C、D路線也能判定為軌跡異常,但不屬於繞路行為,因為在行駛距離上並無特殊之處。A路線的問題在於,它在局部產生大於正常行駛距離的軌跡,該路線有時會被導航軟件推薦,但當時必然沒有和乘客溝通,比正常收費多出25%左右,因此被乘客投訴毫不為過。我們應當將此類在圖形上“異常”,且在局部產生非正常行駛距離的軌跡歸為繞路軌跡。
0x02 異常軌跡判定
軌跡異常(Trajectory anomaly detection)是近年來軌跡分析中相當熱門的一個話題,在許多社會問題與科學研究中得到廣泛應用,例如野生動物的遷徙,惡劣天氣的演變,交通整體態勢等。
軌跡異常問題存在幾個不易解決的難點,表現在:
1.軌跡異常的定義。如繞路問題中,什么是圖形異常?非正常行駛距離的閾值應該取多少?這些都是應當被形式化定義的。換句話說,很多情況下軌跡異常取決於對實際問題的理解。
2.傳統的分析異常算法往往采取聚類方法,而基於密度的聚類是全局的,在軌跡相關的問題中,不同的軌跡密度相差非常大,使得基於密度的問題參數設置變得不可能。而若當采用分類方法,如何正確的分類也成為了難題。
3.GPS軌跡由於采樣點、設備原因,本身存在數據不完整的情況,長距離的軌跡缺失需要納入考慮。
軌跡異常挖掘一般的實現模式如下:
數據預處理 -- 提取數據特征 -- 異常檢測 -- 數據可視化(可選)-- 得到結果
其中,數據預處理部分將接入的GPS數據根據不同的異常檢測方案進行處理。例如網格化GPS數據,去掉不合理的軌跡點,對軌跡進行壓縮。在得到軌跡數據集(MOD, Moving Object Database)后,將需要使用的數據特征提取出來,然后使用異常檢測算法檢查異常軌跡。最終將異常軌跡用地圖的方式展現,或者根據檢測算法得到異常軌跡的結果。
針對城市道路的情況,軌跡預處理中最有力的方案是地圖匹配。它和網格化近似,是一種離散化的手段,但比網格化更為精准。關於地圖匹配有許多成熟優秀的算法,例如HMM,ST-Matching等,且考慮到實際環境中性能影響,將在其他主題中展開,此處不再一一詳述。
0x03 異常檢測
先說個遠的,異常定義本身就有各式各樣的說法。Ng說:“異常點就是給定兩個參數r k,當離某點距離小於等於r的點數量小於k時,該點被定義為異常點” 。是不是很繞?其實可以在點上畫個圈(二維,三維就是畫個球),圈內點太少就可視作異常點。這是針對數據集中單獨的點的做法。軌跡相對處理起來也比較簡單,因為只有二維(最多再加上時間維度),高維的異常檢測才是考驗算法的難點。現有的算法對於軌跡異常有許多不同的處理方法,自從Han小組在08年提出了TRAOD之后,這方面的算法如雨后春筍舉不勝數,大致可以分為幾種主要的類型:
1.基於距離的方法
如果某軌跡與其他軌跡的距離很遠,應能視作為異常軌跡。這是Ng對點定義的擴展。因此,計算軌跡之間的距離即為問題關鍵點。在這個問題上有很多技巧,如兩軌跡中間點的歐氏距離,兩軌跡的Hausdorff距離,等等。
2.基於密度的方法
方法是聚類(DBSCAN類、K-MEAN類)。思路是稀疏即異常。缺點在上一章已經提過,上面兩種方法其實思路是一致的,缺點也有相同的地方,參數需要先驗知識,不同區域的參數取值不一致。
3.基於分類的方法
需要根據特征提出可靠的分類算法。缺點是特征提取需要“強悍”的技巧,且在某些維度上未必有簡單的分類。
4.基於子軌跡Sub-Traj的方法
Han組的首創,將原始軌跡划分為子軌跡,對子軌跡聚類。這種解法還需要考慮全局對軌跡的影響。
順便說個知乎大佬的看法:異常代表三個詞:無監督、多分類、解釋。無監督很好理解,也許在特征提取之后會采取一些監督下的分類策略。多分類就是多樣化的異常情況,解釋是最終的結果,即需要將分類結果轉化為語義。
0x04 特征提取
特征提取決定了后續對兩條軌跡是否判定為同類。最一般方式可以根據距離來計算相似度,不同的線段間兩兩提取出特征,從而進行相似度度量。
文獻Sub-trajectoryand Trajectory-Neighbor-based Outlier Detection over Trajectory Streams ,Zhu2018 中提出了兩種特征提取的方式,如下圖。
- intra
該提取方式體現了軌跡本身的特征:ΔX, ΔY, Δt,三個參數確定了軌跡本身的方向、速度等特征。 - inter
該提取方式用兩軌跡中點的歐氏距離進行衡量,計算軌跡間的距離。此外,計算兩條軌跡間的夾角。該特征用於衡量兩條軌跡在空間上的相似程度。
0x05 iBAT
本小節將詳細介紹一種工業界中極其實用的分類和異常檢測算法,及在此基礎上針對軌跡異常的離散化處理版本,由南大周志華組(就是西瓜書的作者)發表在2008年。這種稱為iForest的方法比起基於距離、密度的方法更為巧妙,它直接刻畫數據的“疏離”(isolation)程度。
關於iForest算法可閱讀這篇blog:https://blog.csdn.net/Super_Json/article/details/84944707
簡單的說,iForest是一種針對多維數據的隨機決策樹,通過隨機選取某個維度將數據按值分成兩棵子樹,類似BST(划分出大的數據和小的數據),然后子樹按相同規則遞歸划分,直到無法划分為止,此時所有的子樹中的數據歸於一類。
而iBAT就是一種建立在軌跡網格化基礎上的決策樹。用作者的話來說,軌跡可以分為兩種,一種是正常的,一種是異常的,正常的軌跡“多且近似”,異常的軌跡“少且特殊”, 后者是我們要求的答案。相對於正常軌跡的復雜化和難以處理,異常軌跡比較容易被孤立,因此決策樹用於解決異常軌跡有特別的好處。
iBAT的算法如下:
1.隨機選某個網格
2.把軌跡集合按有無此網格分為兩棵樹
3.遞歸處理子樹
4.得到完整的決策樹
5.按iForest算法決定異常數據
在實際應用中,發現iBAT存在幾個缺點:
1.需要選出OD對下的所有軌跡集合,在實際使用時往往某些異常軌跡OD對比較少,難以在統計上成立。當然,這個缺點對於所有的異常檢測算法都或多或少存在。
2.本質上還是全局算法,缺乏對部分軌跡繞路的精確判斷,如果軌跡繞路只是局部的(但在距離上很明顯),由於大部分數據和正常軌跡相同,此時可能落在決策樹的底層。
3.決策樹的高層(即異常數據)也可能由於一個異常點的存在,首先選取了該異常點存在的網格,從而發生誤判。
因此后面也有許多工作對iBAT提出了優化,其中幾個思路都很清晰:
1.對異常數據和正常數據進行相似度判定,離正常數據相似度太低的才是異常數據。
2.計算局部軌跡距離,看是否有嚴重的超過正常距離的行為。
0x06 數理統計
個人比較偏愛這種方法。它有兩個優點:
1.實現簡單。當然iBAT代碼也非常簡潔,建立在樹基礎上的算法往往會體現一種簡單的美感。但是有什么比統計處理異常更簡單的呢?
2.使用靈活。統計時可以加入時間、狀態等等向量,判斷異常的checkpoint也可以自定義。
關於統計方法,交大的Cheng小組提出了一種基於位移-距離和位移-時間判斷的統計模式。他們將車輛行程的位移作為X軸,距離作為Y軸,將其繪制成為位移-距離曲線,並擬合出多項式方程,在正態分布的假設前提下得到每條軌跡(每條曲線)的分布概率,概率過小的即為異常數據。
然而像圖中這種情況,擬合未必是最佳方案。可以很清楚地從原圖中看到,出租車常用兩條路線,因而位移距離曲線的分布也聚集成兩個cluster。此時用普通的判斷異常值方法即可。有一種選擇是對分布圖進行DBSCAN,但我嫌它需要參數,就不選了。
最終得到圖中所示紅色曲線為異常軌跡,這些軌跡是原圖中走A路線的出租車軌跡。
0x07 思路
0.建立軌跡庫
1.分段做距離統計
2.整體用iBAT測試,取樣正常軌跡
3.Edit Distance判定異常程度
回過頭來看異常三要素:距離統計完成了無監督下的異常分析,iBAT完成了分類,相似度分析完成了解釋。