企业非法集资风险预测_2020CCF--企业非法集资风险预测83.35baseline

333d4318236ac8e30cca4da905594f9b.png
企业非法集资风险预测 竞赛 - DataFountain​www.datafountain.cn
b50d16067845d0ea42964f26edc14e06.png
代码地址​github.com

欢迎大家开源关注我的github仓库以及该知乎专栏,该仓库用于记录和定期提供各大数据科学竞赛的赛事消息和原创baseline,思路分享以及博主的一些竞赛心得和学习资料等. 主要涵盖:kaggle, 阿里天池,华为云大赛校园赛,百度aistudio,和鲸社区,datafountain等。目前已经总结了多个比赛的获奖方案和baseline

赛题描述:

背景:非法集资严重干扰了正常的经济、金融秩序,使参与者遭受经济损失,甚至生活陷入困境,极易引发社会不稳定和大量社会治安问题,甚至引发局部地区的社会动荡。如何根据大量的企业信息建立预测模型并判断企业是否存在非法集资风险,对监管部门、企业合作伙伴、投资者都具有一定的价值。任务:利用机器学习、深度学习等方法训练一个预测模型,该模型可学习企业的相关信息,以预测企业是否存在非法集资风险。赛题的难点在于数据集包括大量的企业相关信息,如何从中提取有效的特征并进行风险预测成为本赛题的关键问题

解决思路:

目前只提交了9次,后续有时间会继续做,所以还会继续更新效果更好的代码!目前的特征基本没有怎么做,所以改进空间还有很大。目测好好做数据和特征筛选会取得很好的成绩,但是最稳的还是有一个稳定的线下验证,如果有一个和线上同升/降的验证集,比赛基本拿下一半了
  1. 缺失值填补(一半缺失的列删除,对于类别特征:NaN当作单独一个类别进行数值编码)
  2. object类型数值编码
  3. 交叉特征和分桶特征,对于几个重要的特征(企业类别,细分类这种做交叉特征是很有意义的)
  4. merge每一个表格的数据(基本信息表,纳税表,年度报表,变动表,舆论表,其余)
  5. 选出category特征给catboost单独指定
  6. 暴力搜索参数
  7. 随机森林单模五折交叉验证:线下:832,线上:829
  8. catboost单模五折交叉验证:线下:841,线上:828
  9. 随机森林+catboost融合(取前20重要的特征:线上834
  10. 特征筛选十分重要,避免过度拟合到线下的验证数据
  • 缺失值填补(一半缺失的列删除,对于类别特征:NaN当作单独一个类别进行数值编码)
  • object类型数值编码
  • 交叉特征和分桶特征,对于几个重要的特征(企业类别,细分类这种做交叉特征是很有意义的)
  • merge每一个表格的数据(基本信息表,纳税表,年度报表,变动表,舆论表,其余)
  • 选出category特征给catboost单独指定
  • 暴力搜索参数
  • 随机森林单模五折交叉验证:线下:832,线上:829
  • catboost单模五折交叉验证:线下:841,线上:828
  • 随机森林+catboost融合(取前20重要的特征:线上834
  • 特征筛选十分重要,避免过度拟合到线下的验证数据

数据分析:

本赛题数据缺失值较多,除了企业的基本信息较为齐全外,其余各表信息均有缺失。很多企业id空缺 训练集总共14865条样本,其中正例:13884,负例981.约为14:1.

下面是对数据的初步分析:

base_info=pd.read_csv('train/base_info.csv')#企业的基本信息
annual_report_info=pd.read_csv('train/annual_report_info.csv')#企业的年报基本信息
tax_info=pd.read_csv('train/tax_info.csv')#企业的纳税信息
change_info=pd.read_csv('train/tax_info.csv')#变更信息
news_info=pd.read_csv('train/news_info.csv')#舆情信息
other_info=pd.read_csv('train/other_info.csv')#其它信息
entprise_info=pd.read_csv('train/entprise_info.csv')#企业标注信息{0: 13884, 1: 981}
entprise_evaluate=pd.read_csv('entprise_evaluate.csv')#未标注信息print('base_info shape:',base_info.shape,'id unique:',len(base_info['id'].unique()))
print('annual_report_info shape:',annual_report_info.shape,'id unique:',len(annual_report_info['id'].unique()))
print('tax_info shape:',tax_info.shape,'id unique:',len(tax_info['id'].unique()))
print('change_info shape:',change_info.shape,'id unique:',len(change_info['id'].unique()))
print('news_info shape:',news_info.shape,'id unique:',len(news_info['id'].unique()))
print('other_info shape:',other_info.shape,'id unique:',len(other_info['id'].unique()))
print('entprise_info shape:',entprise_info.shape,'id unique:',len(entprise_info['id'].unique()))
print('entprise_evaluate shape:',entprise_evaluate.shape,'id unique:',len(entprise_evaluate['id'].unique()))

处理base_info数据:主要是对数据object列进行数值编码

# #处理base_info数据
base_info_clean=base_info.drop(['opscope','opfrom','opto'],axis=1)#............................对object类型进行编码...............................
base_info_clean['industryphy']=base_info_clean['industryphy'].fillna("无")
base_info_clean['dom']=base_info_clean['dom'].fillna("无")
base_info_clean['opform']=base_info_clean['opform'].fillna("无")
base_info_clean['oploc']=base_info_clean['oploc'].fillna("无")
#
dic={}
cate=base_info_clean.industryphy.unique()
for i in range(len(cate)):dic[cate[i]]=ibuf = pd.DataFrame()
buf_group = base_info_clean.groupby('industryphy',sort=False)
for name,group in buf_group:group['industryphy'] = dic[name]buf = pd.concat([buf,group],ignore_index=True)
print('finished 1....')
#
dic={}
cate=buf.dom.unique()
for i in range(len(cate)):dic[cate[i]]=ibuf_group = buf.groupby('dom',sort=False)
buf = pd.DataFrame()
for name,group in buf_group:group['dom'] = dic[name]buf = pd.concat([buf,group],ignore_index=True)
print('finished 2....')
#
dic={}
cate=buf.opform.unique()
for i in range(len(cate)):dic[cate[i]]=ibuf_group = buf.groupby('opform',sort=False)
buf = pd.DataFrame()
for name,group in buf_group:group['opform'] = dic[name]buf = pd.concat([buf,group],ignore_index=True)
print('finished 3....')
#
dic={}
cate=buf.oploc.unique()
for i in range(len(cate)):dic[cate[i]]=ibuf_group = buf.groupby('oploc',sort=False)
buf = pd.DataFrame()
for name,group in buf_group:group['oploc'] = dic[name]buf = pd.concat([buf,group],ignore_index=True)
print('finished 4....')
#
buf=buf.fillna(-1)
#
buf_group = buf.groupby('id',sort=False).agg('mean')
base_info_clean=pd.DataFrame(buf_group).reset_index()
#
print('编码完毕.................')

对一些重要的特征进行交叉组合和分桶构造新特征

#........................分桶.................................
def bucket(name,bucket_len):gap_list=[base_info_clean[name].quantile(i/bucket_len) for i in range(bucket_len+1)]len_data=len(base_info_clean[name])new_col=[]for i in base_info_clean[name].values:for j in range(len(gap_list)):if gap_list[j]>=i:encode=jbreaknew_col.append(encode)return new_col
#注册资本_实缴资本
base_info_clean['regcap_reccap']=base_info_clean['regcap']-base_info_clean['reccap']
#注册资本分桶
base_info_clean['regcap']=base_info_clean['regcap'].fillna(base_info_clean['regcap'].median())
base_info_clean['bucket_regcap']=bucket('regcap',5)
#实缴资本分桶
base_info_clean['reccap']=base_info_clean['reccap'].fillna(base_info_clean['reccap'].median())
base_info_clean['bucket_reccap']=bucket('reccap',5)
#注册资本_实缴资本分桶
base_info_clean['regcap_reccap']=base_info_clean['regcap_reccap'].fillna(base_info_clean['regcap_reccap'].median())
base_info_clean['bucket_regcap_reccap']=bucket('regcap_reccap',5)
print('分桶完毕.................')
#.............................交叉.........................
#作两个特征的交叉
def cross_two(name_1,name_2):new_col=[]encode=0dic={}val_1=base_info[name_1]val_2=base_info[name_2]for i in tqdm(range(len(val_1))):tmp=str(val_1[i])+'_'+str(val_2[i])if tmp in dic:new_col.append(dic[tmp])else:dic[tmp]=encodenew_col.append(encode)encode+=1return new_col
#作企业类型-小类的交叉特征
base_info_clean['enttypegb']=base_info_clean['enttypegb'].fillna("无")
base_info_clean['enttypeitem']=base_info_clean['enttypeitem'].fillna("无")
new_col=cross_two('enttypegb','enttypeitem')#作企业类型-小类的交叉特征
base_info_clean['enttypegb_enttypeitem']=new_col
#
#行业类别-细类的交叉特征
base_info_clean['industryphy']=base_info_clean['industryphy'].fillna("无")
base_info_clean['industryco']=base_info_clean['industryco'].fillna("无")
new_col=cross_two('industryphy','industryco')#作企业类型-小类的交叉特征
base_info_clean['industryphy_industryco']=new_col
print('交叉特征完毕.................')

处理其它几个表格的方式相同,完整代码见文章开头的github地址!

目前没有几个手工特征,之前试过一个特征不做,就用原始数据也能到82.5+的成绩。所以模型的改进空间还有很大,预祝大家取得好成绩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协程,IO模式

1、协程(别人的模块,达到单线程并发效果) 程序的运行状态: 阻塞: IO阻塞 非阻塞: 运行 就绪 单线程实现并发: 在应用程序里控制多个任务的切换保存状态 可以把IO减下来,但是不可能降…

华为p40 pro原理图_4188起 华为P40/Pro/Pro+国行发布 顶配8888 河图正式上线!

声音 | 小白昨天晚上19:30,华为举行了时长两个多小时的新品发布会,正式带来了华为P40系列国行版,以及一系列的手机配件类新品和其他新品(见后面的文章),由于详细配置之前海外发布会已经公布的差不多了,咱废…

最新处理器排名_安兔兔Android处理器天梯榜发布:最强的还是它

点击上方蓝字【安兔兔】关注我文章每天不断更!为了让大家对自己使用的手机处理器性能有一个更直观的认知,安兔兔今天正式发布了Android手机处理器天梯榜。由于安兔兔V8增加了存储和刷新率在总分方面所占据的权重,因此为了避免手机配置对排名造…

vue动态切换css文件_如何在vue组件中动态的引入css文件?

问题描述如标签描述的不准确,请见新直能分支调二浏页器朋代说谅我的需求是开的接都上的和,近很触是没他电同近很触是没发多套皮肤,打包的时候只加载其中某一种的皮肤(不需要动态换肤),因为css文件过大,后期配套的css文…

【NOI 2018】归程(Kruskal重构树)

题面在这里就不放了。 同步赛在做这个题的时候,心里有点纠结,很容易想到离线的做法,将边和询问一起按水位线排序,模拟水位下降,维护当前的各个联通块中距离$1$最近的距离,每次遇到询问时输出所在联通块的信…

latex大括号 多行公式_如何快速入门 LaTeX,在 XMind 2020 中轻松输入方程。

数学方程输入对于很多理工科朋友来说是一件让人头疼的事情。不仅是数学方程本身就纷繁复杂花样百出,各种输入语法更是劝退无数人。然而很多看似复杂的东西其实并非如想象中的难,抓住本质即可快速入门。今天和大家分享下如何快速入门 LaTeX,在…

全国计算机等级考试题库二级C操作题100套(第08套)

更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程刷题面经求职讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进…

部署及配置Lync Server 2013 监控功能

在上面一篇文章中我们已经部署了存档功能,并且在标准版环境搭建了一台SQLServer服务器作为后端数据库服务器,有了这台服务器我们可以做什么呢?存档,当然还有监控,以及整个CMS。当然这都是一步一步演变的,并…

mysql 客户服务号获取_《MySQL排错指南》——1.4 获取查询信息-阿里云开发者社区...

本节书摘来自异步社区出版社《MySQL排错指南》一书中的第1章,第1.4节,作者:【美】Sveta Smirnova(斯维特 斯米尔诺娃),更多章节内容可以访问云栖社区“异步社区”公众号查看。1.4 获取查询信息正如前一节看到的一样,数…

基于交换芯片的五元组的PCL规则过滤功能

2019独角兽企业重金招聘Python工程师标准>>> 基于交换芯片的五元组的PCL规则过滤功能作者: 韩大卫吉林师范大学2012.12.10Not Approved by Document Control Review Copy Only基于Marvell 98DX51xx/81xx交换芯片的五元组等的策略规则(PCL)过滤功能.现将部分的功能的…

python docx 合并文档 图片_不再为处理PDF烦恼,python处理操作PDF全攻略

本篇聊下Python对pdf的各种操作,包含pdf转word,pdf转图片,pdf翻转,加密,加水印等。pdf转换word文档 保留格式pdf转换为word文档,被大众经常使用的是纯Python库pdfminer和python-docx搭配使用,不…

windows server 2012 初安装体验

昨天晚上的windows server 2012 已时行 了发布了,为之在之前我已进行了下载测试安装,本来晚间想用来在虚拟机下进行安装VM-tool工具的,但是却因种种原因没有成功,为之补一下前面没有安装的过程截图。 进入下载页后,下载…

安卓APP_ 控件(1)—— TextView

摘自:安卓APP_ 控件(1)—— TextView 作者:丶PURSUING 发布时间: 2021-03-28 21:53:49 网址:https://blog.csdn.net/weixin_44742824/article/details/115283233 本文为学习笔记,是安卓APP学习的…

用python做数据分析pdf_利用python进行数据分析pdf

利用python进行数据分析pdf微盘下载!《利用python进行数据分析》利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。利用python进行数据分析简介: 还在苦苦寻觅用Python控…

安卓APP_ 控件(2)—— Button

摘自:安卓APP_ 控件(2)—— Button 作者:丶PURSUING 发布时间: 2021-03-29 14:20:54 网址:https://blog.csdn.net/weixin_44742824/article/details/115290501 开篇:安卓APP_ 控件(1…

安卓APP_ 控件(3)—— EditText

摘自:安卓APP_ 控件(3)—— EditText 作者:丶PURSUING 发布时间: 2021-03-29 18:43:40 网址:https://blog.csdn.net/weixin_44742824/article/details/115305883 开篇:安卓APP_ 控件&#xff08…

python做游戏怎么实现窗口_python和py游戏窗口类

你在draw_sprite()中有事件循环,所以它一直运行到游戏结束,window.set_background永远不会执行。在您的代码构造不正确。在我试着更正它,稍后再发送代码。在编辑:如何组织代码的简单示例。在现在它在一个文件中。在Pygame中总是一…

如何使得账户密码永不过期

如何使得账户密码永不过期 原文:如何使得账户密码永不过期可以通过以下vbs脚本做的使得账户密码永不过期 dim users获取所有用户set users getobject("winmgmts:{impersonationlevelimpersonate}").instancesof("win32_useraccount")for each user in use…

怎么下载并安装python_怎么下载官网python并安装

怎么下载官网python并安装?百度搜索Python官网。看到上图显示官网的没,点击进入。把鼠标移到downloads上,然后看到下拉选项,点击Windows。然后看到如下界面。这么多的安装包,该选那个呢。下图画圈的是版本号&#xff0…

匿名函数python_基于python内置函数与匿名函数详解

内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool() exec() isinstance() pow() super()…