第一次参加DF的比赛(两个月前的比赛了),赛题为CCF-BDCI2017的《量子数聚-企业经营退出风险预测》,在此记录比赛过程中自己摸索的一些经验(运气使然前100进入了复赛,虽然最终离进入决赛还差了好几十名 o(一︿一+)o)。

*1.任务描述
本赛题以企业为中心,围绕企业主体在多方面留下的行为足迹信息构建训练数据集,以企业在未来两年内是否因经营不善退出市场作为目标变量进行预测。
参赛者需要利用训练数据集中企业信息数据,构建算法模型,并利用该算法模型对验证数据集中企业,给出预测结果以及风险概率值。
预测结果以AUC值作为主要评估标准,在AUC值(保留到小数点后3位数字)相同的情况下,则以F1-score(命中率及覆盖率)进行辅助评估。

2.队伍名称:略

3.数据描述:
数据基本情况
本赛题提供两种数据:
(1)企业身份信息(已脱敏)及企业在一定时间范围内的行为数据。该数据对训练集和评测集都是相同的。
(2)目标数据。目标值为该企业在2017年8月时的经营状况:停业1,正常经营0
该表仅训练数据有。
选手从数据中自行组成特征和数据格式,自由组合训练测试数据比例。
为保护数据安全,所有数据均已进行了采样和必要的脱敏处理。
数据中部分列存在空值或NULL,记录可能存在重复情况,请参赛者根据数据字段描述自行处理。

具体赛题和数据格式:http://www.datafountain.cn/#/competitions/271/intro

4.数据处理:
初赛数据规模:原始数据约80MB大小,经过数据清洗和去重后供本地训练的数据集有153007行,需要在线提交验证的数据集102125行。
复赛数据规模:原始数据约270MB大小,经过数据清洗和去重后供本地训练的数据集有218265行,需要在线提交验证的数据集218248行。
数据处理使用python3.5+pandas。数据处理其实在提取特征之前或者之后都会使用,因为在多个表间取有相关联系的数据时或者表间数据进行拼接时都会产生数据缺失或者数据异常的情况。
4.1 数据去重
对原始数据中提供的13个表,根据每个数据库的主键对其进行去重操作。
4.2 处理NA
NA即数据中的missing value,一般需要分情况处理:
4.2.1 missing value占总体的比例非常小,那么直接填入平均值或者众数;
4.2.2 missing value所占比例较均衡,那么可以考虑它跟其他特征的关系,如果关系明显,那么直接根据其他特征填入;
4.2.3 missing value所占比例大,那么直接将missing value当作该特征取值的一种情况,选与能已有的值相区分的值;
4.2.3 如果前期只是为了跑一个初始的模型,可以先统一给NA取0或-1或-999这种特殊值;
4.3 去除不必要的符号
特征取值一般是离散值或者连续值,因此需将原始数据中不需要的符号去除,或者说是可以提取原始数据中的离散值或连续值,一般可以使用split函数或者正则表达式,eg:如年份为‘2017年1月1日’,应将汉字去除。
4.4 数据重新编码或者取对数变换
特征变量为连续值:如果为长尾分布并且考虑使用线性模型,可以对变量进行对数变换。
特征变量为离散值:观察每个离散值的频率分布,对于频次较低的特征,可以考虑统一编码为“其他”类别。
4.5 处理野点
一般是通过画图的方式处理离群点,但是此次比赛的数据规模较大,利用画图的方式有时不能准确的发现离群点的位置。处理野点的方式可以直接删除或者取统计值(平均值,众数等)。
4.6 数据标准化
原始数据集中由于各个特征的含义和单位不同,不同特征的数据取值范围有很大差异,可能会导致模型权重偏移的情况,因此一般需要对数据进行标准化,即去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
z-score 标准化

X∗=X−μσ

X^*=\frac{X-μ}{σ}
其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
经过处理的数据符合标准正态分布,即均值为0,标准差为1,适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
4.7 数据归一化
即将数据统一映射到[0,1]区间上。

X∗=X−XminXmax−Xmin

X^*= \frac{X-X_{min}}{X_{max}-X_{min} }
Tree-based的算法基本上不需要标准化或归一化(猜测:是每次选择属性点只针对该属性进行分类的原因因此对量度不敏感吗)。
4.8 Binning
也称为 Bucketization,对连续的特征做离散化。 比赛应用:对某个企业所投资机构的存活时间做Binning,然后再统计不同的存活时间里的机构数目,对应的就是统计了某企业所投资的机构中存活时间0~1年的有多少。

5.特征工程
好的特征才是比赛最重要的部分,选择何种模型何种算法都是为了达到特征所能发掘信息的上限,因此特征工程是整个比赛过程中最重要的一步,也可以说是贯穿整个比赛的步骤。
5.1从原始特征中选择有用的特征
原始数据中并不是所有的特征都是对模型的构建有作用的,有的毫无汇率的数据甚至会对模型的性能产生负面的作用。在此次比赛中,我们首先弄清楚了每个原始特征的具体意义,然后剔除了那些明显和结果没有联系的数据,例如复赛的时候提供了训练数据中已停业企业的停业时间,由于测试数据集中并没有提供该特征,而且这次数据制作者并没有给出能找到leakage(数据泄露)的机会,所以该特征数据基本提供不了什么有价值的信息,因此在最终选择的结果中剔除了该特征。另外,很多python的model packages都包含给特征数据重要性(特征在构建模型过程中的作用,一般稀疏的特征重要性比较小)进行排序的功能,这个也可以提供一定的参考价值。
5.2 特征构建
特征构建即从原有的特征中,人工地创建出新的特征,充分发掘数据包含的信息。
5.2.1 时间窗口特征
企业风险预测的数据中包含了很多的时间数据,最简单的处理方式是提取出年份,月份,具体日期作为离散数值使用,而且在这次比赛中发现该方法虽然简单但是效益却极为不错。
还可以根据需要统计出某个时间段内的另外一个特征的统计值(求和,平均数等),比如统计某个企业 [2, 5, 8, 13, 21, 35]个月内的变更Alter记录数目。
5.2.2 one – hot 编码
one – hot 编码是建模中很常见的一种特征构建方法,即某个特征有n(n一般不大)种值,那该特征可以转化为维度为n的0-1向量,在很多时候该向量更适合算法进行分类。例如企业风险预测原始数据中的RIGHTTYPE(权利类型)特征,该特征包含7种值,便可以转化成[1,0,0,0,0,0,0]这样的length为7的特征向量,但是该方法会增加特征矩阵的维度,需看情况使用。
5.2.3 根据特征之间的联系求统计值
例如企业风险预测原始数据中,包含FBDATE(企业失信列入日期)和SXENDDATE(失信结束日期),我们可以计算企业失信结束的行为数目占企业失信行为总数目的比例作为一个新的特征,在实际运用中发现该特征的确对算法性能提示有作用。
5.2.4 特征交互和组合
这两种方法的目的性不强,一般搞不清产生特征的具体意义,而且通常需进行多次的试验才能产生一个较为有用的特征。特征交互仅适用于连续性特征,例如特征X1和X2,我们可以通过X1+X2、X1-X2等数值计算方式产生新的特征。特征组合适用于类别型数据,例如企业风险预测比赛中,可以将行业大类特征和企业类型进行多对多的组合,从中选择较为重要的特征。

6. 模型构建
6.1.单模型
该次比赛选择了若干机器学习算法,基本来源于python的拓展包。选择模型之后需进行调参,不同算法的调参方式不尽相同,但是大体上都是属于网格搜索,尝试过使用贪心调参,在有些时候能取得较为不错的效果,但是经常会出现本地结果提升但线上结果不变甚至下降的情况。
网上有比较详细的调参的博客:http://www.cnblogs.com/jasonfreak/p/5720137.html
本次尝试的单模型有:
LogisticRegression,GradientBoostingClassifier,
xgboost,RandomForestClassifier,
LinearRegression,GaussianNB,ExtraTreesClassifier

由于xgboost模型对效果的提升比较大,并且调参上花了比较多的时间,因此介绍下该模型的优点。Xgboost是一种集成提升算法,传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的LogisticRegression或者线性回归。xgboost在代价函数里加入了正则项,用于控制模型的复杂度,可以使得训练出来的模型更为简洁高效,防止过拟合。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算过程。还有一个最为重要的地方是xgboost算法支持并行计算,具体的实现过程现在还不理解。
Xgboost模型需要调参的参数比较多,如果使用网格搜索的方式会导致寻找最优解话费的时间太长,在比赛流程中我们经常会调整数据特征,没有太多时间来使用网格搜索的方法,因此可以选择较为贪心的方法。我们可以先设置步长eta为稍微大一点的值,例如0.1或更大,再按照max_depth,subsample,min_child_weight,colsample_bytree的顺序依次调参,具体每个参数的调整过程是先定初始值,然后分别向该值的两端调整,效果变差则类似二分的方式取和上次取值的平均值,按照贪心的方式得到一组效果较为满意的参数。
6.2.模型融合
由于数据集有些特征较为稠密,有些特征却特别稀疏,因此一般的单模型都无法很好的适合处理这种数据。在复赛的时候尝试过比较多的模型融合方法,但是可能因为细节的问题始终不能让线上结果获得提升。
6.2.1 averaging
分为一般平均和加权平均,两者都是对于使用的模型预测结果求相应的平均值作为最终的预测结果。
6.2.2 ranking
rank的思想其实和averaging类似,但rank是把排名做平均,对于AUC指标比较有效。
公式如下:

∑ni=1WiRi

∑_{i=1}^n{\frac{W_i}{R_i}}
上式中,Wi表示该模型权重,Ri表示样本在第i个模型中的升序排名。
6.2.3 Stacking
模型融合过程中花费时间较长的方法,由于个人技术问题没有获得好的效果。Stacking的关键点在于base model的选择,一般base model之间的差异越大即相关性要小,而且模型之间的性能差异比较小的时候能取得提升。本次比赛使用了二层的stacking模型,第一层训练将数据集分为5-fold,选择的base model为LogisticRegression,xgboost,RandomForestClassifier,GaussianNB,ExtraTreesClassifier,第二层的预测模型选择xgboost,在这之间base model替换了多次,发现上述的组合效果较好,但还是没能对单模型的成绩进行提高。

笔记-首次参加数据挖掘比赛摸索的经验(赛题为CCF-BDCI2017企业经营退出风险预测)相关推荐

  1. 【数据挖掘】金融风控 Task01 赛题理解

    [数据挖掘]金融风控 Task01 赛题理解 1.赛题介绍 1.1赛题概况 1.2 数据概况 1.3 预测指标 1.3.1 混淆矩阵 1.3.2 准确率.精确率.召回率.F1 Score 1.3.3 ...

  2. 自然语言处理NLP星空智能对话机器人系列:NLP on Transformers 101 第16章:Kaggle BERT比赛CommonLit Readability Prize赛题解析

    自然语言处理NLP星空智能对话机器人系列:NLP on Transformers 101 第16章:Kaggle BERT比赛CommonLit Readability Prize赛题解析 第16章: ...

  3. 冠军奖30万!刘强东搞了个“猪脸识别”比赛,中美两地同时启动(附比赛详细日程及赛题说明)

    编辑 | Katerina Donna 润色 | 鸽子 11月6日,由京东金融与红杉资本联合主办的首届"JDD-2017京东金融全球数据探索者大会"在751大罐举行,同时,大会宣布 ...

  4. 记首次参加网络安全比赛(初赛-知识竞赛,决赛-CTF夺旗赛-解题模式)

    网络安全相关的方向很多,几乎IT相关的安全内容都可以涵盖在内.笔者本身的知识体系更偏向于编程语言和Web应用,本次参赛可谓极具挑战,但是就是喜欢这种感觉:) 赛程安排 9月16日接到通知 9月26日初 ...

  5. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  6. Kaggle 数据挖掘比赛经验分享 (转载)

     [干货]Kaggle 数据挖掘比赛经验分享 (转载) 标签: 数据挖掘数据科学家机器学习kaggle 2017-05-21 19:25 99人阅读 评论(0) 收藏 举报 本文章已收录于: 分类 ...

  7. kaggle账号_Kaggle 数据挖掘比赛经验分享

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 腾讯广告算法大赛 作者 | 陈成龙 Kaggle 于 2010 年创立,专注数据科学,机器学 ...

  8. Kaggle 数据挖掘比赛经验分享(转)

    原作者:陈成龙 简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛 ...

  9. 【干货】Kaggle 数据挖掘比赛经验分享

    [干货]Kaggle 数据挖掘比赛经验分享 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Ka ...

最新文章

  1. ICON: 从单张图片重建穿衣服人体模型
  2. Java好文统计( 引用 )
  3. python对文件的操作模式_python对文件的操作
  4. gradle 转 maven
  5. 搜索计算机硬盘的索引恢复,可以做到秒搜的神器everything,你可知对硬盘到底有多大伤害...
  6. windows加密和linux加密_Windows系统自带的BitLocker加密方法
  7. FreeMarker合并单元格
  8. node定时任务php 卡,NodeJs实现定时任务的示例代码
  9. composer 常用命令总结
  10. 搜索工具推荐 Windows中的everyting 和 mac下的alfred
  11. 超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的
  12. java 为透明图片添加背景颜色
  13. 饼状统计图php,制作圆饼统计图
  14. 【高手推荐:主题下载】
  15. 谎言,统计数据和供应商
  16. 维山VS073高拍仪技术规格说明书
  17. gpu浮点计算能力floaps_为何CPU浮点计算能力差,什么是浮点计算,GPU为何擅长浮点计算?...
  18. java verifyerror_java.lang.VerifyError 异常解决方法
  19. 计算机网络参数配置,计算机网络实验:实验一 主机系统网络参数配置与测试.doc...
  20. 集合后台排序(java)——按照汉字中文拼音

热门文章

  1. 数据结构之前序遍历,中序遍历,后序遍历
  2. L1正则化优化问题的一种求解方法
  3. 【Zigbee精华教程01】Zigbee无线组网技术入门建议与学习路线
  4. android 隐私泄露 路径,一种Android应用隐私泄露漏洞检测方法与流程
  5. hdu 5473 There was a kingdom(dp+几何)
  6. 百度地图标记打点展示
  7. ixed php,「」解决PHP script * is protected by SourceGuardian
  8. 什么是码元(以二进制位来参考)
  9. python - 求商和余数“/“ “//“ “%“运算符的区别
  10. 如何用计算机画函数图像,怎样用电脑画函数图象,或用什麽软件画