SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档319

  • 关于

  • 搜索

2020 CCF BDCI——企业非法集资风险预测

发表于 2020-10-22 更新于 2021-10-29 分类于 计算机 , 技术 , Python 阅读次数: Valine:
本文字数: 12k 阅读时长 ≈ 11 分钟

赛题地址

数据观察

数据集情况

  训练集共7个表:

  • base_info:所有企业的基本信息。
  • annual_report_info:企业的年报基本信息。
  • tax_info:企业的纳税信息。
  • change_info:企业的变更信息。
  • news_info:企业的新闻舆情信息。
  • other_info:企业的其他信息。
  • entprise_info:标签。

  企业基本数据包含了所有企业的大部分信息,因此可作为模型训练所需的主要特征。其他数据仅包含部分企业信息,可通过处理挖掘出相关特征,提升预测正确率。部分企业存在数据缺失情况,可依据数据相关业务进行填充。

样本分布情况

  由于是脱敏后的真实数据,存在非法集资的企业数量较少,因此正负样本比例不均衡样本主要特征集中在企业基本数据中,其他数据仅含样本较少特征。

数据类型情况

  数据集中存在多种数据类型,包括数值型、字符型、日期型等。由于地址信息、变更内容等涉及隐私,因此对相关内容进行了脱敏处理。

base_info

  这张表是训练集中最基本最重要的一张表,总共包含24865条数据,33个字段,其中14865条数据用于训练,剩下10000条用于A榜测试集提交。

信息统计:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
        字段名称    数据类型  空值数 空值比例  取值个数     字段含义
-----------------------------------------------------------------------
0 id object 0 0.000000 24865 企业唯一标识
1 oplocdistrict int64 0 0.000000 16 行政区划代码
2 industryphy object 0 0.000000 20 行业类别代码
3 industryco float64 1 0.000040 345 行业细类代码
4 dom object 0 0.000000 23278 经营地址
5 opscope object 0 0.000000 20815 经营范围
6 enttype int64 0 0.000000 17 企业类型
7 enttypeitem float64 8214 0.330344 31 企业类型小类
8 opfrom object 0 0.000000 6620 经营期限起
9 opto object 16040 0.645083 5746 经营期限止
10 state int64 0 0.000000 6 状态
11 orgid int64 0 0.000000 78 机构标识
12 jobid int64 0 0.000000 434 职位标识
13 adbusign int64 0 0.000000 2 是否广告经营
14 townsign int64 0 0.000000 2 是否城镇
15 regtype int64 0 0.000000 3 主题登记类型
16 empnum float64 5250 0.211140 62 从业人数
17 compform float64 14234 0.572451 2 组织形式
18 parnum float64 22526 0.905932 51 合伙人数
19 exenum float64 23487 0.944581 50 执行人数
20 opform object 15865 0.638045 33 经营方式
21 ptbusscope float64 24865 1.000000 0 兼营范围
22 venind float64 16428 0.660688 3 风险行业
23 enttypeminu float64 17595 0.707621 26 企业类型细类
24 midpreindcode float64 24865 1.000000 0 中西部优势产业代码
25 protype float64 24831 0.998633 2 项目类型
26 oploc object 0 0.000000 5351 经营场所
27 regcap float64 191 0.007681 1143 注册资本(金)
28 reccap float64 17781 0.715102 597 实缴资本
29 forreccap float64 24638 0.990871 11 实缴资本(外方)
30 forregcap float64 24615 0.989946 38 注册资本(外方)
31 congro float64 24616 0.989986 33 投资总额
32 enttypegb int64 0 0.000000 53 企业(机构)类型

  可以发现合伙人数、执行人数、兼营范围、中西部优势产业代码、项目类型、实缴资本(外方)、注册资本(外方)、投资总额这几个字段空值率大于90%甚至全部为空;经营期限止、组织形式、经营方式、风险行业、企业类型细类、实缴资本这几个字段的空值率在50%到70%左右,上面这些字段的空缺比例较大,不好填充,可以考虑直接丢掉。行业细类代码、企业类型小类、从业人数这三个字段缺省略少,可以考虑填充一下。


annual_report_info

数据量:22550

信息统计:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
          字段名称  数据类型 空值数  空值比例  取值个数                    字段含义
---------------------------------------------------------------------------------------------
0 id object 0 0.000000 8937 企业唯一标识
1 ANCHEYEAR float64 0 0.000000 4 年度
2 STATE float64 5 0.000222 2 状态
3 FUNDAM float64 16848 0.747140 167 资金数额
4 MEMNUM float64 22521 0.998714 5 成员人数
5 FARNUM float64 22521 0.998714 6 农民人数
6 ANNNEWMEMNUM float64 22521 0.998714 3 本年度新增成员人数
7 ANNREDMEMNUM float64 22521 0.998714 1 本年度退出成员人数
8 EMPNUM float64 15 0.000665 270 从业人数
9 EMPNUMSIGN float64 5717 0.253525 2 从业人数是否公示
10 BUSSTNAME object 4870 0.215965 4 经营状态名称
11 COLGRANUM float64 2509 0.111264 43 其中高校毕业生人数经营者
12 RETSOLNUM float64 2509 0.111264 14 其中退役士兵人数经营者
13 DISPERNUM float64 2509 0.111264 5 其中残疾人人数经营者
14 UNENUM float64 2509 0.111264 35 其中下岗失业人数经营者
15 COLEMPLNUM float64 2509 0.111264 94 其中高校毕业生人数雇员
16 RETEMPLNUM float64 2509 0.111264 26 其中退役士兵人数雇员
17 DISEMPLNUM float64 2509 0.111264 16 其中残疾人人数雇员
18 UNEEMPLNUM float64 2509 0.111264 72 其中下岗失业人数雇员
19 WEBSITSIGN float64 33 0.001463 2 是否有网站标志
20 FORINVESTSIGN float64 6061 0.268780 2 是否有对外投资企业标志
21 STOCKTRANSIGN float64 9043 0.401020 2 有限责任公司本年度是否发生股东股权转让标志
22 PUBSTATE float64 20 0.000887 3 公示状态:1 全部公示,2部分公示,3全部不公示

  资金数额、成员人数、农民人数、本年度新增成员人数、本年度退出成员人数这几个字段缺失较多。该表数据只覆盖了8937家公司。


tax_info

数据量:29195

信息统计:

1
2
3
4
5
6
7
8
9
10
11
        字段名称    数据类型 空值数   空值比例 取值个数    字段含义
------------------------------------------------------------------
0 id object 0 0.000000 808 企业唯一标识
1 START_DATE object 0 0.000000 91 起始时间
2 END_DATE object 0 0.000000 91 终止时间
3 TAX_CATEGORIES object 0 0.000000 17 税种
4 TAX_ITEMS object 0 0.000000 275 税目
5 TAXATION_BASIS float64 3379 0.115739 1665 计税依据
6 TAX_RATE float64 3379 0.115739 28 税率
7 DEDUCTION float64 4960 0.169892 247 扣除数
8 TAX_AMOUNT float64 0 0.000000 4568 税额

  虽然数据量接近3万,但仅有808家公司的税务信息。


change_info

数据量:45940

信息统计:

1
2
3
4
5
6
7
   字段名称 数据类型 空值数 空值比例 取值个数    字段含义
-----------------------------------------------------------
0 id object 0 0.0 8726 企业唯一标识
1 bgxmdm float64 0 0.0 45 变更信息代码
2 bgq object 0 0.0 28802 变更前
3 bgh object 0 0.0 30501 变更后
4 bgrq float64 0 0.0 23663 变更日期

news_info

数据量:10518

信息统计:

1
2
3
4
5
            字段名称 数据类型 空值数 空值比例  取值个数   字段含义
------------------------------------------------------------------
0 id object 0 0.0 927 企业唯一标识
1 positive_negtive object 0 0.0 3 新闻正负面性
2 public_date object 0 0.0 2719 发布日期

新闻正负面性三种情况的数量如下:

  • 积极:5350
  • 中立:4133
  • 消极:1035

other_info

数据量:1890

信息统计:

1
2
3
4
5
6
              字段名称  数据类型 空值数   空值比例 取值个数   字段含义
------------------------------------------------------------------------
0 id object 0 0.000000 1888 企业唯一标识
1 legal_judgment_num float64 884 0.467725 93 裁判文书数量
2 brand_num float64 981 0.519048 82 注册商标数量
3 patent_num float64 1494 0.790476 114 专利数量

entprise_info

  经统计,正负样本个数如下:

  • 0:13884
  • 1:981

  正负样本比例约为1:14,正样本占比约为6.6%。

风险总结

  企业非法集资相关风险主要有如下五类:

基本风险

  • 基本信息:企业状态、企业类型、企业门类
  • 经营资质:经营项目、经营范围
  • 变更信息:变更事项、变更频度、变更内容

遵从风险

  • 投诉举报:投诉举报次数、咨询次数、案值
  • 案件信息:涉案次数、累计涉案案值、案由
  • 法院诉讼:诉讼次数、累计执行标的

行为风险

  • 产品信息:产品个数、产品描述、收益率
  • 招聘信息:招聘人数、是否异地经营
  • 知识产权:专利数量、作品个数

族群风险

  • 族谱信息:和其他非法集资企业的关联关系

舆情风险

  • 舆情信息:负面新闻次数、负面新闻

  其中族群风险这里类的信息由于不便统计,在这次比赛数据中没有涉及。

评价指标

  赛题的评价指标一开始为AUC,计算公式如下:

M为正样本数,N为负样本数,ranki 为 第 i 个正样本所在的位置。

  由于AUC线上提交结果太好,很难进一步提升;提交结果区分度较低,难以作为比赛判断标准
,后来改为F1-score:

  实际计算的时候F1带有权值,其中精确率的权重更高,具体权值官方未公布。

建模思路

V0.0:0.82623517166 (F1);0.98584349(AUC)

  直接简单粗暴的将base_info中的非数值型字段丢掉,对于存在缺省值的字段也不做填充处理,使用lgbm五折交叉验证进行训练,最终线上得分0.82623517166 (F1);0.98584349(AUC)。
  在没有提前任何额外特征和处理的情况下,直接使用基础信息进行训练基本大家都在0.98以上,官方检查数据后表示维持数据的真实现状,不修改数据集和评价指标。之所以能轻易取得这么高的分数的原因一是因为基础信息字段较多,信息表征已经较为丰富;第二就是因为数据极不平衡,正样本很少。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
feature importance:
industryco 167042.352605
enttypeitem 19416.001937
enttypeminu 11538.672367
reccap 8950.232097
enttypegb 4103.305924
empnum 4004.480800
oplocdistrict 3279.619317
jobid 3167.545965
townsign 1694.390078
enttype 1564.764639
orgid 869.269008
parnum 808.776785
exenum 710.105558
regtype 467.582035
adbusign 435.419722
state 188.392446
compform 77.900279
venind 59.724833
forregcap 20.906658
forreccap 18.741162
congro 1.799622
protype 0.198812
midpreindcode 0.000000

V0.1:0.80278669547(F1);0.98312726953(AUC)

  v0.0模型的特种中所有分类特征都是直接作为数值类型放进lgbm中进行训练的,lgbm可以设置分类特征,于是将那些分类特征设置为category类型进行训练,但是最终线上得分反而下降。


V1.0:0.82279875710 (F1);0.98660033(AUC)

  在v0.0的基础上,对base_info的industryphy字段进行编码(从1开始),去掉midpreindcode特征;
  然后对news_info表分别提取计算各个公司积极、中立、消极新闻的个数,然后左连接到特征总表;
  在other_info表中统计各个公司个字段的总和,然后左连接到特征总表。


V2.0:0.82816986543

  在V1.0特征的基础上,将lgbm五折交叉验证换成catboost五折交叉验证,分数提升0.006左右。因为该数据集中存在大量的分类特征,所以使用catboost效果会更好一点,从名字也可以看出该模型算法对分类特征的处理较为擅长。

参考资料

  • Catboost 一个超级简单实用的boost算法
  • CatBoost参数解释和实战

V2.1:0.83284844

  因为catboost的分类特征字段类型只能为int或者string,之前一直将所有分类特征为object的编码为int,然后合着float的全部再强转为int。由于担心float强转int的时候因为截断或者什么的造成信息丢失,所以现在统一转为string。在这里还遇到一个坑,之前转换的时候我直接写的train[i] = train[i].astype('string'),但是实际转换出来在训练的时候会报错:

1
TypeError: Cannot convert StringArray to numpy.ndarray

正确的做法应该写成train[i] = train[i].astype('str'),用str转换出来的是字符串,string转换出来的是字符串数组,二者有点区别。

  接着对base_info表的opform特征进行分桶。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
opform:
unique: 34
value_counts:
10 8186
01-以个人财产出资 575
01 159
服务 38
租赁 7
咨询 3
合 3
02-以家庭共有财产作为个人出资 2
独 2
销售 2
批零 1
服务、销售 1
开发 1
工程 1
出售 1
技术进出口 1
批发 1
投资 1
贷币 1
地质勘察 1
02 1
研发、转让、服务 1
维修服务、批零 1
培训 1
1
集体所有制 1
设计 1
管理 1
测量 1
印刷 1
修理 1
租赁、服务 1
投资、销售 1

  将该字段的各个取值的数量统计信息可以发现,10、01-以个人财产出资(01应该和他是同一类)的占比很大,其他几类的数量相比起来就特别少,所以我以此将他们分为4类进行训练。分桶以后的比例为:

  • Nan:15865
  • 10:8186
  • 01:734
  • other:80

  最终训练出来线下验证集分数有所上涨,五折交叉以后F1的平均值和方差分别为0.839510和0.020048,线上提交成绩为0.83284844,在V2.0的基础上上涨0.0046。同时该特征的特征重要性也相对较高。

  但是再次观察训练集范围数据标签与各个取值的共现率,发现标签几乎都在空值数据项上,和该字段相关性不大,可能是运气好把分数抖上去了:


V2.2:0.83620532

industryphy

  industryphy在模型的特征重要性中最高,观察该字段的数据分布可以发现,['L','J','K','F','I']这几个类别中非法集资的企业相对较多,['O','M','P','R']几个类别的非法集资企业先对较少,剩下的类别非法集资企业数量为0。于是以此将他们分桶为三类。

opfrom

  将opfrom字段转换为datetime格式,然后提取其年份特征。绘图后观察到,随着年份的增加非法集资企业的数量也来越多,在15、16年左右达到鼎盛,之后数量又开始逐渐下降。很明显年份与非法集资企业的数量有很强的线性关系。

  由于有一些企业的注册时间实在11月、12月这种年底,相对更靠近下一年,猜想如果按照月份进行划分的话可能会得到更为细腻的信息。将各公司注册时间与1981年1月1日做差求取其月数差值,绘图后可以观察到月份差值与非法集资企业的数量分布相对更为散乱一些,将该特征放入模型进行训练线上得分也有所下降,所以还是直接用年份进行训练,年份的重要性排名第二。

regcap

  regcap直接进行训练其特征重要性也很高,排名第三。通过数据观察可以发现,在非空值中最小值为0,最大值为5000100,而大多数数据分布在0到10000以内,那些大数值数据量很少。如果直接将该字段作为数值类型进行训练效果必然没有那么好,所以还是采取分桶的方式,直接以10倍的数量级进行划分。将分桶后的数据绘制观察可以发现非法集资企业的数量与各数量级之间也有比较明显的线性关系。

  除上述几个较强的特征以外,还加入了人数特征之间两两的差值,以及注册资金与各人数特征之间的商。这几个特征加入以后模型分数也有所上涨,其特征重要性排名中下左右,还是有一点用,个人直观的理解就是那种注册资金很高但是人很少的公司多半都有问题。

  最后使用单折的catboost进行训练,将数据集随机打乱并按照7:3的比例划分为训练集的验证集以用于早停。线下验证集得分0.8283185841,多次实验下来,线下线上得分变化趋势并不一致。


v2.3:0.83733201822

  自从水哥公布baseline以后已经人均0.84了,我下下来试了下也跑到了0.842的样子。
  尝试把水哥的特征悉数迁移到我的模型上来,然后使用五折catboost进行训练,最终得分0.837。


Baseline下载
-------- 本文结束 感谢阅读 --------
相关文章
  • 中医药天池大数据竞赛--中药说明书实体识别挑战
  • 2020华为云大数据挑战赛-正式赛(2)
  • 2020华为云大数据挑战赛-正式赛(1)
  • 2020华为云大数据挑战赛-正式赛遇到的问题
  • 2020华为云大数据挑战赛-热身赛(2)
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: 2020 CCF BDCI——企业非法集资风险预测
  • 本文作者: SiriYang
  • 创建时间: 2020年10月22日 - 15时10分
  • 修改时间: 2021年10月29日 - 18时10分
  • 本文链接: https://blog.siriyang.cn/posts/20201022150629id.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
Python 机器学习 数据挖掘 竞赛
P2P文件下载技术
NLP:阅读理解综述
  • 文章目录
  • 站点概览
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
319 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

  1. 数据观察
    1. 数据集情况
    2. 样本分布情况
    3. 数据类型情况
    4. base_info
    5. annual_report_info
    6. tax_info
    7. change_info
    8. news_info
    9. other_info
    10. entprise_info
  2. 风险总结
  3. 评价指标
  4. 建模思路
    1. V0.0:0.82623517166 (F1);0.98584349(AUC)
    2. V0.1:0.80278669547(F1);0.98312726953(AUC)
    3. V1.0:0.82279875710 (F1);0.98660033(AUC)
    4. V2.0:0.82816986543
    5. V2.1:0.83284844
    6. V2.2:0.83620532
    7. v2.3:0.83733201822
蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:41
0%