項目目的:預測客戶的交易價值
數據來源:https://www.kaggle.com/c/santander-value-prediction-challenge
數據內容:4459條已知客戶的交易價值和客戶的屬性(具體內容不知道,有可能是性別、年齡、收入、交稅等等,每一個用戶有4993條屬性)步驟:
- 數據分析
- 特徵值選取
- 模型建立
- 調試
首先進行數據分析
有4459行,4993列,其實中1845列爲float類型,3147列爲int類型,有1列爲object(應該爲用戶id)
觀察發現特徵值數量較大
初步處理:去掉常數列,去掉重複列
數據由4993變爲4732
由於特徵值太多,難以作圖分析
直接使用所有特徵值
對需要預測值分析,觀察數據分佈(下圖左),大部分數據集中在左側,做log處理使數據更符合高斯分佈(下圖右)。通常高斯分佈的數據預測更準確(原因不是很清楚,個人理解是如果有較大值出現,預測偏差一點,loss改變很大,對擬合不利)。
方法1
可能存在問題,樣本太少,有可能過擬合。先看下效果在說吧。
首先建立了一個4層的dnn網絡(詳見test_dnn.py)
預測結果分析
對測試集進行測試
衡量標準爲爲均方根
計算方法:sqrt((預測值-原始值)**2/樣本數)
Rms=1.84
下圖爲預測誤差分佈圖
結果分析:效果不理想,預測值與真實值差距較大,有一個值偏離非常大
原因分析:
- 模型結構不夠理想
- 超參數的設置
- 樣本太少,有200w的參數但是樣本只有4000+,過擬合問題嚴重(在20次迭代後,就發生過擬合了)
方法2
使用lightgbm
直接使用lightgbm庫(能用,但是對調參還需要學習)
詳見test_lightgbm.py
預測結果分析
對測試集進行測試
衡量標準爲均方根
Rms=1.35
結果分析:效果依舊不理想,但是比dnn較好,而且沒有偏移非常大的值
原因分析:
- 依舊存在過擬合
- 模型參數設置
方法3
使用xgboost
方法同上
預測結果
Rms=1.38
結果分析:效果依舊不理想
原因分析:
- 2000次迭代次數不夠,模型還未收斂
- 模型參數設置
方法4
使用catboost
方法同上
預測結果
Rms=1.47
結果分析:效果依舊不理想
方法5
使用集成學習的思想,將上面的方法混合使用
將3個學習器的結果根據權重求和,得到最後結果
Rms=1.36
結果分析:
使用4種方法對預測目標進行建模,其中dnn由於數據太少,很早就發生了過擬合
Xgboost,lightgbm,catboost效果比dnn要好很多,但是對價值預測依然存在偏差。但是結合kaggle的論壇帖子,由於數據特點在不使用leak的情況下 這已經是不錯的預測。由於調參修改的時間需求較大就不進行了,這裏只是一個驗證,驗證結果爲Xgboost,lightgbm,catboost在數據量較少的場景,效果是非常好的。