1. 程式人生 > >天池新人賽之新浪微博互動預測

天池新人賽之新浪微博互動預測

       最近參加了天池上的新人賽,把比賽的流程走了一遍,收穫挺大。現把比賽思路簡單記錄一下,歡迎大家一起來討論交流。

1. 對訓練資料進行簡單分析

       拿到資料集,先對整個資料集做個簡要分析,比如資料量大小、每種資料取值範圍等,讓自己對資料集有個大致認識。因此我對資料集簡單分析可得到:訓練資料共有122,5088條(僅三條內容有缺失值),涉及37251個使用者,每個使用者至少發一條博文,博文最多數量前十在4909~31015條。


2.劃分訓練集和測試集

      第二步就是劃分合理的訓練集和測試集。 整個資料集的時間跨度為(2015-02-01至2015-07-31),我打算以三個月的資料為訓練集,之後的一個月資料集為測試集。因此整個資料集可以劃分為以下三個部分:

- 訓練集一(674019):2015-02-01 ~ 2015-04-30    - 測試集一(188029):2015-05-01~2015-05-31

- 訓練集二(621376):2015-03-01 ~ 2015-05-31    - 測試集二(178823):2015-06-01~2015-06-30

- 訓練集三(573141):2015-04-01 ~ 2015-06-30    - 測試集三(184214):2015-07-01~2015-07-31

- 預測集(177923):2015-08-01~2015-08-31


3.特徵工程


        第三步是最為關鍵的,因此要找出最直觀、最重要的特徵。這裡我從三個方面入手:使用者特徵、時間特徵、博文特徵。


3.1 使用者特徵

-最大評論數、點贊數、轉發數    

-最小評論數、點贊數、轉發數

-平均評論數、點贊數、轉發數

-最大評論/點贊率、轉發/點贊率

-最小評論/點贊率、轉發/點贊率

-平均評論/點贊率、轉發/點贊率

-評論數、點贊數、轉發數大於平均值的概率

3.2 時間特徵

-是星期幾

-是否週末

-是否是節假日

-發文時間段(分24個時間段)

3.3 博文特徵

       由於不會nlp,因此就只是使用jieba提取出現頻率最高的20個關鍵字。

       前1000個數據:cn,http,小夥伴,轉發,PS,教程,分享,Photoshop,轉給,大家,技巧,學習,設計,需要,微博,方法,效果,程式設計師,簡單,doge。

       前100個數據:小夥伴,轉給,cn,http,Photoshop,分享,PS,教程,大家,技巧,需要,方法,效果,參考,學習,轉發,設計,實用,利用,照片。
       選用關鍵詞:小夥伴、分享、轉發、轉給、教程、大家、技巧、方法、效果、學習、實用、簡單、紅包、免費、福利、獎。

- 是否含有“小夥伴、分享、轉發、轉給、教程、大家、技巧、方法、效果、學習、實用、簡單、紅包、免費、福利、   獎”等關鍵字眼(處理成含有關鍵字的數量)

- 是否有主題(微博內容中含有##)

- 是否@他人

- 是否是轉發他人的微博(微博中含有“【】”)


4.模型

4.1 線性迴歸模型

        先討論不同訓練集訓練的線性迴歸模型的準確率情況:不同訓練集訓練的模型大致相似,對預測結果起決定性影響的是預測資料特徵的準確性,因此如何保證預測資料的特徵的準確性是至關重要的,尤其是對缺失值的處理。

        現討論缺失值如何處理問題:利用所有資料集進行預測有699個使用者無法獲得特徵值,那麼是用0來填充還是均值來填充效果更好?分析思路,對前幾個訓練集分析新增使用者的函式值是趨於0還是趨於均值。

- 訓練集一:3251條新資料,用0填充的準確率為 0.579239766082,用均值來填充的準確率為0.0178362573099

- 訓練集二:9112條新資料,用0填充的準確率為 0.781565753953,用均值來填充的準確率為0.00817585807944

- 訓練集三:5206條新資料,用0填充的準確率為 0.624848973017,用均值來填充的準確率為0.0299033427306

       可見缺失值填充為0的效果顯著,從現實意義上也很容易理解,若使用者在前幾個月沒有資料則該使用者很大可能是新使用者,因此相應點贊數、評論數、轉發數也很可能為0。

       在訓練模型的過程中,發現僅使用使用者特徵預測的準確率(28%左右)要高於用上所有特徵的預測結果(26%左右),然後我就懷疑是不是我的特徵提取的不合理。帶著這個問題,我打開了SPSS分析軟體進行相關性分析,結果表明:不存在某個特徵變數與轉發量、評論量、點贊量同時不相關,大部分特徵變數都同時與轉發量、評論量、點贊量相關。後來才知道,本題給出的評判標準並非準確率,而是一種關於相對準確的計算(後面會分析)。

       利用使用者特徵進行線性擬合,提交結果系統給出的評判結果為:27.27373545%。


4.2 決策樹迴歸

        由於覺得決策時模型比較容易理解,然後我就嘗試用決策樹迴歸模型來預測該問題。通過對三個資料集調參發現,決策樹的最大深度為20,最小劃分樣本和最小葉子樣本數都為10,mse小於1(這些引數選擇相對最優)。可最終提交結果系統給出的評判結果為:26.23863679% (20,10,10)、26.01225228%(20,10,5),效果還沒有線性迴歸好,我崩潰了。。。不解為啥模型逼格上去了,預測結果竟然下來了。一邊安慰自己“最簡單的就是最好的”,一邊分析原因,然後我把鍋又推給了評判標準,接著就有了下面的搜尋模型。


4.3 搜尋模型

        提取的特徵工程不起作用?複雜模型預測效果不好?答案就是評判標準。然後我就按照網上這種思路:以評判標準為導向,對於每一個使用者取使其評判值最高的資料。這裡也是兩種思路:

       第一種是一層迴圈,僅迴圈該使用者已出現的所有組合。

- 對測試集一進行測試的準確率結果:0.358746969504

- 對測試集二進行測試的準確率結果:0.359069119304

- 對測試集三進行測試的準確率結果:0.365967187456

       提交結果系統給出的評判結果為:30.04590604% 。


        第二種是三層迴圈,對轉發數、評論數、點贊數分別從最小值迴圈到最大值。(由於代價太高,只能對部分資料使用此方法,而且步長也設定一個相對值),由於只針對有用的資料進行三重迴圈,因此沒有測試線下資料的結果,提交結果系統給出的評判結果為:30.05774245%。


4.4 攻略進階

      我感覺搜尋模型就是一種比賽的套路,對於實際工作沒有參考價值,不過這個想法蠻有意思的。如果你想認認真真比賽,請參考:天池微博大賽攻略進階