2017摩拜杯演算法挑戰賽 第三名團隊解決方案

比賽已經結束快兩個月了,一直拖到現在才開始總結。

官網網址:biendata.com/competitio

GitHub源碼:github.com/Magic-Bubble

任務背景

  • 隨著綠色出行和環保觀念的深入人心,摩拜單車自推出以來不僅深受用戶喜愛,也減輕了城市路網壓力和擁堵情況
  • 摩拜致力於應用前沿科技幫助人們更好地出行,利用機器學習預測用戶的出行目的地是眾多應用場景中重要的一個
  • 目前,摩拜單車在北京的投放量已超40萬,為更好地調配和管理這些單車,需要準確地預測每個用戶的騎行目的地

任務目標

根據給出的300萬的用戶出行記錄訓練數據,對用戶出行的目標地點進行預測

衡量指標

其中,|U|是需要預測的orderid總個數,P(k)是在k處的精度,n是地點個數。

評測函數代碼請參考: github.com/benhamner/Me

數據說明

問題抽象

可以將其轉化為一個二分類的問題,首先構造出當前訂單可能會去的若干地方,然後用二分類的方式給每個候選地址進行打分,選擇分數最高的top3集合即可。

候選目的地構建

  1. 樣本預過濾。從海量候選集中篩選出最可能的候選樣本,清理異常樣本,減少樣本規模,提高候選集的覆蓋率和模型精度。比如用戶常去的topN地方,以及從這個地點出發常去的topN地方等。
  2. 規則預過濾。定義規則過濾候選集,如距離等,超過某個距離的就過濾掉
  3. 起點漂移。將geohash區塊臨界8塊區域記為同一區域,取該區域top連接數目的地。事實證明,這是我們整個方案的瓶頸所在,很多人找車不會在同一個地方找,而大概率可能也會去其附近的地方找車,所以這一步很有必要。

數據集構建

比賽給出的數據是連續兩周的用戶出行記錄,需要預測後面一周的目的地。因此數據集的合理構建也十分有必要,構建方式如下:

具體地,是採用19號之前的為19號加特徵,20號之前的為20號加特徵,...,最終構建出19,20,21,22,23,24六天的數據作為訓練數據。

特徵構建

通過對數據的統計和挖掘,從如下兩個視角進行特徵的構建:

  1. 特徵群。共有三個特徵群,用戶、時間和地點。其中,用戶包含熱啟動和冷啟動(之前沒有過出行記錄),時間包含周內、周末、小時、天等特徵,地點包括經緯度、熱度、方向等特徵。
  2. 特徵類型。主要包含五個部分,計數特徵(比如用戶到過這個地方多少次),距離角度特徵(出發地到候選目的地的距離方向等),Label窗特徵,比率特徵(用戶到這個地方占其出行次數的比率是多少)等。

模型訓練及融合

採用經典的XGBoost和LightGBM進行訓練,融合也非常簡單,就是兩個模型的概率相乘融合。

結果

訓練細節

  1. 樣本候選集覆蓋率

2. 特徵維度

特徵重要性排序

總結

  1. 樣本候選集的構建是整個比賽的瓶頸和突破點。我們和前面隊伍的差距主要在於此,可以再多擴展一層,變成4*4的漂移區域
  2. 候選集的覆蓋率提升很關鍵
  3. 特徵基本上都差不多,沒有什麼強特徵,維度太多不僅會影響速度,也可能拉低效果

總體來說,第一次參加數據挖掘類的比賽,還是收穫很多!


推薦閱讀:

誰來用最通俗易懂的語言跟我講一下k平均演算法(k means clustering)??
R實戰案例:利用演算法識別糖尿病患者(R語言實現)
紅包都送不出去了?教你看懂數據,不再懷疑人生
我們只談自己,不談友商
NLP自然語言處理從入門到迷茫

TAG:机器学习 | 数据挖掘 |