文/王凱 馮翔
(中國民用航空中南地區(qū)空中交通管理局通信網(wǎng)絡(luò)中心 廣東省廣州市 510405)
隨著云計算、大數(shù)據(jù)等技術(shù)的發(fā)展,海量數(shù)據(jù)的存儲和計算已經(jīng)不再是制約數(shù)據(jù)分析和處理的主要因素了。據(jù)統(tǒng)計,中國民用航空中南地區(qū)空管局及下屬十二個分局站所管轄的航班量每日約為10000 多架次,其中中南地區(qū)起降的航班約為5000 架次。而每個航班所產(chǎn)生的航班軌跡數(shù)據(jù)每日約為幾百GB。以往由于硬件和技術(shù)的制約,航班歷史飛行軌跡數(shù)據(jù)未能得到充分的利用,隨著技術(shù)的發(fā)展,尤其是大數(shù)據(jù)處理技術(shù)的發(fā)展,使得海量的歷史航班軌跡數(shù)據(jù)的分析成為可能。
機器學(xué)習(xí)是當(dāng)今發(fā)展最熱門的技術(shù)之一,它屬于計算機科學(xué)與統(tǒng)計學(xué)的交叉學(xué)科,是實現(xiàn)人工智能的核心。在近些年被廣泛運用于各大領(lǐng)域,解決了許多以前無法解決的現(xiàn)實問題。機器學(xué)習(xí)可通過對算法的優(yōu)化,在大量訓(xùn)練數(shù)據(jù)集中選擇最接近最優(yōu)解的算法模型,模型建立后,可通過模型對實際中可能發(fā)生的結(jié)果進行預(yù)測。例如機器學(xué)習(xí)中的監(jiān)督學(xué)習(xí)可通過大量數(shù)據(jù)集的訓(xùn)練完成對圖像內(nèi)容的識別。通過機器學(xué)習(xí)對歷史軌跡數(shù)據(jù)的分析,能完成以前想做而做不了的事情,對實際工作具有重要意義。
近年來,與軌跡相關(guān)的技術(shù)陸續(xù)被提出與應(yīng)用,例如軌跡預(yù)處理、軌跡數(shù)據(jù)管理等。國內(nèi)外學(xué)者在軌跡預(yù)測研究方面均取得了相應(yīng)的成果。如陳志杰[1]將航班飛行過程分為多個飛行階段,通過在各個階段建立運動學(xué)和動力學(xué)方程并求解完成航班軌跡的預(yù)測。張軍峰等[2]提出一種基于飛行基礎(chǔ)性能參數(shù)(Base of Aircraft Data, BADA)和航空器意圖的航班軌跡預(yù)測方法。Hansen[3]等提出基于混合系統(tǒng)理論對航班爬升階段軌跡預(yù)測方法,并利用協(xié)方差自適應(yīng)調(diào)整的進化策略對模型進行優(yōu)化。雖然這些方法都取得了一定研究成果,但是存在飛行過程階段并非理想模型、飛機性能參數(shù)選擇偏差大等因素的局限,從而導(dǎo)致預(yù)測結(jié)果不太理想。本文提出了基于歷史飛行軌跡和機器學(xué)習(xí)的航班軌跡預(yù)測算法,歷史軌跡是考慮了飛行過程中真實環(huán)境因素產(chǎn)生的,已被證明是可行高效的飛行路徑。提出算法的主要思想是以K 臨近算法的數(shù)學(xué)理論為基礎(chǔ)。并通過提取的特征值和真實軌跡數(shù)據(jù)進行模型訓(xùn)練,并比較多個K 參數(shù)下的模型準(zhǔn)確度,得到最優(yōu)參數(shù)模型。與傳統(tǒng)方法相比,基于真實軌跡數(shù)據(jù)能得到較高的預(yù)測精度。
目前大數(shù)據(jù)的處理平臺主要分為兩類,一類是由Alibaba、Amazon 等云服務(wù)提供商提供的大數(shù)據(jù)處理服務(wù),如Alibaba 的MaxCompute,Amazon 的EMR服務(wù)。另一類是基于Apache 基金會的頂級開源項目Hadoop 生態(tài)提供的大數(shù)據(jù)處理組件,例如MapReduce、Hive、Pig 等。
圖1:大數(shù)據(jù)處理平臺網(wǎng)絡(luò)圖
圖2:KNN 算法示圖
圖3:歷史軌跡數(shù)據(jù)結(jié)構(gòu)圖
本文所使用的大數(shù)據(jù)處理平臺是Apache 基金會提供的基于Hadoop 生態(tài)的大數(shù)據(jù)處理組件。其中底層數(shù)據(jù)存儲采用HDFS(Hadoop Distributed File System),它是一種分布式的文件存儲系統(tǒng),主從結(jié)構(gòu),其中主節(jié)點(NameNode)主要用于記錄每個文件所在的從節(jié)點的信息。從節(jié)點(DataNode)是實際保存數(shù)據(jù)文件的位置。它將大文件以128M 為間隔分割成多個數(shù)據(jù)塊(Block)存儲在多個從節(jié)點上,從而提高數(shù)據(jù)的訪問速度,然后利用數(shù)據(jù)塊的冗余度提高數(shù)據(jù)的高可用性,默認(rèn)冗余數(shù)是3。任務(wù)調(diào)度采用Yarn平臺。它是一種分布式的任務(wù)調(diào)度系統(tǒng),也是主從結(jié)構(gòu),主節(jié)點(ResourceManager)作用是接收客戶端的任務(wù)請求和資源的分配。從節(jié)點(NodeManager)主要是得到資源并執(zhí)行相應(yīng)的任務(wù)。數(shù)據(jù)庫采用HBase,它是基于HDFS 之上的列存儲的數(shù)據(jù)庫產(chǎn)品,相比傳統(tǒng)RDBMS,缺點在于它不支持事務(wù)和索引,優(yōu)點在于它基于廉價的硬件設(shè)備能通過集群擴展而存儲大量數(shù)據(jù)(TB、PB 級)且獲得較好的訪問速率,它主要由行鍵(Rowkey)和列族(CulumnFamily)組成。行鍵相當(dāng)于一條數(shù)據(jù)的唯一標(biāo)識,列族可由多個屬性值組成,用于存放實際需要存放的信息。
表1:不同K 值下預(yù)測值和實際值的誤差比例
表2:各航路點預(yù)測值和實際值誤差對比
本文采用四臺CentOS7操作系統(tǒng),內(nèi)存8GB,CPU 為2*2GHz,硬盤100G,搭建一套全分布式的大數(shù)據(jù)處理平臺。其主要結(jié)構(gòu)如圖1 所示。
機器學(xué)習(xí)是一門多領(lǐng)域交叉學(xué)科,主要用于通過計算手段,基于大量數(shù)據(jù)構(gòu)建數(shù)據(jù)模型,利用經(jīng)驗來改善系統(tǒng)自身的性能。目前機器學(xué)習(xí)按學(xué)習(xí)的方式分類主要包括監(jiān)督學(xué)習(xí)、非監(jiān)督學(xué)習(xí)、半監(jiān)督學(xué)習(xí)、強化學(xué)習(xí)。按算法類似性分為:回歸算法、基于示例的算法、決策樹算法、神經(jīng)網(wǎng)絡(luò)算法、深度學(xué)習(xí)算法等。
本文將航跡預(yù)測看作一個分類問題。因為對某個特定航班的航跡的預(yù)測,可通過將此航班的部分特征提取出來,從歷史航跡中找到與此航班特征最相似的航跡數(shù)據(jù),并將此航跡數(shù)據(jù)近似看為此航班的飛行軌跡。具體做法是選擇一批樣本數(shù)據(jù),提取與軌跡相關(guān)的重要特征值,建立特征值與實際結(jié)果的數(shù)學(xué)模型,通過模型,將特征值將新數(shù)據(jù)與樣本數(shù)據(jù)進行計算,找到歐式距離最近的K 個值。
其公式表示如下:
目前提取的主要特征值為航路點間的距離、飛行的起始高度、飛行的起始速度,預(yù)測的值為航路點間的飛行時間、下一個航路的點速度、下一個航路點的高度。即每一次輸入數(shù)據(jù)代入樣本空間進行計算,選擇距離最近的分類,如圖2 所示。
從歷史中找到最接近的K 個軌跡數(shù)據(jù),并將K 個軌跡數(shù)據(jù)劃分同一類。分類的多少并不與模型的正確率成正比關(guān)系,正確率主要跟實際的情況和特征值的選擇有關(guān)。通常的做法是取n 個K 值,進行訓(xùn)練,將正確率最大的K 值設(shè)為模型最優(yōu)參數(shù)。或者加大訓(xùn)練集,不斷進行調(diào)優(yōu),從而得到準(zhǔn)確率最高的參數(shù)模型。
傳統(tǒng)的機器學(xué)習(xí)任務(wù)一般流程為:獲取數(shù)據(jù)、數(shù)據(jù)預(yù)處理、訓(xùn)練模型、模型評估、預(yù)測和分類幾個步驟。此部分也將從以上幾個步驟介紹模型的實現(xiàn)。
本文的數(shù)據(jù)集為航班信息處理系統(tǒng)所記錄的航班歷史過點時間數(shù)據(jù)。主要包括航班的起飛時間、落地時間以及航班通過重要航路點的時間。首先通過航路點的名稱關(guān)聯(lián)到航路點信息表,找到航路點的經(jīng)緯度信息。根據(jù)經(jīng)緯度信息,可使用SQL SERVER 自帶的Geography 對象及其內(nèi)置函數(shù)計算出航路點之間的距離(單位:米)。通過過航路點的實際時間差計算出實際飛越兩點之間的時間差(單位:秒)。對無效數(shù)據(jù)(無實際過點時間、繞飛等情況)進行過濾處理。處理完成后的數(shù)據(jù)結(jié)構(gòu)如圖3 所示。
其中第一列為記錄的為數(shù)據(jù)量序號、第二列為航班的ID,第三列及第四列分別為起飛機場和落地機場、第五列為飛行執(zhí)行時間,第六列、第七列、第八列分別為飛行的高度(m)、速度(km/h)、距離(km)。第九列、第十列、第十一列分別是前一個航路點到下一個航路點的飛行時間、實際飛行高度和實際飛行速度。
圖4:訓(xùn)練數(shù)據(jù)預(yù)測值與訓(xùn)練數(shù)據(jù)實際值時間差
圖5:訓(xùn)練數(shù)據(jù)預(yù)測值與訓(xùn)練數(shù)據(jù)實際值高度差
圖6:訓(xùn)練數(shù)據(jù)預(yù)測值與訓(xùn)練數(shù)據(jù)實際值高度差
數(shù)據(jù)預(yù)處理完成后,通過Sqoop 工具,將數(shù)據(jù)導(dǎo)入到Hbase 中。使用Sqoop 的好處是可將數(shù)據(jù)導(dǎo)入轉(zhuǎn)換成一個MapReduce 任務(wù),調(diào)用Hadoop的集群底層任務(wù)調(diào)度系統(tǒng)將數(shù)據(jù)保存在各個子節(jié)點中。相比較其他ETL 工具,Sqoop 對Hadoop 生態(tài)具有良好的兼容性,并且MapReduce 任務(wù)無需考慮數(shù)據(jù)量大小問題,比較適合數(shù)據(jù)量較大的應(yīng)用場景。
本文采用了基于python 的機器學(xué)習(xí)庫Sickit-Learn,它支持包括分類、回歸、聚類、降維四大機器學(xué)習(xí)算法,還包括了特征提取、數(shù)據(jù)處理、模型評估三大模塊。本文采用了2019年10月中南區(qū)域所有航班的歷史過點時間。經(jīng)過數(shù)據(jù)的預(yù)處理后的有效數(shù)據(jù)一共二百多萬條數(shù)據(jù)。采用Python 的數(shù)據(jù)分析基礎(chǔ)包Numpy 及Pandas將數(shù)據(jù)轉(zhuǎn)換成數(shù)組對象,將其中80%作為訓(xùn)練數(shù)據(jù),將20%作為預(yù)測數(shù)據(jù)。在訓(xùn)練模型中將參數(shù)特征值中距離、起始高度、起始速度作為輸入數(shù)組,將下一點的飛行時間、高度、速度作為輸出結(jié)果進行訓(xùn)練。然后通過取不同的K 值來建立不同的訓(xùn)練模型。比較在不同的K 值下訓(xùn)練模型的準(zhǔn)確率,將比較結(jié)果通過Python 的matplotlib 庫進行圖形化展示。
通過不同K 值訓(xùn)練出的模型,將訓(xùn)練數(shù)據(jù)的輸入值通過模型可算出的預(yù)測值,然后將預(yù)測值與訓(xùn)練數(shù)據(jù)的實際輸出值進行比較,將比較的誤差值作為模型的評估標(biāo)準(zhǔn),當(dāng)K=1 時,其預(yù)測的飛行時間、飛行高度、飛行速度與實際的飛行時間、飛行高度、飛行速度誤差值(飛行時長30s 內(nèi)、飛行高度100m 內(nèi)、飛行速度50km/h內(nèi))比例分別如圖4、圖5、圖6 所示。
同理分別算出K 取值1 到10 的訓(xùn)練數(shù)據(jù)的預(yù)測值和實際值的,以及預(yù)測數(shù)值與預(yù)測數(shù)值的實際值的比較結(jié)果表1 所示。
通過訓(xùn)練值和預(yù)測值的結(jié)果來看當(dāng)K=1 時,預(yù)測的時間、距離、高度準(zhǔn)確率最高,即可知對于此數(shù)據(jù)集,K=1 是最優(yōu)參數(shù)模型。
基于K=1 模型,從歷史數(shù)據(jù)中選擇一條完整航跡,將實際飛行的時長、高度、速度分別表示為實際值,將初始點與下一點的距離、高度、速度作為初始輸入值,即可得到下一點的預(yù)測飛行時長、高度值、速度值,依次計算可得到整條航跡數(shù)據(jù)如表2 所示。
由表2 可知,航班在此航路段的飛行總時長為2004s,預(yù)測結(jié)果為2186s,預(yù)測與實際飛行總時長相差182s。在速度和高度的對比中,高度誤差最大達到了1074 米和74Km/h,出現(xiàn)這種情況的原因可能與選擇的訓(xùn)練集有關(guān),在數(shù)據(jù)集中與實際預(yù)測的輸入值得特征值相差較大的情況下,部分預(yù)測值可能偏差也較大。
航班軌跡預(yù)測是空中交通管理系統(tǒng)的基礎(chǔ)技術(shù),針對現(xiàn)有航班計劃軌跡預(yù)測方法的不足,在已有的歷史軌跡數(shù)據(jù)的基礎(chǔ)上,提出了一種基于歷史軌跡數(shù)據(jù)和機器學(xué)習(xí)方法的軌跡預(yù)測算法。運用K臨近算法對歷史軌跡數(shù)據(jù)進行建模,利用機器學(xué)習(xí)算法評估模型參數(shù),得到了最優(yōu)參數(shù)模型。通過預(yù)測值和實際值得比較證明了此算法的正確性和精度。
同時,為提高航跡預(yù)測的準(zhǔn)確度,下一步研究的重點是:
(1)增加其他相關(guān)的特征值、例如機型、氣象數(shù)據(jù)等。
(2)增加訓(xùn)練數(shù)據(jù)量,將訓(xùn)練數(shù)據(jù)提高到半年或一年數(shù)據(jù),從而建立更高精度的算法模型。