1. 程式人生 > >阿裏天池比賽心得

阿裏天池比賽心得

歷史 大於 sample 所有 進行 們的 決定 隨機 模型

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

一、特征

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

一定要看特征重要度,要不斷嘗試,有些組合到一起反而降低,有些特征看著不重要,你把他去了 可是結果卻會出現下降的情況,因為特征和特征之間是有關系的。

在重要特征做深入處理的收益遠大於在次要特征中繼續做。

所有的分類變量二值化編碼,要保證測試集和訓練集一起處理,否則會出現兩者特征不匹配

匯總信息有些時候會丟失信息,比如我們最開始將醫院數據進行了匯總,計算每個人去一級醫院,二級醫院,三級醫院的個數,反而沒有把所有醫院的維度擴充好。觀察數據發現患者同一天在同一個醫院有藥費,有治療費分別出現不同的就診id,包括掛號的費用也是不同的id,我們認為其實是一次就診,所以進行相應匯總。觀察和了解你的數據很重要。

二、模型

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

三、評測指標F1

過擬合問題一定要非常小心,初賽的時候我們就完全犯了錯誤,直接根據排行榜的成績來調我們的模型和特征。尤其是因為最終評價指標是F1值,01閾值的選取對F1影響比較大,而我們就一直根據排名調我們的閾值,最後調到A榜排名前,但是其實是過擬合,B榜排名降了幾十名,還好還是進復賽了。

最後復賽吸取教訓,還是相信CV的結果,並且訓練集和測試集分割 隨機數的種子對結果可能也有影響,有些時候種子的結果好,但實際的結果不一定是這樣的,所以還是相信cross_validation的結果吧

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

四、阿裏平臺

復賽必須使用阿裏的平臺,主要是根據幫助文檔來學的,將之前用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。。。;

最後 團隊的力量真的很重要,能取得那麽前的排名,主要是我的領導帶著我們一起做的,大家頭腦風暴,開腦洞想特征真的很重要!

阿裏天池比賽心得