目录
评分卡模型开发流程:
一、数据清洗与预处理
数据预处理过程可分为:数据清洗、缺失值处理、异常值处理、数据转换(比如数据离散化)。并结合数据探索EDA检查是否完成预处理工作。
按照数据类型分为分类数据、数值数据进行处理:
二、特征工程
特征工程是整个模型构建中最重要的环节,决定了最终模型的预测效果。是一个涉及从原始数据中创建有意义的特征,是一个先升维(膨胀)后降维(收缩)的过程。
目的:最大化模型的性能,同时减少模型训练所需的时间和资源。
流程:包括变量编码、变量衍生、特征选择、相关性分析、多重共线性分析、变量选择等一系列工作。
(一)变量衍生之变量编码
1、One-hot编码
1.1 定义
将每个类别表示为一个二进制向量,向量长度等于类别总数N,其中只有一个位置是1,表示当前类别,其余位置为0。
1.2 例子
黑箱子里有20颗彩球,分别为红色、绿色、蓝色。则对其进行One-hot编码:
红色:[1, 0, 0] 绿色:[0, 1, 0] 蓝色:[0, 0, 1]
1.3 python实现
colors = ['红色', '绿色', '蓝色']
color_encoded = pd.get_dummies(colors, prefix='颜色')
1.4 特性
避免排序:不涉及类别之间的排序,适用于类别之间没有顺序关系的情况。
维度灾难:当类别数量非常大时,生成向量维度也会大,消耗大量的计算资源。
稀疏性:大多数位置是0。
2、Dummy variable 编码
2.1 定义
为每个非基准类别创建一个二进制指示变量,其值为1表示该类别存在,0表示不存在。
2.2 例子
黑箱子里有20颗彩球,分别为红色、绿色、蓝色。则对其进行Dummy variable 编码:
红色:[0, 0] (基准类别,不编码) 绿色:[0, 1] 蓝色:[1, 0]
2.3 python实现
#不创建基准类别的虚拟变量
color_encoded = pd.get_dummies(colors, prefix='颜色', drop_first=True)
2.4 特性
避免完全多重共线性:由于不创建基准类别的虚拟变量。
基准类别假设:模型的结果可能会受到基准类别选择的影响。
解释性:模型解释性不如One-Hot直观。
3、Label 编码
3.1 定义
将分类变量转换为整数形式,作为标签。向量的长度等于(类别总数N-1)
3.2 例子
黑箱子里有20颗彩球,分别为红色、绿色、蓝色。则对其进行Label 编码:
红色:1 绿色:2 蓝色:3
3.3 python实现
from sklearn.preprocessing import LabelEncoder
# 初始化LabelEncoder对象
le = LabelEncoder()
color_encoded = le.fit_transform(colors)
3.4 特性
避免维度灾难:相对于One-Hot编码。
可保留类别间的关系:如果这些关系对模型预测是有用的。
可能会引入不存在的数值顺序关系:误导对特征值大小敏感的算法(如线性模型、KNN等)。
增加了模型的复杂度:因为需要更多的参数来拟合数据。
4、WOE 编码
关于WOE编码的详细了解请跳转链接
4.1 定义
WOE编码是对坏样本分布和好样本分布的比值再进行对数变换的结果。 用于衡量分类变量中的某个类别与目标变量(通常是二分类的,如好客户/坏客户)之间的关系。
当WOE值为0表明特征没有区分能力;WOE值越大,权重越大,区分能力越强。 正/负:该类别与目标事件(如违约)正/负相关。
4.2 例子
一个特征“是否有房产”的WOE编码例子。
4.3 python实现
一个特征“是否有房产”的WOE编码例子。
#1. 将分类变量转换为0和1
df['has_property_encoded'] = df['has_property'].map({'有': 1, '无': 0})
df['default_encoded'] = df['default'].map({'未违约': 1, '违约': 0})
#2. 计算每个分组的正负样本数量和总样本数量
total_positives = df[df['default_encoded'] == 1].shape[0]
total_negatives = df[df['default_encoded'] == 0].shape[0]
grouped = df.groupby('has_property_encoded')['default_encoded']
positives = grouped.sum()
negatives = grouped.count() - grouped.sum()
#3. 计算WOE值
woe = grouped.apply(lambda x: np.log((x.sum() / total_positives) / ((x.count() - x.sum()) / total_negatives)))
#4. 将WOE值添加到数据框中
df['WOE'] = df['has_property_encoded'].map(woe)
4.4 特性
a.考虑分类变量与目标变量的关系:增强模型的预测能力。
b.将非线性特征线性化:提高模型的解释性。
c.有助于特征选择:通过计算信息值(IV)筛选对目标变量有影响的特征。
d.对于具有大量唯一值的分类变量可能不适用:在计算过程中可能遇到分箱中响应或未响应客户数为零的情况。
5、总结
(二)变量衍生之变量分箱
变量分箱是一种将连续特征转换为离散特征的技术,涉及将特征值的范围分割成多个区间或“箱子”,并为每个区间分配一个唯一标识符。 主要应用于:
风险评估:分箱有助于识别风险等级和制定风险策略。
信用评分模型:在金融领域,分箱常用于信用评分模型中处理连续变量。
分箱目的
1.引入非线性:连续特征与目标变量间可能存在非线性关系。
2.增强模型性能:可提高某些模型(如决策树)性能。
3.提高模型可解释性:分箱后的特征更易于理解和解释。
4.增强模型鲁棒性:减少异常值的影响,防止过拟合。
分箱方法
具体的分箱方法的介绍,,可见此链接
1.Best-SK分箱:自顶向下的分箱方法,目标函数采用KS统计量。
2.最优IV分箱:自顶向下的分箱方法,目标函数采用IV值。
3.最优Chi-merge卡方分箱:基于卡方检验的自底向上的分箱方法。
4.基于树的最优分箱:使用决策树算法中的最优分割点。
分箱步骤
1.数据探索:检查特征分布,了解是否存在异常值或偏斜情况。
2.选择分箱方法:根据数据特性和模型需求选择合适的分箱方法。
3.确定箱数:决定分箱的数量,箱数过多或过少都可能影响模型性能。
4.应用分箱:对特征应用分箱,生成新的离散特征。
5.评估分箱效果:评估分箱后的特征对模型性能的影响。
分箱局限
1.同一箱内的样本具有同质性:同一分箱内具有相同风险等级。
2.选择箱子数量和宽度的主观性:分箱时需要人为决定箱子的数量和宽度,需要专家经验支持。这种主观性可能会影响模型的性能和解释能力。
3.信息损失:分箱过程中可能会损失一些原始数据信息,尤其是当箱子的划分不够细致或不合理时,一些细微的差别可能无法被捕捉到。
4.边界效应:分箱的边界选择对模型有较大影响,不恰当的边界可能导致重要信息的丢失,影响模型的预测准确性。
(三)特征选择
三、模型构建与评估
1.逻辑回归建模
1.1 定义:引入Sigmoid函数将线性方程的输出挤压到0~1之间,解决分类问题。
1.2 模型是否正确,取决于是否满足假设:
a.线性对数几率
自变量与对数几率(log-odds)之间应存在线性关系。即因变量的对数几率可以被自变量的线性组合所预测。
对应评分卡建模中:进行换转为WOE值
b.无完全多重共线性
自变量间不该存在完全多重共线性,即没有一个自变量可以被其他自变量的线性组合完全预测。
对应评分卡建模中:进行相关性分析
2、ROC、AUC评估/KS
a.ROC曲线
ROC曲线用于比较模型的预测效果。
横坐标为实际值为假,判断值为真的概率;(FPR)
纵坐标为实际值为真,判断值为真的概率;(TPR)
ROC曲线越接近左上角,表示模型的性能越好
b.AUC
AUC代表ROC曲线与x轴包围的面积。
AUC越大,模型的预测效果越好。
AUC的值一般在0.5到1之间;
AUC=0.5说明模型没有提供有价值的预测(等同于随机猜测)。
c.KS
KS值是KS曲线上两条曲线间最大距离的值(tpr与fpr差值绝对值的最大值),KS值对应的阈值即为模型的最优分类阈值。
KS值>0.2:不错的模型;
KS值>0.5:模型具有很强的区分能力。
KS曲线通过绘制模型预测为正类的累积真正率和累积假正率来展示模型的性能。
KS曲线的纵坐标为tpr与fpr差值,横坐标为分类阈值。
四、评分卡创建
1、为什么模型要转评分?
逻辑回归模型计算的结果是样本违约的概率,为了更方便地根据样本特征对其进行分类,需要将模型计算的违约概率转化为一个容易计算的分值,直接根据样本得分对其进行分类,而不是直接计算违约率。
2、如何转为评分卡?
判断是否放贷的金融案例中:
其中,θ为逻辑回归模型训练得到的参数组合, X为样本的特征向量。A、B为函数中的参数,需要通过两个假设条件确定:
设定分数与概率的对应关系【特定分值(如600)与其对应的概率或比率关系(如好坏比为30:1)】
a.好坏比为30:1指每有一个坏客户,就有30个好客户。一般假设好坏比为30:1的得分为600分,好坏比翻番得分增加20分。
b.得分为600分:用来表示一个客户违约的风险。
c.比率翻番对应的分差PDO为20分:每增加20分,好坏比就会翻一番。得分从600分增加到620分,好坏比将从30:1增加到60:1。
PS:如果一个银行希望在好坏比为60:1时批准贷款,那么它可能会设定阈值620分。这意味着:只有当申请人的得分高于620分时,银行才会批准贷款,即银行认为申请人违约的概率足够低,使得贷款的风险可接受。
解方程
score越小,风险越大,即坏客户出现几率越大。故score越大越安心!
3、得到评分卡
五、 评估在线监控
1、模型在线监控(模型上线阶段)可分为:
稳定性监控、单调性监控、性能监控指标。具体请参考链接。
2、模型上线监控指标