1. 程式人生 > >2018中國高校計算機大賽—大資料挑戰賽(top2解題方案)

2018中國高校計算機大賽—大資料挑戰賽(top2解題方案)

經過激烈的競爭,從倆千多人,一千二百多支隊伍,從初賽到複賽再到決賽的答辯,最終拿到了第二的名次,雖然有點遺憾,但參加這個比賽收穫了很多,對大資料領域又有了新的認識,在過程中,最重要的是堅持,有新的想法要敢於嘗試。總結一下,個人覺得資料探勘類的題目更多的應該先去了解資料,理解資料,對所涉及的業務場景有一定的瞭解,這樣在特徵工程的時候可以更合理的構造出強特出來,同時掌握一些必備的統計知識,用來構造基礎特徵也是必備的,除此之外,多學習一些經典演算法,對構造特徵也非常有用。以下分享一下該比賽的思路。

解題思路 :

題目是給定1-30天時間內的四個日誌資料,通過這些資料來預測未來一段時間(即31-37天)活躍(即出現在以上四個日誌中任意一個)的使用者。經過分析,判定該問題是一個典型的二分類問題,也就是說給定一個使用者id,讓我們來預測這個使用者是活躍或者不活躍。那麼首先考慮如何構造出線上線下的訓練集以及它的標籤,還有線上線下測試集以及它的標籤。

一、滑動視窗

     

圖(一)

如圖一所示,我們採用滑動視窗的演算法思想,給定a到b,也就是1-30天區間,我們定義n和m,其中n是構造訓練集或驗證集的區間,緊接著的後7天是構造標籤的區間。其中,n小於等於23,m大於等於0。這樣滿足這種條件的我們可以滑動出很多個視窗,理論上講這樣我們訓練集的樣本可以構造出很多個,但是經過仔細分析與思考,我們總結了視窗必須滿足以下兩個條件

(1)保持線上與線下視窗間隔一致。

(2)滿足資料分佈的週期性。

我們看第一點,假如我們以構造訓練集越多越好的原則去構造,那麼變長視窗當然是1-2,1-3,1-4,一直到1-23,但是這樣會出現一個問題,也就是線上和線下的視窗間隔不一致,這樣會導致線上和線下構造的特徵資料分佈不一致,很容易出現過擬合現象。因此我們從後往前推,使得線上線下得視窗間隔一致,還是以構造訓練集最多原則構造視窗,那麼這樣構造就是1-30,1-23,1-16,1-9,1-2(為什麼間隔是7呢,因為這7天是用來構造label的,也就是線上和線下最小的間隔)。

圖(二)

第二個原則,我們是根據圖二得出的規律,也就是視窗還需要滿足資料分佈的週期性,可以看出,每個視窗每天的行為次數都是週期性的增長,除了1-2這個視窗之外。因此1-2這個視窗就被去掉了,並且1-2這個資料視窗太小,資訊量太小,顯然也就捨去了。

表(一)

同樣的道理,所以最終我們構造出了兩個可行的視窗,如表一所示,第一個是變長視窗,線下訓練集是1-9,1-16,線下驗證集是1-23。線上訓練集是1-9,1-16,1-23,線上測試集就是1-30。另一個是定長視窗,線下訓練集是1-16,8-23(4/5),驗證集是8-23(1/5),線上訓練集是1-16,8-23,線上測試集是15-30。

後來我們最終確定的視窗為變長視窗,主要有三個原因:

第一,這樣我們可以預測全範圍的使用者,也就是登錄檔裡所有的使用者,而定長視窗不能。

第二,這樣有利於線下驗證集的構造,因為資料分佈基本一致,保持線上線下一致,而相比定長視窗的切分視窗資料好。

第三,變長視窗構造的訓練集相比較定長視窗多

二、使用者分類

構造好了資料集的劃分,我們再進一步對資料進行探索,因為是對使用者進行是否活躍預測,那麼我們研究的物件主體是使用者,於是,我們就通過日誌資料對使用者型別進行分析。

圖(三)

如圖三所示,我們發現每天的行為次數從第一天開始每隔五天就會有兩天突增,我們猜測這兩天應該是週末,說明有個使用者群在週末這兩天比較活躍,而在周內相對活躍次數較少。這部分使用者也許是上班族等,他們得生活規律有周期性。21,22,23這三天也比較多我們猜測是節假日三天。

圖(四)

從圖四我們可以看出,每天的註冊人數也是符合圖一的規律,但是到了第24天,註冊量出奇的高。於是我們單獨拿出這一天註冊日誌的資料,分析發現,這些註冊使用者的裝置型別和註冊型別一模一樣,於是我們就畫出瞭如圖五這樣的圖。

圖(五)

橫軸是註冊型別和裝置型別組合,縱軸是註冊使用者數量,發現確實有幾種組合型別的註冊數量很高,我們把這類使用者定義為異常使用者,這類使用者有以下兩個個特點:

(1)註冊型別和裝置型別一樣,並且是一天之內註冊數量相對正常註冊量出奇的高(設定閾值γ,只要這種異常使用者註冊量大於γ就符合)。

(2)這些使用者在隨後的天數之內都沒有活躍,只在當天活躍

我們推測這類使用者是因為快手的某種活動引流進來的使用者,並且這類使用者是那種類似於黃牛的機器使用者,最終我們根據這種規則找出了每天的異常使用者。掌握了這些使用者群的特點之後,這樣更有利於我們進一步的特徵構造與模型構建。

圖(六)

於是根據上面資料的進一步探索,我們把使用者分為兩大類,如圖六所示,第一類是正常使用者,我們可以用模型去預測活躍的概率。第二類是異常使用者,我們可以通過規則去篩選預測,也就是符合異常規則的使用者我們把預測概率置為0。

總結起來,這樣對使用者劃分主要有兩大好處,第一就是使得預測異常使用者更加準確。第二就是剔除之後,減少訓練集噪聲,增加正常使用者模型預測準確率。

  • 特徵構造

現在我們資料集劃分確定了,使用者也基本分析清楚了,就開始根據變長視窗的特點以及使用者群的特性構造特徵。特徵構造方面我們主要從‘時間’ 和‘空間’維度的層面構造。

時間維度基本側重的是單個日誌來提取的有關的時序特徵,概括性的分類如圖七所示。

圖(七)

空間維度就是題目中給的四類日誌,它們從不同方面也就是不同的維度反映著使用者的不同特徵,比如使用者的活動日誌,從這方面提取的大部分特徵是有關使用者活動方面的特徵,因此我們利用空間維度與維度之間的差異主要來構造出交叉特徵。如圖八所示

圖(八)

  • 模型構建

圖(九)

模型方面,主要對兩個單模型進行單獨訓練,然後對其預測結果進行加權融合。由於Lightgbm模型和神經網路模型差異性大,一個是boosting的整合思想,一個是採用神經元啟用的思想的,因此我們對其兩個模型預測的結果進行加權融合,提升的效果會好。

演算法亮點:

TF-IDF特徵的構造:

TF-IDF(term frequency–inverse document frequency)是一種用於資訊檢索與資訊探勘的常用加權技術。TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。

這樣我們把一個authorid比作一個字詞,根據authorid在日誌中出現的次數從大到小排列,取前n個作為語料庫。這樣與userid互動的有多個authorid,就能計算出對應的tf-idf值,我們取前m個,不夠的補0,多的省去,這樣就構成了m維特徵。

這個特徵就相當於對每一個使用者在視窗內進行了編碼,表徵著這個使用者與authorid的親密程度,用於區分特定的使用者群體。例如,一個人氣高的作者一般是經常活躍的,使用者與該作者互動次數越多,此使用者對應該作者的tf-idf的值也越大,那麼該使用者活躍的概率也越大。

比賽感想:

此次比賽提供的資料為快手app真實資料的脫敏資料,更結合實際業務,使得我們更應該結合使用者使用快手app的實際場景,從而對使用者的特性有更深的瞭解以及使用者群有更深更細的劃分,使得特徵的構造更加合理與有效。同時,在比賽過程中,競爭比較激烈,但是一定要堅持下去,不到最後一刻決不放棄,一定不能只停留在想象方面,有想法一定要及時去實現,也許那個點子就是提分的關鍵。