智能风控:python金融风险管理与评分卡建模
Ch1
互联网金融的申请过程,通常由用户从移动端发起,首次贷款用户会经理申请、四要素验证、授信与额度利率定价、多层审批、用户提款等多个环节;对于还款后再次贷款的复贷客户,平台通常会基于更好的信用评估结果,并根据历史还款表现对其进行额度管理。流程如图所示。
首次贷款用户需要依次通过反欺诈引擎、信用评估引擎、人工审核的审批。信用评估引擎主要包括政策规则筛选、信用规则筛选、申请评分卡评分等步骤。信用规则通常由风险分析方法得到的相应的策略规则;申请评分卡是用户授信的主要依据,建模人员根据用户的征信数以及统计模型,对用户未来的还款情况进行预估。
催收评分卡预测用户的催收处置难度。
Ch2 评分卡
2.1 评分卡概念
常见的评分卡可以被划分为以下几种:
申请评分卡(Application Card) :申请评分卡通常 用于贷前客户的进件审批。在没有历史平台表现的客群中,外部征信数据及用户的资产质量数据通常是影响客户申请评分的主要因素。
行为评分卡(Behavior Card):行为评分卡用于贷中客户的升降额度管理,主要目的是预测客户的动态风险。由于客户在平台上已有历史数据,通常客户在该平台的历史表现对行为评分卡的影响最大。
催收评分卡(Collection Card):催收评分卡一般用于贷后管理,主要使用催收记录作为数据建模。通过催收评分对用户指定不同呃贷后管理测录呃,从而实现催收人员的合理配置。
流失预警评分模型:预测平台现有存量客户在未来某时间节点后流失的概率。覆盖审批通过后未提款客群、还款成功后不再复贷客群等。
欺诈评分模型:一种用来预测用户的借款目的不正当程度的评分模型。信用模型用于衡量用户的还款能力及还款意愿,而欺诈模型用于衡量用户的借款目的是否正当。
2.2 建模流程
模型的本质是对现有业务问题的抽象理解。上图描述了评分卡模型的完整开发流程。其中,抽象问题、标签定义、数据收集属于模型设计范畴。
申请评分卡是为解决首次贷款的用户的信用评估问题而建立。建立行为评分卡则是为了根据贷款期间产生的数据动态调整用户的额度。建立催收评分卡是为了根据用户的催回难度,合理配置资产处置资源。笔记:长期贷款的话不一定会有行为评分卡,一锤子买卖。所以可能申请评分卡结合别的指标,比如用户信息,渠道信息,产品信息等,给出额度策略。申请评分卡很多数据来源于征信字段。
特征构造、特征变换、特征筛选、模型评估为模型开发的主要过程。在模型部署后,后期将通过多维度的指标监控保持对线上模型的持续追踪,以确保模型的效果和稳定性。当模型的某方面性能出现问题时,会通过模型迭代或模型重构对模型进行更新。
2.3 模型设计
在正式建立评分卡模型前,通常要对模型进行初步设计,并在后续建模中根据实际表现进行调整。常见的模型设计包括4个步骤:1.业务问题模式化 2. 因变量设计 3. 数据集及时间段设计 4. 样本选取
时间窗口分为表现窗口和观测窗口。如果定义用户为负样本的依据是到期后的3个月内发生逾期,则表现期是3个月。在用户贷款前12个月的数据切片中,抽取用户的历史行为作为变量,用于后续建模,则称成观察期为12个月。
通常,时间窗口的确定,需要考虑当前数据集的数据是否充足。
账龄(Vintage)曲线主要用途包括: 1. 确定资产质量:曲线平缓后可观察到放款客群对应的逾期占比 ;2. 分析变化规律: 若前期逾期上升很快速随后风险暴露进入平稳期,说明短期风险高,客群欺诈风险高,需要优化欺诈检测系统,若曲线一直上升,则说明风险识别能力差,需要对策略和信用评估模型进行优化。
3. 确定账户成熟期: 确定用户风险暴露所需要的的周期,从而定义建模样本的表现期 4. 分析影响因素:放款月的不同会影响资产质量,如风控政策、客群变化、市场环境、政策法规等,因此可以分析影响因此来知道风控策略的调整。
样本选择对模型的结果影响很大,通常建模样本要满足以下原则: 代表性、充分性(评分卡建模通常要求正负样本的数量不少于1500个,而神经网络等多参数模型通常要求样本量在50W以上)、 时效性、排除性(针对行为评分卡,无还款表现用户或欺诈用户等都不应放入样本集)
当总样本量超过50000个试,模型的效果将不再随着样本量的增加而有显著变化了,而且数据处理和模型训练过程也比较耗时。如果样本量过大,需要对样本进行欠采样处理(subsampling)。
由于负样本通常较少,因此只对正样本进行欠采样处理,常见的方法如下:
1.随机欠采样(random subsampling) :直接将正样本随机欠采样至预期比例。通常将正样本欠采样至正负样本比例相等。
2. 分层抽样(strarified sampling):保证抽样后,开发样本、验证岩板、时间外验证样本中的正负样本比例相同。分层抽样是最常见的一种抽样方法,它可以保证在不同的数据集中,正负样本的分布大致相同,这样可以避免在模型评价过程中因分布差异而导致的偏差。
3. 算法采样:通过聚类(clustering)算法,将样本点聚类得到符合预期个数的簇,再使用簇中样本的平均值代表整个簇。也可使用分类算法,根据标签挑选更适合保留的样本实现欠采样。这种方法可以最大化地保障原始样本集的特性,代价是解释性的下降。
需要注意的是,欠采样后需要为正样本添加权重。如正样本的采样为原来的1/4,则采样后的正样本的权重设置为负样本的4倍。这是因为在后续计算模型检验指标和预期坏账时,需要将权重代入计算逻辑才能还原真实情况下的指标估计值。
在sklearn库中调用逻辑回归模型,可以使用参数class_weight指定每个类别的权重。传入字典{0:4,1:1}代表类别0权重为4,类别1权重为1。
from sklearn.linear_model impor LogisticRegression
lr_model = LogisticRegression(class_weight = {0:4,1:1}
lr_model.fit(x,y)
当负样本较少的是,需要使用代价敏感学习(cost-sensitive learning)或者过采样(upsampling)处理。参数class_weight 支持一种自动平衡政府样本类别的代价敏感甲醛方案,其可以对少数类样本进行加权处理,使得模型进行均衡训练。指定参数class_weight = "balance" 调整政府样本的权重,使得正负样本总权重相同。
代价敏感加权对不均衡问题有一定的帮助。如果想达到更好的效果,仍需为模型引入更多的负样本。常见的过采样算法有 少数类别过采样技术(synthetic minorith oversampling technique, SMOTE)和 ADASYN(adaptive synthetic)算法等。实际应用中,在使用过采样算法前需要经过严格的数据清洗来保证效果稳定。
SMOTE算法是一种用于合成少数类样本的过采样技术,其基本思想是对少数类样本进行分析,然后在现有少数类样本之间进行差值,人工合成新样本,然后将新样本添加到数据集中进行训练。
通过第三方库imblearn 可以快速实现过采样和欠采样。
2.4 数据与变量解读
首先,信用评分卡的本质是统计模型,因此需要有一定的数据用于分析和发现规律。其次,数据是刻画风险的基础。平台会付出一定的成本来搜集用户的数据用于评分卡的训练。通常,衡量一个用户的偿还能力和还款意愿,会从以下几个角度出发:
1. 资质类数据:个人基本信息,如年龄、性别、家庭状况、学历、及家庭住址等,还有金融信息如收入、资产等。
2. 信贷类数据:外部数据包括多头和征信数据。多头是指用户在多家借款平台贷款,平台多会被怀疑有负债严重的倾向,偿还能力较差。征信和多头对揭示用户的还款能力和还款意愿有较大的帮助。
3. 授权信息: 通常在用户授权后,由贷款平台或第三方数据源采集得到,如设备、运营商数据、出行数据等。其中运营商数据主要用于资产处置,电商数据反映用户某历史时段内的消费水平。此外还可将各平台的消费数据与用户收入进行对比,从而得到用户的当前负债情况。这些数据均可通过数据挖掘手段分析并得到与当前分析目标之间的关系,用于业务决策。
4. 平台表现:用户在借款平台的行为评分卡,和催收评分卡汇总,可能会有一些历史的还款表现。
5. 埋点数据:贷款平台从APP抓取的用户贷款行为,记录用户点击APP每个按钮的具体时间和频次,对用户进行分析。
通常贷款平台围绕上述5种信息进行数据搜集。由于高质量的数据源成本较高,因此在新接入数据源进行测试前,需要综合考虑数据的质量、作用、成本。通常情况下,用户的资质类数据和金融属性较强的数据更能刻画出用户的风险水平。
CH3 机器学习
3.1 基本概念
每一个用户及其属性对应为一个样本(观测),这样一系列用户及其自身的属性构成了样本集,其中用户A,B,C构成了样本空间,“特征年龄、身高、收入”等构成了特征空间。此外还有一个空间叫做参数空间,即由组成预测函数的参数的所有取值所组成的空间。状态这个字段,代表样本的标签,也就是所需模型来判别的结果。在假设条件下,模型期望每个特征之间互不干扰,而实际上,通常每个特征之间都可能存在关系。
模型的训练(学习/拟合),是指通过将数据传入模型,从而使模型学习到数据的潜在规律的过程。而建立模型的本质,可以理解为从数据分布中抽取一个决策函数。
预测离散值:分类;预测连续值:回归
从数据是否带便签的家都:监督学习sl,半监督学习ssl,无监督学习ul
模型评价:过拟合和欠拟合
通常建模的时候会把样本集划分为训练集和测试机。
训练集和测试集在表现上的差值称为泛化误差,而泛化误差由三部分组成:偏差bias,方差variance和噪音noise。
偏差度量了模型的期望预测与真实结果的偏离程度,也就是模型本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习能力的变,也就是数据扰动所造成的影响;而噪音则刻画了问题本身的拟合难度。
通常离线模型训练完成后,在最终模型上线前,会将测试集和训练集整合,重新对模型的参数做拟合,进而得到最终的模型。这是因为人为数据及越大,对样本空间的表征可能越充分,某些曝光不充分的特征值所对应的标签分布,在数据量增加时,可能有更高的曝光率。
3.2 线性回归模型
不满足完全正交试,可以先使用主成分PCA分析等方法消除特征间的线性相关性,再使用最小二乘法求解;或通过梯度下降法进行迭代。
以上的操作可以解决经验风险问题,然而对于一个模型来说,通常我们不只希望其在训练集上有很好的表现,还希望它能在未见过的样本(测试集)上有较好的鲁棒性(即泛化能力较好),为此我们定义另一种风险,结构风险。为了应对这种由于模型结构太复杂而导致的过拟合问题,要为损失函数添加一个正则项,来惩罚模型的复杂程度。常用的正则方法有两种:Lasso正则项,L1范数约束,LASSO回归;Ridge正则项,L2范数约束,RIDGE回归。
3.3 逻辑回归
在风控领域最常用的广义线性模型是逻辑回归(LR),其使用的连接函数是sigmoid函数。该函数将模型的输出规约在[0,1]之间,因此我们可以将逻辑回归模型的输出结果视为样本属于某一类标签的概率值,从而用于分类问题。
逻辑回归的参数求解方法是最大似然估计。
调用sklearn库实现逻辑回归模型的训练。
from sklearn.linear_model import LogisticRegression
lr_model = LogisticRegression()
lr_model.fit(x,y)
逻辑回归模型在建模前需要对所有的变量进行标准化处理,从而将不同变量的尺度规约到同一量纲。
3.4 性能度量
常用的模型评价方法
混淆矩阵
真 | 假 | |
真 | TP(True Positive) | FP(False Positive) |
假 | FN(False Negative) | TN(True Negative) |
1.精确率(查准率 TP/(TP+FP))、召回率(查全率 TP/(TP+FN)) P-R曲线(可以用来比较分类器的分类能力)
这是一对矛盾的变量,在不同的问题上侧重点不同。对于信用评估场景,侧重的是精确率;在反欺诈场景下,侧重的是召回率。
2. ROC曲线
风控场景有自己的特点,其中一个额就是样本非常不均衡,负样本的占比永远小于正样本,并且风控模型对负样本的识别能力要求明显高于正样本的识别能力。
接收者操作曲线(receiver operating characteristic),横坐标是假正例率(False Positive Rate),纵坐标是真正例率
曲线下面基(AUC)定义为,坐标系中ROC曲线下的覆盖面积;当模型ROC曲线有交叉时,AUC大的模型性能优于小的模型。
KS曲线(kolmogorov-smirnov curve)与ROC曲线类似,横坐标为阈值降序排列,纵坐标为在不同于子划分下的TPR与FPR的差值。KS值定义为KS曲线的最大值。
实际中,通常只绘制ROC曲线,并利用一个训练完成的模型计算KS值,同时画出ROC曲线。
3. 只判断模型的预测能力还不够,还需要考量泛化能力和跨时间稳定性。通常考察泛化能力有两种做法:留出法,k折交叉验证
模型在训练集和测试集上的性能越接近,说明模型的泛化能力越好。因此风控领域对模型的泛化能力有个基本的要求,训练集和测试集上的KS值相差不超过5%。此外,为了考量跨时间稳定性,通常还会留出最新时间段的样本,作为时间外检验样本;期望这3个数据集上AUC和KS值尽可能接近,且测试集合时间外样本上的AUC和KS值尽可能大。
4. 业务评价
稳定性:群体稳定性指标(PSI)
有效性
负样本抓取能力
排序能力:波动点,通过KS和负样本占比分析;须知,KS值不能直接反映模型的排序能力,因此有必要使用排序波动点对模型进行辅助评价;
3.5 上线部署和监控
常见三种模型部署方法:逻辑判断、 PKL文件、 利用预测模型标记语言PMML
为确保线下、线上模型的一致性,我们通常从三个角度来进行比对:基础数据表一直、入模变量逻辑一致、模型预测结果一致。
监控的本质是持续观察模型的表现是否下降,因此需要在监控中对模型评价指标进行统计。需对模型和单变量的PSI进行监控,如果PSI值超过阈值0.2,则需要分析模型不稳定的原因;监控分数分布,模型失效的前兆就是模型输出的分数分布下移;
后端监控,通常需要统计样本的贷后标签进行监控。包含:模型显著性、低分原因、坏样本捕获率
3.6 迭代与重构
模型迭代(Refit),是指在原有模型的基础上,对变量重新进行系数拟合或变量调整。该方法周期短,通常需要引入最新数据进行模型重新训练,并对变量分布差异较大的特征分箱结果进行调整。需要迭代的原因:1.模型区分度下降明显但变量相对比较稳定,重新拟合系数以提高区分度;2. 客群发生变化,变量不稳定,理论上变量PSI>0.05,变量已完全不可用,应考虑删除并重新拟合变量系数。
模型重构(Rebuild)是指当前的模型对好坏客户的区分能力明显下降,且无法通过拟合系数或调整变量来提高模型区分度时,需开发新模型。
智能风控:python金融风险管理与评分卡建模的更多相关文章
- python德国信用评分卡建模(附代码AAA推荐)
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 python信用评分卡建模视频系列教程(附代码) 博主录制 https://study.163.com/course/i ...
- (信贷风控九)行为评分卡模型python实现
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- (十三)GBDT模型用于评分卡模型python实现
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- 基于Python的信用评分卡模型分析(二)
上一篇文章基于Python的信用评分卡模型分析(一)已经介绍了信用评分卡模型的数据预处理.探索性数据分析.变量分箱和变量选择等.接下来我们将继续讨论信用评分卡的模型实现和分析,信用评分的方法和自动评分 ...
- (信贷风控八)行为评分卡模型(B卡)的介绍
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- 信用评分卡Credit Scorecards (1-7)
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 python风控评分卡建模和风控常识 https://study.163.com/course/introductio ...
- python金融反欺诈-项目实战
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- 逻辑回归原理_挑战者飞船事故和乳腺癌案例_Python和R_信用评分卡(AAA推荐)
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- 信用评分卡 (part 2of 7)
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- Python金融应用编程(数据分析、定价与量化投资)
近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...
随机推荐
- LeetCode-1669 合并两个链表
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/merge-in-between-linked-lists 题目描述 给你两个链表 list1 和 lis ...
- Mybatis-Plus 之BaseMapper 方法详解
package com.itheima.dao; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomido ...
- 关于vue组件传值和事件绑定问题
<template> <view style="width: 100%; height: 100%;"> <view class="tabs ...
- AttributeError: module 'openai' has no attribute 'ChatCompletion'的解决办法
原因 openai库版本过旧 解决办法(二选一) pip install -U openai 下载安装包放入你的项目根目录下, 改名格式zip为whl(即:openai-0.27.0-py3-none ...
- 深入理解 JVM -- 垃圾收集器与内存分配策略
程序计数器.虚拟机栈.本地方法栈 3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作.每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行 ...
- 使用a标签锚点实现顺滑效果
scroll-behavior:smooth;//使用该方法使用a标签锚点的时候会实现平滑 xxx.scrollIntoView({ behavior: "smooth" })
- 那些年我们用过的xshell小彩蛋
优化PS1变量 vi /etc/profile.d/ps1.sh _set_prompt () { #see: http://misc.flogisoft.com/bash/tip_colors_an ...
- 【个人笔记】从本地源部署 Office 2016 专业增强版
## 0. 大大的说明 本文使用的 Office 2016 为 Office 2016 专业增强版零售版. 零售版需要使用 Office 部署工具才可以自定义安装组件,而 VOL 版本无需部署工具即可 ...
- DOM状态监听(观察者模式)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Keil5 STM32 C++开发 ARM V6编译器的使用教程
Keil5更新之后,开始支持ARM V6编译器,新版本的编译器对C++有了更多的支持,在编译方面也做了很多的改善,具体的没有详细了解,本文只是对STM32 开发下,使用V6版本的编译器进行STM32的 ...