问题概述
题目1如下:
赛题有2个点,分别是:
-
确定数据指标
即确定哪些特征是决定财务造假与否的关键特征
-
预测造假公司
训练模型,然后跑测试数据即可
预处理
-
首先使用missingno2,对全局数据进行观测,看一看缺失值等情况
-
然后删去无用的特征列
-
删去缺失值占比过多的特征列
第一题
最开始的想法是直接跑树模型,然后看看谁的权重大就选谁,然而问题出在样本比例上。
-
首先对整体来看,正样本的数量远远大于负样本。不均衡的情况下,树模型虽然有所缓解,但估计还是够呛
-
更惨的是,第一题要求的是各行业的财务造假关键指标。数据一共几十个行业,有些行业没有造假,全是正样本。这样的情况无法用树模型处理,其他模型也不行。
后来查到了一个方法,Null Importances678。
其思路大概是,先用正确的标签计算一下各个特征对于分类的重要性,然后打乱标签,再计算特征的重要性。如果一个特征真的对分类有用,那么他应该在真实的标签下展示高重要性,而在错误的标签下展示低重要性。
对于第一题而言,我们分两类情况来考虑:
-
对于整个行业没有造假记录的数据来说:
先对各个数值特征(好像所有的特征都是数值特征?)计算方差,取方差较小的特征为重要特征。因为该行业没有造假,所以其与造假相关的特征应当表现出聚集的趋势,即都没有造假,也就是方差较小的特征。然后随机赋予标签,计算其互信息9(mutual_info_classif)。然后用前一个的特征集合减去后一个的特征集合,留下的即为关键特征。
-
对于整个行业有造假记录的数据来说
第二题
这一题将数据分成了2个行业,制造业和非制造业。虽然样本还是很不均衡,但至少,正负样本都有。
后记
其实模型训练的结果并不乐观,因为样本分布的不均衡。后来有一些其他想法:
-
在模型融合的时候,加大树模型的权重,因为树模型对分布不均衡有所缓解
-
使用一些其他方法补充数据,例如SMOTE等14
啊,对了,我当时参考博文15,用pandas-profiling还跑崩了16,数据太多。