标题: 参加建模比赛的一些经验总结 [打印本页] 作者: 杨利霞 时间: 2020-4-27 14:55 标题: 参加建模比赛的一些经验总结 自己总结了一些建模比赛的基本流程:7 J. Q) N, {4 n1 f, M$ L! W
5 h4 M& O8 w6 _: c# N特征工程 ☛ 模型选择 ☛ 调参 ☛ 模型融合& s+ C* u. L$ i0 `/ h$ A
' b, D4 H" }; _' q2 ]
1.特征工程 5 q" c* A$ P4 M, U- n' m9 M3 H* G* T4 A) V- A d% H. F, r. K
特征工程是Kaggle比赛的重中之重,尤其是对于房价预测这类使用树模型的比赛。模型大同小异,基本是由GBDT模型演化而来,而且主要用XGBoost、LightGBM等几种开源框架。所以,模型大家都差不多,特征就是关键了。 + j+ [) }8 m4 v) H o 每个比赛都有独特的背景,想要发现甚至是自己创造出重要的特征,往往需要专业的领域知识,比如Zillow这个比赛要预测美国的房价,原始特征有卧室数量、面积,税收等等。想要自己通过原始特征组合,创造出一个“magic feature”就需要了解美国的房地产业。所以,选择一个自己熟悉领域的比赛,会比较有优势。 1 V: f% }, x1 l% A比赛背景千变万化,从数据科学的角度,还有许多通用的方法来做特征工程。这里列举一些这个比赛里用到的方法:: r+ S" @; Z8 k# Q7 T# S! k8 q! y
! i7 j; e4 m* I5 n' W8 |# b7 ]
(1)基础预处理:对category类型的数据OneHot编码;数值类型的数据归一化(但是这里用到的大多数模型都是基于决策树的,所以不需要), r: N! F' P; j! M
- |" y$ }0 k7 O2 l ~! n/ X- h
(2)缺失值处理:实际数据集中有许多数据是缺失的,考虑列出每个特征的缺失比例,比例过大的直接舍弃,否则想办法填充。这个比例没有什么定式,舍弃特征会丢掉有用信息,填充会引入噪声,具体怎么操作要看模型实际的表现。填充的话,基础的是用均值、中位数等填充,更准确的方法是用算法拟合,还可以直接把缺失视为一种特殊的值(这个比赛中的许多模型就是用-1填充)。. i- H1 c+ @& I
O( e: h/ f$ \9 ?; v% c) |对于树模型来说,数据缺失并不影响树的生成,所以xgboost会在生成树的同时,根据training loss自动学会将遇到缺失值时分裂到左子树还是右子树。作者Tianqi Chen的原话:1 a }( l% E w# Q4 |8 y
1 X7 k1 n! B2 q$ `. G9 G2 GInternally, XGBoost will automatically learn what is the best direction to go when a value is missing. Equivalently, this can be viewed as automatically "learn" what is the best imputation value for missing values based on reduction on training loss. , J, R, Q* C8 l4 X6 f3 E 0 O7 I- [, P. i, @(3)异常值(outlier): 由于各种原因,往往有一些样本的误差特别大,把这些样本加入模型会引入很大的噪声,就像很多打分的比赛会去掉最高分和最低分之后再取平均值。这个比赛中去掉这样大误差的outlier能带来很大的提升。& `- n: E* q/ N