建模过程

以逻辑回归为例,简述一次建模过程的流程。0公式0代码的梳理。

  • 1 确定目标
  • 只有0和1两种取值

对于一般的监督学习而言,目标是首先要确认的。在这步甚至可以保留多个可能的目标变量(但是在每次建模中只使用一个)。

  • 2 数据质量
  • 缺失
  • 错误
  • 不平衡

当变量的缺失比例较高时,可以考虑直接弃用变量。缺失的问题是比较麻烦的:可能是由于客户不愿意录入、录入了但是存储失败甚至是取数时的失误都可能导致缺失。

错误是指数据“不干净”。例如性别有三个取值,年龄超过1000岁等。

不平衡是指数据的分布偏的很厉害。这个问题比较隐蔽,而为了建立稳定的模型又是必须处理的问题。

  • 3 变量缺失处理
  • 1 去掉
  • 2 填充

缺失的处理完全是灵活的,可以有多重处理方法。

  • 4 变量未见值声明

这步通常也会忽略。建模时视角是受限的,从模型运行的健壮性角度出发,最好事先声明如果变量出现未见值的映射方式。

  • 5 变量角色声明
  • 1 ID变量(可选)
  • 2 Target变量(必选)
  • 3 Time 变量(可选)

ID变量用于后续结果的对齐。
Target在很多地方都要用。
Time在自动重建模型的时候有用。

  • 6 缩放数据

变量的的目标率通常是在很大的幅度变化的(0.05%~50%),为了建模具有较好的可比性,通常会缩放在目标率为10%。

  • 7 排除一些变量

有些变量例如目标相关、质量不佳等都可以在此步去除。

  • 8 训练和验证集分割

验证模型的泛化性。

  • 9 变量元数据推断/获取
  • 元数据规范

首先需要确定元数据,后续才可使用算法进行对应处理。

1.变量数据类型1:字符、数值
2.变量数据类型2:Continuous、Nominal、Ordinal
3.变量角色(已确定)3:ID、Time、Target
4.属性个数
5.缺失率(已计算)
其他-待定

  • 10 获取连续/离散变量列表

连续变量:C
离散变量:N、O

  • 11 获得离散化字典

使用离散化方法将数据全部转为离散型 C -> O , 所以变量只剩下N、O两类;结果存在字典中备用。

  • 12 应用离散化

对训练集和验证集都可以使用离散化字典转化,后缀加上_dis。可以的话一开始就将数据变量名映射为x1~xn

  • 13 WOE权重转换
  • 1 IV值计算
  • 2 WOE转化

一方面计算IV值,估计变量的价值。从0.02~0.2的变量比较适合建模。大于0.2的需要专门看一下。

计算IV值的过程中同步生成了woe字典,保存下来。

应用woe字典,对离散化后的变量进行转换。

  • 14 变量聚类

使用层次聚类,将变量聚类为n类,每类取出一个变量。确保这些变量没有共线性。

  • 15 训练集:模型拟合

使用LR对训练集进行拟合,获得模型参数。对于sklearn来说:

  1. lr.coef_ : x1~xn的beta系数
  2. lr.intercept_: 截距 beta0
  • 16 验证集:模型验证

使用训练好的模型对验证集进行同样验证。

  • 17 模型打分
  • 1 目标标记
  • 2 预测列
  • 3 混淆矩阵
  • 4 精度与敏感度
  • 5 AUC
  • 6 KS
  • 7 LIFT
  • 8 等级
  • 9 打分
  1. 先构造目标变量和预测(列)的dataframe
  2. 设置判定阈值,计算混淆的基本树TP、FP、TN、FN
  3. 计算精度(Precision)衡量模型效率,敏感度(Sensitivity)衡量模型战果。
  4. AUC用于估计模型一般性能
  5. KS用于估计模型的区分性能
  6. LIFT模型产生的Precision和Sensitivity的估计
  7. 等级:使用风险等级,看起来更直观
  8. 打分:更直观
  • 18 变量打分

将变量的几个变化过程做成一个DF,从原始值到离散值到WOE值到分值的对应列。

用于变量的选择分析。