第一賽季 372 / 2529 , MSE: 0.05654
賽題介紹
賽題:https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100067.5678.1.47f128938Byxnw&raceId=231633
給出500條半導(dǎo)體產(chǎn)品的加工參數(shù)和最終一個指標(biāo)Y啼器,需要根據(jù)測試集的100條加工參數(shù)來預(yù)測出最終的指標(biāo)Y的數(shù)值备蚓。評價標(biāo)準(zhǔn)是MSE均方誤差。每個產(chǎn)品加工參數(shù)有8000+條,代表不同工序颅湘,這些工序分別在八個工作臺上進(jìn)行簸喂,可能存在數(shù)值漂移等問題吗伤。所有特征名稱均已脫敏珠移。這是一個典型的高維小樣本回歸問題。
特征工程
因?yàn)樘卣鬟h(yuǎn)遠(yuǎn)大于樣本數(shù)塘砸,首先先想到把一定能去除的特征去掉后再看特征數(shù)节仿。所以首先去除了:
- 整列variance=0的特征
- 整列NA>0.80的特征
這樣刪除后還剩3000+特征,還是過大掉蔬,需要繼續(xù)刪除粟耻。
在探索過特征與Y的相關(guān)系數(shù)后發(fā)現(xiàn)查近,很多特征與Y的相關(guān)系數(shù)非常小,所以暫定刪除 corr<0.2 的特征挤忙。
之后看還有沒有特殊的特征需要刪除或處理,發(fā)現(xiàn)有8個obj類型的特征谈喳,代表工作臺册烈,所以用one-hot對這些特征進(jìn)行獨(dú)熱編碼。
發(fā)現(xiàn)有幾列特征的數(shù)值過大(>e13)婿禽,打印出來后發(fā)現(xiàn)是代表日期赏僧,暫定生產(chǎn)質(zhì)量只與工作參數(shù)有關(guān),所以把這些日期參數(shù)刪除扭倾。
橫向來看檢查每行的缺失值比例淀零,刪除>0.95缺失的行。(最終發(fā)現(xiàn)所有行都不滿足這個條件)
一共500行膛壹,ID.unique()只有499驾中,說明有一個ID出現(xiàn)了兩次,調(diào)出觀察發(fā)現(xiàn)這兩條樣本的ID和Y值相同模聋,但第二條的特征缺失很多肩民,推測應(yīng)該是進(jìn)行了返修之類的操作,所以把ID重復(fù)的第二條樣本刪除链方。
這樣操作后還剩200+條特征持痰。
最后填補(bǔ)缺失值用的是中位數(shù)填補(bǔ)。一般方法是均值祟蚀、中位數(shù)工窍、和knn填補(bǔ)。由于都是同一種產(chǎn)品前酿,工序和生產(chǎn)參數(shù)標(biāo)準(zhǔn)應(yīng)該相同患雏,就選擇了中位數(shù)填補(bǔ)。(但是后來想了想應(yīng)該用日期+工作臺結(jié)合來填補(bǔ)薪者。)
模型選擇
因?yàn)楦呔S小樣本纵苛,很大的一個問題就是過擬合。首先想到了gbdt/xgb言津、SVR 和 LR模型攻人。gbdt可以有效防止過擬合,而SVR悬槽、LR很適合高維的回歸問題怀吻。
驗(yàn)證方法我用的是k-fold,將500條樣本先留出100條作為模型評估驗(yàn)證集初婆,剩下400條四折交叉驗(yàn)證來選參蓬坡。在這個環(huán)節(jié)我也遇到了這個賽題的一個最大的難題猿棉,就是無法在線下找到一個合適的評估方法。我用的是和線上一樣的MSE來評估屑咳,但是訓(xùn)練后的模型線下效果很好萨赁,線上效果差的比較多。導(dǎo)致在選參和選模型上有比較大的困難兆龙。(我相信這也是很多賽友遇到的問題杖爽,因?yàn)樵贏B榜切換時排名發(fā)生了很大的變化,在我看來是因?yàn)榇蠹叶紱]有找到合理的線下評估方法紫皇,過于依賴A榜的線上結(jié)果作為評估依據(jù)慰安,導(dǎo)致模型是對A榜過擬合的)。
結(jié)合自己線下平分和A榜成績聪铺,我最終選擇了LR作為模型化焕。SVR的效果并不好,我想可能是因?yàn)镾VR對于支持向量的參數(shù)要去比較高铃剔,而原本樣本的缺失值較多撒桨,無法很好的支持邊界。
心得
這是我第一次做這么高維數(shù)和這么小樣本的賽題番宁。做完之后對于GBDT元莫、XGB算法理解更深了些。但對于這樣的數(shù)據(jù)怎么在線下構(gòu)建評估函數(shù)仍是一個難題蝶押,等決賽結(jié)束后看過題解再來補(bǔ)充踱蠢。
第一名題解 @笨笨的粽子妞,北京中油瑞飛信息技術(shù)有限責(zé)任公司棋电。
https://tianchi.aliyun.com/forum/new_articleDetail.html?spm=5176.8366600.0.0.23a9311foJQqYL&raceId=231633&postsId=4020
缺失值填充:填充值為同種工具非0值的平均值茎截。
特征選取:
- 將計(jì)算單因子和雙因子交互列并納入備選特征赶盔;
- 需要對特征進(jìn)行最初的篩選企锌。目前的方法是計(jì)算各列與特征值Value的pearson相關(guān)性,選取相關(guān)性較高的進(jìn)行保存于未。
模型選擇:
- 初賽階段撕攒,曾嘗試過許多模型,包括SVR烘浦、Lasso抖坪、 GBDT、XGB闷叉,以及模型融合等擦俐,經(jīng)過在初賽和復(fù)賽的多模型比較,利用數(shù)次提交結(jié)果進(jìn)行模型比對握侧,最終將Lasso蚯瞧、GBDT和XGBoost納入到值得考慮的單模型中嘿期。
- 最終,我是使用XGBoost在最終版特征數(shù)據(jù)埋合,調(diào)參后產(chǎn)出了TestB的預(yù)測結(jié)果备徐。對TestB預(yù)測利用了train和TestA的全部單、雙因子數(shù)據(jù)饥悴,沒有降維坦喘。將單雙因子數(shù)據(jù)、train和TestA拼接后西设,對合計(jì)5181維數(shù)據(jù)進(jìn)行訓(xùn)練,選用參數(shù)如下:
params = {
'reg_alpha': 0.001,
'silent' : 1,
'booster': 'gbtree',
'objective': 'reg:linear',
'eta': 0.01,
'max_depth': 2,
'subsample': 0.5,
'min_child_weight': 1,
'colsample_bytree': 0.3,
'eval_metric': 'rmse',
'gamma': 0,
}
num_boost_round = 40000
在上述參數(shù)下答朋,約30000次能夠接近穩(wěn)定贷揽。最終,利用訓(xùn)練完畢的模型對TestB進(jìn)行預(yù)測梦碗,產(chǎn)出本次復(fù)賽最終提交的輸出結(jié)果禽绪。
(所以第一名也沒有構(gòu)建線下評估模型