代码改变世界

一个模型建立的完整流程

2018-05-16 02:04  乱月灵猫  阅读(11761)  评论(0编辑  收藏  举报
总结在工作中建立一个模型的完整流程。
 
主要工作:

(1)采集数据
(2)分析数据
(3)特征工程
(4)模型评估
(5)模型优化
 
采集数据:

这点没太多可总结的,工作中保证采集的方案正确合理,量足够。
首先要知道真实的数据量是多少,采集过少数据的分布就不是无偏估计。
采集的时间维度需要注意,好坏样本的时间维度要一致。还要根据业务场景来确定训练集与测试集的时间维度是否可以重合,对于风控来说【目前倾向于重合】
 
这里提一点采样工程的必要:
(1)衍生属性,放在这里做最合适
(2)前期加入基本业务逻辑,弥补字段表达能力不足,也可直接区分是真假缺失,进行数据补全,为后续特征工程提供便利
(3)全量统计,预处理的统计属性计算十分必要
 
【SERIAL】这个方法并没有用
【_RATE】足够,无需加排序的统计,在特征工程阶段可以根据数据分布进行合理的分段,按离散的数值处理,也可转换成类别(高危与否)
 
分析数据:

(1)首先清楚每个字段的含义,这时候可以根据业务场景猜测一下哪些字段可能会有用、哪些字段处理后有用、哪些字段暂不考虑
(2)关注字段的缺失程度,先不要急着删掉缺失过多的属性,衍生成是否缺失也可能会有用
(3)关注数值型字段的统计信息,平均值、最大、最小、标准差等等,这些也是只能简单的反应一点点的信息
(4)看数据分布图是一个有效获取信息的手段、通过分析图中数据的分布,会对字段对于分类结果的影响做一些猜测
          两种分布图:1种是没有判定类别的,可以看到整个样本集该字段的数值\类别分布情况;1种是有判定类别的,可以看到具体某个值\类别下正负样本的比例
          相对而言,第二种图更能直观反映出分类的问题,而第一种图是帮助你认识数据的
(5)在观察数据分布图的过程中,可加入一些新的组合特征,或者对特征做些转化,比如对于缺失严重的转换成是否缺失,然后跳回第4步继续观察分布
          注意:独热变换是一种基本的处理手段,在此处只需要分析类别字段的分布,估计其价值即可,无需做独热变换再观察其分布
 
特征工程:

(1)缺失字段处理手段
          1)占总数比例极高,直接舍弃
          2)类别型,可将缺失作为一个新的类别
          3)对于连续型缺失比例可接受的,可以进行分段,然后做独热变换,并加入缺失类别
          4)缺失较少,拟合数据,可根据其他属性、也可以求平均
     具体情况具体分析
(2)剔除缺失字段过多的样本
(3)剔除某些属性明显错误的样本
(4)离散化,独热变换
(5)Scailing or Normalizing 
 
模型评估:

交叉验证作模型选择和调参的依据,来确定模型的类型和参数。交叉验证是验证过程,和测试不同,验证要在Training Set上去做
 
用测试集测一下效果,看个基本情况(如果效果很好,那么恭喜不需要下面的步骤了)
 
通过学习曲线来判断模型是否过拟合
     学习曲线有两条,一条是训练集上的得分,一条是交叉验证集上的得分,两条线的横轴为样本量,随着样本量增大,训练集上的得分就会越来越低,而交叉验证集上的得分会越来越高
     通过看两条曲线的gap,以及它们所能达到的得分和你预估的得分赖判断是否过拟合或者欠拟合
 
     如果gap很小,得分低于预估得分,那么说明欠拟合了
     如果gap很小,得分和预估得分相似,那么说明没有过拟合和欠拟合
     如果gap很大,得分和预估得分相似,那么说明过拟合了
     如果gap很大,得分低于预估得分很多,那么说明数据集有问题
 
 
模型优化:

如果出现这两种情况,那么需要回过头做数据分析、特征工程、然后做模型评估
     过拟合需要做特征选择、减少特征量、增大样本量
     欠拟合需要增加特征量,对于欠拟合而言,需要挖掘新的特征,挖掘特征基于业务理解和错分样例的共性特征,为什么它们分错了,之后调整原有特征活着新增特征
 
如何验证新挖掘的特征是否有帮助,那么同样需要通过交叉验证来做
 
当这些工作都做好,就得到了最终想要的模型,接下来可以通过bagging、stacking、boosting的方式来构造组合分类器,增强效果