建模过程
以逻辑回归为例,简述一次建模过程的流程。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来说:
- lr.coef_ : x1~xn的beta系数
- lr.intercept_: 截距 beta0
- 16 验证集:模型验证
使用训练好的模型对验证集进行同样验证。
- 17 模型打分
- 1 目标标记
- 2 预测列
- 3 混淆矩阵
- 4 精度与敏感度
- 5 AUC
- 6 KS
- 7 LIFT
- 8 等级
- 9 打分
- 先构造目标变量和预测(列)的dataframe
- 设置判定阈值,计算混淆的基本树TP、FP、TN、FN
- 计算精度(Precision)衡量模型效率,敏感度(Sensitivity)衡量模型战果。
- AUC用于估计模型一般性能
- KS用于估计模型的区分性能
- LIFT模型产生的Precision和Sensitivity的估计
- 等级:使用风险等级,看起来更直观
- 打分:更直观
- 18 变量打分
将变量的几个变化过程做成一个DF,从原始值到离散值到WOE值到分值的对应列。
用于变量的选择分析。