1. 程式人生 > >一戰成名,使用者貸款風險預測 參賽程式碼與資料集分享

一戰成名,使用者貸款風險預測 參賽程式碼與資料集分享

0?wx_fmt=gif&wxfrom=5&wx_lazy=1

 向AI轉型的程式設計師都關注了這個號???

大資料探勘DT資料分析  公眾號: datadw

隊伍名“一戰成名” 最終線上排名第七。 
640?wx_fmt=png&wxfrom=5&wx_lazy=1

任務

融360與平臺上的金融機構合作,提供了近7萬貸款使用者的基本身份資訊、消費行為、銀行還款等資料資訊,需要參賽者以此建立準確的風險控制模型,來預測使用者是否會逾期還款。

賽題:使用者貸款風險預測(演算法競賽)

http://www.pkbigdata.com/common/cmpt/%E7%94%A8%E6%88%B7%E8%B4%B7%E6%AC%BE%E9%A3%8E%E9%99%A9%E9%A2%84%E6%B5%8B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html

本文程式碼在公眾號 datadw 裡 回覆風險  即可獲取。

訓練資料 :https://pan.baidu.com/share/init?shareid=1950975130&uk=2921663747 

密碼:pcsh

測試資料:https://pan.baidu.com/share/init?shareid=1950975130&uk=2921663747 
密碼:pcsh

訓練資料包括使用者的基本屬性user_info.txt、銀行流水記錄bank_detail.txt、使用者瀏覽行為browse_history.txt、信用卡賬單記錄bill_detail.txt、放款時間loan_time.txt,以及這些顧客是否發生逾期行為的記錄overdue.txt。

評分標準:

0?wx_fmt=jpeg

0?wx_fmt=jpeg 
0?wx_fmt=png

解決方案概述

本題很多關鍵屬性被脫敏處理,比如時間戳和所有金額的值,這個對我們進行特徵構造帶來很多的影響,損失了很多業務資訊。不過對於參賽者都是公平的,因而我們構造了大量的統計特徵,根據模型及線上反饋最佳特徵大多來自使用者瀏覽行為browse_historybill_detail,此外發現放款時間也是個強力特徵,詳細見程式碼部分。這裡只放了我個人的程式碼,隊友的特徵工程很多類似的,也有一些獨特之處,這裡說幾個思路:bill_detail表的特徵按放款時間分為放款前放款後分別統計(還可以嘗試多劃分幾個時間窗再統計)、基於熵的分箱處理(特徵離散化)、排序特徵、組合特徵等,有興趣可以自己去實現。模型方面,我本人主要玩了xgboost和lightgbm,隊友也基本上是xgboost、RandomForest,在玩Stacking融合的時候還上了ExtraTreesClassifier和Logistic Regression。

模型設計與模型融合

  • 單模型: 
    還是玩的大殺器xgboost,簡單粗暴,然後進行了一些調參工作。個人單模型成績最佳到0.443+,Top35,隊友也基本玩的xgb,組隊後大家做了特徵融合,單模型能到0.455+,線上Top20。

  • mic加權融合: 
    後期單模型到極限了,也可能我們特徵水平有限,已經很難通過特徵工程和調參提升成績了。於是開始玩融合,參考了“不得直視本王”的解決方案,對不同的模型結果計算mic值對比相關性,然後根據線上以及線下的評分進行加權融合,記得那天在群裡就模型簡單加權融合還是完善特徵工程或是優化驗證集等等討論很久,最終決定還是嘗試一下mic,結果當天提升到0.46+,直接Top10了。

  • Stacking模型: 
    再玩mic加權融合的同時,我們總結了成績提升的原因,就是模型多樣化。不同的模型結果(不同特徵集或者不同的樣本集或者不同的模型)融合才能得到好的結果,可以有效避免過擬合。抱著學習的態度,我們開始嘗試stacking融合,邊學邊做,這個輪子是隊友找來的,我們對它進行了一些修改,做成了我們自己的stacking輪子。 
    主要思路是:根據最佳單模型的xgb特徵評分排名將特徵集分量兩個子集(1、3、5….和2、4、6…)作為基模型的訓練集。基模型包括ET、RF、Xgboost,3個基模型分別訓練這2個特徵子集,保證相同的cv和seed。這樣訓練完成得到驗證集的預測值拼接成新的訓練集,一共可以得到6個新特徵(2組特徵子集,3個模型),最後第二層基於這些新特徵訓練ET模型,這裡可以加上一部分你的原始特徵,也可以組合新的特徵,這些都值得嘗試。Stacking的過程是非常耗時的,因為需要跑多個模型以及多次cv,我16G記憶體,i7 cpu跑一次完整的需要七八個小時。至於Stacking帶來的提升,本次比賽並沒有帶來火箭,不如mic加權組合。 
    stacking的思路可以參考下面這張圖,如果難以理解建議多查資料或者直接請教別人,然後看程式碼實現,我一開始也是覺得懂了,但是用起來發現細節還是不清楚。 


    0?wx_fmt=jpeg
    相關博文: 
    http://mlwave.com/kaggle-ensembling-guide/ 
    http://blog.csdn.net/a358463121/article/details/53054686#t18

個人總結

抱著學習的態度從DC群老段子的開原始碼玩起,一步步慢慢提升,年前玩到Top40,然後過年荒廢了十來天,回校的時候成績已經70開外,於是開始新一波努力。在這個過程中認識了現在的隊友,邊交流邊提升,可以說如果我們沒有組隊,我們四個人都到不了Top10,因此我再次覺得打比賽還是要團隊協作,這樣可以互相佐證思路,實現更多的想法,完成更多的思路,學習到更多的東西。而且當你有隊友以後,你會變得更加投入,每個人都有責任感。在群裡爭論,產生分歧,最後大家統一想法,完成提交。基本每天早上開始各自實現思路,晚上八九點開始討論融合,十二點前完成提交,有時候因為取得突破激動的很晚才能睡著,也有最後一天最後一搏失敗後的互相安慰,這種體會真的很棒。總之非常感激本次比賽的各位隊友們,讓我真正體會到比賽的樂趣。

多看以往的大神總結,wepon大神的github吐血推薦!!!https://github.com/wepe ,本次比賽主要參考了他們去年微額借款使用者人品預測大賽冠軍解決方案以及拍拍貸風險控制大賽銅獎解決方案,乾貨多多!

此外還有:金老師的知乎專欄:https://zhuanlan.zhihu.com/jlbookworm ,收錄了各種大神解決方案和開原始碼。

via http://blog.csdn.net/sb19931201/article/details/56315689

人工智慧大資料與深度學習

搜尋新增微信公眾號:weic2c

640?wx_fmt=png

長按圖片,識別二維碼,點關注

大資料探勘DT資料分析

搜尋新增微信公眾號:datadw

教你機器學習,教你資料探勘

640?wx_fmt=jpeg

長按圖片,識別二維碼,點關注