这个项目是一个二分类问题,评估指标使用的是ROC AUC,即假正率(False Positive Rate)和真正率(True Positive Rate)构成的曲线下的面积。
数据特点
数据规模较大,可以用复杂点的模型(20,0000×200);
特征的具体含义不明确,难以从业务的角度进行特征工程,需要另辟蹊径或重点在模型上下功夫;
所有特征都是浮点数,且没有缺失值,所以不需要进行数据清洗;
正类样本的比例大约是10%,算是有偏的,后面需要用分层抽样(Stratified sampling)。
数据探索与特征工程
从Kaggle的数据探索工具来看,大多数特征的分布接近正态,不需要进行变换;
自己探索发现特征与标签之间的线性相关性较弱(小于0.1),各特征之间的相关性非常低(小于0.01),查看了散点图发现也不存在其它形式的相关性,所以相关性的探索没有带来任何信息。
在Kaggle上看别人的Notebook,得到一些别的数据探索和特征工程的点:
- 观察训练特征和测试特征之间的散点图,以了解训练集和测试集是否有分布差异;
- 不同标签下的特征数值分布密度图(density plot),发现一些特征的分布是跟标签有关的;还对比了测试集和训练集中的特征数值分布密度图,发现这个数据集里面训练集和测试集的特征分布几乎完全一样。推断出应该能比较好地把测试得分向验证得分靠近。
- 所有样本&特征的统计信息,按训练矩阵X的行或者列统计;
- 等等。
虽然在这个问题上这些特征探索没有得到太多有效信息,但作者提到这是对于数量众多、匿名化的特征问题的一些启发性探索。
模型选择与对比
逻辑回归
首先用逻辑回归做了初步测试,发现训练集和测试集的得分很接近,说明没有过拟合数据。而且得分也有0.85以上,还不错,可能是因为这个问题的特征特征和标签线性相关比较好,特征之间也比较独立,所以用线性模型也还不错。 而且因为模型简单,运算速度很快。不过要想更好地捕捉数据中的特征模式,可以在这个基础上去提升模型的复杂度。
# 三折交叉验证结果
{
'fit_time': array([1.28495526, 1.11315322, 1.02748775]),
'score_time': array([0.11163568, 0.14464664, 0.11003375]),
'test_score': array([0.86082031, 0.85723536, 0.85953647]),
'train_score': array([0.86103513, 0.86267453, 0.86136723])}
随机森林
接下来使用集成学习的树模型。树模型不需要特征缩放,我担心特征缩放损失了特征之间相对大小的信息,就没有缩放特征。
先尝试了随机森林。因为特征比较多,在默认参数下,模