机器学习实战-微额借款用户人品预测

团队分享网址

1、项目背景

     互联网金融近年来异常火热,吸引了大量资本和人才进入。 在金融领域中,无论是投资理 财还是借贷放款,风险控制永远是最为核心和重要的问题,而存目前所有的互联网金融产品 中,微额借款,即借款金额在 500~JOOO 元的借款,由于其主要服务对象的特殊性,被企认为 是风险最高的细分借贷领域。 将要进行的实战比赛的主题便是通过数据挖掘和机器学习等技 术,分析小额微贷申请借款用户的信用状况,从而分析其是否会产生逾期行为。 

   比赛名称为“微额借款用户人品预测大赛”,由 CashBUS 现金巴士主办、 DataCastle 数 据城堡承办,比赛的官方页面为( http: //www.pkbigdata.com/common/cmpt/微额借款用户 人品预测大赛-竞赛信息html )。 比赛提供了多个 csv 文件数据,注册 DataCastle 并参加比赛 后即可下载。 数据包括训捺数据、 测试数据、 无标注数据三部分。     本质上是有监督学习中的二分类问题,即根据用户特征分为正常用户和逾期用户两类,使用 AUC 作为模型评估标准。

      比赛的冠军队伍是“不得直视本王”,他们的项目已经在 Github 上 开源 ( https://github.com/wepe/DataCastle-Solution ),包括全部的代码、项目解决方案 PDF 、 代码目录及运行说明 PDF,非常详细地分享了他们如何实现项目中的每一步。 这一比赛涵盖 了应用机器学习所需的常用技术和基本流程,解决了互联网金融这一火热领域中的真实问题, 而且冠军团队的完整项目全部开源,因此非常适合作为一个入门和巩固的机器学习实战项目, 以下便基于他们的解决思路来学习和复现一遍。

2. 数据概况 

数据地址:https://pan.baidu.com/s/1eTzH0f4密码:66uy 

数据主要包含以下几类:(编码均为UTF-8)

1) 训练集(带标签):15,000个样本
     带标签的训练集中共有15,000个样本。train_x.csv中存有样本的特征信息,uid为样本的id,x0、x1、x2...为特征。train_y.csv中存有样本的标签信息,uid为样本的id,y为样本的标签:1为正样本(人品杠杠滴),0为负样本(人品堪忧);

2) 测试集:5,000个样本
     test_x.csv中存有测试集的特征信息,格式同train_x.csv。参赛者的目标是尽可能准确地区分测试集中样本的标签。

3) 训练集(无标签):50,000个样本
    在微额借款的真实场景中,除了放款的客户(人品已知),还有相当一部分被拒绝的客户,他们的人品是未知的。为了提高本次比赛的趣味性与挑战性,我们从中挑选了50,000个样本,存在train_unlabeled.csv中,格式同train_x.csv。供参赛者进行semi-supervised learning的探索。

4)特征描述:
features_type.csv为本次比赛的1138个特征的类型资料;feature为特征名:x1, x2, x3...type为特征类型:numeric(数值型)或category(类别型)。
评分标准

3评分标准

评分算法
regression

4、 缺失值处

   首先需要进行数据清洗等预处理操作,其中最为重要的便是处理如居中的缺失值。之前介 绍过处理缺失值的几种方法,如直接丢弃包含缺失值的行或列、使用缺失值标识或统计值进行 补全、将缺失值转换成新的特征等。 在我们的认知中,一个可靠的借款人应当尽可能地完善各方面资料,因此不妨统计每条记录的缺失特征数量,并生成新的特征。 

     使用 Python 中的 pandas 包可以方便地完感以上统计,如果将训练集、测试集、无标注 集中的全部记录,按缺失特征数量由少到多排序,会’原喜地发现缺失特征数量呈现出分段特 征,如图  所示,其中 X轴表示排序序号,一共有 70 000 条记录, y轴表示每条记录的 缺失特征数量。绝大多数记录的缺失特征数量在 194 以下,因此删除缺失特征数量大于 194 的记录,避免可能导致的噪声,并生成两个新特征 miss_num 和 miss_group。 miss_num 即每 条记录的缺失特征数量,将 miss_num 进行区间化并得到 miss_group,即选择 32, 69, 147 作为阑值,将全部记录分为 4 类,并根据每条记录的 miss_num 将对应的 miss_group 设置为 L 2, 3, 4。

5  特征工程
    完成数据预处理之后,需要在已有特征的基础上,φ 通过特征工程生成尽可能丰富的新特 征,这里主要从排序特征、离散特征、计数特征、类别特征编码、交叉特征等几个方面进行特 征工程。
1.)排序特征 
对于清洗后的全部记录,分别按照每一维数值特征从小到大排序,将排序后每条记录的序 号作为该数值特征对应的排序特征,即可由 1 045 维数值特征生成 1 045 维排序特征。 由于数 值特征可以取任意数值,因此不同记录在同一特征上的取值之差可大可小,而排序特征只能依 次取连续的整数,因此相对于数值特征而言更加稳定、鲁棒性更强。
2)离散特征
接下来,分别将每一维数值特征进行区间化,可以使用按值区间化或按量区间化, 之前根 据 miss_num 生成 miss_group 的过程即按值区间化。 这里使用按量区间化,按照每一维数值 特征从小到大排序后,根据排序结果将全部记录分为 10 等份,每一份的离散特征分别取为 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,从而生成 1 045 维离散特征。 离散特征可以看作更加粗粒 度的排序特征,将特征的取值范围从大量连续的整数限制为 1~10 十个整数之中,有助于将全 部记录按照不同的数值特征进行分组和聚类。

3) 计数特征
在离散特征的基础上,对于每一行记录,统计其 1 045 维离散特征中, 1~10 分别出现的 次数,从而生成 10 维计数特征。 计数特征可以用于反映每条记录的数值特征水平。 例如, 当 一条记录的离散特征中 10 出现的次数比较多时,说明该记录的 l 045 维数值特征相对其他记 录处于较高的水平。 

4). 类别特征编码
对于类别型特征,使用 One-Hot 编码转换为向量,从而可以和其他数值型特征一起参与 后续模型的训练。 在本项目中,全部记录的 93 维类别型特征,经过 One-Hot 编码后可以得 到 832 维特征。
5) 交叉特征
最后,还可以尝试已有数值型特征两两之间的交叉组合,例如, x+y、 x-y、 .xxy、x^2+y^2,甚至其他更复杂的组合,从而生成大量交叉特征。 交叉特征不一定都有意义,但未知 而巨大的尝试空间也许会产生新的融合和可能,因此,虽然交叉特征的计算和筛选需要耗费大 量的时间和计算,但是如果条件允许的话,仍然值得一试。
 

6特征选择

    毫无疑问,有用的特征越多,有监督学习模型最终的性能也会越好。 对于特征工程生成的大量特征,并不是每一维特征都是有用的,不好的特征甚至会给学习带来额外的噪声,因此需 要对特征进行筛选和保留。 

   每次训练结束后,都可以使用 XGBoost 对当前所用的 全部特征进行重要性评估和排序。 这里继续使用 XGBoost 选择特征,即使用特征工程生成的 全部新特征,和原始特征一起训练、 XGBoost 二分类模型, 并使用 XGBoost 对以上特征进行重 要性排序,仅保留排名顺序靠前的部分中,对分类结果具有积极作用的特征。

7模型设计 

    完成特征选择后,接下来需要在选好的特任上训练模型。 首先考虑最简单的单模型,可以使用线性回归、随机森林、支持向量机等,也可以训练一个 XGBoost 二分类模型。 使用 Python 中的 XGBoost 实现,可以达到 0.717 左右的 AUC。 

   可以尝试多个 XGSoost 模型的集成,即训练36 个 XGBoost 二分类模型,并将它们在测 试集上的预测结果加权融合。 36 个 XGBoost 模型之间的差异性和多样性主要体现在以下两个 方面。 

• 特征多样Q 每个 XGBoost 使用的特征集合存在差异,分别保留前 Ni 个原始特征、前 N1.个排序特征、前N2离散特征,以及N3 个计数特征, 其中 N1.N2、 N3「分别在 300~500、 300~500、 64~100 的范围内随机选取。 以上 3 个随机范围的选择,也是根据各类特征的特征 重要性排序结果确定的。 

• 模型多样。 每个 XGBoost 的模型参数存在差异,使用上一节介绍的方法进行调参后确 定每一个模型参数的最优值。 为了实现模型的多样化, 每个 XGBoost 模型的各项参数都在对 应的最优值附近范围内随机选取即可。

使用不同的特征集合,训练好不同模型参数的多个 XGBoost 之后,并将它们在测试集上 的预测结果加权融合,可以达到 0.725 左右的 AUC,即通过集成学习实现了将近 1%的提升。 

    完成单模型的集成之后,进一步可以尝试多模型的融合,充分利用不同模型的原理和特点 进行取长补短。 将 XGBoost 分别用 Python、 R、 Java 等不同语言实现并训练,将对应的预测 结果和 SVM、 XGBoost 集成等模型进一步融合,可以达到 0.728 左右的 AUC。

     我们已经在模型设计上进行了不少工作,接下来需要挖掘无标注数据的价值,通过半监督 学习方法扩充训练集的规模。 每次从无标注数据中选取若干条记录,如每次 20 条,使用目前 得到的最优模型预测这些记录的分类结果,从而将无标注数据转换成有标注数据。 尝试将这些 生成的有标注数据加入训练集中并再次训练最优模型,如果能够带来性能提升则保留,否则将 其从训练集中移除。 通过以上半监督学习方法,从 50 000 条无标注数据中生成大量有效的有标注数据,扩充训练集规模后将带来不小的性能提升,可以达到 0.734 左右的 AUC。

 项目总结 

     通过本次比赛项目实战,熟悉了算法类数据比赛涉及的一些基本内容,大赛方一般会提供 实际应用场景中的真实数据,通常会包括训练、集和测试多仨等,需要使用机器学习中的技术和方 法,完成分类、回归、时序预测等一系列任务。 Python 中的 numpy、 pandas、 scikit-learn 等工具包便足以完成大部分任务,主要包括数据预处理、特征工程、特征选择、特征降维、模 型设计、模型调参、模型评估等几个步骤。 随着我们参与和完成越来越多的比赛和项目 ,会逐 步积累更多关于以上各个步骤的经验和方法,在遇到新的问题时,也能很快找到解决方案并快 速实现。 在这一节中主要讨论了微额借款用户人品预测大赛的解决思路,完整的项目报告、源代 码、代码运行目录和说明文件都可以在冠军团队的 Github 项目中找 到

( https: //github.com/wepe/DataCastle-Solution ),可以参考其中的说明和代码, 、将整个项 目动手实践一次,从而提高自己的代码能力,巩固对机器学习相关内容的掌握。 

 


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值