鐘敏慧 張婉露 李有儒 朱振峰 趙 耀
近年來,我國鐵路事業高速發展,在推動國民經濟發展中發揮著至關重要的作用.與此同時,鐵路安全問題也愈發受到重視.在大數據時代,如何利用鐵路事故歷史記錄數據發掘有用信息,建立事故預警機制,對于推動鐵路行業信息化,提高運輸效率,防范安全隱患具有重要意義.鐵路事故類型預測和事故致因分析是建立事故預警機制的兩個基礎環節.鐵路事故預測利用歷史事故記錄估計和判斷未來某種情況下是否會發生事故.鐵路事故成因分析通過分析事故發生時的客觀環境與人為因素,尋找造成事故的最可能原因,從而采取針對性的預警防護手段.因此,利用鐵路事故歷史記錄,采用數據挖掘技術發掘其中有用信息,進行鐵路事故類型預測與成因分析具有重大現實意義.
鐵路事故類型預測的本質是一個多分類問題.常用的多分類模型有邏輯回歸(Logistic regression,LR)[1]、支持向量機(Support vector machine,SVM)[2]和決策樹(Decision tree,DT)[3]等.文獻[4]利用決策樹算法進行煤與瓦斯的突出預測.然而,這類分類器主要適用于簡單、平衡的數據訓練,對于鐵路事故記錄這種復雜、類別失衡的高維數據,訓練較為困難,且預測結果不夠理想.集成學習能夠將多個模型集成以獲取更好的預測結果,對于不平衡數據的分類問題具有更好的有效性.常用集成學習模型主要包括隨機森林(Random forest,RF)[5]和梯度提升決策樹(Gradient boosting decision tree,GBDT)[6-7].RF 基于Bagging 思想[8],并行集成基學習器,模型簡單,計算開銷小;而GBDT 則是基于Gradient boosting 思想[6,9],對基學習器進行串行集成,對數據擬合能力很強.文獻[10-13]分別使用以上模型進行預測.
鐵路事故成因分析是對事故類型預測的反演.常用的事故成因分析方法有復雜網絡方法、灰色理論等.文獻[14]結合灰色綜合關聯度和信息熵,利用熵分析事件不確定性的原理,針對事故相關屬性的重要度進行分析.文獻[15]運用多維關聯規則提取技術找出事故成因關聯規則.上述事故成因分析方法對于值類別數較多的特征,運算較復雜.
此外,現有鐵路事故記錄數據存在嚴重的數據缺失問題,在進行鐵路事故類型預測和歸因前,首先需要對數據進行補全.選擇合適的補全方法對于提升預測結果的準確性有很大影響.目前,常用的補全方法主要包括均值填補法、最近距離填補法、回歸填補法等[16-17].然而,前兩種方法在某種程度上會影響樣本狀態分布,導致預測結果的偏差;回歸填補法僅適用于連續特征,對于離散特征并不適用.
針對上述問題,本文提出了一種基于GBDT的鐵路事故類型預測及成因分析算法.首先,針對鐵路事故數據缺失問題,提出了一種基于屬性分布概率的補全算法,該算法最大程度地保持了原有的數據結構,從而降低數據缺失對于類型預測造成的影響.其次,提出了一種基于Bagging 的集成GBDT模型,針對類別失衡的鐵路事故歷史記錄數據能夠進行高效訓練,得到準確的事故類型預測結果.同時,結合統計學習理論,根據GBDT 預測模型中的特征重要度排序,實現事故致因分析.算法整體框架如圖1 所示.通過在公開的鐵路事故數據庫上進行實驗,驗證了本文所提算法的有效性.

圖1 基于GBDT 的鐵路事故類型預測及成因分析框架Fig.1 The framework of GBDT-based railroad accident type prediction and cause analysis
在本節中,我們主要介紹本文所提出的基于屬性分布概率的缺失數據補全算法.其中,第1.1 節給出本文所用符號的說明.第1.2 節對算法進行具體描述.
為便于后文闡述,首先對本文所用的一些符號進行說明.令D∈RN×(p+1)表示記錄條數為N的鐵路設備事故數據集,其中每條記錄可表示為ddd=[XXXi,yi],0≤i ≤N.令X=[XXX1,XXX2,···,XXXN]T∈RN×p表示N條記錄的p維特征空間,其中表示每一條記錄的p維特征向量.Y=[y1,y2,···,yN]T∈RN×1表示N條事故記錄的類型向量,其中,yi∈{1,···,C},C為事故類型總數量.令xj表示第j個特征,1≤j ≤p,使用aj表示xj的取值.若xj是離散的類別型屬性,則類別aj∈{1,···,k},其中k為xj可取類別值的數量.
由于客觀環境及人為原因等干擾因素,導致鐵路事故記錄數據存在缺失,對后續事故類型預測建模及成因分析有不利影響.因此,需對鐵路事故數據進行缺失補全.
目前常用的補全方法包括均值補全、眾數補全等.然而,由于鐵路事故記錄數據中的屬性多為離散的類別型屬性,常規補全方法并不適用.例如,均值補全適用于連續的數值型屬性;眾數補全適用于數據本身缺失較少,其中需補全的屬性的取值分布有明顯偏好的情況,對于取值分布較均衡的屬性,使用眾數補全會改變原有屬性取值的概率分布.
考慮到上述問題,本文提出了一種基于屬性分布概率的補全算法.算法流程由算法1 給出.針對鐵路事故記錄數據中取值分布較均衡的離散、類別型屬性xj,計算現有數據下該屬性所有取值aj=n出現的概率,基于概率進行缺失值的填補,從而在保持屬性原有的分布的情況下,完成對鐵路事故數據的補全,降低數據缺失對事故類型預測的影響.
計算公式如下:


鐵路事故預測本質上是一個多分類問題.由于鐵路事故記錄數據類別不均衡且屬性多為離散值屬性,GBDT 在處理這類數據時具有很好的有效性.本章節詳細介紹了基于改進GBDT 的鐵路事故類型預測模型.其中,第2.1 節簡要介紹了GBDT 模型,第2.2 節對本文所提模型進行詳細闡述.
GBDT 是基于Boosting 算法[9]的集成決策樹模型.Boosting 算法依據上一次訓練的殘差生成基學習器.GBDT 在Boosting 的基礎上,在殘差減小的梯度方向上建立新的決策樹[6-7].GBDT 模型可表示為:

其中,T(x;Θm) 表示決策樹,Θm表示樹的參數,M為樹的個數.
決策樹T(x;Θm) 的損失函數用L(·) 表示,在GBDT 中,損失函數為平方誤差函數.用Tm-1(x)表示當前決策樹,GBDT 通過最小化損失函數來確定下一棵決策樹的參數.

由于鐵路事故樣本存在類別失衡的問題,使用單一GBDT 難以滿足分類需求.集成學習中的Bagging 算法能夠隨機有放回地選擇訓練數據,構建基學習器,然后將多個基學習器組合,使用投票法或簡單平均法計算分類結果[8,18-19].文獻[20]和[21]都是通過將多個分類器集成,以獲得更好的分類效果.本文參考文獻[20],提出一種基于Bagging 的集成GBDT 算法,以GBDT 作為基學習器,利用Bagging 算法將多個GBDT 集成,構造集成GBDT 模型,獲得比單一GBDT 優越的分類效果,克服樣本類別失衡對預測造成的影響,實現鐵路事故類型的精確預測.
算法流程如算法2 所示.對于輸入的訓練集(X,y),利用Bootstrap 算法[8]以采樣率α隨機采樣Mg次,得到Mg個訓練子集,從而構造Mg個GBDTt,t=1,···,Mg;對于每一個GBDTt的預測值,利用投票法,選擇Mg個GBDTt的預測結果中出現次數最多的預測值作為集成GBDT 的最終預測結果.

鐵路事故致因分析是鐵路事故類型預測的反演,通過對鐵路事故發生時各種因素的分析,能夠推演事故發生的過程和解析事故因果關系,以建立事故預警機制,進行安全防范.由于鐵路事故記錄數據特征維度較大,傳統致因分析方法[14-15]并不適用.在進行GBDT 模型訓練時,可以輸出特征重要度,以分析哪些特征對預測結果存在關鍵影響.因此,本文結合統計分析的方法,基于GBDT 的特征重要度排序[6],進行鐵路事故致因分析.
對于某一特征xj的全局重要度,通過該特征在單棵決策樹中重要度的平均值來衡量,如式(4)所示.


其中,L表示樹的葉子節點數量,L-1 即為樹的非葉子節點數量,vt表示與節點t相關聯的特征,是節點t分裂之后的平方損失的減少值[6].
分析可得,非葉子節點t在分裂時的越大,說明特征越重要.根據重要度排序篩選出特征后,按排序將特征分組累加代入預測模型重新訓練,以驗證選擇的可靠性.
本文通過在美國聯邦鐵路管理局(Federal Railroad Administration,FRA)[22]公開的鐵路設備事故數據上進行實驗,驗證了本文所提算法的有效性.
實驗數據采用FRA 對外公布的2016 年至2018 年鐵路設備事故數據.數據集包含事故類型、事故發生具體時間、地點、日期、鐵路編號等信息.原始數據集統計信息見表1,共5 434 條記錄,包含144 個屬性和11 種事故類型.11 種事故類型描述如表2 所示,其中,類型1 (Derailment)記錄數量最多,類型2 (Head on collision)、類型6 (Broken train collision)記錄數量極少.

表1 原始數據描述Table 1 Description of original data

表2 事故類型描述Table 2 Description of accident types
原始數據存在嚴重屬性缺失情況,如表3 所示.本文首先通過多次數據清洗,去除部分與實驗結果無關性較強的屬性,最終保留69 個屬性.這69 個屬性中,共有23 個屬性存在缺失,缺失屬性均為類別型屬性.本文采用眾數補全和第1.2 節基于屬性分布概率的補全算法兩種方法進行數據補全.統計每一個缺失屬性取值的概率分布,針對缺失屬性類別分布較均衡的屬性,使用本文所提算法進行補全;對于缺失值較少或類別分布有明顯偏好的屬性,采用眾數補全.針對補全后的數據,對類別型屬性進行編碼,為后續模型訓練做準備.經過預處理后數據集的統計信息描述如表4 所示.

表3 數據集部分示例Table 3 Examples of the dataset

表4 預處理后數據描述Table 4 Description of preprocessed data
本文采用交叉驗證的方式,隨機選擇80 %作為訓練集,20 %作為測試集.
本文通過在美國聯邦鐵路管理局(Federal Railroad Administration,FRA)[22]公開的鐵路設備事故數據上進行實驗,驗證了本文所提算法的有效性.本文采用均方誤差函數(Mean square error,MSE) 作為補全算法有效性的評價標準,其定義如下:

其中,NEMP表示手動設置的空值的總數,ajt表示原始值,表示插補后的值.
對于鐵路事故類型預測模型,本文采用準確率Accuracy、查準率Precision、查全率Recall和F1-score 作為評價指標.
分類準確率計算公式為:

其中,C表示所有事故類型的總數;Ni表示事故類型為i的樣本個數,N表示樣本總個數;TPi表示被正確預測為第i類的個數;TNi表示被正確預測不為第i類的個數;FPi表示被錯誤預測為第i類的個數;FNi表示被錯誤預測為不為第i類的個數.
為驗證基于屬性分布概率的補全算法的有效性,本文將所提算法與插值法(Interpolation completer)、眾數補全(Mode completer)兩種補全方法進行比較.基于屬性分布概率的補全算法最大程度地保持了原始數據的分布結構.以特征TRNDIR為例.特征TRNDIR 有4 種取值,aj∈{1,2,3,4}表示火車運行的四個方向.表5 展示了使用三種方法進行補全后與補全之前4 種取值的概率分布.從表5 可以看出,使用插值法與眾數補全法補全后,造成該特征某一取值過多,破壞了原本的數據分布,而本文所提算法完全不改變原有的概率分布,從而減少了由于數據缺失對鐵路事故類型預測帶來的影響.
為進一步定量分析基于屬性分布概率的補全算法的有效性,本實驗以均方誤差函數(MSE)作為評價標準,對3 種補全方法進行對比.以TRNDIR、ENGHR、CDTRHR (特征描述見表3)三個特征為例,隨機從數據集中選擇100 條記錄,設置以上三個特征的值為空,用三種補全算法依次進行補全,記錄每一種補全算法MSE.共進行10 次實驗,取10 次MSE 之和的平均值進行對比,實驗結果如圖2所示.由圖2 可得,基于屬性分布概率的補全算法MSE 明顯低于其他兩種方法,表明本文所提算法具有很好的有效性.

圖2 三種補全方法結果對比Fig.2 Comparison of three methods results
為驗證構造基于Bagging 的集成GBDT 模型時不同因素的影響,本節對不同參數下集成GBDT 的效果進行了對比,以確定進行鐵路事故類型預測任務時的最佳參數設置.
基于Bagging 的集成GBDT 模型需要調優的參數可分為兩類,包括Bagging 框架參數和GBDT 參數,GBDT 參數又包括Boosting 框架參數和決策樹參數.其中,Bagging 框架參數包括最大迭代次數,即集成的GBDT 數量,以及最大采樣率;Boosting 框架參數包括最大迭代次數,即子樹的最大數量,以及學習步長等;決策樹的參數主要包括樹的深度.
首先,利用網格搜索法對單一GBDT 的參數進行調優.經過調優后,GBDT 的迭代次數為100,學習步長為0.2,決策樹最大深度為6.此時GBDT 在測試集上的預測準確率為84.1 %.
得到最優GBDT 參數組合后,對集成GBDT的Bagging 框架參數進行調優,考慮運行效率和分類性能,以選擇合適的GBDT 數量及采樣率.在實驗中,首先確定GBDT 個數,分別用5、10、15、20、25、30 個GBDT 進行集成,此時最大采樣率設置為0.9,以在測試集上預測結果的準確率和模型訓練時間作為評價標準,結果如圖3 所示.數量為1時表示不進行集成,僅用單一GBDT 進行預測.可以看出,當GBDT 個數增加時,模型預測準確率呈上升趨勢,表明使用Bagging 進行集成的方法確實有效.當GBDT 個數為15和25 時,模型預測準確率最高,達到85 %~ 85.2 %,比單一GBDT 預測準確率高出約1 個百分比,但使用15 個GBDT 訓練的時間是使用25 個GBDT 訓練時間的1/2.綜合考慮分類效果和性能,最終預測模型使用15 個GBDT 進行集成.為進一步確定采樣率,分別將采樣率設置為0.6、0.7、0.8、0.9、1.0 進行實驗,GBDT的數量設置為15,以預測結果的準確率作為評價標準.最終結果如表6 所示.可以看出,當采樣率為0.9 時,模型預測準確率最高.

圖3 不同GBDT 集成個數下分類準確率Fig.3 Accuracy of classifiers with different number of GBDT

表6 不同采樣率下集成GBDT 分類準確率Table 6 Accuracy of classifiers with different sampling rates
為進一步驗證基于Bagging 的集成GBDT 模型的有效性,本實驗中使用相同的訓練集,分別對DT[3]、RF[5]、ET[8]、GBDT[6-7]和集成GBDT (Ensemble GBDT)進行訓練,在相同測試集上進行測試,對比預測結果.共進行10 次實驗,取10 次結果的平均值作為最終結果.其中,根據第4.4 節實驗,集成GBDT 的參數設置為:集成的GBDT 個數為15,采樣率為0.9,每個GBDT 的迭代次數為100,學習步長為0.2,決策樹最大深度為6.
分類結果用混淆矩陣表示,如圖4 所示.分類效果如表7 所示.從表7 可以看出,單一GBDT 的分類F1-score 較其他3 種分類器高出10 %~ 14 %;進行集成后查全率和召回率比單一GBDT 提高了約1 %,效果最佳.

圖4 混淆矩陣Fig.4 Confusion matrix

表7 各分類器性能對比Table 7 Performance comparison of classifiers
因集成GBDT 在每個GBDT 訓練時隨機選擇訓練樣本,降低了樣本類別失衡造成的影響,且將Bagging 與Boosting 結合的方式充分考慮了模型過擬合問題,提高了模型的泛化能力,從而提高了分類的準確率,故而效果最優.
本文根據特征重要度進行特征選擇,將選擇特征按重要度排名分組累加,代入模型重新訓練,以進行事故致因分析.為驗證特征選擇的有效性及可靠性,在本節實驗中進行了不同特征組合對事故類型預測結果的對比.將單一GBDT 訓練中,特征重要性大于0.001 的特征篩選出來用于集成GBDT 模型訓練,訓練后的模型在測試集上分類準確率提高了1.6~1.8 個百分點,表明基于GBDT 的特征選擇具有一定的可靠性.為進一步分析所選特征的正確性,將特征按重要度降序排列,以十個為一組依次累加代入集成GBDT 模型訓練,結果如圖5 所示.實驗結果表明,隨著特征數量的增多,分類準確率呈現上升趨勢且逐步逼近于使用全部特征訓練所得準確率,說明所選特征符合重要度排序.當特征數量大于30 時,分類準確率趨于平穩,表明之后增加的特征對預測結果幾乎沒有影響,進一步驗證了特征符合重要度排序.

圖5 不同特征數量下預測結果Fig.5 Prediction results of classifier with different features
為進行鐵路事故成因分析,本文選擇排名前15 的特征進行總結,如表8 所示.將這15 個特征按共性可劃分為地理位置(Location)、速度(Speed)、里程(Mileage)、天氣(Weather)、載貨(Freight)、監管人員因素(Manager)六大類.以脫軌(Derailment)和碰撞(Collision)兩類事故為例,綜合進行事故成因分析,結果如圖6 所示.由圖6 可知,鐵路事故發生與地理位置、列車行駛速度等有重要聯系,溫度和人員因素與事故發生也有一定聯系.結果符合常規事故成因,具有可靠性.

表8 重要度排名前15 的特征Table 8 Features of top 15 in importance

圖6 兩類事故致因中不同因素的比例Fig.6 Proportion of different factors in causes of two types of railroad accidents
本文提出了一種基于GBDT 的鐵路事故類型預測和成因分析模型.針對鐵路事故記錄數據缺失的問題,提出基于屬性分布概率的補全算法,以保持原有數據結構,減少數據缺失對預測結果的影響.由于鐵路事故數據存在類型失衡等問題,對預測結果也存在很大影響.為此,本文基于Bagging 對GBDT 進行集成,提高了單一GBDT 的預測精度.同時,結合統計分析的方法,根據特征重要度進行特征選擇,進而對特征進行分析和總結,推測鐵路事故成因,減少了人力的投入.實驗證明,本文方法具有很好的可靠性和有效性.