首先贴上第一名大神的分享链接:
https://www.kaggle.com/c/ieee-fraud-detection/discussion/111510
一、XGB代码
这里是研究代码而做的几点笔记:
- 重在特征分析,包括联合两个或多个特征,联合多个特征后进行平均值和方差运算单独再成特征,计算值出现的个数(直方图)并归一化再成特征,用factorize而少用dummies处理object特征
- 处理特征的时候经常用
astype
来减小使用内存 - 时间一致性:每次用一个特征去进行训练预测,计算roc,低于0.5的则认定测试失败并移除该特征
- 对于时间的处理 - 他是直接把秒级处理成了月级
- 然后进行构造uid特征,并进行后处理(还没懂)
二、How to find UIDs
- 举个栗子:什么是UIDs
很简单,就是较为明显的对样本进行分类~
以下是作者寻找uids所做的操作:
对于m以前的列:(53列)
- 先用lightGBM或XGBoost的特征重要性进行排行,筛选出重要性前n(11)的特征;
- 为了概括性,选出3个不同领域的特征联合起来形成uid特征,再按照联合特征groupby对其他的特征计算均值和方差,形成新的特征
- notes:
对于v*列 - 同样先做重要性排行
- 然后做了相关性分析
- 将相关性高的特征剔除,从而选出几列特征和上述的uid特征以’nunique’的方式聚合(没懂?因为v列特征较为离散,此方式计算不同的个数有多少个?见下疑问)
- notes:
疑问:
- 聚合特征有时用mean、std,有时用nuique,为什么?
我的理解:
(1)对于特征值是离散值的特征,如果出现的值较为单一,用mean或std
(2)对于特征值是离散值的特征,如果出现的值多样化,用nuique
(3)对于特征值是连续值的特征,用mean或std - uid和其他特征聚合,其他特征是怎么选择的?
- 特征之间的聚合,依据是什么?
然后对应xgb代码 有一个后处理的解释,这里仍然没懂。