kaggle Santander Customer Transaction Prediction總結

記一次失敗的競賽經歷

數據分析

1.樣本不均衡。在20萬訓練數據集中,正樣本(y=1)爲2萬,負樣本(y=0)爲18萬。

2.所有原始特徵之間相關性很小。這一點很奇怪,很少有數據集所有特徵之間相關性都很小的。

3.所有特徵的分佈都類似。這一點也是挺奇怪,應該是主辦方對數據做了某種變換。

特徵工程

1.由於這個賽題所有特徵均爲匿名特徵且特徵之間沒有什麼關聯,所以可以考慮對數據進行重新洗牌(shuffle)。對於訓練數據,分別在標籤爲0和標籤爲1的樣本中進行重新洗牌。即對於每個特徵都進行shuffle操作,這樣得到完全不同的樣本,分別用這些不同的樣本去訓練,然後做預測,最後取平均得到最後的結果。

2.value_count特徵。去除test中的合成數據後求各個特徵中唯一值的個數。

3.排序特徵。對數值特徵進行排序。

4.相似比率特徵之間的統計特徵。這裏的比率爲對某個特定值,求target爲1的概率。然後對所有特徵做相似性分析,把相似性高的特徵劃爲一組。如下:

然後對每組相似特徵求統計特徵。

TOP選手方案:

特徵部分:

1.count特徵。包括value_counts特徵,至少在target=1的數據裏出現過一次的值,至少在target=0的特徵裏出現過一次的值,在target=0和target=1中至少出現過兩次的值,在訓練數據集中只出現過一次的值,在訓練集加真實測試集中只出現過一次的值,用特徵的均值去替換該特徵中的唯一值(?),四捨五入後求count特徵(?)(count特徵應該是比較重要的一個特徵,在比賽中對其挖掘的太少了,只做了value_counts的特徵)

2.把所有的特徵列全部堆成一列(200000*200,1)做爲一個特徵,count做爲第二個特徵,特徵名稱做爲第三個特徵(類別),然後用模型訓練。這個模型的得分會比較低(0.53左右),但是使用id聚合得到符合格式的結果,會得到較高的分數(0.924)。這是一個比較神奇的做法,因爲這些數據都是獨立的,在使用gbm模型去訓練時,模型可能會學到一些特徵的關聯關係,而實際上這些關係很可能是不存在的(因爲獨立),這種方法消除了模型學到虛假聯繫的可能性。

3.對特徵進行標準化。

其他一些技巧:

1.神經網絡訓練技巧:添加batch norm和小的dropout,採用0.01的學習率,一個訓練週期只使用15次迭代(epoch)。

2.在使用lightgbm等樹模型的時候,可以畫出其節點分裂圖,觀察哪些特徵有用,從而幫助進行下一步的特徵工程。

總結:

這個比賽總之是挺可惜的,賽後看了一下前排大佬的開源,感覺其實幾個關鍵的點都找到了,但是缺了一點堅持和運氣。心態上有些急於求成,總是想找可以上很多分的magic,而忽略了對基本操作的深入理解(燈下黑?)。多嘗試不同的模型,本題中有效的使用神經網絡也是獲勝的一個關鍵點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章