这是老肥第一次参加CCF大数据与计算智能大赛,选择了企业非法集资风险预测这个相对简单的结构化数据赛题,本赛题共有4210人、3403支队伍参赛,是今年CCF BDCI大赛参赛人数最多的赛题,竞争也是异常激烈,我们团队「等你」在A榜、B榜均为第11
名,在某种程度上证明我们的模型的稳定性(尽管只有单模)。
赛题介绍
背景
非法集资严重干扰了正常的经济、金融秩序,使参与者遭受经济损失,甚至生活陷入困境,极易引发社会不稳定和大量社会治安问题,甚至引发局部地区的社会动荡。如何根据大量的企业信息建立预测模型并判断企业是否存在非法集资风险,对监管部门、企业合作伙伴、投资者都具有一定的价值。
任务
利用机器学习、深度学习等方法训练一个预测模型,该模型可学习企业的相关信息,以预测企业是否存在非法集资风险。
数据
该数据集包含约25000家企业数据,其中约15000家企业带标注数据作为训练集,剩余数据作为测试集。数据由企业基本信息、企业年报、企业纳税情况等组成,数据包括数值型、字符型、日期型等众多数据类型(已脱敏),部分字段内容在部分企业中有缺失,其中第一列id为企业唯一标识。其中base_info.csv为主表,是企业的基本信息,还有几个副表包含且也的年报信息、纳税信息、企业变更信息、新闻舆情信息和其他信息,这些副表的缺失值较多,对模型的提升效果较为有限。
评价指标
这题的评价指标有点特别,是精确率、召回率和F1-Score的加权平均, 主办方没有给出明确的权重系数,我们根据线上线下的评分数据拟定这三者的权重分别为0.5、0.3以及0.2(不确信主办方是否采取这样的权重)。
预处理
主要对主表的数据进行缺失值处理,数字类型特征的缺失值用-1进行填充,字符串类型特征用"-1"
进行填充,对总体缺失值占比极大的特征做删除处理,比如'ptbusscope', 'midpreindcode', 'protype'
等, 对年月日进行'3099-12-31'
缺失值填充(因为未使用月日特征,因而不会和未缺失值混淆)。
特征工程
这一部分应该是整个比赛最为重要的部分,也是大部分数据挖掘类型比赛最为重要的部分。
首先,针对缺失值比例较大的特征列我们统计其缺失值数目,比如对人数相关的列我们统计总缺失值的列数,针对几个重要特征比如venind、reccap
等构造新特征列为是否存在缺失值。
接着是一些结合业务理解的手工特征,资金的加减、从业人数的组合,经营期时长等等。较为有意思的特征还有行政区划代码、经营地址和经营范围,这些特征经过脱敏处理,但我们依然可以从中挖掘出特征,这些数据以长度16为一块信息,因而我们可以得到地址的长度特征(可以看作是地址详细程度),jobid, orgid
特征的前六位和地址特征也有一定的相关性可以构造特征。
这里有一个较为重要的特征是文本内容,那就是经营范围特征,尝试了很多方法,比如用基础分类器根据该特征来做分类预测,将预测概率作为特征来进行其他分类器的训练,用Bert来提取经营范围特征等等,最终采取的是将这些文本以及经营地址的序列特征使用tfidf来构造特征并对tfidf的结果作降维处理。
-
base[
'oploc_list'] = base[
'oploc'].apply(lambda x:
' '.join([x[
16 * i:
16 * (i +
1)]
for i in
range(
int(
len(x) /
16))]))
-
base[
'dom_list'] = base[
'dom'].apply(lambda x:
' '.join([x[
16 * i:
16 * (i +
1)]
for i in
range(
int(
len(x) /
16))]))
-
base[
'opscope_word_list'] = base[
'opscope'].apply(get_cut_list)
-
-
oploc_tfidf_vector = TfidfVectorizer(min_df=
30).fit(
-
base[
'oploc_list'].tolist())
-
dom_tfidf_vector = TfidfVectorizer(min_df=
30).fit(
-
base[
'dom_list'].tolist())
-
opscope_tfidf_vector = TfidfVectorizer(min_df=
30).fit(
-
base[
'opscope_word_list'].tolist())
五个副表的特征主要做的是聚合统计特征,以id为键统计比如均值、方差、最大值、最小值等特征以及用CountVectorize
来做特征的数值统计, 其中other_info
表因为缺失值过多而未将其考虑在内。
模型训练
模型的训练采用了五乘五折也就是二十五折交叉验证的训练推理方式来更大程度上的减少过拟合,采用auc
为早停指标。我们最后采用xgboost模型,在三套不同的参数(由贝叶斯优化得到)下训练对得到的预测概率值取平均作为提交的概率值。
赛后总结
非常遗憾未能进入到最终的决赛,上述方案有很多部分值得进一步的改进。可能因为过早组队的原因,造成了自己思维定势,没有使用多种特征工程组合生成的不同模型。我们也尝试使用了lightgbm、catboost以及神经网络模型,但这些模型在线上的表现不佳,这也是为什么后来我们只采用了一个模型的原因,高分模型和低分模型的融合难以取得分数的提升,源代码可以在后台回复「CCF」即可。
2021年的CCF BDCI, 我们还会回来的!
——END——
扫码二维码
获取更多精彩
老肥码码码
转载:https://blog.csdn.net/lyc44813418/article/details/112130851