2020中國高校計算機大賽·華爲雲大數據挑戰賽-數據分析(二)

2020中國高校計算機大賽·華爲雲大數據挑戰賽-數據分析(二)

哈嘍,小夥伴們好久不見,這幾個星期由於個人原因,都沒時間做比賽,直到最近幾天開始做了下,趁週日寫下分享記錄,分數雖然不高,但是分享出來一些清洗數據和特徵工程的看法,希望對大家有所幫助和啓發。
這裏繼續上次的分析,上一篇我們主要分析了數據的結構,現在我們着重看下數據的gps。

一、行船軌跡

這裏我畫了幾張相同trace的行船記錄,看看他們的軌跡是否一致,爲了和test保持一致,我畫了出現在test裏面的trace.
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
上面的軌跡圖可以看出,一些軌跡還是比較規整的,但是一部分軌跡是存在不一致的,有的船可能因爲總總原因,並不是按原路線行駛,甚至會有提前登陸的情況,這種情況在test可能也會發生。爲此 我們在看看test裏面截斷的路線是怎樣的

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
從test裏面的gps軌跡可以看出來,一半截取的是前面的一小段,而後的記錄幾乎沒有,這就需要我們的模型能夠從test裏面識別出完整的路勁,以及當前航道的目的地是哪裏,這樣才能準確預測到港時間。
從另一個角度來說就是通過test被截取的gps軌跡數據,能夠在train裏面找到相近的gps軌跡數據,從而找出這段軌跡對應的完整路勁。當然 通過trace字段也可以粗略知道軌跡,但是可能港口的名字有誤差並不統一,或者說實際到港的目的地與trace並不相符,實際路勁也是有差別的,需要好好做數據清洗的工作。

二、數據提取

1、首先我們從20G的數據中,先通過流的方式逐一讀取,由於test裏面沒有vesselNextport等字段,所以我暫時把這些字段都刪除了,並對一些數值特徵進行了類型轉化,最大化在不損失精度的情況下壓縮數據,下面是初步壓縮後的信息。可以看到數據已經從原來的20G變成了5G以內。
在這裏插入圖片描述
2、第二步就是對我們抽取的數據進一步壓縮,通過觀察數據我們發現,一條船是可以有多個訂單的,所以可能存在多個訂單的狀態全是一樣的,這個相當於重複數據,同時存在一個訂單在同一時間有多個一模一樣重複的數據,所以我們可以通過vesselMMSI和timestamp 這兩個字段去重,只保留一條船的運行數據,當然去重前要對訂單和時間排序,這樣才能保證保留一個船上同一個訂單的完整記錄。
去重之後我們的數據瞬間減少到了1G以內,這個對於普通的筆記本電腦內存都是可以足夠操作的。

三、觀察數據

接下來我們對數據觀察一下,看看有什麼規律。
Label問題
1、首先題目是要我們預測到港時間,那麼怎樣纔算到港呢,這裏我們截取了一個訂單的最後幾條記錄,發現船的經緯度已經不在發生什麼改變,speed也是0的狀態,但是該訂單仍然在記錄,並且方向在不斷改變,從這裏結合實際情況我們能猜想到,該運單船隻應該是遇到了塞港,導致需要不斷變換方向,緩慢移動到目的地。但是根據官方的說明,其實這已經算是到港了。我們觀察到這前後的時間差長達4個小時之久,那麼如果我們取記錄的最後一條log作爲到港時間,就顯的不太合理,這會與官方給的時間上有比較大的誤差。所以在製作label的方面,我們可以考慮通過行船的狀態比度speed爲0,或者經緯度不在劇烈改變,或者距離目標港口一定距離等一系列方式,判斷實際的到港。
在這裏插入圖片描述
軌跡問題
2、test中的trace 在trian裏面並不是全都有,但是目的港口相同的或者相識的軌跡是存在的,所以我們從訓練集中提取軌跡相似的數據進行訓練就可以達到比較好的效果,保證訓練集和測試集的一致性。
我們先對trace相同的trian中的數據做一個label的平均,看看不同trace和相似trace的分佈差異性。
在這裏插入圖片描述
從上圖我們可以看到,相似trace即目的地和始發地相識或者相近的trace,他們的平均用時是差不多的,所以我們在篩選數據的時候,可以把相近的數據也拿出來,擴大訓練樣本。當然也可以對這些相似的trace或者用時相近的trace做一個分箱,將相近的數據作爲同一類別特徵,輸入到模型當中,相當於衡量了相似度。
對於相似度計算,其實有很多方法,比如直接把路由信息做KNN聚類,KD樹分類,或者對GPS進行geohash編碼,採用文本分類的方法,比如w2v、TFIDF等訓練詞向量,計算距離,等等。(當然如果時間多,並且追求準確性,也可以採用人工智能的方法把軌跡圖全部畫出來,人工分類)
座標問題
3、對於測試集中的數據,我們觀察到Onboard的時間都是第一條記錄的時間,但是第一條記錄的座標卻和出發港的座標相差很大,我們猜測test裏面的起始數據也有可能被截斷了,導致記錄並不是真正的初始記錄,而是已經行船了一定時間的記錄,但是Onboard的時間確實是截斷的最早時間。這樣說可能有點繞,我們從下圖看就一目瞭然。
在這裏插入圖片描述
關於港口座標信息,我們可以從event裏面的sport文件中得到,當然裏面存在大量無用或者錯誤的Gps信息,通過官方的說明我們可以刪除那些無用的數據,然後merger到我們的訓練集中。一般test裏面的港口信息在event裏面都是有的,所以我們不需要做太多處理。另外我們也可以根據百度地圖來分析驗證各個港口的座標以及船隻的實際航行位置。這裏放上百度地圖的座標查詢工具:座標拾取系統
訓練集
4、關於訓練集的構建,週週星也都分享過了,這裏就不過多說明了,但是還是想說一點,test裏面的數據和train中的數據並不是一樣的,通過篩選,我們基本上是可以從train裏面得到完整路由的數據的,但是test裏面是得不到的,保持訓練和測試集的一致性就需要我們在構造特徵的時候也要把tran進行截斷來構造。但是截斷的方式有很多,隨機截斷也不一定是最好的,因爲test的數據還存在一定的稀疏性,所以這得充分考慮進行,觀察測試數據,構造一個合理的訓練集。

四、總結與展望

那這次的分析分享大概就到這裏,由於目前排名並不是很靠前,所以太多技巧性的東西也不是很有把握,希望大家在看完本篇後能有所啓發,也預祝大家能取得好成績!後期複賽的話自己也有很多想法,比如從NLP的角度,這個題目有點類似於文本分類、文本相似度、以及句子翻譯等任務。比如輸入一段gps等特徵序列,得到一串的估計時間等等。當然也可以傳統的NN+LGB來做,這些都還只是猜想,思考問題從不同的角度出發,有時候往往能有意想不到的收穫。不過目前最重要的還是先狗進複賽再說。後續如果還有時間和機會做這個比賽的話,也會和大家持續分享自己的思路!希望大家多多支持! 共同學習進步!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章