林鵬飛,翁劍成,胡 松,荊云琪,尹寶才
(北京工業大學交通工程北京市重點實驗室,北京100124)
作為國家層面的城市交通發展戰略,通過“公共交通優先發展”緩解中國城市交通擁堵已經成為共識.掌握公共交通出行者的出行時空規律對于公共交通運營管理,提升公共交通服務品質具有重要意義.公共交通刷卡數據記錄了出行者帶有時空標記的數字腳印,為精細粒度的出行行為研究奠定了良好的數據基礎.Ma 等[1]利用北京市一個月的刷卡數據,提取出行天數、常用出發時間、常用路徑和站點數4個指標刻畫個體出行行為的時空重復性,利用ISODATA 聚類和TOPSIS 算法評價乘客通勤強度.李軍等[2]以出行頻次與出發時間的標準差作為分類標準,將公交乘客的出行劃分為通勤出行、普通類出行和隨機類出行.何兆成等[3]基于刷卡數據提取乘客出行鏈,應用DBSCAN 聚類算法識別居民出行模式,基于出行模式劃分結果分析出行周期性;并結合月出行次數,常規出行所占比例,周期性強度,利用Kmeans++算法對居民出行規律性進行聚類.Goulet-Langlois[4]等利用熵率模型從出行頻率和時間順序的角度衡量乘客出行行為的規律性.
現有研究主要基于刷卡數據,提取反映個體出行行為時空相似性的指標,通過聚類算法進一步將乘客劃分為不同群體,而出行作為活動的衍生物,從活動角度挖掘乘客出行規律的研究較少;卡類型信息有助于推斷用戶的活動屬性,但多數研究缺乏對卡類型信息的有效利用;現有研究主要將個體多天的出行數據集計分析,忽視對個體日維度出行行為相似性的分析.從日維度的角度分析不同卡類型乘客的長期出行活動規律有助于更精細地劃分乘客,并針對不同出行群體制定有針對性的公交服務政策.
本文擬基于乘客刷卡數據,通過提取乘客活動地,推斷居住地位置和識別活動類型3個步驟構建乘客個體活動鏈,并通過PrefixSpan序列挖掘算法提取普通卡、老年卡、學生卡這3 類用戶活動鏈的頻繁序列模式,采用Levenshtein距離分別度量3類用戶活動鏈的日維度相似性.
采用2018年4~5月北京市公共交通刷卡數據,包括每位乘客乘坐地鐵或者公交出行時的卡號、卡類型、上下車刷卡時間及站點信息.刷卡數據中包括普通卡、老年卡和學生卡3 種卡類型.由于乘客出行時存在換乘情況,參考文獻[5],將同一出行目的且存在換乘關系的多個出行階段合并構建出行鏈,結果如表1所示.刪除分析周期內出行天數少于20 d 同時出行日期最大間隔大于7 d 的乘客,最終獲取約169 萬名乘客的出行鏈數據,其中,普通卡、老年卡和學生卡乘客的占比分別為80.1%,17.1%和2.8%.

表1 出行鏈數據樣例Table 1 Samples of trip chain data
活動鏈是將乘客每天的所有活動按活動發生的時間順序相連接.出行鏈數據構建活動鏈主要包括活動點提取,居住地位置推斷和活動類型識別3 個步驟.如圖1所示,某乘客1 d 中存在3 次出行,根據每次出行的起終點,上下車時間,以及乘客用戶類型等可推斷乘客的出行鏈為“居家—工作—其他—居家”.
提取每位乘客所有出行鏈數據的上、下車站點位置信息,構建活動地站點集合.由于城市中心區域的公交可達性較高,乘客可選擇多條路徑抵達活動地,故需要將活動地附近的公交站點聚合處理.本文采用DBSCAN 算法將站點集合聚類為若干個簇并作為乘客的活動地,將DBSCAN 算法中鄰域距離閾值設為700 m,最小樣本點數設為1.統計每個活動地的訪問頻率,并按訪問頻率由高到低進行排序.
根據Zou 等[6]研究發現:大多數乘客每天最后一次出行的終點通常與第一次出行的起點相同,并分布在其居住地附近;大多數乘客當天第一次出行的起點與前一天最后一次出行的終點相同.基于上述規則,將每位乘客周期內的所有出行鏈數據按出發時間排序,如果乘客某天有多次出行,則直接提取第一次和最后一次出行;如果乘客某天只有一次出行,則假設出發時間早于中午12:00的為第一出行,晚于中午12:00 為最后一次出行.提取每位乘客每天第一次出行的起點和最后一次出行的終點,將頻率最高的活動地設置為乘客的居住地.

圖1 個體活動鏈Fig.1 Individual activity chain
假設當前行程為t,結合相鄰下一次出行(t+1)的起點,以及相鄰上一次行程(t-1)的終點判斷活動狀態,按如下步驟遍歷乘客所有行程.
Step 1 如果行程t是乘客周期內第一次出行,或者行程t與行程t-1 的間隔大于1 d,則認為乘客在行程t開始前在行程t的起點處于活動狀態.
Step 2 如果行程t和行程t-1 在同一天,或者在行程t-1之后的第2天,并且行程t-1的終點與行程t的起點相同,則認為乘客處于活動狀態;如果不同,則乘客在該期間采用了非公共交通方式出行.
Step 3 如果行程t與行程t+1 在同一天,或者在行程t+1的前一天,則按Step 2處理.
Step 4 如果出行t與t+1 間隔大于1 d,或者行程t是乘客在周期內最后一次出行,則認為從行程t的結束時刻到當天結束,乘客在行程t的終點處于活動狀態.
根據卡類型,活動地訪問頻率和活動的起止時間,進一步推斷乘客的活動類型.將居住地以外訪問頻率最高的活動地,記作第一活動地.如果活動地位于居住地,則活動類型為居家(home);如果活動空間位置為第一活動地且活動時間在05:00-23:00,對于普通卡、學生卡和老年卡乘客,該活動分別對應工作(work)、上學(study)、生活外出(main);將05:00-23:00 在其他活動地發生的活動,如休閑娛樂等統一歸為其他(other).乘客活動類型的推斷規則如表2所示.

表2 乘客活動類型的推斷規則Table 2 Inference rules of passenger activity type
個體活動鏈的構成包括活動地序號,活動類型及活動時長,采用下劃線連接,按發生的時間順序排列.為便于計算活動鏈的相似度,將活動時長離散化處理,劃分為(0,3]h、(3,8]h和>8 h這3個區間,分別記作短(short)、中(middle)和長(long).活動鏈的樣例如表3所示.

表3 活動鏈樣例Table 3 Sample of activity chain sequence
頻繁序列模式挖掘是從乘客活動鏈序列中找到頻繁出現、有規律的活動序列,本文采用PrefixSpan算法挖掘頻繁序列,該算法通過前綴和投影實現挖掘序列模式,已被廣泛應用于生物序列、軌跡序列等序列挖掘研究中[7].算法的相關概念定義如下.
定義1活動鏈序列.假設某乘客的活動鏈序列S由L個元素按時間順序排列組成,S=<s1,s2,…,sL>,其中,si表示活動鏈中的第i個活動,1≤i≤L,例如S=<0_home_long,1_work_long,0_home_long>,每位乘客周期內所有活動鏈序列構成活動鏈序列集合SSET,記為SSET=<UID,D,S>,其中,UID為乘客卡號,D為日期.
定義2子序列和超序列.對于活動鏈序列α=<a1,a2,…,an>和β=<b1,b2,…,bm>,其中,au(1≤u≤n)和bv(1≤v≤m)分別為α和β的一個活動,且存在遞增下標序列j1,j2,…,jn(1≤j1<j2<…<jn≤m)使 得a1?bj1,a2?bj2,…,an?bjn,則序列α為序列β的子序列,序列β為序列α的超序列.
定義 3支持度.對于給定序列集合SSET=<UID,D,S>,序列α是序列S的子序列,則序列α的支持度為在SSET中包含α的序列的比例.
定義4頻繁序列.給定最小支持度θ,若子序列α在序列集合SSET中支持度大于θ,則序列α即為序列集合SSET的頻繁序列.
定義5前綴及投影.對于序列α=<a1,a2,…,an>和β=<b1,b2,…,bm>(m≤n),如果bw=aw(w≤m-1),則β是α的前綴.對于活動鏈S,α,β,且α,β是S的子序列,同時β是α的前綴,且不存在α的超序列也有前綴β,則稱α為β在S上的投影.
定義6后綴.假設序列α=<a1,a2,…,an>和β=<b1,b2,…,bm>(m≤n),β是α的前綴,則序列γ=<am+1,am+2,…,an>為α關于前綴β的后綴.
定義7投影數據庫.假設α為序列數據庫SSET的一個序列模式,則投影數據庫是以α為前綴的所有后綴的集合.
PrefixSpan算法采用分治思想,求解頻繁序列模式的步驟如下.
Step 1 查詢所有長度為1的前綴和對應的投影數據庫.
Step 2 計算對應投影數據庫中各項支持度,保留所有滿足最小支持度的項.
Step 3 在前綴的投影數據庫中,將滿足支持度的候選序列與當前前綴相連,根據上述步驟遞歸生成投影,直到不滿足最小支持度或投影數據庫為空.
為加快頻繁序列的檢索效率,將頻繁序列的最小長度和最大長度分別設置為2、5,最小支持度設為0.2,同時頻繁活動序列第一個或者最后一個元素的活動類型為居家.
Levenshtein 距離又稱為編輯距離,是指將字符串S變換到目標字符串所需最少編輯次數,編輯操作包括插入、刪除、替換操作.Levenshtein 距離的優點是可以用于度量長度不同的2 個符號序列之間的相似性,計算公式為

式中:S,T分別代表乘客的兩個活動鏈序列;Sp,Tq分別表示S、T中的第p、q個元素;為示性函數,當Sp≠Tq時為1,否則為0.
基于Levenshtein距離任意兩個活動鏈序列的相似性為

式中:LS和LT分別為活動序列S和T的長度.SS,T的值越大,兩個序列越相似.
基于出行鏈數據構建活動鏈,利用Prefixspan算法挖掘每位乘客的頻繁活動序列模式,統計3類乘客頻繁活動序列的頻率分布,結果如表4所示.表4中僅展示活動類型,其中,H、M、S、M、O 分別代表居家、上班、上學、生活外出、其他.每類用戶中約70%乘客的頻繁活動序列是對稱模式,即每天乘坐公共交通往返于居住地與活動地,表明大部分乘客對公共交通的依賴性較高;約30%乘客為非對稱模式,即部分出行采用非公共交通,其對公共交通的依賴性較低.

表4 不同類型乘客的頻繁活動序列模式Table 4 Frequent activity sequence patterns of different types of passengers
普通卡用戶中“居家—工作—居家”活動鏈比例最高,占比為69.8%.普通卡乘客的頻繁活動序列模式更加多樣,存在“其他”活動的頻繁序列有5 種類型,相應乘客占所有普通卡乘客的17.1%,0.4%的普通卡乘客每天兩次往返于居住地和辦公地.
學生卡乘客中最典型的頻繁序列模式是“居家—學習—居家”,頻率為68.0%;非對稱活動頻繁序列包括“學習—居家”“居家—學習”,占比約21.7%.10.4%的學生卡用戶每天存在第二活動,典型的頻繁序列包括“居家—學習—其他”“其他—學習—居家”.
老年卡乘客的活動序列模式主要為“居家—生活外出—居家”,占比為61.0%;非對稱活動序列模式包括“居家—生活外出”“生活外出—居家”兩種頻繁活動序列,占比為27.2%.10.8%的老年卡乘客頻繁活動序列中存在第二活動.
分別統計5種活動類型的活動時長,結果如圖2所示.居家、工作、學習是乘客每天的主要活動,所占時間相對較長,3 種活動的平均時長分別為12.5,9.9,9.2 h.老年人生活出行活動的平均時長為3.9 h,相對較短,其他活動類型的平均活動時長為4.4 h,生活出行和其他活動類型的活動時長分布相對分散.

圖2 5 種活動的活動時長分布Fig.2 Activity duration distribution of five activities
將每位乘客每天的活動鏈序列與其自身的頻繁序列模式相比較,利用Levenshtein 距離計算活動鏈序列相似性,將每位乘客周期內每天的相似性計算平均值,用于表征乘客活動鏈的日相似度,不同類型乘客的相似性分布如圖3所示.普通卡和學生卡用戶的相似性整體較高,平均值分別為0.645 和0.649,老年卡用戶的相似性較低,平均值為0.530,說明通勤(學生)群體活動鏈結構的相似性高于老年人群體.學生群體相似性分布較普通卡和老年卡群體更集中,說明學生群體整體的相似性較高.
計算不同類型乘客周期內任意兩天活動鏈的相似性,按卡類型對相似性取平均值,即可得到不同類型乘客活動鏈序列的日維度相似性,結果如表5所示.3類用戶均表現出工作日活動鏈序列與非工作日具有明顯差異,而工作日內、非工作日內各天差異較小;星期五與其他天的活動鏈相似性相對較低,可能原因是臨近周末乘客的休閑娛樂等彈性出行需求增加,使活動鏈結構發生變化.普通卡用戶和學生卡用戶的活動鏈序列相似性高于老年卡用戶,表明普通卡和學生卡用戶的活動更規律,同時對公共交通的依賴性更強.

圖3 不同類型乘客的平均相似性Fig.3 Average similarity of different types of passengers

表5 不同類型乘客活動序列日維度相似性Table 5 Day-to-day similarity of activity sequences of different types passenger
本文提出公共交通乘客的活動鏈構建方法,基于Prefixspan算法挖掘3類乘客活動鏈的頻繁序列模式,利用編輯距離度量個體活動鏈的日相似性.結果表明:每類用戶中約70%乘客的頻繁活動序列是往返于居住地和第一活動地的對稱模式,對公共交通具有較強依賴性.普通卡和學生卡用戶的日相似性高于老年卡用戶,3類乘客均表現出工作日間或非工作日間活動鏈相似性較高,而工作日與非工作日相似性較低的特點.未來將結合公共交通站點周邊的用地屬性對乘客活動類型進行更精細地辨識.