比赛题目链接:https://www.kaggle.com/c/amazon-employee-access-challenge
ben.py
该脚本构建了基础数据集bsfeats,只对原始数据集做了最基本的特征工程。1.对个别变量进行线性组合得到新变量 2.按变量对数据进行分组,计算不同观测在组中出现的次数并取对数 3.计算各部门的资源使用率 4.计算各经理的资源占有量。需要强调的是,这些特征工程都是紧紧围绕业务知识展开的。
greedy.py
该脚本构建数据集greedy,greedy1,greedy2。分别将各列两两组合生成元组,对元组取哈希得到新的列,这个新的列可以代表之前组合的两列的交互作用,将原始数据集横向合并新生成的列得到了全是新特征的tuples数据集。同理,将各列三个一组进行组合用同样的方法得到全是组合再hash后全是新特征的triples数据集。最后将原始数据集、tuples数据集以及triple数据集横向拼在一起,即把新生成的特征放进去。由于不管是原始数据集还是新生成的tuples、triples数据集,很多都是类别型变量,对它们分别进行One-hot编码得到稀疏矩阵Xts。遍历Xts中的每一个特征,用自编的cv-loop函数分别计算auc得分,依照auc得分筛选出good_features。这里用的是前进法,比如第五个特征符合要求属于good_features,考查第六个特征时,把该特征与前五个特征一起放到函数中计算auc得分,相当于每放一个feature进来就计算一次auc,遍历完所有特征后对auc进行排序。需要注意的是,由于之前进行过one-hot编码,计算得分前要用scipy中的tocsr()将稀疏矩阵转化为压缩形式。
feature_extraction.py
tuples和triples函数分别对数据集中的变量两两组合和三三组合得到新的变量,至此,数据集的六大框架(bsfeats,greedy,greedy2,greedy3,tuples,triples)都已构建好。create_feature()函数按照基础模型、LR模型、Trees模型(这里指的是GradientBoostingClassifier、RandomForestClassifer和ExtraTreesClassifier)分别构建含有不同特征的数据集。在构建的过程中使用了变量的取平方、取平均、取对数、除总算频率等特征工程方法。其中用于LR模型和Trees的数据集都进行了进一步的预处理过程,包括各特征相互乘除构造新特征(用于表征特征间的相互作用)、去除常数变量、变量标准化处理、变量值加上1取对数、变量取平方、变量取三次方、用One-Hot编码稀疏化处理等。另外,这些特征工程并不是都用上,而是有选择的使用,使用不同的特征工程方法,能得到不同的数据集。