牟慶泉,丁小兵,劉志鋼,吳先源
(上海工程技術大學 城市軌道交通學院,上海 200336)
目前,國內外大型城市內部交通堵塞、環境污染、土地資源緊張等問題已為常態,而以地鐵為主的城市軌道交通憑借其高運能、低能耗、安全度高等優點,在各類大型城市中廣泛運行。截至2020年12月31日,全國開通運營城市軌道交通的城市共44個,運營線路共233條,線路長度7 545.5 km,車站4 660座,共開行列車2 528萬列次,累計客運量175.9億人次[1],可有效解決大型城市交通面臨的多種問題,同時帶來巨大的社會效益。同時,各類險性事件的發生對乘客的人身安全以及運營企業的財產安全造成嚴重威脅。
為解決以上問題,國內外學者開展大量研究[2]。近年來,自然語言處理技術趨向成熟,并在多個領域廣泛應用[3-5]。羅文慧等[6]對道路交通事故報告進行文本預處理,建立雙隱層適應卷積神經網絡,并通過樣本進行訓練,實現對安全風險源的辨識;李玨等[7]對建筑施工高處墜落事故報告進行特征提取,得到致因特征項、致因網絡及致因集合,利用詞云和網絡結構圖對結果進行展示;Li等[8]對美國天然氣管道事故報告數據進行建模,通過文本挖掘提取有效信息,探究天然氣管道事故嚴重程度和影響因素之間的時空相關性模式;Nasri等[9]運用文本挖掘中的情感和模糊詞方法挖掘視頻平臺中評論的安全風險問題,證實該方法可被制造商和消費產品安全組織用來從在線視頻中有效識別產品安全問題;Fa等[10]基于煤礦事故報告,采用文本挖掘技術建立煤礦人因分析分類系統,從多個角度識別人機交互系統框架中的層次結構關系;Xu等[11]利用文本挖掘技術設計翻譯管理框架,并提出信息熵加權的術語頻率,用于術語重要性評價,最終提取出影響建筑安全的核心因素。
現有研究針對行業事故報告,運用文本挖掘技術有效實現對風險或風險致因的挖掘和分析。但針對軌道交通領域,文本挖掘技術的應用研究較少,本文提出AFP-tree(Ameliorate Frequent Pattern-tree)算法,深度挖掘城市軌道交通運營日志中危險源與險性事件之間的強關聯規則,最后得到地鐵交通系統運營過程中的關鍵危險源集合,研究結果可為地鐵運營單位實現“事前”風險預防提供方向和依據。
運營日志作為地鐵運營過程中的關鍵數據,包括地鐵運營過程中所遇到的各種故障、突發事件、事件發生時間地點等多維度的信息記錄。這些信息通常是對事件的一段描述,不能直接作為數據挖掘的對象,需要進行數據預處理,將其轉化為適合算法分析的數據格式。
1)數據預處理流程
首先,地鐵運營日志的原始數據中包含大量的正常調度、定期檢查等信息,但上述信息與地鐵運營險性事件不相關,將其定義為干擾數據,并做刪除操作;對去干擾后的數據進行分詞,在分詞之前需要加載自定義專業術語詞典,以提高分詞準確率;最后進行去停用詞操作,以提高危險源辨識的準確性。具體流程如圖1所示。
2)干擾數據清理
選取上海地鐵軌道交通的運營日志作為原始數據,共m條,首先使用Python語言對該部分數據進行去干擾操作,最后剩余n條有效數據,刪除干擾數據的偽代碼如圖2所示。
3)Jieba分詞及去停用詞處理
本文借助Pycharm開發平臺,分詞使用Python中的Jieba庫進行。Jieba庫內置3種分詞辦法,本文選取更適合做文本分析的精確模式[12]。在對數據分詞前加載自定義專業術語詞典,用來提高分詞的準確性,為保障文本處理質量,共構建643個地鐵軌道交通危險源詞匯與326個地鐵軌道交通專業術語;分詞完成后進行去停用詞操作,刪除日志文本中與研究不相關的詞匯,以哈工大停用詞表為依據,結合地鐵運營特點,形成自定義停用詞表,共包含1 894個停用詞。具體處理結果見表1。
表1 Jieba分詞與去停用詞操作列舉Table 1 Lists of Jieba words segmentation and stop words removal operation
經過文本預處理,將地鐵運營日志轉化為可用于進行文本挖掘的格式,即可以輸入AFP-tree算法中進行定量分析。
經典的Apriori關聯規則算法缺點明顯,學者通過改進提出FP-growth算法[13],但FP-growth算法需要重復訪問樹節點,在數據量較大時算法效率依然不能滿足需求,本文借鑒FP-growth算法處理思想,并對其算法效率進行改進,提出AFP-tree算法,據此算法進行數據分析。
假設在日志文件預處理后,每條數據中的單詞個數為n,則其中連續2條數據表示如式(1)所示:
(1)
式中:Xi表示第i條數據,i∈(1,m);xj表示第j個單詞的嵌入,j∈(1,n),對于相同的單詞,用同1個xj表示。以此類推,可以將全部的單詞以xj的形式進行表示。
基于列車運營時的調度日志數據,闡述利用FP-growth算法對原始日志數據進行處理,并深入挖掘關聯規則的過程。首先,將獲取的日志運用前述方法和步驟進行數據預處理,產生日志數據的存儲形式,見表2。表中ID表示每條日志數據的編碼,xj表示第j個單詞的嵌入。將數據轉化為可以用FP-growth算法處理的格式后,需要構建1個FP樹,用以存儲數據。
表2 運營日志預處理后的事件描述形式Table 2 Event description forms after preprocessing of operation log
本文在計算過程中使用支持度和置信度2項指標作為數據處理過程中的判定依據,其中支持度用于計算數據關聯出現的概率,置信度用以挖掘文本中的強關聯規則,如式(2)~(3)所示:
(2)
(3)
式中:X,Y分別代表不同數據元素;P(XY)表示X和Y同時發生的概率;mXY表示X和Y同時發生的頻數;Mall表示總數據量;P(X|Y)表示Y發生的條件下X發生的概率;P(Y)表示元素Y發生的概率。
構建FP樹作為FP-growth算法的第1步,要先掃描全部數據,對所有元素項的頻數進行累加計數,然后根據設定的支持度,過濾掉不滿足支持度的數據,再對滿足的數據由高到低進行排序,生成頻繁項集事件元素表,設定支持度計數為2,所以在表3中重新排序后的x16、x17、x18等數據均被刪除,如表3所示。
表3 頻繁項集事件元素表Table 3 Event element table of frequent itemsets
FP-growth算法需要構建頭指針表,用以存儲全部元素項的出現頻數,該指針指向樹中對應元素項的首位節點,本文使用Python程序中的“字典”儲存頭指針表。最終構建結果如圖3所示。
圖3 構建FP樹Fig.3 Establishment of FP-tree
在構建FP樹后,要從FP樹中挖掘頻繁模式,由于FP-growth算法在產生條件模式基時,需要多次遍歷公共路徑,將占用大量計算機內存,同時使計算時間顯著延長[14-15]。為提高算法效率,降低算法復雜度,對FP-growth算法進行改進,提出AFP-tree算法,運用遍歷中先序遍歷的思想讀取FP樹,使取得頻繁1-項集的全部條件模式基僅需要掃描1次FP樹,AFP-tree算法產生條件模式基主要包括以下6個步驟:
1)搭建通用路徑(CP)并將初值設定為空,掃描結點x5,此時CP內存儲的是x5的前綴路徑,因為CP現在為空,所以x5的條件模式基同樣為空。
2)將x5存入CP,然后掃描結點x10,此時SP存儲的是x10的前綴路徑,所以x5是x10的1個條件模式基的1個條件模式基,支持度計數4,記為x5:4。
3)將x10存入CP,更新CP內容為x5x10。接著掃描x2,此時CP存儲的是x2的前綴路徑,所以x5,x10是x2的條件模式基,支持度計數3,記為x5,x10:3。
4)將x2存入CP,更新CP內容為x5x10x2。接著掃描x6,同步驟2)~3)可得出x6的前綴路徑,繼續掃描可得到x8的前綴路徑為x5,x10,x2,x6,x9,x4,x7:1,此時發現x8為終端結點,返回至最近分支處,遍歷未被掃描的分支結點x9,同時CP內容更新為x5x10x2x6。
5)繼續掃描x9的另一個子結點x12,得到x12的1個條件模式基x5,x10x2,x6,x9:1,同時更新CP內容為x5x10x2x6x9x12,然后掃描x15,得到x15的1個條件模式基x5,x10,x2,x6,x9,x12:1。
6)繼續掃描發現,x15是葉結點,返回到未被掃描的分支結點x10,以此類推,可全部掃描樹中剩余的子結點,并最終得到全部的條件模式基,見表4。
表4 通過條件模式基尋找頻繁模式Table 4 Finding frequent patterns by conditional pattern bases
AFP-tree算法對樹進行掃描即運用先序遍歷的思想,只需對FP樹所有結點掃描1次,便可獲得數據中所有頻繁1-項集的條件模式基,其中,算法的復雜度包括時間復雜度和空間復雜度,與樹的節點數一致,均為O(n),n為FP樹全部結點的數目。
本文采取實時剪枝的方法,僅保留滿足支持度的頻繁項集,將不滿足支持度閾值的項刪除,建立去冗余的條件FP樹,如圖4所示。
圖4 條件FP樹Fig.4 Conditional FP-tree
從表3及圖4的挖掘結果中,獲得頻繁模式:(x5,x10,x2,x6,x9:2),可確定x5,x10,x2,x6,x9之間為強關聯規則,即車門、晚點、上行、故障、終到之間存在強關聯規則,進一步得到(x5,x10:4),既車門、晚點之間存在更強的關聯規則。當挖掘的樣本量足夠大時,可出現更多的頻繁項集,進一步可得到完整的規則,最終得到造成地鐵運營風險事件的關鍵危險源。
地鐵運營調度日志由車站調度工作人員,在地鐵運營活動過程中實時記錄的某些情況發生時車站工作人員的行為、動作及事件狀態的文本描述,其中包括正常事件和險性事件相關的描述。本文文本挖掘的原始數據為某地鐵公司運營線路的2017—2019年地鐵運營調度日志。其核心字段“content”是對事件內容進行客觀記錄的字段。
實驗平臺選取Intel(R) Core(TM) i5-10210U CPU 2.11GHz、16G內存、Windows10、64位操作系統,數據處理在Pycharm軟件中運用Python語句完成。
1)數據預處理
首先對地鐵運營日志原始數據中的干擾數據進行清理,從102 834條原始數據中得到38 465條與造成運營風險事件有關的數據,去除干擾數據,結果見表5。
表5 數據去干擾結果Table 5 Results of data de-interference
運用Jieba庫對去干擾后的數據進行分詞及去停用詞操作,并對得到的數據進行詞向量的嵌入,預處理后的數據見表6。
表6 預處理后的數據描述Table 6 Data description after preprocessing
2)數據分析
將經過預處理后的運營日志數據輸入AFP-tree算法中,運用Pycharm運行工具進行數據分析,得出最終的事務頻繁模式,由于最終的事務頻繁模式規模較大,本文僅選取部分模式作為展示,見表7。
表7 最終的事務頻繁模式Table 7 Final transaction frequent pattern
通過AFP-tree算法計算得出各個關聯規則的置信度,通過多次實驗對比,本文數據在設定支持度為20%、置信度閾值為60%時,實驗可以取得較為理想的效果。
取置信度超過閾值的危險源為關鍵危險源,通過計算共辨識出25種關鍵危險源,計算結果輸出以詞云形式展現,如圖5所示。圖中字號越大,字體顏色越明顯,表示該危險源的置信度越高。置信度越高,表示該危險源導致風險事件的概率越大,需要重點防范與控制。
圖5 關鍵危險源詞云Fig.5 Words cloud of key hazard sources
根據置信度對25種關鍵危險源進行分級,見表8。以10%為1個間隔,共將危險源劃分為4個等級,I級表示最高等級,該范圍內的危險源需要重點防范與控制,Ⅳ級表示關鍵危險源分類后的最低等級,但仍然需要格外關注,防范其發生危險,以及與其相關的其他衍生危險事件。
表8 關鍵危險源等級劃分Table 8 Classification of key hazard sources
根據對地鐵運營調度日志的關聯規則進行分析,挖掘出的25種危險源中,主要集中在車輛、通號以及客觀原因(大客流、屏蔽門夾人、夾物等)中,進一步通過對關鍵危險源的分級,針對不同等級的危險源實施有區別的管控辦法。針對Ⅰ級危險源,應該對其實施重點管控,具體包括車門、屏蔽門、廣播、VOBC此類置信度高、易發危險的設施部件,同時注意由于天氣原因、重要節假日等導致的大客流問題;Ⅱ級與Ⅲ級危險源,主要為系統、硬件設備故障問題,可根據其具體故障頻次,結合某一硬件故障所導致的后果(主要以該車輛或者相關區域是否可以繼續運營為依據),安排定期巡檢、更換、維修等措施,預防危險的發生;針對Ⅳ級危險源,主要注意地鐵運營時車輛和車站內的乘客動態,系統及硬件問題可結合Ⅱ級與Ⅲ級危險源的處理辦法,同時車站工作人員要密切注意站臺乘客動向,尤其在客流量較大時,注意防范意外風險的發生。
3)改進算法與原算法效率對比
為驗證本文算法改進的有效性,選取10萬條未去除干擾數據的地鐵運營調度日志數據作為實驗數據,對FP-growth、Apriori和AFP-tree算法分別驗證其計算時間。實驗中每項數據由計算機運行8次后取平均值得出,在一定程度上避免由于計算機本身原因出現的偶然結果。
3種算法在數據類型和數據量完全相同條件下,支持度發生變化時算法的運行時間對比如圖6所示。對比最小支持度設置為0.1的條件下,樣本數據庫中數據規模逐漸增加時,3種算法的計算時長對比如圖7所示。由圖7可知,當實驗條件相同時,改變唯一變量,AFP-tree算法耗時更短,所以AFP-tree算法在挖掘關聯規則時有更好的效率優勢。
圖6 不同支持度下的算法效率對比Fig.6 Comparison of algorithm efficiency under different support degrees
圖7 不同數據規模下的算法效率對比Fig.7 Comparison of algorithm efficiency under different data scales
1)通過構建AFP-tree算法,對地鐵運營日志中的危險源進行深入文本分析,挖掘其中關鍵危險源并進行分級管控,通過實例證實該算法可有效應用于地鐵軌道交通危險源辨識工作中,對于實踐有現實指導意義。
2)通過實驗對算法的效率提升進行驗證,改進之后的算法相較于傳統算法效率得到有效提升,且數據規模越大、支持度越小時,算法效率優勢越顯著,可以對大規模的文本數據進行分析計算。