讯飞移动反欺诈算法数据竞赛网址: http://challenge.xfyun.cn/2019/gamedetail?type=detail/mobileAD
讯飞移动反欺诈算法竞赛,目前分数只有94.48
总体流程
| EDA
| 数据预处理
| 数据特征构造
| 模型搭建
| 模型参数的调优以及特征筛选
一、EDA
在做数据竞赛的时候,当我们拿到数据集的时候,我们首先要做的,也是最重要的事情那就是进行数据探索分析,这部分做的好,对接下来的每个部分的工作都是有力的参考,而不会盲目的去进行数据预处理,以及特征构造。数据探索分析主要做以下几个部分的工作:
- 查看每个数据特征的缺失情况、特征中是否含有异常点,错误值
- 查看每个特征的分布情况,主要包括连续特征是否存在偏移,也就是不服从正态分布的情况;离散特征的值具体分布如何
- 查看一般特征之间的相关性如何
- 查看一般特征与目标特征之间的相关性
二、数据预处理
通过EDA,我们对数据进行了初步分析,接下来就针对EDA部分得出的结果,来进行数据的预处理工作,主要做了以下工作:
- 先是对特征中不符合类型的数据进行类别转换
- 利用众数来对缺失值填充,异常值的剔除,以及错误值进行修正
- 对于连续特征,如果存在偏移现象,使用
对数
或者Box-Cox
进行转换,使其满足正太分布,降低拖尾带来的影响 - 对于离散值,一般是进行
独热编码
,但由于本身数据集离散特征的取值类别数较多,如果使独热编码(OneHotEncoder),会使得数据得维度变得很高,会降低模型运行的速度;这里我使用的是类别编码(LabelEncoder)
来对离散特征进行编码 - 对部分连续特征进行分箱操作,将其离散化。
- 对离散特征进行更加细粒度的划分,如make,model,osv这种特征,可以进行更加详细的划分,比如
osv : 10.0.3 --- > 10 0 3
,对于make制造商,为了降低噪声数据带来的影星,将make特征进行了预处理,如huawei/HUAWEI/honor/...
统一用HUAWEI
表示。
补充一点(比较重要)
面对数据量很大时候,如何解决大规模数据建模问题?一般会有三种基本方法:
1. 对原始样本进行抽样,不过这样会存在一个问题,那就是会导致正负样本可能失衡,影响模型最终的效果
2. 对数据结构或者类型进行优化来降低内存的消耗:
(1) 当特征取值没有负数的时候,我们可以将int32类型的数据转换为uint8。
(2) 将float64类型的数据转换为float32
(3) 在不影响模型效果的前提下,可以将object类型的数据转化为category类型的数据,这种适合离散特征取值较少的情况,一般特征的的取值类别数占特征总的数量的比例小于5%。这次采用的是这种方法,具体实现见代码.
3. 利用online learning等相关方法。
数据特征构造
特征主要分为:
1. 原始特征
2. 统计特征 : count, max, min,std, nunique,mean,...
3. 组合特征 : 将重