【BI学习心得18-评分卡模型】

本文探讨了评分卡模型在信贷评估中的关键步骤,包括客户评分计算、WOE和IV编码及其作用,以及如何通过KS评价模型性能。此外,深入介绍了DBSCAN聚类算法在异常检测和数据分群中的实践应用,结合实例展示了DBSCAN在金融数据中的运用。
摘要由CSDN通过智能技术生成


1.评分卡模型

1.1基本概念

评分卡模型是常用的金融风控手段之一

风控,就是风险控制,我们采取各种措施和方法,减少风险发生的可能性,或风险发生时造成的损失。

根据客户的各种属性和行为数据,利用信用评分模型,对客户的信用进行评分,从而决定是否给予授信,授信的额度和利率,减少在金融交易中存在的交易风险。

按照不同的业务阶段,可以划分为三种:

  • 贷前:申请评分卡(Application score card),称为A卡
  • 贷中:行为评分卡(Behavior score card),称为B卡
  • 贷后:催收评分卡(Collection score card),称为C卡

1.2客户评分计算

变量名称变量范围得分
基准分-650
年龄age < 18-8
18 <= age <25-2
25<=age<358
35<=age<5513
55<=age5
性别4
2
未知-2
婚姻状况已婚8
未婚-2
未知-3
学历本科及以上12
大专8
其他1
贷款申请次数(二代征信)>3次-8
=3次0
=2次5
<=1次13

客户评分 = 基准分 + 年龄评分 + 性别评分 + 婚姻状况评分 + 学历评分 + 贷款申请次数

某客户年龄为27岁,性别为男,婚姻状况为已婚,学历为本科,贷款申请次数为1次,那么他的评分=?

650 (基准分) + 8(年龄评分) + 4(性别评分) + 8(婚姻评分) + 12(学历评分) + 13(贷款申请次数) = 695

评分卡的最高分和最低分是多少?

  • 最低分:650-8-2-3+1-8=630
  • 最高分:650+13+4+8+12+13=700

1.3评分卡模型使用步骤

  • Step1,数据获取,包括获取存量客户及潜在客户的数据

存量客户,已开展融资业务的客户,包括个人客户和机构客户;
潜在客户,将要开展业务的客户

  • Step2,EDA,获取样本整体情况,进行直方图、箱形图可视化
  • Step3,数据预处理,包括数据清洗、缺失值处理、异常值处理
  • Step4,变量筛选,通过统计学的方法,筛选出对违约状态影响最显著的指标。主要有单变量特征选择和基于机器学习的方法
  • Step5,模型开发,包括变量分段、变量的WOE(证据权重)变换和逻辑回归估算三个部分
  • Step6,模型评估,评估模型的区分能力、预测能力、稳定性,并形成模型评估报告,得出模型是否可以使用的结论
  • Step7,生成评分卡(信用评分),根据逻辑回归的系数和WOE等确定信用评分的方法,将Logistic模型转换为标准评分的形式
  • Step8,建立评分系统(布置上线),根据生成的评分卡,建立自动信用评分系统

在这里插入图片描述

1.4WOE编码

Weight of Evidence,证据权重,是自变量的一种编码,常用于特征变换用来衡量自变量与因变量的相关性。

B代表风险客户,G代表正常客户

对于某一变量某一分组的WOE,衡量了这组里面的好坏客户的占比与整体样本好坏样本占比的差异。

对于二分类问题共100条记录,一个自变量只有两个值value1, value2,如何计算value1, value2对应的woe1, woe2?

  • value1有50条记录,其中40条对应label 1,另外10条对应label 0
  • value2有50条记录,其中25条对应label 1,另外25条对应label 0

在这里插入图片描述
WOE差异越大,对风险区分能力会降低吗?

差异越大,对风险区分越明显

1.4.1WOE计算
  • 对于连续型变量,分成N个bins
  • 对于分类型变量保持类别group不变
  • 计算每个bin or group中event和non-event的百分比
1.4.2WOE的作用
  • 将连续型变量转化为woe的分类变量
  • 对相似的bin或group进行合并(woe相似)

计算过程中需要注意的:

  • 每个bin or group记录不能过少,至少有5%的记录
  • 不要用过多的bin or group,会导致不稳定性
  • 对bin or group中全为0或者1的特列,用 修正的woe

在这里插入图片描述

1.5WOE的好兄弟—IV

IV,Information Valuewoe,只考虑了风险区分的能力,没有考虑能区分的用户有多少。IV衡量一个变量的风险区分能力,即衡量各变量对y的预测能力,用于筛选变量。

在这里插入图片描述
IV是与WOE密切相关的一个指标,在应用实践中,评价标准可参考如下:

IV范围变量预估(预测效果)
小于0.02几乎没有
0.02~1
0.1~0.3中等
0.3~0.5
大于0.5难以置信,需要确认

怎样使用IV值进行特征变量的筛选?

比如筛选掉IV < 0.1的变量,因为该特征对于y的预测能力很弱

1.5.1WOE和IV计算步骤
  • Step1,对于连续型变量,进行分箱(binning),可以选择等频、等距,或者自定义间隔,对于离散型变量,如果分箱太多,则进行分箱合并

  • Step2,统计每个分箱里的好人数(bin_goods)和坏人数(bin_bads)

  • Step3,分别除以总的好人数(total_goods)和坏人数(total_bads),得到每个分箱内的边际好人占比margin_good_rate和边际坏人比margin_bad_rate

  • Step4,计算每个分箱的WOE
    在这里插入图片描述

  • Step5,计算每个分箱里的IV,最终求和,即得到最终的IV

2.评价指标—KS

评估指标KS, Kolmogorov-Smirnov,由两位苏联数学家A.N. Kolmogorov和N.V. Smirnov提出。在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力(ranking ability)越强。
在这里插入图片描述

  • KS曲线:计算每个Score分箱区间累计坏账户占比与累计好账户占比差的绝对值
  • KS值:在这些绝对值中取最大值,是衡量好坏客户分数距离的上限值
  • KS含义:如果排除掉一定比例的坏用户,会有多少比例的好用户会被误杀掉

在这里插入图片描述

2.1KS作用

KS统计量是好坏距离或区分度的上限
KS越大,表明正负样本区分程度越好

在这里插入图片描述

3.DBSCAN聚类

DBSCAN聚类是一种基于密度的聚类算法,其他他聚类方法大多是基于样本之间的距离进行聚类。

最终确定的簇的个数不确定

DBSCAN聚类将数据分成三类:

  • 核心点,在半径Eps内含有超过MinPts数目的点
  • 边界点,在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内的点
  • 噪音点,既不是核心点,也不是边界点

在这里插入图片描述

3.1DBSCAN算法流程
  • 将所有点标记为核心点,边界点、噪音点
  • 删除噪音点
  • 为距离在Eps之内的所有核心点之间赋予一条边
  • 每组连通的核心点形成一个簇
  • 将每个边界点指派到和它关联的核心点的簇中

在这里插入图片描述

3.2DBSCAN工具使用
import numpy as np
import sklearn.cluster as skc
from sklearn import metrics
import matplotlib.pyplot as plt

mac2id = dict()
online_times = []
f = open('data/', encoding='utf-8')
for line in f:

    # 读取每条数据中的mac地址,
    # 开始上网时间,上网时长

    mac = line.split(',')[2]
    online_time = int(line.split(',')[6])
    start_time = int(line.split(',')[4].split(' ')[1].split(':')[0])

    # mac2id是一个字典:
    # key是mac地址
    # value是对应mac地址的上网时长以及开始上网时间(精度为小时)

    if mac not in mac2id:
        mac2id[mac] = len(online_times)
        online_times.append((start_time, online_time))
    else:
        online_times[mac2id[mac]] = [(start_time, online_time)]

# -1:根据元素的个数自动计算此轴的长度
# X:上网时间
real_X = np.array(online_times).reshape((-1, 2))
X = real_X[:, 0:1]

# 调用DBSCAN方法进行训练,
# labels为每个数据的簇标签

db = skc.DBSCAN(eps=0.01, min_samples=20).fit(X)
labels = db.labels_

# 打印数据被记上的标签,
# 计算标签为-1,即噪声数据的比例。

print('Labels:')
print(labels)
raito = len(labels[labels[:] == -1]) / len(labels)
print('Noise raito:', format(raito, '.2%'))

# 计算簇的个数并打印,评价聚类效果

n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
print('Estimated number of clusters: %d' % n_clusters_)
print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X, labels))

# 打印各簇标号以及各簇内数据

for i in range(n_clusters_):
    print('Cluster ', i, ':')
    print(list(X[labels == i].flatten()))

# 画直方图,分析实验结果

plt.hist(X, 24)
plt.show()

在这里插入图片描述

3.3关于DBSCAN

eps越大,类别数会怎样?

Eps越大,类别数越少,如果参数很大都为同一个簇
min_samples如果为1,是不合理的,因为每个点都会是独立的簇

DBSCAN优点:

  • 可以对任意形状的稠密数据集进行聚类
  • 事先不需要知道聚类的数量
  • 聚类的同时发现异常点,对数据集中的异常点不敏感

DBSCAN缺点:

  • 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差
  • 调参有些复杂(相对于KMeans算法),主要需要对距离阈值ϵ,邻域样 本数阈值MinPts联合调参,不同的参数组合对最后的聚类结果影响较大

4.总结与回顾

  1. 数据获取

金融机构自身,第三方机构

  1. EDA(探索性数据分析)

统计每个字段的缺失值情况、异常值情况、平均值、中位数、最大值、最小值、分布情况等
为后续指定计划

  1. 数据清洗

对数据中脏数据,缺失值,异常值进行处理
异常点检测,可以通过聚类检测异常值,先把数据聚成不同的类,选择不属于任何类的数据作为异常值

1)DBSCAN算法,将与数据稠密区域紧密相连的数据对象划分为一个类,因此分离的数据就会作为异常值

2)KMeans算法,把数据聚成k类,计算每个样本和对应的簇中心的距离,找到距离最大的的点作为异常值

  1. 变量分箱
  • 等频分箱,把自变量从小到大排序,根据自变量的个数等分为k部分,每部分作为一个分箱。

  • 等距分箱,把自变量从小到大排序,将自变量的取值范围分为k个等距的区间,每个区间作为一个分箱。

  • 聚类分箱,用k-means聚类法将自变量聚为k类,但在聚类过程中需要保证分箱的有序性。

  1. WOE编码

特征离散化,是将数值型特征(一般是连续型的)转变为离散特征,比如woe转化,将特征进行分箱,再将每个分箱映射到woe值上,即转换为离散特征

woe编码的好处:

1)简化模型,使模型变得更稳定,降低了过拟合的风险

2)对异常数据有很强的鲁棒性,实际工作中的那些很难解释的异常数据一般不会做删除处理,如果特征不做离散化,这个异常数据带入模型,会给模型带来很大的干扰

参考资料

  1. 评分卡模型
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水花

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值