本文目录一览:
python评分卡之LR及混淆矩阵、ROC
import pandas as pd
import numpy as np
from sklearn import linear_model
# 读取数据
sports = pd.read_csv(r'C:\Users\Administrator\Desktop\Run or Walk.csv')
# 提取出所有自变量名称
predictors = sports.columns[4:]
# 构建自变量矩阵
X = sports.ix[:,predictors]
# 提取y变量值
y = sports.activity
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size = 0.25, random_state = 1234)
# 利用训练集建模
sklearn_logistic = linear_model.LogisticRegression()
sklearn_logistic.fit(X_train, y_train)
# 返回模型的各个参数
print(sklearn_logistic.intercept_, sklearn_logistic.coef_)
# 模型预测
sklearn_predict = sklearn_logistic.predict(X_test)
# 预测结果统计
pd.Series(sklearn_predict).value_counts()
-------------------------------------------------------------------------------------------------------------------------------------------
# 导入第三方模块
from sklearn import metrics
# 混淆矩阵
cm = metrics.confusion_matrix(y_test, sklearn_predict, labels = [0,1])
cm
Accuracy = metrics.scorer.accuracy_score(y_test, sklearn_predict)
Sensitivity = metrics.scorer.recall_score(y_test, sklearn_predict)
Specificity = metrics.scorer.recall_score(y_test, sklearn_predict, pos_label=0)
print('模型准确率为%.2f%%:' %(Accuracy*100))
print('正例覆盖率为%.2f%%' %(Sensitivity*100))
print('负例覆盖率为%.2f%%' %(Specificity*100))
-------------------------------------------------------------------------------------------------------------------------------------------
# 混淆矩阵的可视化
# 导入第三方模块
import seaborn as sns
import matplotlib.pyplot as plt
# 绘制热力图
sns.heatmap(cm, annot = True, fmt = '.2e',cmap = 'GnBu')
plt.show()
------------------------------------------------------------------------------------------------------------------------------------------
# 绘制ROC曲线
# 计算真正率和假正率
fpr,tpr,threshold = metrics.roc_curve(y_test, sm_y_probability)
# 计算auc的值
roc_auc = metrics.auc(fpr,tpr)
# 绘制面积图
plt.stackplot(fpr, tpr, color='steelblue', alpha = 0.5, edgecolor = 'black')
# 添加边际线
plt.plot(fpr, tpr, color='black', lw = 1)
# 添加对角线
plt.plot([0,1],[0,1], color = 'red', linestyle = '--')
# 添加文本信息
plt.text(0.5,0.3,'ROC curve (area = %0.2f)' % roc_auc)
# 添加x轴与y轴标签
plt.xlabel('1-Specificity')
plt.ylabel('Sensitivity')
plt.show()
-------------------------------------------------------------------------------------------------------------------------------------------
#ks曲线 链接: 风控数据分析学习笔记(二)Python建立信用评分卡 -
fig, ax = plt.subplots()
ax.plot(1 - threshold, tpr, label='tpr')# ks曲线要按照预测概率降序排列,所以需要1-threshold镜像
ax.plot(1 - threshold, fpr, label='fpr')
ax.plot(1 - threshold, tpr-fpr,label='KS')
plt.xlabel('score')
plt.title('KS Curve')
plt.ylim([0.0, 1.0])
plt.figure(figsize=(20,20))
legend = ax.legend(loc='upper left')
plt.show()
银行数据仓库体系实践(18)--数据应用之信用风险建模
信用风险
银行的经营风险的机构,那在第15节也提到了巴塞尔新资本协议对于银行风险的计量和监管要求,其中信用风险是银行经营的主要风险之一,它的管理好坏直接影响到银行的经营利润和稳定经营。信用风险是指交易对手未能履行约定契约中的义务而给银行造成经济损失的风险。典型的表现形式包括借款人发生违约或信用等级下降。借款人因各种原因未能及时、足额偿还债务/银行贷款、未能履行合同义务而发生违约时,债权人或银行必将因为未能得到预期的收益而承担财务上的损失。
那如何来表示某个交易对手的信用情况呢,一般使用信用等级或信用评分来来表示,等级越低或评分越低,发生违约的概率会增加。这个信用评分主要应用在客户的贷前和贷后管理中,贷前是指客户贷款申请阶段,银行受理客户贷款申请时会根据客户提交的信息、人行征信、其它数据源按一定的规则计算出一个违约概率和风险评分或信用等级。再根据这个评分或评级来确定客户的授信额度和利率。计算出的评分或评级越高,违约概率越低,比如在进行个人贷前评分时主要关注以下5方面:
(1)People:贷款人状况,包括历史还款表现、当前负债情况、资金饥渴度等;
(2)Payment:还款来源,如基本收入、资产水平、月收支负债比、无担保总负债等;
(3)Purpose:资金用途,如消费、买房,需要规避贷款资金用于投资或投机性质较高领域,如股票和数字货币;
(4)Protection:债权确保,主要是看是否有抵押物或担保,需要看抵押物用途、质量、价格等关键要素;
(5)Perspective:借款户展望,从地域、行业、人生阶段等考察稳定性及潜力;
贷后是指客户借款后银行持续跟进客户的信用情况,如果发现信用评分降低或者某些指标达到风险预警指标的阈值,说明风险升高,则会进行冻结额度甚至提前进行贷款收回。特别是对于逾期客户。
风险建模步骤
在进行信用评估时如何选择客户属性、如何确定评分或评级规则呢?这就需要进行风险建模,通过分析历史数据来确定哪些特征或指标对客户的违约相关性大,可以了解客户的还款能力以及还款意愿。并通过一定方法来建立评分和评级的规则。那风险建模主要分为以下步骤:
(1)业务理解:主要评估当前现状、确定业务目标,选择建模方法,比如需要进行XX贷款产品的贷前评分模型并确定准入规则,建模方式比如为评分卡,评分应用为基于评分确定贷款准入规则以及额度和利率规则,同时需要确定分析数据的好客户和坏客户标准,如逾期90天以上为坏客户;
(2)数据理解:首先需要准备建模的样本数据,如抽取近2年的获得类似产品的客户相关信息以及根据好客户和坏客户标准确定的结果。并针对业务数据进行业务含义理解、对数据进行收集、探索,了解每个变量的数据质量、缺失情况,数据分布等。比如对于客户在人行的征信数据、客户在银行的存款、理财等信息、以及客户申请填写的家庭、房产信息、外部获得的客户教育、司法等相关信息进行业务理解和数据分布、质量的探索,对缺失值比例过大的变量或准确性不高的变量进行剔除,同时也要确定对于样本数据中哪些数据进行建模,哪些数据进行验证。
(3)数据准备:主要对数据进行预处理和指标加工,指标加工指基于基础数据进行指标加工,如最近1个月的征信查询次数,最近1年的逾期次数等,数据预处理主要工作包括对每一个变量进行数据清洗、缺失值处理、异常值处理、数据标准化等,主要目的是将获取的原始数据转变成可用于建模的结构化数据。
比如对于连续变量,就是要寻找合适的切割点把变量分为几个区间段以使其具有最强的预测能力,也称为“分箱”。例如客户年龄就是连续变量,在这一步就是要研究分成几组、每组切割点在哪里预测能力是最强的。分箱的方法有等宽、等频、聚类(k-means)、卡方分箱法、单变量决策树算法(ID3、C4.5、CART)、IV最大化分箱法、best-ks分箱法等。如果是离散变量,每个变量值都有一定的预测能力,但是考虑到可能几个变量值有相近的预测能力,因此也需要进行分组。
通过对变量的分割、分组和合并转换,分析每个变量对于结果的相关性,剔除掉预测能力较弱的变量,筛选出符合实际业务需求、具有较强预测能力的变量。检测变量预测能力的方法有:WOE(weight of Evidence) 、IV(informationvalue)等。
(4)分析建模:即对于筛选出来的变量以及完成好坏定义的样本结果。放入模型进行拟合。如评分卡一般采用常见的逻辑回归的模型,PYTHON、SAS、R都有相关的函数实现模型拟合。以下是生成的评分卡的例子。
(5)评估及报告:即通过验证样本对模型的预测进行校验。评估模型的准确性和稳健性,并得出分析报告。常用的方法有ROC曲线、lift提升指数、KS(Kolmogorov-Smirnov)曲线、GINI系数等。
(6)应用:对模型进行实际部署和应用,如基于评分进行客户准入和产生额度,并在贷款系统进行模型部署,自动对申请客户进行评分。
(7)监测:建立多种报表对模型的有效性、稳定性进行监测,如稳定性监控报表来比较新申请客户与开发样本客户的分值分布,不良贷款分析报表来评估不同分数段的不良贷款,并且与开发时的预测进行比较,监控客户信贷质量。随着时间的推移和环境变化,评分模型的预测力会减弱,所以需要持续监控并进行适当调整或重建。
在信用风险建模中,目前评分卡建模还是主要的方式,除了申请评分(A卡(Application score card))还有B卡(Behavior score card)行为评分卡、C卡(Collection score card)催收评分卡。B卡主要进行客户贷后管理,如何进行风险预警,C卡进行催收管理,确定如何催收以及催收方式和时间点。信用风险模型中还有一个是反欺诈模型,它主要是识别假冒身份、虚假信息、批量薅羊毛等欺诈行为。随着机器学习和大数据的发展,其它的一些建模方式如决策树、深度神经网络也越来越多的应用到了风险建模中。
信用风险模型是数据仓库支持的重要数据应用之一,在风险建模分析阶段,数据仓库是建模样本数据以及衍生指标加工的主要提供者,业务人员一般在自助分析平台进行数据分析和建模,模型建立完成并部署后,会基于数据仓库数据进行模型效果的监控。在贷后管理中,风险集市也会进行贷后指标的加工。另外风险模型以及预警中会经常使用到外部数据,这部分数据也是通过数据仓库进行对接、加工和存储。
数据挖掘技术在信用卡业务中的应用案例
数据挖掘技术在信用卡业务中的应用案例
信用卡业务具有透支笔数巨大、单笔金额小的特点,这使得数据挖掘技术在信用卡业务中的应用成为必然。国外信用卡发卡机构已经广泛应用数据挖掘技术促进信用卡业务的发展,实现全面的绩效管理。我国自1985年发行第一张信用卡以来,信用卡业务得到了长足的发展,积累了巨量的数据,数据挖掘在信用卡业务中的重要性日益显现。
一、数据挖掘技术在信用卡业务中的应用数据挖掘技术在信用卡业务中的应用主要有分析型客户关系管理、风险管理和运营管理。
1.分析型CRM
分析型CRM应用包括市场细分、客户获取、交叉销售和客户流失。信用卡分析人员搜集和处理大量数据,对这些数据进行分析,发现其数据模式及特征,分析某个客户群体的特性、消费习惯、消费倾向和消费需求,进而推断出相应消费群体下一步的消费行为,然后以此为基础,对所识别出来的消费群体进行特定产品的主动营销。这与传统的不区分消费者对象特征的大规模营销手段相比,大大节省了营销成本,提高了营销效果,从而能为银行带来更多的利润。对客户采用何种营销方式是根据响应模型预测得出的客户购买概率做出的,对响应概率高的客户采用更为主动、人性化的营销方式,如电话营销、上门营销;对响应概率较低的客户可选用成本较低的电子邮件和信件营销方式。除获取新客户外,维护已有优质客户的忠诚度也很重要,因为留住一个原有客户的成本要远远低于开发一个新客户的成本。在客户关系管理中,通过数据挖掘技术,找到流失客户的特征,并发现其流失规律,就可以在那些具有相似特征的持卡人还未流失之前,对其进行有针对性的弥补,使得优质客户能为银行持续创造价值。
2.风险管理
数据挖掘在信用卡业务中的另一个重要应用就是风险管理。在风险管理中运用数据挖掘技术可建立各类信用评分模型。模型类型主要有三种:申请信用卡评分卡、行为信用评分卡和催收信用评分卡,分别为信用卡业务提供事前、事中、和事后的信用风险控制。
申请评分模型专门用于对新申请客户的信用评估,它应用于信用卡征信审核阶段,通过申请人填写的有关个人信息,即可有效、快速地辨别和划分客户质量,决定是否审批通过并对审批通过的申请人核定初始信用额度,帮助发卡行从源头上控制风险。申请评分模型不依赖于人们的主观判断或经验,有利于发卡行推行统一规范的授信政策。行为评分模型是针对已有持卡人,通过对持卡客户的行为进行监控和预测,从而评估持卡客户的信用风险,并根据模型结果,智能化地决定是否调整客户信用额度,在授权时决定是否授权通过,到期换卡时是否进行续卡操作,对可能出现的使其提前进行预警。催收评分模型是申请评分模型和行为评分模型的补充,是在持卡人产生了逾期或坏账的情况下建立的。催收评分卡被用于预测和评估对某一笔坏账所采取措施的有效性,诸如客户对警告信件反应的可能性。这样,发卡行就可以根据模型的预测,对不同程度的逾期客户采取相应措施进行处理。以上三种评分模型在建立时,所利用的数据主要是人口统计学数据和行为数据。人口统计学数据包括年龄、性别、婚姻状况、教育背景、家庭成员特点、住房情况、职业、职称、收入状况等。行为数据包括持卡人在过去使用信用卡的表现信息,如使用频率、金额、还款情况等。由此可见,数据挖掘技术的使用,可以使银行有效地建立起事前、事中到事后的信用风险控制体系。
3.运营管理
虽然数据挖掘在信用卡运营管理领域的应用不是最重要的,但它已为国外多家发卡公司在提高生产效率、优化流程、预测资金和服务需求、提供服务次序等问题的分析上取得了较大成绩。
二、常用的数据挖掘方法
上述数据挖掘技术在信用卡领域的应用中,有很多工具可用于开发预测和描述模型。有些用统计方法,如线性回归和逻辑回归;有些有非统计或混合方法,如神经网络、遗传算法、决策树及回归树。这里仅讨论几种常见的典型方法。
1.线性回归
简单线性回归分析是量化两个连续变量之间关系的一种统计技术。这两个变量分别是因变量(预测变量)。使用这一方法,可以发现一条穿过数据的线,线上的点使对应数据点的方差最小。为市场营销、风险和客户关系管理建立模型时,通常有多个自变量,用多个独立自变量来预测一个连续变量称为多元线性回归,用线性回归方法建立的模型通常具有鲁棒性。
2.逻辑回归
逻辑回归是使用最广泛的建模技术,与线性回归很相似。两者的主要区别在于逻辑回归的因变量(想预测变量)不是连续的,而是离散的或者类型变量。如申请评分模型可运用逻辑回归方法,选取关键变量确定回归系数。以申请者的关键变量x1,x2,…xm为自变量,以y=[1 申请者是坏客户;0 申请者是好客户,为因变量,则对于二分类因变量,一般假设客户变坏的概率为 p(y=1)=eβ0 β1×1 … βmxm/1 eβ0 β1×1 … βmxm式中,β0,β1…,βm是常数,即1n(p/1-p)=β0 β1×1 … βmxm
3.神经网络
神经网络处理和回归处理大不相同,它不依照任何概率分布,而是模仿人脑功能,可以认为它是从每一次经验中提取并学习信息。神经网络系统由一系列类似于人脑神经元一样的节点组成,这些节点通过网络彼此互连。如果有数据输入,它们便可以进行确定数据模式的工作。神经网络由相互连接的输入层、中间层(或隐藏层)、输出层组成。中间层由多个节点组成,完成大部分网络工作。输出层输出数据分析的执行结果。
4.遗传算法
与神经元网络类似,遗传算法也不遵循任何概率分布,是源自“适者生存”的进化过程。它首先将问题的可能解按某种形式进行编码,编码后的解称为染色体。随机选取n个染色体作为初始种群,再根据预定的评价函数对每个染色体计算适应值,性能较好的染色体有较高的适应值。选择适应值较高的染色体进行复制,并通过遗传算子产生一群新的更适应环境的染色体,形成新的种群,直至最后收敛到一个最适应环境的个体,得到问题的最优化解。
5.决策树
决策树的目标是逐步将数据分类到不同的组或分支中,在因变量的值上建立最强划分。由于分类规则比较直观,所以易于理解。图1为客户响应的决策树,从中很容易识别出响应率最高的组。
三、实例分析
以下以逻辑回归方法建立信用卡申请评分模型为例,说明数据挖掘技术在信用卡业务中的应用。申请评分模型设计可分为7个基本步骤。
1.定义好客户和坏客户的标准
好客户和坏客户的标准根据适合管理的需要定义。按照国外的经验,建立一个预测客户好坏的风险模型所需的好、坏样本至少各要有1000个左右。为了规避风险,同时考虑到信用卡市场初期,银行的效益来源主要是销售商的佣金、信用卡利息、手续费收入和资金的运作利差。因此,一般银行把降低客户的逾期率作为一个主要的管理目标。比如,将坏客户定义为出现过逾期60天以上的客户;将坏客户定义为出现过逾期60天以上的客户;将好客户定义为没有30天以上逾期且当前没有逾期的客户。
一般来讲,在同一样本空间内,好客户的数量要远远大于坏客户的数量。为了保证模型具有较高的识别坏客户的能力,取好、坏客户样本数比率为1:1。
2.确定样本空间
样本空间的确定要考虑样本是否具有代表性。一个客户是好客户,表明持卡人在一段观察期内用卡表现良好;而一个客户只要出现过“坏”的记录,就把他认定为坏客户。所以,一般好客户的观察期要比坏客户长一些、好、坏客户可以选择在不同的时间段,即不同的样本空间内。比如,好客户的样本空间为2003年11月-2003年12月的申请人,坏客户的样本空间为2003年11月-2004年5月的申请人,这样既能保证好客户的表现期较长,又能保证有足够数量的坏客户样本。当然,抽样的好、坏客户都应具有代表性。
3.数据来源
在美国,有统一的信用局对个人信用进行评分,通常被称为“FICO评分”。美国的银行、信用卡公司和金融机构在对客户进行信用风险分析时,可以利用信用局对个人的数据报告。在我国,由于征信系统还不完善,建模数据主要来自申请表。随着我国全国性征信系统的逐步完善,未来建模的一部分数据可以从征信机构收集到。
4.数据整理
大量取样的数据要真正最后进入模型,必须经过数据整理。在数据处理时应注意检查数据的逻辑性、区分“数据缺失”和“0”、根据逻辑推断某些值、寻找反常数据、评估是否真实。可以通过求最小值、最大值和平均值的方法,初步验证抽样数据是否随机、是否具有代表性。
5.变量选择
变量选择要同时具有数学统计的正确性和信用卡实际业务的解释力。Logistic回归方法是尽可能准确找到能够预测因变量的自变量,并给予各自变量一定权重。若自变量数量太少,拟合的效果不好,不能很好地预测因变量的情况;若自变量太多,会形成过分拟合,预测因变量的效果同样不好。所以应减少一些自变量,如用虚拟变量表示不能量化的变量、用单变量和决策树分析筛选变量。与因变量相关性差不多的自变量可以归为一类,如地区对客户变坏概率的影响,假设广东和福建两省对坏客户的相关性分别为-0.381和-0.380,可将这两个地区归为一类,另外,可以根据申请表上的信息构造一些自变量,比如结合申请表上“婚姻状况”和“抚养子女”,根据经验和常识结合这两个字段,构造新变量“已婚有子女”,进入模型分析这个变量是不真正具有统计预测性。
6.模型建立
借助SAS9软件,用逐步回归法对变量进行筛选。这里设计了一种算法,分为6个步骤。
步骤1:求得多变量相关矩阵(若是虚拟变量,则>0.5属于比较相关;若是一般变量,则>0.7-0.8属于比较相关)。
步骤2:旋转主成分分析(一般变量要求>0.8属于比较相关;虚拟变量要求>0.6-0.7属于比较相关)。
步骤3:在第一主成分和第二主成分分别找出15个变量,共30个变量。
步骤4:计算所有30个变量对好/坏的相关性,找出相关性大的变量加入步骤3得出的变量。
步骤5:计算VIF。若VIF数值比较大,查看步骤1中的相关矩阵,并分别分析这两个变量对模型的作用,剔除相关性较小的一个。
步骤6:循环步骤4和步骤5,直到找到所有变量,且达到多变量相关矩阵相关性很而单个变量对模型贡献作用大。
7.模型验证
在收集数据时,把所有整理好的数据分为用于建立模型的建模样本和用于模型验证的对照样本。对照样本用于对模型总体预测性、稳定性进行验证。申请评分模型的模型检验指标包括K-S值、ROC、AR等指标。虽然受到数据不干净等客观因素的影响,本例申请评分模型的K-S值已经超过0.4,达到了可以使用的水平。
四、数据挖掘在国内信用卡市场的发展前景
在国外,信用卡业务信息化程度较高,数据库中保留了大量的数量资源,运用数据技术建立的各类模型在信用卡业务中的实施非常成功。目前国内信用卡发卡银行首先利用数据挖掘建立申请评分模型,作为在信用卡业务中应用的第一步,不少发卡银行已经用自己的历史数据建立了客户化的申请评分模型。总体而言,数据挖掘在我国信用卡业务中的应用处于数据质量问题,难于构建业务模型。
随着国内各家发卡银行已经建立或着手建立数据仓库,将不同操作源的数据存放到一个集中的环境中,并且进行适当的清洗和转换。这为数据挖掘提供了一个很好的操作平台,将给数据挖掘带来各种便利和功能。人民银行的个人征信系统也已上线,在全国范围内形成了个人信用数据的集中。在内部环境和外部环境不断改善的基础上,数据挖掘技术在信用卡业务中将具有越来越广阔的应用前景。