阿里天池全國社保比賽心得

       最近時間都忙於參加阿里天池的全國社會保險大數據應用創新大賽,終於結束,最終全國排名第7,總共是1336只隊伍參加,仍是很激動進了前10,今天想把一些體悟寫一下,但願對後來參加的人有用。這個比賽是完成數據算法模型的開發設計,實現對各種醫療保險基金欺詐違規行爲的準確識別,根據給出的數據狀況,最開始有兩個思路,1.從就診記錄入手,找到可疑的就診記錄,而後拼接到人上 2.直接構造人的可疑程度的行爲特徵。二者都試過,最終選擇了後者,由於題目給出的欺詐標籤主要是人的欺詐標籤,並無給出某次就診行爲的欺詐標籤。另外,這次的評測指標是F1值,這個很是重要,你要知道你最終排名都是看的這個值。下面我從三個方面講一下此次比賽的心得。python

1、特徵算法

可能沒參加比賽前很難理解特徵決定上限的這個真理,特徵特徵纔是最重要的!app

必定要看特徵重要度,要不斷嘗試,有些組合到一塊兒反而下降,有些特徵看着不重要,你把他去了 但是結果卻會出現降低的狀況,由於特徵和特徵之間是有關係的。函數

在重要特徵作深刻處理的收益遠大於在次要特徵中繼續作。測試

彙總信息有些時候會丟失信息,好比咱們最開始將醫院數據進行了彙總,計算每一個人去一級醫院,二級醫院,三級醫院的個數,反而沒有把全部醫院的維度擴充好。大數據

觀察和了解你的數據很重要。觀察數據發現患者同一天在同一個醫院有藥費,有治療費分別出現不一樣的就診id,包括掛號的費用也是不一樣的id,咱們認爲實際上是一次就診,因此進行相應彙總。設計

要保證測試集和訓練集一塊兒處理,不然會出現二者特徵不匹配htm

2、模型開發

後期爲了提升泛化能力,基本都會進行模型的融合,最後咱們是用了三個GBDT的模型進行的融合。而這三個模型的選取,其中一個就是咱們每次提交用到的那些特徵(有些下降了排名的就捨棄的特徵,只有200多維),另外兩個使咱們把咱們歷史用到的全部的特徵(600多維),進行特徵重要度的選擇(選了一個100維、一個120維),神奇的發現以前一些捨棄的特徵之間竟然可能發生了相互做用,因此模型效果還能夠。因此一些最開始的一些加進去使得排名降低的特徵不要直接丟棄,最後特徵融合的時候可能反而用上了。文檔

3、評測指標F1和調參

過擬合問題必定要很是當心,初賽的時候咱們就徹底犯了錯誤,直接根據排行榜的成績來調咱們的模型和特徵。尤爲是由於最終評價指標是F1值,01閾值的選取對F1影響比較大,而咱們就一直根據排名調咱們的閾值,最後調到A榜排名前,可是實際上是過擬合,B榜排名降了幾十名,還好仍是進複賽了。

最後複賽吸收教訓,仍是調參仍是要相信CV的結果,訓練數據分紅5份,前面4份做爲訓練集,在第5份上驗證,而後再次訓練,在1235上訓練,第4份上驗證,而後對不一樣份進行循環,這麼作你會對哪組超參數表現更加穩定更肯定,最後你能夠用這組超參數對整個訓練集訓練。隨機數的種子對結果可能也有影響,有些時候種子的結果好,但實際的結果不必定是這樣的,因此仍是相信cross_validation的結果吧

最後咱們閾值的選取是根據CV大概負樣本的比例來決定的,而不是直接用模型默認的0.5做爲分割

4、阿里平臺

複賽必須使用阿里的平臺,主要是根據幫助文檔來學的,將以前用python構造的特徵從新用SQL構造,雖然以爲不方便,也是至關於解決相同問題的不一樣途徑,也學了好多之前不會的函數,好比percent_rank()函數的使用等等。時間窗口用SQL作折磨死咱們了,包括一我的連續住院的最大天數,最後找到一個奇妙的解決方案,生成一個序列號,而後將日期轉化爲天數,而後作差,再Groupby 。阿里PAI平臺上沒有xgboost模型,可是IDE(大數據開發套件)上可使用。

DROP OFFLINEMODEL IF EXISTS testXgboost_cv_2_388;

PAI

-name xgboost

-project algo_public

-Dobjective="binary:logistic"

-Deval_metric="auc"

-Deta="0.1"

-Dseed="0"

-Dnum_round="128"

-Dmax_depth="6"

-Dmin_child_weight="4"

-Dgamma="0"

-Dsubsample="0.8"

-Dcolsample_bytree="0.8"

-DmodelName="testXgboost_cv_2_388"

-DinputTableName="pai_temp_60326_831172_1"

-DlabelColName="label"

-Dmax_delta_step="1"

-DfeatureColNames="approve,max_month_count,self_pay_sum_add。。。";

 

drop table if exists xgb_825_cv2_388;

pai -name prediction

-DmodelName="testXgboost_cv_2_388"

-DinputTableName="pai_temp_60326_831173_1"

-DoutputTableName="xgb_825_cv2_388"

-DappendColNames="pid,label"

-DfeatureColNames="approve,max_month_count,self_pay_sum_add。。。;

 

最後 團隊的力量真的很重要,能取得那麼前的排名,主要是個人領導帶着我一塊兒作的,頭腦風暴,開腦洞想特徵真的很重要!

比賽連接以下

 https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100068.5678.1.FPmdTB&raceId=231607

相關文章
相關標籤/搜索