002_评分卡

随着数据分析工具的发展、量化手段的进步,各大银行机构逐渐使用统计模型将专家的评判标准量化为评分卡模型。如今,风险量化手段早已不局限于银行等传统借贷机构,持牌互联网公司的金融部门、持牌消费金融公司等都具有成本体系的风险量化手段。

一、评分卡概念

评分卡:是一张刻有分数刻度和相应阈值的表。对于任何一个用户,总能根据其信息找到对应的分数。将不同类别的分数进行汇总,就可以得到用户的总分数。

信用评分卡:专门用来评估用户信用的一张刻度表。

1、适用客群

适用客群即评分卡所适用的贷款群体。从适用客群的角度来定义,常见的评分卡可以分为:

  • 通用评分卡(Generic Score Card):基于全行业数据,利用数据分析或经验判断开发的评分卡。征信机构的信用评分均属于通用评分卡。通用评分卡不区分具体场景,反映用户自身的信用质量,通常应用于市场营销、申请审批、账户管理、催收回收、欺诈验证等场景。
  • 定制评分卡(Customized Score Card):又称信用局部评分卡,通常是由具体机构根据自身数据及场景需求定制的评分卡。由于目标明确且针对性强,在样本充分的情况下,相比于通用评分卡具有更好的表现。
  • 子评分卡(Children Score Card):由于各机构不只有一个产品,且单一产品中可能呈现不同的样本分布,通常会在定制评分卡后的细分方向上建立子评分卡。

2、用途

      用途即评分卡的使用目的。常见的评分卡由如下6种定义方式。

  • 申请评分卡(Application Card):申请评分卡通常用于贷前客户的进件审批。在没有历史平台数据的客群中,外部征信数据及用户的资产数据通常是影响客户申请评分的主要原因。
  • 行为评分卡(Behavior Card):行为评分卡用于贷中客户的升降额度管理,主要目的是预测客户的动态风险。由于客户在平台上已有历史数据,通常客户在该平台的历史表现对行为评分卡的影响最大。
  • 催收评分卡(Collection Card):催收评分卡一般用于贷后管理,主要使用催收记录作为数据进行建模。通过催收评分对用户定制不同的贷后管理策略,从而实现催收人员的合理分配。
  • 流失预警评分模型:预测平台现有存量客户在未来某时间点后流失的概率。覆盖审批通过后未提款客群、还款成功后不再复贷客群等。
  • 营销评分模型:目标客群收到平台营销后,申请贷款服务的概率。在主动授信过程中,通常将营销模型的高分群体和申请信用评分模型的高分群里进行交叉,对预估信用较好且有强烈活动倾向的客户执行营销动作。
  • 欺诈评分模型:一种用来预测用户的借款目的不正当程度的评分模型。信用模型用于衡量用户的还款能力及还款意愿,而欺诈评分模型用于衡量用户的借款目的是否正当。

二、建模流程

模型的本质是对现有业务问题的抽象理解。

模型设计:抽象问题、标签定义、数据收集。

模型开发的主要过程:特征构造、特征变换、特征筛选、模型评估。

三、模型设计

模型设计包括以下4个步骤:

1、业务问题模式化;

2、因变量设计;

3、数据集及时间段设计;

4、样本选取;

3.1 业务问题转化

风险控制的业务问题转化,通常指将业务问题抽象为二分类问题,即由于用户不还款会直接造成业务上的损失,因此建立模型预测用户是否会还款。而因变量设计,是指将不可解问题转化未近似可解问题。

是否还款,本身是一种难以定性的问题。随着表现期增长,用户可能由未还款转化为还款。因此,通常使用某个时间窗口内的用户表现近似为真实表现。逾期天数超过某一阈值则标记为负样本,如逾期超过3个月(M3+)或逾期超过7天(PD7).而具体阈值确定,则依赖于滚动率分析(Roll Rate Analysis)和账龄分析(Vintage Analysis)。滚动率就是从某个观察点之前一段时间的最坏状态,向观察点之后一段时间的最坏状态的发展变化情况。其功能与账龄分析相似度较高。

3.2 账龄分析与时间窗口设计

时间窗口分为表现窗口和观测窗口,表现窗口中的时间成为表现期,观察窗口中的时间称为观察期。如果定义用户为负样本的依据是到期后的3个月内发生逾期,则称表现期为3个月。在用户贷款前12个月的数据切片中,抽取用户的历史行为表现作为变量,用于后续建模,则称观察期为12个月。

通常,时间窗口的确定,需要考虑当前数据集的数据是否充足。如果表现窗口设计过小,则用户的风险暴露不充分,但是观察期可以边长,因此由更丰富的变量信息用于建模。如果表现窗口过大,则观察窗口可能过小,以至于变量的效果显著下降。为了更好地确定时间窗口,通常使用账龄分析来分析账户的成熟期,进而给出表现期与观察期的合理划分。

账龄(Vintage):信贷产品中的账龄分析与葡萄酒行业中的酿造年份分析非常类似。信贷Vintage曲线主要用途包括以下几点。

  • 确定资产质量:曲线平缓后可以观察到该月份放款客群对应的最终逾期占比。
  • 分析变化规律:如果前几期逾期率上升很快,随后风险暴露进入平稳期,说明短期风险捕捉能力较差,客群欺诈风险可能较高,需要优化欺诈检测系统。如果曲线一直在升,说明信用风险识别能力较差,需要对策略和信用评估模型进行优化。
  • 确定账户成熟期:确定用户风险暴露所需周期,从而定义建模样本的表现期。
  • 分析影响因素:放款月的不同会导致很多的因素不同,如风控策略的收紧与放松、客群变化、市场环境、政策法规等都会影响资产质量。因此分析影响因素可以用来指导风控策略的调整,在未来市场环境或政策变动时有更好的应对办法。

3.3 数据集切分

数据集在建模前需要划分为三个子集:开发样本(Develop)、验证样本(Valation)、时间外样本(Out Off Time;OOT)。

开发样本与验证样本使用分层抽样进行划分,以保证两个数据集中的负样本占比相同。通常开发样本与验证样本的比值时6:4。而时间外验证样本通常使用整个建模样本中时间切片最后的一段样本。开发样本对应于机器学习训练过程中的训练样本集(Train),而验证样本与时间外样本充当测试样本集的角色,用于检验模型的拟合程度、泛化能力即稳定性。

最终模型上线前,通常需要将开发样本、验证样本、时间外样本三者合并重新训练。对模型的参数进一步调高。

3.4 样本选择

建模样本通常需要满足以下原则:

代表性(Representtativeness):样本必须能充分代表总体。只有这样,从样本中提炼的数理关系才能有效预测未来真实场景的数理关系。例如:金融场景客群可能与小额现金贷场景下的客群有所差异,因此不能直接使用不同客群作为样本来建模。

充分性(Adequacy):样本集的数量必须满足一定数量要求。当样本量较小时,无法满足统计的显著(Statistical Significance)性要求。即置信度(Confidence Level)较低。评分卡建模通常需要正负样本的数量都不少于1500个。随着样本量增加,模型的效果也会由显著提升。而神经网络等多参数模型通常要求样本量在50万个以上,否则很难保证模型的稳定性。

时效性(Timeliness):在满足样本量充足的前提下,通常要求样本的观测期与实际应用时间点越接近越好。银行等客群稳定的场景,观察期可长达一年半至两年,然而在许多平台,很难保证样本都处在稳定的较近期的时间点上。此时可通过迁移学习(Transfer Learning)等方法对样本进行挑选或对变量进行映射,使得早期样本与近期样本有相似的数据分布。

排除性(Exclusions):虽然建模样本需要具有代表整体的能力,但某些法律规定不满足特定场景贷款需求的用户不应该作为样本。

3.5 采样与加权

评分卡建模通常要求正负样本的数量都不少于1500个。但样本量也并非越大越好,当总样本量超过50000个时,模型的效果将不再随着样本量的增加而有显著变化了,而且数据处理与模型训练过程也较为耗时。如果样本量过大,会给训练过程增加不必要的负担。因此样本量较大时,需要对样本做欠采样(Subsampling)处理。

  • 随机欠采样(Random Subsampling):直接将正样本随机欠采样至预期比例。通常将正样本欠采样至正负样本比例相等,即正样本与负样本量的比值为1:1.等比例抽样属于特殊的随机欠采样。
  • 分层抽样(Stratified Sampling):保证抽样后,开发样本、验证样本、时间外验证样本中的正负样本比例相同。分层抽样是最常见的一种抽样方法,他可以保证在不同的数据集中,正负样本的分布大致相同,这样可以避免在模型评价过程中因分布差异而导致的偏差。当模型表现差异较大时,我们更有把握认为这是模型过拟合所致,而非其他因素。
  • 算法采样:通过使用聚类(Clustering)算法,将样本点聚类到符合预期个数的簇,再使用簇中样本的平均值代表整个簇。也可以使用分类算法,根据标签挑选更适合保留的样本实现欠采样。这种方法可以最大化的保障原始样本集的特性,代价是解释性的下降。

需要注意的是,欠采样过后需要为正样本增加权重。如果正样本采样为原来的1/4,则采样后的正样本权重设置为负样本权重的4倍,例如正样本的权重为4,负样本的权重保持为1。这是因为在后续计算模型检验指标及预测坏账时,需要将权重带入计算逻辑才可以还原真实情况下的指标估计值,否则预期结果与实际部署后的结果会有明显偏差。

在sklearn库中调用逻辑回归可以使用参数class_weight指定每个类别的权重,传入字典{0:4,1:1}代表类别0权重为4,类别1权重为1.

from sklearn.linear_model import LogisticRegression
lr_model = LogisticRegression(class_weight={0:4,1:1})
lr_model.fit(x,y)

当负样本较少的时候,需要使用代价敏感学习(cost-sensitive learning)或过采样(Upsampling)处理。参数class_weight支持一种自动平衡正负样本类别的代价敏感加权方案,其可以对少数样本进行加权处理,使得模型进行均衡训练。

指定参数class_weigfht=“balanced”调整正负样本的权重,使得正负样本的总权重相同。类权重及算法方法如下:

weight = n_samples/(n_classes*np.bincount(y))

其中,n_samples为样本数,n_classes为类别数量,np.bincount(y) 会输出每个类的样本数,例如y=[1,0,0,1,1]时,则np.bincount(y)=[2,3]。

from sklearn.linear_model import LogisticRegression
lr_model = LogisticRegression(class_weight="balanced")
lr_model.fit(x,y)

代价敏感加权对不均衡问题有一定帮助。如果想达到更好的效果,仍需为模型引入更多的负样本。使用朴素随机过采样的方法将现有样本复制,训练得到的模型泛化能力通常较差,因此在部分场景下需要使用过采样算法对模型的样本不均衡问题进行修正。常见的过采样算法有少数类别过采样技术(Synthetic Minority Oversampling Technique,SMOTE)和ADASYN(Adaptive Synthetic)算法等,实际应用中,在使用过采样算法前需要经过严格的数据清晰来保证效果的稳定性。

SMOTE是一种用于合成少数类样本的过采样技术,其基本思想是对少数样本进行分析,然后在少数样本之间进行插值,人工合成新样本,并将新样本添加到数据集中进行训练。

新生成的样本是由现有样本的每一维度特征分别加权求和得到的。需要注意的是,每一维度特征进行插值时是相互独立的。此外,还可以对原始数据集进行聚类在进行插值,或使用模型对原数据集进行筛选后再进行插值,从而得到新样本。

通过第三方库imblearn可以快速实现过采样与欠采样,代码如下:

# 生成数据集
from sklearn.datasets import make_classification
from collections import Counter
X,y = make_classification(n_samples=5000, n_features=2,
                          n_informative=2,n_redundant=0,
                          n_repeated=0,n_classes=3,
                          n_clusters_per_class=1,
                          weights=[0.01, 0.05, 0.94],
                          class_sep=0.8,random_state=0
)
# 随机过采样
from imblearn.over_sampling import RandomOverSampler
X_resampled,y_resampled = RandomOverSampler().fit_resample(X,y)
# SMOTR过采样及变体
from imblearn.over_sampling import SMOTE
from imblearn.over_sampling import BorderlineSMOTE
X_resampled_smote, y_resampled_smote = SMOTE().fit_resample(X,y)
# X_resampled,y_resampled = SMOTE(kind='borderline1').fit_resample(X,y)
X_resampled,y_resampled = BorderlineSMOTE(kind='borderline-1').fit_resample(X,y)
#X_resampled,y_resampled = SMOTE(kind='borderline2').fit_resample(X,y)
X_resampled,y_resampled = BorderlineSMOTE(kind='borderline-2').fit_resample(X,y)
# ADASYN 过采样
from imblearn.over_sampling import ADASYN
X_resampled_adasyn,y_resampled_adasyn = ADASYN().fit_resample(X,y)
# 随机欠采样
from imblearn.under_sampling import RandomUnderSampler
X_resampled,y_resampled = RandomUnderSampler().fit_resample(X,y)
# 基于K-means聚类的欠采样
from imblearn.under_sampling import ClusterCentroids
X_resampled,y_resampled = ClusterCentroids().fit_resample(X,y)
# 基于最邻近算法的欠采样
from imblearn.under_sampling import RepeatedEditedNearestNeighbours
X_resampled,y_resampled = RepeatedEditedNearestNeighbours().fit_resample(X,y)
# 在数据上运用一种分类器
# 然后将概率值低于阈值的样本去掉
# 从而实现欠采样
from sklearn.linear_model import LogisticRegression
from imblearn.under_sampling import InstanceHardnessThreshold
lr_unders = InstanceHardnessThreshold(random_state =0, estimator=LogisticRegression())
X_resampled,y_resampled = lr_unders.fit_resample(X,y)

如果想要进行分层抽样,可以考虑使用sklearn.model_selection中的train_test_split函数。通过startify参数可以指定分层对应的变量,代码如下,其中test_size指定抽样比例。

from sklearn.model_selection import train_test_split
train_set,test_set = train_test_split(df, test_size=0.4, stratify=df['label'], random_state=414)

如果不指定stratify参数,train_test_split函数将退化为普通的随机抽样。

四、数据与变量解读

首先,信用评分卡的本质是统计模型,因此需要有一定的数据用于分析和发现规律。其次,数据是刻画风险的基础,只有对借款人有全方位的理解,才能真正做好风控。因此,平台会付出一定的成来收集用户的数据用于评分卡的训练。通常,衡量一个用户的还款能力和还款意愿,主要会从以下几个角度出发。

  • 资质类数据:个人基本信息是每个贷款客户一定具备的,比较典型的有年龄、性别、家庭情况、通讯录、学历、家庭住址等。此外,还包括反应其经济状况的金融信息,如收入、资产等。
  • 信贷类数据:外部数据包括多头或征信数据。多头是指用户在多家借款平台贷款,用户借款平台较多会被换衣负债严重的倾向,偿还能力较差。而征信数据是指,征信机构通过用户在各家的贷款表现建立的评分卡模型所输出的分数。这些数据对揭示用户的还款能力和还款意愿有较大帮助。
  • 授权信息:通常在用户授权后,由贷款平台或第三方数据源采集得到,比如设备指纹,运营商数据、电商数据、出行数据、外卖数据、点评数据等。其中运营商数据通常用于资产处置,电商数据反应了用户某历史时段内的消费水平。此外,还可以将各种平台的消费数据与用户收入进行对比,从而得到当前用户的负债情况。其余数据均可通过数据挖掘手段分析并得到其与当前分析目标之间的关系,从而用于业务决策之中。
  • 平台表现:用户在借款平台的行为评分卡和催收评分卡中,可能会由一些历史的还款表现,这些可以直接体现用户的还款意愿。
  • 买点数据:贷款平台从App中抓取用户的贷款行为。记录用户点击App上每一个按钮的具体时间和频次,如注册、点击、申请等动作,以此对用户进行分析。

贷款平台通常围绕上述5中信息进行数据收集。数据的质量与丰富程度很大程度上决定了评分模型的效果,因此在数据收集过程中要尽可能多地增加高质量的数据源,但成本也会随之上升。所以,在新接入数据源进行测试前,需要综合考虑数据的质量、作用、成本。通常情况下,用户的资质类数据和金融属性较强的数据更能刻画用户的风险水平。当然,获得政协数据的成本也更高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据提供的引用内容,可以得知评分是一种信用风险评估模型,而XGBoost是一种基于树的机器学习算法。下面是评分和XGBoost的相关介绍和演示: 评分评分是一种用于信用风险评估的模型,通常用于银行、信用公司等金融机构对客户进行信用评估。评分的主要思想是将各种客户信息转化为一定的分数,通过对这些分数的加权得分来评估客户的信用风险。评分的建立需要经过数据预处理、特征工程、模型训练等多个步骤,其中模型训练通常采用逻辑回归等算法。 XGBoost: XGBoost是一种基于树的机器学习算法,它在处理大规模数据集和高维数据方面表现出色。XGBoost的主要思想是通过构建多个决策树来进行预测,每个决策树都是基于之前树的预测结果进行构建的。XGBoost的优点包括高效、准确、可扩展性强等。 评分+XGBoost: 评分和XGBoost可以结合使用,通过评分得到客户的信用评分,然后将评分作为XGBoost的输入特征,进行信用风险预测。这种方法可以提高模型的准确性和稳定性。 下面是一个简单的评分+XGBoost的演示代码: ```python # 数据预处理和特征工程 # ... # 构建评分模型 # ... # 计算客户的信用评分 # ... # 将评分作为XGBoost的输入特征 train_xgb = train_data.drop(['label'], axis=1) train_xgb['score'] = score(train_xgb['xbeta']) test_xgb = test_data.drop(['label'], axis=1) test_xgb['score'] = score(test_xgb['xbeta']) # 训练XGBoost模型 import xgboost as xgb dtrain = xgb.DMatrix(train_xgb, label=train_data['label']) dtest = xgb.DMatrix(test_xgb, label=test_data['label']) param = {'max_depth': 3, 'eta': 1, 'objective': 'binary:logistic'} num_round = 10 bst = xgb.train(param, dtrain, num_round) # 预测客户的信用风险 pred = bst.predict(dtest) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

35仍未老

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

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

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

打赏作者

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

抵扣说明:

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

余额充值