大家好,又见面了,我是你们的朋友全栈君。
【与数据同行】已开通综合、数据仓库、数据分析、产品经理、数据治理及机器学习六大专业群,加微信号frank61822702 为好友后入群。新开招聘交流群,请关注【与数据同行】公众号,后台回复“招聘”后获得入群方法。
正文开始
前言
科技赋能金融,是这个时代的主流。风险管理,是金融发展的必选命题。
在当代,金融机构在风险管理的每个环节都尽可能地引入计量分析方法,依托大数据进行后台的分析回顾,不断的优化调整,使得金融机构在风险与收益的博弈过程中更快达到平衡,实现局部甚至更多空间的利润最大化。
风控模型,是在风控策略达到平衡之际,实现风险精分差异化的必备武器。
风控模型,广义上代表任何运用数据构建的风险管理模式,狭义上讲,是运用统计、机器学习甚至深度学习等算法开发的数学模型。作者希望通过此长文,为FAL读者朋友们一次性解释狭义风控模型体系。
全文总计2.2W字,30份配图,共分为6大模块,平均阅读时长2hs,建议读者分模块分时段浏览。
目录
一.风控模型概要
二.风控建模/算法工程师
三.速览评分模型搭建
四.细说评分模型搭建全流程
1)A、B、C广义三种评分模型
2)数据业务理解
3)数据探索分析
4)定义目标变量
5)样本设计和抽取策略
6)数据清洗
7)特征衍生
8)特征变量筛选
9)模型变量分箱
10)模型拟合
11)模型评估常用指标
12)模型预测概率校准
13)模型违约概率误差校准
五.评分模型如何应用于决策
六.技术的升华之路
01
风控模型概要
在社会数据厚度和纬度不断增加的当下,大数据与金融服务的跨界结合越加紧密,互联网技术在金融活动中的应用日益成熟,金融风险管理中信用评估模型体系内部也在酝酿着一场暗流式的较量。
1
传统信用评分模型
传统信用评估模型的基本思想是比较借款人信用历史资料与数据库中的全体借款人的信用习惯,检查借款人的发展趋势跟经常违约、随意透支、甚至没有债偿能力等各种陷入财务困难的借款人的发展趋势是否相似。
传统信用评估模型的基本算法是运用线性模型中的逻辑回归模型对一些强金融属性(如借款人一个月内多次申请贷款次数)、弱金融属性(如借款人月收入余额)以及关联金融属性(如借款人申请借款时段)数据进行挖掘建模,最终实现借款人违约概率的排序和评分等级。
传统信用评估模型主要从以下5个方面考查用户的信贷资质
传统信用评估模型经过数十年的沉淀发展,技术相对成熟稳定,以美国FICO评分为例,曾促进美国房贷事业的飞速发展。但由于其依赖于金融数据本身,形成一个封闭式的模型闭环,在大数据快速发展的当下,个人消费者出现许多信息纬度,如电子商务、社交网络和搜索行为等,传统信用评估模型的封闭性不断受到挑战,模型解决风险评估的能力也越来越受限。
2
大数据信用评分模型
大数据信用评估模型的基本思路是一切数据都和信用有关,在能够获取的数据中尽可能的挖掘信用信息。
大数据信用评估模型从大数据采集和大数据分析挖掘两个层面为缺乏信用记录的人挖掘出信用。
通过大数据采集技术,挖掘一个借款人的信用变得更加多元化,比如一个借款人缺乏银行信用卡的数据,但从借款人的航旅出行数据中挖掘出具备较好的信用资质,同样可以完成借款人的信用贷款。
通过多源化的信息采集,一方面传承了传统征信体系的金融决策变量,重视深度挖掘授信对象的信贷历史,另一方面能够将影响用户信贷水平的其他因素也考虑进去,如社交网络数据、用户申请信息等,从而实现深度和广度的高度融合。
以网络数据为例,如IP地址、浏览器版本甚至是电脑屏幕分辨率,这些数据可以挖掘出用户的位置信息、性格、行为以及消费能力,有利于评估用户当下信贷风险。
大数据信用评估模型通过融合多源信息,采用先进的机器学习的预测模型和集成学习的策略,进行大数据挖掘。
首先,上万种数据源被输入到征信系统,其次,寻找数据之间的关联性并进行数据转换,再次,在关联性基础上将变量重新整合为较大的测量指标,每一种指标反映借款人的某一方面特征,如诈骗概率、长期或短期借款人的信用风险和偿还能力等,然后将这些较大的变量输入到不同的分析模型中,最终将每一个模型输出的结论按照投票的原则,形成最终的信用分数。
3
小结
在当下80%的银行和非银机构信用风险评估模型仍以传统信用评估模型为主,不仅因为其技术的成熟和模型的稳定,更因为现阶段大数据征信数据体量并不能完全开发大数据信用评估模型,对于大量极弱金融属性甚至毫无金融属性的数据进行特征关联和转换,对数据广度和厚度本身的要求往往高于模型算法,大数据采集和加工更应该作为基础建设去搭建。
在5G网络建设的大环境下,传统信用评估模型与大数据信用评估模型这一场较量我更相信结果是其乐融融,互补应用。
02
风控建模/算法工程师
风控模型开发人员,相较于数据分析、策略分析人员,对于统计分析方法、大数据机器学习算法都要有更深入的理解。也正是因为工作和业余时间需要花费大量的精力专研模型算法,自然,对于风险业务的关注就会少一些。这也是为什么,普遍做风控模型的工作人员,业务经验能力相对欠缺。
模型开发方向,从技术算法的专业度,分成风控建模工程师和算法研究员。从字面意义就可以发现,风控建模工程师工作核心还是以风控模型的开发为主,更多的工作落脚点在构造有效特征,应用一些模型算法进行数据训练和测试。
风控建模工程师普遍只会花少量时间研究算法本身,甚至不会花时间去研究最新算法。逻辑回归、随机森林、XGboost等主流常规算法,是他们建模首选。而对于算法研究员,更多的精力在研究前沿算法,通过结合自家机构的物理场景,判断是否在未来时期内业务落地应用。
风控建模/算法工程师,从业务角度比较,普遍建模工程师比算法研究员更熟悉自家信贷产品的业务,因为其在构建风控特征指标过程中,很重要的衡量标准是其开发的指标是否具有业务意义,但对于业务和风险的整体理解,也仅止于局部,难以与风控策略分析人员相比较。
03
速览评分模型搭建
风控评分模型的开发流程已经标准化,本文先通过速览形式,带读者朋友们了解一下评分模型搭建流程
样本准备
在正式开始建模前,首先需要搞清楚一点:产品的目标客群是怎样的?建成的评分卡是要用在哪些人身上的?有哪些样本是不适合拿来建模的?举个例子,如果准入规则直接拒绝了25岁以下的客户,那么对应建模时也应该筛选掉这部分样本(非准入客群)。又或者,有一些客户虽然申请了额度,但是并未真正申请放款,那么这些无行为表现客户也不应该包含在建模样本之内。
好坏定义
相信很多没做过建模的读者朋友也听说过“好客户”、“坏客户”的说法,但其实在这其中,怎样的客户算“好”,怎样的客户算“坏”都是很有讲究的。这个好坏定义首先和评分卡真正关心的客户类型有关,比如说一个反欺诈评分卡的“坏客户”定义可能是首逾30天以上(FPD30+),而审批评分卡的定义可能是M3+。而具体逾期多少天算“坏”,就要进行Roll Rate分析了。
观察期和表现期
观察期是指用于生成客户特征的时间区间,用于收集信用历史和行为特征等信息,以提炼能预测未来信用表现的预测变量。
观察期过长可能导致大量客户无法获取相应时间长度的数据,大批样本不能进入模型;观察期过短会导致样本无法生成足够多有效的时间切片变量。表现期是对观察点上客户表现进行监控的时间周期。这些帐户根据截止到表现点的表现被分类成“好”、“坏”。表现期需要有足够的长度,从而保证样本群体分类的稳定性,使客户的逾期行为充分表现出来。但也不能够过于长,即使可获得很长时间的历史数据,还需要在完整性(有多少个坏样本需要捕捉)和数据质量之间保持平衡。
细分分析
有的时候,如果面对各种各样的客户通通使用同一张评分卡,可能效果并不是那么的好;但是如果对不同类型(某种维度意义上)客户都使用不同的评分卡,过多的评分卡不好管理,不同评分卡之间得出的结果有时也不具备可比性。
因此,需要找出最佳的群体分组,使得以此为基础建立的一组评分模型可使整个评分系统的预测能力最大化。当然,如果是在样本量比较少的情况下,这一步就可以跳过了。
数据准备
数据准备的过程包括数据清洗、缺失值处理、离群值处理等等,目的是让数据足够“干净”,而不会因为其中的一些乱码或格式问题影响后续建模。在逻辑回归模型中,合理的缺失值和离群值都是可以不做处理的,因为在进行分箱和WOE转换时可以解决掉这些问题。
其中合理指的是数据本身就是缺失的,比如在填写某些非必填信息的时候客户没有填写导致的缺失,而不是像第三方数据覆盖率不足等原因导致的缺失,类似这种本不应该缺失只是因为各种原因没有获取到数据而导致的缺失,是应该进行缺失值处理的。在这一步,可以筛选掉一部分缺失率过高的变量。
变量衍生
变量衍生是整个建模过程中最重要的一个环节,往往在同样的数据和维度条件下,谁的评分卡模型效果更好,看的就是这一步。变量衍生有各种各样的方法,比的就是谁的脑洞更大。可以简单粗暴的根据业务理解进行变量的组合,生成交叉变量,比如说,不同年龄段的客户的婚姻状况可以给予不同的打分标准。又或者,可以利用一些机器学习算法,比如xgboost,从数据的角度来进行变量衍生。
训练集和验证集
在真正进入建模过程前,还需要预留出一部分样本用作模型的验证,这是为了防止模型的不稳定:在训练集上表现良好、在验证集中却无法很好的预测。然而只要手气足够好,随机抽取验证样本时足够“随机”,训练集和验证集各指标的分布足够近似,验证集的表现一般不会和训练集有太大的差距,但这并不一定代表模型就是稳定的了。
因此,最好的做法是再预留出一部分时间外测试集,选取与建模样本不同时间段的样本再对模型表现进行验证。比如,如果选取的审批时间在1-3月的客户作为建模样本,那么可以将4月的客户作为测试样本测试模型的效果。
分箱和WOE转换
在进行变量衍生后,我们可能会产生好几百上千个变量,有连续性变量也有分类型(字符型)变量。然而,字符型变量是没有办法直接作为入参参与逻辑回归拟合的,而为了使自变量和目标变量呈正相关的关系往往会对数值型变量也进行分箱和WOE转换。毕竟如果按照原数据入模,会导致评分卡非常不稳定,同时变量的取值和得分的关系也会变得非常的杂乱无章,失去业务上的可解释性。另外,在这一步,根据每个变量的IV值,也可以筛选掉一部分区分能力较弱的变量。
共线性检验
共线性检验也是筛选变量过程中非常重要的一步。共线性指的是模型的变量之间存在较高的相关性,某一个变量可以被其他一部分变量所解释。共线性高会导致回归拟合出来的系数发生严重的偏离。常用的指标为相关系数和VIF。
逐步回归
这是一个基本上完全交给程序的过程,通过不断增加、删减变量,从数据层面挑选使模型的预测能力达到最大的变量组合。然而,虽然已经进入变量筛选阶段的尾声,逐步回归跑出来的变量也不一定就符合要求了,还会有可能出现逻辑回归的系数正负符号不一致的情况。这种时候,就需要结合前面的共线性检验,不断的调整进入逐步回归的变量,以得到合理的最终入模变量。
模型表现
模型表现的评估常见的也就是大家耳熟能详的那几个指标:KS值、Gini、AUC、Lift等等。需要注意的是,模型不能一味的追求高KS,所有变量在建模过程中都针对显著性、相关性、冗余及多重共线性进行测试。如果变量在各维度上不能符合标准,即使会牺牲KS,也将被从模型中剔除。
拒绝推断
拒绝推断是给被拒绝的申请人赋予一个理论上的表现的过程。等价于说:“如果申请人被接受了,他们的表现会是什么?”由于审批时有一定的拒绝条件,所以被批准的客户群体并不是申请群体的无偏差代表,相反由于审批的选择性导致了被批准客户群体的信用质量高于申请人群体的总体信用质量。如果最终的评分卡只是基于被接受的群体创建,可能会造成一定程度的偏差。
拒绝推断的流程为:先建立一个已有客户模型,使用已有客户模型给拒绝客户打分,再基于已有客户和拒绝客户的群体集合建立新的评估分数。如果之前的审批策略效果不佳,已有客群和拒绝客群差别很小,是可以跳过拒绝推断这一步的。
标准评分卡
在评分卡模型建立的最后,需要将模型转化成一个更加直观、更容易部署的形式,也就是标准评分卡。标准评分卡可以一眼看出每一个入模变量落在哪个区间可以得到多少分。简单来说,就是需要将每个变量每个分箱的系数*WOE变成一个分数,这个过程会使用到三个参数:标准分、标准好坏比、PDO,最终计算出好坏比和分数的一一对应关系。
04
细说评分模型搭建全流程
1.A、B、C广义三种评分模型
首先,我先来聊聊评分模型里的A、B、C卡到底是什么。
评分卡模型是什么?
一个公式!
假定一个客户好为0,坏为1,预测这个客户是好or坏的概率p属于[0,1]
评分卡按照使用阶段分为申请卡、行为卡、催收卡
-
A卡(Application scorecard)申请评分卡:在客户申请处理期,预测客户开户后一定时期内违约拖欠的风险概率,有效排除了信用不良客户和非目标客户的申请
-
B卡(Behavior score card)行为评分卡:在帐户管理期,根据账户历史上所表现出来的各种行为特征来预测该账户未来的信贷表现
-
C卡(Collection scorecard)催收评分卡:在帐户管理期,对逾期帐户预测催收策略反应的概率,从而采取相应的催收措施
三张卡的区别
-
使用的时间不同。分别侧重贷前、贷中、贷后;
-
数据要求不同。申请评分卡一般可做贷款0-1年的信用分析,行为评分卡则是在申请人有了一定行为后,有了较大数据进行的分析,一般为3-5年,催收评分卡则对数据要求更大,需加入催收后客户反应等属性数据。
-
使用模型不同。在申请评分卡中常用的有逻辑回归,AHP等,而在行为和催收两种评分卡中,常使用多因素逻辑回归,精度等方面更好。
-
变量不同。申请评分卡用到的大部分是申请者的背景变量,比如客户填写的基础信息+第三方外部数据源查询信息,而且这个模型一般也会比较谨慎。行为评分卡利用了很多基于交易的变量,可以预测一个客户未来的违约概率。
申请评分卡的评分结果将决定:
-
估计的信用状况,即正常还是违约,并据此决定批准还是拒绝该笔贷款申请;
-
为了获得审批通过需要的抵押物;
-
贷款额(信用额度);
-
贷款定价(利率水平)
行为评分卡的评分结果将决定:
-
审查信用重建;
-
审查信用额度、额度管理调整;
-
制定清收策略(若违约或逾期);
-
审查贷款定价和贷款条件
催收评分卡的评分结果将决定:
-
Pre催收,降低违约风险提升还款率
-
M1阶段精细化催收策略,如IVR、预测式外呼、预览式外呼
-
失联信息修复和提前委外催收
2.数据业务理解
在开发信用评分模型之前,最基本面的工作就是梳理和理解数据。
不要自认为知道这些字段的中文意思、来自哪张数据表就可以了,还要尽可能的去了解这些数据是从生产库怎么生成的,也就是说这些可能用到的变量数据还原到业务中是怎样的衍生过程,当然如果你们是直接从生产库里挑选数据提炼到建模表上,那么恭喜你,可以花更多的时间去梳理整理数据了,建好的模型也会更稳定准确。
现在很多科技数据公司一味的去强调算法、大维度变量,但却忽略了业务数据的理解,做出来的模型自然也就与实际业务偏差很大,就算是ks为0.5以上也是很难实际落地。
变量业务理解梳理,尽管很繁琐,却尤为重要。
对于现在很流行的cash loan业务,客户申请收集基本三要素:姓名,身份证、手机号,通过用户授信、SDK抓取,以及三方数据调用,可以获得多维度的用户数据。
对于一个客户填写了这三要素之后,业务生产库里就会存在name、idcard、phonenumber三个字段去存储每一个申请客户的数据。如果对于建模的你来说,没有权限看到生产库的数据,只有数据仓库给你使用,你从数仓里看到了sex、province、city、sex、Valid_period_of_ID_card等等。这些字段都是从生产库里衍生出来的,有些是业务逻辑需要,有些是报表需求。
就以身份证idcard为例,一个申请客户提供了idcard:440306199005113437,申请时点为2017.10.28,18位身份证号码个位含义:
-
1-2位省、自治区、直辖市代码;
-
3-4位地级市、盟、自治州代码;
-
5-6位县、县级市、区代码;
-
7-14位出生年月日,比如19670401代表1967年4月1日;
-
15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;
根据身份证编码含义,我们就可以在在数仓里衍生出如下字段
对于Valid_period_of_ID_card这个变量的衍生,大家首先要知道身份证号的含义,还要去测算申请客户目前是第几代身份证,然后去了解关于身份证法对于身份证有效期的划分标准,最后根据客户申请时点去测算他目前的身份证还有多长的有效期。
Valid_period_of_ID_card这个衍生变量可以在策略规则和建模中使用,比如身份证有效期较短的客群通过历史数据分析发现在公司cash loan中大占比为骗贷客户,策略引擎里已经设置了强拒绝规则,那么我们在建模的时候,就要把身份证有效期超出相应规则界限的客群剔除掉,直接排除这部分数据进入评分卡模型的训练样本,可以很好的排除这部分客群对模型的干扰,提升模型的区分好坏能力。
假如现阶段公司cash loan业务限定只给予年龄在20-35岁,非广东区域的客户进行放款,产品业务已经明确了各个维度的限制,那么我们在数据导入前,在了解了衍生变量的业务逻辑之后,很明确的知道这个申请客户是不可能进行贷款的,不满足业务要求的客群也是应该通过相关变量进行排除的,这就是我想跟大家聊的理解数据业务意义的重要性。
理清数据的来源,也才能更高效的让我们脑洞大开地去创造有效变量。
3.数据探索分析
当我们带着好奇的心态沉浸在生产库或者数仓的数据海洋里,不要忘记我们是身负重任的,我们要从以产品为中心生成的大维度数据变量里进行一遍变量维度的初步筛选,筛选出有可能进入建模表里的所有变量字段,然后去观察这些数据具备什么形态。
在SAS BASE里有几个函数可以用来进行数据探索分析
1.Proc Means
直接运行 proc means过程时,会对所有数值型变量进行操作,得到各变量的非缺失观测数N,均值MEAN,标准差STD DEV,最大值Max和最小值Min,我们还可以增加range(极差) sum(和) var(方差)nmiss(缺失值个数)median(中值)等选项得到其统计量。
2.Proc Freq
直接运行 proc freq过程时,会对所有变量(一般针对离散型变量,如果是连续型变量,通过Format进行离散化处理)进行操作,得到各变量的频数、百分比、累积频数、累积百分比,我们还可以增加多变量的交叉表频数统计。
3.Proc Univariate
探索性数据分析最常用的过程步之一就是proc univariate,直接运行 proc univariate过程时,会对所有变量进行操作,得到矩、位置和可变形的基本测度、位置检验、分位数、极值观测。
若加了一个HISTOGRAM则增加了一个直方图;加一个NORMAL选项则在直方图上面加了一根拟合后的正态分布图,并且还增加了拟合正态分布的参数估计、拟合优度、分位数;加一个KERNEL则在直方图中加了一根实际数据核分布的密度曲线;加一个plot选项,在结果中增加了分析变量数据的分布图、箱型图、以及概率图,等等。
我们重点要从下面几个维度去进行关联性探索分析:
1.产品基本情况
-
各表现指标随时间的分布变化
-
不同业务线各产品随时间变化的申请量、通过率以及各逾期指标分布
-
…
2.产品逾期情况
-
各逾期指标随时间的分布
-
各逾期指标流转(FPD30-60;FPD60-90)
-
Vintage:Ever 30+/M1+; Ever 90+/ M3+
-
所有产品、各产品30天逾期指标分布
-
…
3.参考已上线评分卡监控报表,参照模型变量及分组表现
4.定义目标变量
1.目标变量是什么
目标变量就是假定申请客户的好坏,逻辑回归公式里的Y,先来看下逻辑回归公式
其中,
称为sigmoid函数,它的函数图像如下,
我们可以看到,通过sigmoid函数输出的y介于(0,1)之间,这样就表明了数据属于某一类别的概率,例如:
假定Y定义为申请客户为好客户还是坏客户,也就是历史数据非0(好客户)即1(坏客户),通过测算业务放款收益损失我们找到了一个公司可接受的逾期率P
-
y<p,则说明预测客户有更大的概率属于好客户;
-
y>p,则说明预测客户有更大的概率属于坏客户;
当然实际情况好坏客户的划分并没有这么简单,单单是收益损失测算就需要考虑综合费率、资金成本等较多维度。
2.目标变量的界定
对于评分卡目标变量Y的界定,我们主要从Roll Rate和Vintage来观察分析,重点需要考虑三个方面
▼
逾期流转比例
观察期和表现期
样本容量
▲
先分析Roll rate
Roll Rate的定义为在当前催收水平下不同逾期天数转化为坏账的概率。从Roll Rate我们看到2017年开始放款,M0 to M1的流转率约为7.8%,M3 to M4的流转率为100%,也就是说,处于M3逾期阶段内的客户基本很难催收,逾期天数大于60天的客户基本为坏客户了。
再分析Vintage
Vintage可以关注下面3个方面:
-
观察每月审批通过客户后第N个月的逾期比率,对比每月波动,通常波动与审批策略调整有关,此波动在数据准备阶段的样本抽样过程需要关注;
-
逾期分布,集中在通过后的前三个月说明审批的策略有待改进,超过三个月之后才慢慢增加,说明贷中的管理有待提高;
-
确定逾期率在经历第N期趋于稳定;
从上图Vintage分析,每月放款逾期M2+以上的剩余本金逾期率基本在MOB=8期时趋于稳定,如果我们的放款时间累积比较长,样本表现期可以覆盖到8期,那么就可以界定样本目标变量为在8期内(对于银行往往表现期>8;消费金融<8)逾期天数大于60天的客户为坏客户,也就是Y=1;如果样本的表现期不够8期,那我们就要再综合考虑流转率和帐龄,重新定义满足样本表现期的逾期天数。
5.样本设计及抽取策略
在开发评分模型前,如果可以在样本设计阶段尽可能的涵盖到体现客户风险的所有特征维度,那么对于之后模型开发工作,将会起到事半功倍的效果。
究竟应该如何设计样本。接下来我将为读者朋友们深入浅出的分析讲解。对于没有接触或者未从事模型设计开发工作的读者朋友们,不妨也了解下设计思路,便于提升风控策略等其他工作的风险管理效能,毕竟,风控评分模型、策略规则甚至产品设计,彼此不分家!
1
样本特征集的设计
对于不同形态的金融产品,样本特征集的设计框架彼此不同,但设计出发点都是为了体现用户的全部潜在风险。
以个人信贷为例,样本特征集应该至少包括客户基础信息、申请行为信息、历史借贷信息、社交属性信息、征信查询信息、个人及家庭资产信息、历史交易类信息、地理信息。其中,征信查询信息包括第三方数据供应商提供的信息。
以征信查询信息为例,征信机构(包括第三方数据提供商)从会员单位(银行、小贷公司、零售商、信用卡机构、公用事业公司等)和公共渠道(法院、政府部分等)收集信息,并用手机号、身份证号匹配整合到一起。
一般征信机构提供的征信数据分为几类:公共信息(如法院判决)、查询检索(如历史查询记录)、共享信息(如不同贷款机构的整合数据)、聚合信息、欺诈预警(如无效的地址或身份证号)、附加价值(征信机构通用分)。
这些数据差异化程度非常大,从数据目的来讲,可以包括信贷、反欺诈和验证;从数据来源来看,包括公共数据、用户数据和衍生数据;从风险管理周期定义,包括获客、风险管理、回收和欺诈;从机构职能来划分,包括数据采集、数据聚合和增值服务。
对于小微金融信贷的特征集设计,除了个人信息之外,还会加入税务、上下游供应商、发票、公司社保缴纳、水电费、公司财务等体现企业经营稳定性和发展力的特征数据,综合评估小微企业的还款能力和小微企业主的还款意愿。
所以,在设计样本特征集时,需要将以上风险特征变量尽可能的收集聚合在样本特征集中。
2
总样本拆分策略
在构建出样本特征集之后,需要按照模型开发、模型验证、模型测试三个环节,将总样本拆分成训练样本、验证样本、测试样本和近期样本。
训练样本和验证样来自于总样本并在同一时间区间内,可以按照一定比例进行样本抽取(一般训练样本:验证样本=7:3)或者N折交叉抽取。
测试样本来自相邻“未来”时间区间,用以测试模型的预测能力、区分能力、排序能力、稳定性等指标,确保模型在不同时间段上仍有一定“活性”。
近期样本是在开发前仅三个月左右的样本,没有表现结果。近期样本主要用来确保评分卡特征变量的稳定。
3
建模样本抽取策略
一般对于建模样本,常遇到两类问题:建模样本总量少和样本不均衡。
对于建模样本总量少的情况,需要按照最大、最小样本设计策略重新进行观察期和表现期以及观察点的选择,同时结合计算能力以及外部数据征信成本进行综合考量,在这里不进行过多赘述。
对于样本不均衡问题,一般有三种处理方法:欠采样、过采样和样本分类阈值移动。欠采样是减少数量较多那一类样本(一般是好样本)的数量,使得正负样本比例均衡;过采样是增加数量较少那一类样本(一般是坏样本)的数量,使得正负样本比例均衡。
样本分类阈值移动的设计方法是,在分类学习中面对样本不均衡时,我们可以采用原有不均衡的样本进行学习,然后通过改变决策规则来做分类,比如在样本均衡时我们0.5作为分类阈值,而在样本不均衡的情况下我们可以规定预测概率需要达到0.8才能被预测为多数类。
至此,在经过确定最大、最小样本、剔除灰样本、处理样本不均衡和分层后,样本设计基本完成,但有一点需要提醒各位读者,需要独立关注因数据缺失等原因剔除的样本,虽然他们可能成为样本的噪音数据,但他们也通常有很高或很低的违约率特性,对于一些特定场景模型如反欺诈模型,往往对于此类特征的关注度更高。
4
小结
没有完全意义的样本设计和最优抽取策略,在一些情况下有用的策略可能在其他情景下就失去效力,最根本的问题是样本是否能代表所有群体的特征。我们需要在提取数据前审视样本设计和抽样策略,尤其是从外部来源提取的数据。
6.数据清洗
数据清洗这四个字对于常常做数据分析建模的同学们一定不陌生,不管在实际工作中有没有真正做清洗,我们都会先把这个口号喊出来,数据清洗这块其实我也一直不太愿意说,因为这种活实在太结合业务理解了,而且还见仁见智,并不是简简单单的三步——缺失值填补、异常值删除、错误值处理。但是做数据建模,也不能跳过这步,那我就从操作手法和操作目的两个方面来聊聊我认为怎么做数据清洗。
1
缺失值
数据缺失引起的原因多种多样,大致可以概括为IT系统原因、前端录入原因和接入征信公司原因。
-
对于IT系统缺陷导致的数据缺失,在你无能为力的时候请尽快联系IT人员。
-
对于前端录入数据的缺失,通过逻辑匹配方式可以选择不同手段去填补。
-
对于接入征信公司原因导致某些第三方数据字段有缺失,那我们要理解这个缺失值的内在含义,有些情况的缺失我们是不能去填补的,就作为missing存在。
在做缺失值填补前,同学们应该先看看有哪些字段是缺失的,缺失比例如何,是否对我们业务和模型有作用。如果这些缺失字段是不必要的,那我们没有必要花功夫去填补它们。
2
具体操作手法
2.1 筛选出缺失的数据
google或者baidu上能找到很多关于查找缺失值的小代码,大部分筛选逻辑按照数据类型做分类筛选,运用数组和do循环,具体代码我就不展示在文章里了。黑猫白猫能抓住老鼠的就是好猫。
2.2 查看缺失比例,判断是否必要
对筛选出缺失数据字段的missing数据集,通过观察缺失比例和建模产品的逾期率去判断是否有必要做缺失值填补。
比如,建模产品的逾期率比较高,也就是建模样本里的坏样本比较多,变量分箱的目的是更希望将坏样本分到一个组里,这个时候一个分箱变量的缺失率很高,不论是做特征值替换、线性插值、逻辑匹配填补或者作为MISSING处理,都容易造成分箱组里sample的极端分布不均,这个时候如果你做并组,会造成分箱区分度下降,如果你不做并组,这个分箱变量会有不稳定的潜在隐患。
所以,对于逾期率高的产品建模,缺失比例高的话就不建议进入模型,同比,对于逾期率低的建模产品,缺失率的容忍度就好了很多,具体这个balance的线在哪里,我提供一个经验建议:
-
如果逾期率大约40%以上,可接受的缺失比例在15%以下;
-
如果逾期率大约8%以下,可接受的缺失比例在70%以下;
更严谨的做法是每次建模时候根据我上面的逻辑去校验样本可接受缺失比例的balance point,然后判断哪些字段是需要继续操作,哪些字段可以直接舍弃。
2.3 缺失值填补or not
通过第二步我们已经知道哪些字段是可以继续操作下去的,这个时候我们就要选择用什么方法去对缺失数据处理。
统计学上的缺失值处理常用手法有特征值(mean\median…)替换、线性插值等,但实际建模中更常用的是结合业务逻辑匹配,或者作为MISSING不做处理。
举个例子,如果我们分析产品的业务线前端采集到了用户的身份证照片,这个照片不仅仅可以用来ORC活体检测,身份证里的信息数据可以进行逻辑匹配填补诸如常住地、性别、年龄等这些因为前段录入操作原因造成的数据缺失。
比如我们的age这个字段有数据缺失,但是缺失比例是我们可接受范围内,此时我们就可以通过身份证号的编码规则来推断匹配这个申请客户的年龄,通过这种匹配方法填补的缺失值往往更加能反应客户的真实信息。
对于接入不同征信公司造成的某些关键字段的数据缺失,同样缺失比例是我们可接受范围内,这个时候就需要参考这个字段的衍生逻辑来选择用什么方法来填补,更多的做法是不做缺失值填补,作为MISSING单独一组。
7.特征衍生
造衍生变量是整个开发评分卡模型过程中最重要、最艰辛也最有趣的一个节点。
最重要是因为衍生变量的好坏往往会影响评分卡模型的各种测评指标,决定策略的反欺诈能力;
最艰辛是因为造衍生变量除了要基于业务变量理解之外还要开发人员大开脑洞组合基础变量,有很多时候花了一天时间造好一两个衍生变量但最后都进不了模型,这个时候就又要重新去开脑洞进行变量的组合。
当然现在也可以结合一些算法比如DT、Random Forrest进行特征工程造衍生变量,但是造好的变量是否可以进入评分卡模型以及是否容易在策略引擎上部署等问题又要反复校验(如果你公司是基于Python或则R自主开发的strategy system,那衍生变量的部署就变的比较方便);
最有趣是因为造变量过程虽然艰辛,但造好变量进入模型上线部署的成就感是很强烈的。
那么大家可能会问,到底如何造衍生变量呢?
这里没有绝对方法,也需要你沉下心研究。
既然我说了造衍生变量是一个开脑洞的活儿,每个人的脑洞又不一样,当然没有一个绝对的逻辑或者公式去套用了。以下是我分享一些造变量的个人小技巧,希望可以帮助读者朋友们打开思想枷锁,造出变量IV较高的好变量。
-
善用产品准入规则变量,弱弱联合会变强;
-
多参考Strategy变量,往往有意想不到的效果;
-
风控核心防欺诈,设身处境去思考;
-
风控基本出发点是评估个人还款能力和还款意愿;
-
合理利用一些算法,省时省力又高效;
8.特征变量筛选
在建模的过程中,通过变量交叉或者GBDT等算法可能衍生出成百上千个指标,然而最终入模的往往只有十几个。那么这十几个变量是如何经过层层筛选“出人头地”的呢?在这其中往往有很多层考量。
1
缺失率
一个变量,如果缺失率过高,他所包含的信息往往也比较少,做缺失值填补也会比较困难。同时该变量如果在建模样本中大量缺失,很可能投入生产后也是差不多的情况,那进入模型也就没有太大的意义了。
2
区分能力
一般情况下,如果模型中加入过多的指标往往会比较冗余,因此在有限个指标中要使模型的效果更佳,自然需要挑选对坏样本识别能力较强的变量。通常的做法是计算每个变量的IV值,或者单变量KS/AR值,并从大到小进行排序,挑选排名前多少的变量,或者大于一定阈值的变量。对于IV值较低的变量,他们本身能提供给模型的贡献也比较少,剔除掉也不足为惜了。
3
稳定性
一个优秀的模型,除了能够很好的区分好坏样本以外,还需要足够的稳定,防止随着时间的推移过快衰退的现象出现。因此模型中的每一个变量也需要足够的稳定。要进行判断,可以计算不同时间切片之间该指标的PSI。比如说如果使用了2018年全年的样本作为建模样本的话,可以将样本切分为上半年和下半年两部分,并计算每个指标在这两个部分间的PSI。如果变量的PSI>0.2,说明随着时间推移该变量的分布发生了很大的改变,那么如果它成为了入模变量,往往会导致模型整体变得不稳定。
4
相关性/共线性
一个指标光是自己表现的足够好也是没有用的,还要考虑它和所有其他自变量之间的“团队协作能力”。一个优秀的团队,往往需要队员之间取长补短,各自分工,而不是大家擅长的事物都一样,而短板却无人弥补。放在模型上面也是一样的道理。如果模型中的自变量之间具有完全多重共线性,那么训练出来的系数便会失去统计学意义。即使是不完全共线性,也会导致系数失真,从而导致模型的效果无法达到预期。
这个时候,如果单纯计算变量的VIF,虽然能检验共线性问题是否存在,但是却无法判断应该保留哪些变量、剔除哪些变量。因此可以综合考虑单变量或多变量的AR值。
举个例子,如果变量A同时和变量B、变量C存在较强相关性,而变量B和变量C相关性较低,那么究竟应该保留A还是同时保留B和C呢?有一个比较简单的思路,可以计算变量A的单变量AR值,同时用变量B和变量C训练一个简易的逻辑回归模型,并计算这个模型的AR值,通过比较这两个单变量和模型的AR值来判断到底应该保留A还是B+C。如果变量A的AR值比模型的AR值还高,就说明变量A的表现会优于B和C的综合表现,可以名正言顺的剔除掉B和C了。
5
业务逻辑
除了上面几点可以通过各种指标量化的筛选条件以外,业务逻辑也往往是一个不可忽视的门槛。
比如说学历这个指标,从直观上来看往往学历越高,信用风险就越低。因此在分箱的过程中,各箱的坏样本率也需要符合这一趋势。否则最后转换为标准评分卡后,低学历客户的单项得分比高学历客户的还高,这显然是不合常理的。对于趋势与业务逻辑不一致的指标,往往也会予以剔除,来满足评分模型的可解释性。这就是为什么常说,做模型一定要将数据与业务相结合,光靠数据跑出来而没有业务做支撑的模型,往往也是不可靠的。
6
逐步回归
逐步回归是一个不断往模型中增加或删除变量,直到找到最优的变量组合、新增变量不再产生具有统计显著意义的增量效应为止。一般来说,这就是指标筛选的最后一步了,如果使用SAS进行逐步回归往往也能控制住入模变量的显著性,因此此时最需要注意的是模型拟合出来的系数方向是否一致,如果出现不一致的情况,可以考虑在变量清单中剔除掉这部分指标,重新进行逐步回归分析,直到系数方向一致为止。
经过了这么多步骤的严格筛选,最终留下的入模指标都是整个指标池中的“佼佼者”,肩负着判断客户信用风险的“伟大使命”。它们个人能力强,团队协作也足够优秀,同时还非常稳定,才能让各路违约风险无处遁形。
9.模型变量分箱
在搭建逻辑回归评分卡模型的时候,大多数步骤都可以用打包好的函数或代码快速实现,而最需要人工干预的步骤就是分箱。毕竟程序再厉害,也不可能懂你的业务逻辑,不会知道怎样的趋势才是符合实际的。因此,建模er经常会花费大量的时间在调整每个变量的分箱上。有的时候调整的方向正确的话,最终模型的K-S值甚至可能有从0.35到0.4的变化。
在R语言中,想要知道决策树的最优分箱切点,只需要一个函数:
library (smbinning)
smbinning (df, “FLAG”, “Variable”, p = 0.05)
其中,df是指标所在的数据集,FLAG是二分类的目标变量,Variable是需要进行分箱的指标名字,p是指每一箱里至少有多少比例的样本,取值范围为0~0.5。
然而光是知道了决策树的最优分箱切点,每一箱的好坏比趋势却不一定符合业务逻辑,这个时候可能就需要根据经验人为的去调整分箱切点。同时,如果好坏样本本身并不均衡,坏样本占比过少,还可能会报“No significant splits”的错误。既然程序没办法给你答案,就只能自己寻找答案了。
除了最优分箱,smbinning包中还可以自己输入分箱切点来查看每一箱的好坏样本分布情况:
smbinning.custom (df, “FLAG”, “Variable”, cuts)
除了最后的cuts参数,其他的都和smbinning是一致的。那么显而易见,cuts就是我们分箱的切点了,用向量c()的形式表达即可。
在人工调整分箱的时候,需要注意的地方有:
-
每个分箱之间的好坏比要有一定差异;
-
每一箱中的样本数量不能过少;
-
分箱的好坏比趋势要与业务常识保持一致;
-
分箱切点的取值要符合业务常识。
具体人工分箱的切点如何选取,这个就比较因人而异了。可以在最优分箱的基础上进行调整,也可以等频或等距分箱后参考好坏比趋势进行合并和调整。
10.模型拟合
逻辑回归拟合模型,我主要聊逻辑回归的变量选择方法
模型建立的主要工作就是变量选择,一般统计分析软件(比如SAS、Python等)的logistic回归程序都提供自动变量选择的功能,包括了前向逐步(Forward Stepwise)回归、后向逐步(Backward Stepwise)回归和混合逐步(Combined Stepwise)回归。
他们三者有什么差别,我该如何选择变量选择方法呢?
1
前向逐步(Forward Stepwise)回归
顾名思义,FS(Forward Stepwise)回归是让所有建模指标变量一个一个地进入回归方程,按照预先设定的显著性检验标准,最显著的指标变量最先进入,然后其次就是次显著的指标变量进入,依次类推。
2
后向逐步(Back Stepwise)回归
明白了FS回归,BS回归就很容易理解。它的逻辑是首先让全部指标变量都进入回归方程,按照预先设定的显著性检验标准,把不显著的变量逐一剔除。
3
混合逐步(Combined Stepwise)回归
CS回归是融合FS和BS回归的优缺点,提出的一种变量选择方法,它的原理如下:按照预先设定的显著性检验标准,逐步加入或者剔除指标变量,可以由前向逐步回归开始,也可以由后向逐步回归开始,例如由前向逐步回归开始,当新指标变量进入时,如果老指标变量不满足预先设定的标准可以后向剔除,而对比前向逐步回归,变量一旦进入,就不再退出。
说白了,CS回归就是指标变量有进有出,不停迭代对比指标变量对预测结果的有效显著性。
我们在评分模型变量选择方法上,经验建议优先选择Combined Stepwise,其次是Forward Stepwise。
11.模型评估常用指标
对于训练出来的Score Model,需要一系列指标对Model进行关于稳定性、区分能力等效用来度量。
1
KS
KS曲线是一种表示评分卡有效性的可视化工具,基于经验累积分布函数(ECDF)画出好客户和坏客户在分数区间上的累积分布。
KS统计量就是两条曲线垂直距离绝对值最大的距离,所以KS取值范围为[0,1]。上图中40分处KS曲线绝对值距离达到最大(72%-36%)
KS=Max{|retain_bad_pct – retain_good_pct|}
我认为对于评分模型的KS取值应有如下要求:
-
KS<0.2 模型的区分能力不高,价值不大;
-
0.2<=KS<0.4 一般金融机构开发的评分模型KS大部分都集中在这个区间内,行为评分模型的KS会更高一点,相对于KS<0.2的评分模型,此时的评分模型已经具备一定的区分能力,模型具有一定的使用价值,此时可以结合其他指标继续观察调优模型;
-
0.4<=KS<=0.7 模型区分能力比较好,模型有应用价值;
-
KS>0.7 模型好的难以令人置信,可能在变量中加入了业务目标衍生指标,需要对模型特征工程进行排查。
KS统计量简单易懂,实际上可能又过于简单。KS距离最大处的分数可能与实际应用中切分点没有直接关联,尤其是当分数离当前最大KS对应分数(比如上图40)很远的时候,KS指标的重要性就越发不明显。
由于KS是两条曲线垂直距离绝对值最大的距离,因此使用KS时也要注意,当评估一个评分模型随时间的变化时,除了要保证好快定义、结果期相同,还要确保相同的分数切分点、申请政策规则的一致或者最基本的相似,这样使用KS指标的评估才有科学依据。
使用主流统计分析软件计算KS指标并画出KS曲线:
1. SAS(计算KS)
2. PYTHON
3. R
2
GINI
GINI指标最早在量化风控上主要用于评分模型,对于训练出来的分数模型,需要一系列指标对模型进行稳定性、区分能力等效能度量。Gini系数是国际上通用的,用以衡量一个国家或地区居民收入差距的常用指标,所以,运用在评分模型中它也是表征评分模型的区分能力。
Gini的计算公式(我知道没几个人愿意看公式,但我写出来的目的是警示大家这个Gini和基尼不纯度的本质区别)
cpY是收入排序后的累计比例,cpX是人口的累积比例,其结果是一个秩相关系数,很多统计软件包比如SAS提供的Some’s D,其实就是Gini系数。
在评分模型中,可以看下面表来理解下Gini的计算过程
其中,G_num代表好客户数量,B_num代表坏客户数量,Retain代表累积。
虽然Gini指标与Ks一样也是金融评分模型界通用的核心指标,但是它的使用也是有2点需要注意的地方:
-
评估评分卡的区分能力时,如果坏客户的定义不是那么严格,Gini系数对应代表的区分能力可能被夸大效果;
-
Gini对目标变量类别的定义比较敏感,比如账户的好坏。
所以要想Gini指标精确有效,那么目标变量Y的定义在评分卡开发初期是十分重要和严谨的步骤。
Gini系数的不同范围值对应的评分模型区分能力高低也不一样,行业内也没有一个绝对标准,以下个人经验,可供参考:
针对评分卡集群来说,申请评分卡集的GINI标准:
-
Gini<0.3,模型不太能接受;
-
0.3<=Gini<0.35,模型区分能力一般,模型有优化空间;
-
0.35<=Gini<=0.5,模型区分能力比较满意;
-
Gini>0.5,Gini越高越有过拟合的可能性;
行为评分卡集群的GINI标准:
-
Gini可能会超过0.8;
-
Gini<0.6,可能模型有问题。
当然了,对于单一子评分卡模型的话,Gini的接受浮动就比较大了,比如某一特定场景开发出的申请评分卡,因为IV高于0.1的变量本身就很少了,这个时候的Gini标准就不需要再采用模型集群的GINI标准了。
3
其他
准确率(正确率)=所有预测正确样本/总的样本(TP+TN)/总
accuracy_score函数计算了准确率,不管是正确预测的fraction(default),还是count(normalize=False)。
函数:sklearn.metrics.accuracy_score
用法:from sklearn.metrics import accuracy_score
#normalize表示返回值是正确预测率还是正确预测个数
accuracy_score(X,y,normalize=False)
精确率= 将正类预测为正类 / 所有预测为正类 TP/(TP+FP)
函数:sklearn.metrics.precision_score
用法:from sklearn.metrics import precision_score
#参数average为对多分类权重模式的分配
precision_score(X,y,average=’micro’)
召回率 = 将正类预测为正类 / 所有正真的正类 TP/(TP+FN)
函数:sklearn.metrics.recall_score
用法:from sklearn.metrics import recall_score
#参数average为对多分类权重模式的分配
recall_score(X,y,average=’micro’)
F值 = 正确率 * 召回率 * 2 / (正确率 + 召回率)
函数:sklearn.metrics.f1_score
用法:from sklearn.metrics import f1_score
#参数average为对多分类权重模式的分配
f1_score(X,y,average=’micro’)
ROC曲线:接收者操作特征,roc曲线上每个点反映着对同一信号刺激的感受性。该函数需要二分类的真实值和预测值,它可以是正例的概率估计,置信值,或二分决策值。
函数:sklearn.metrics.roc_curve
用法:from sklearn.metrics import roc_curve
#函数返回值为FPR假正类率、TPR真正类率和和阈值
#pos_label为标签认定为正的label个数
fpr,tpr,thesholds = roc_curve(X,y,pos_label=2)
12.模型预测概率校准
在建立评分卡模型的时候,往往建模样本的好坏比和实际情况是不一致的,这是因为:
-
产品本身坏样本较少,为了提高评分模型的敏感程度,会对坏样本进行过抽样或者好样本进行欠抽样;
-
如果是乙方公司,好坏样本的来源可能不同,或者甲方爸爸并没有全量反馈样本表现,那么自然样本中的好坏比无法反映真实的情况。
然而,用一个好坏比失真的样本建立好评分卡模型后,如果想要计算每个分数段的坏样本率,得出来的结果是会大于真实情况的。原因很简单,逻辑回归中的截距是约等于好坏比的对数的(因为评分卡模型预测的是该样本为坏样本的概率,因此使用的是坏:好)。如果样本的坏样本占比比实际情况要高,那么模型预测出来的每个样本的违约概率都会偏大。那么想要还原每个客户真实的违约概率,就需要进行一个概率校准。
校准的方式也非常简单。首先我们需要一个目标好坏比odds1,它可以是进行过抽样/欠抽样前产品真实的好坏比(对应上面情况1),也可以是行业平均水平(对应上面情况2)。如果建模样本的实际好坏比是odds的话,那么我们只需要在逻辑回归拟合出来的截距上再加一个ln(odds1/odds)即可(这一步发生在sigmoid函数转换前)。
这种校准方法在直观上也非常好理解,因为ln(odds1/odds)是等于ln(odds1)-ln(odds)的,而前面也提到过,逻辑回归拟合出来的截距是约等于ln(odds)的,那么在截距上再加上ln(odds1/odds),相当于只是把ln(odds)抵消掉,变成了实际好坏比ln(odds1)而已。
然而这只是每个客户违约概率的校准,即使是校准后,如果计算每个分数段的好坏比,依然会被打回原形。这是因为这个过程虽然校准了每个客户违约概率的值,但是并不会改变评分模型的排序顺序。因此对计算出来的好坏比,也要有一个校准的过程:对好坏比进行一个sigmoid的反函数,加上ln(odds1/odds),再用sigmoid函数运算回来,这样得出的好坏比就是接近真实情况的好坏比了。
下面举一个例子,某评分卡模型建模样本各分数段的好坏分布如下:
而我们抽样前or根据经验,实际上该产品的违约率只有2%左右,那么这个坏样本占比会比产品上线后实际落在该分数段的坏样本占比要高得多。要还原真实的情况,需要进行如下校准:
上图中每一列的计算公式为:
A=ln(odds)
B=A+ln(odds1/odds)=A-1.6946
C=1/(1+exp(-B))
得出来的C列就是各分数段预测出来的真实水平的违约概率。
13.模型违约概率误差校准
评分模型因为开发环境不同,实际运用前都会使用不同方法进行校准。第12小节为读者朋友们介绍了因为建模样本分层抽样,导致建模样本的好坏比与真实客群好坏比不一致,进而进行的概率校准方法。
接下来,为读者朋友们介绍因为模型违约预测概率与实际违约率之间存在模型误差,进而在模型开发实际投入运用前,需要进行的违约预测概率误差校准方法。
相较于因建模样本抽样而做的模型校准,违约预测概率的误差校准更具有普适性,更容易实际操作。
1
背景
评分模型是使用大量历史数据,基于统计学、机器学习方法,找到历史数据与目标变量之间的一种函数关系。在金融信贷业务场景中广泛使用的违约评分模型,是基于历史借贷人的不同维度,预测未来借款人发生违约可能性的概率大小。
既然是利用历史预测未来,预测与实际之间就一定存在误差。
我们在实际业务场景中,如果可以将这种误差校准过来,违约预测概率尽可能与实际违约率一致,这样不仅有利于精细化模型评分的风险管理,还可以在审批策略管理上防止一定程度的模型误杀。
2
校准方法
在违约预测概率校准前,先从评分预测模型中提取每个客户的模型预测概率与实际违约概率等相关维度。
上图示例1中,Credit_score_range是模型应用的评分区间,Prob_df是模型违约预测概率,If_due是客户实际是否违约。假设我们应用模型评分区间进行模型策略管理,接下来我们要在模型评分区间策略应用前,完成模型违约预测概率的校准。
2.1.模型预测概率与实际违约概率对比
首先我们应该基于模型评分区间维度,从上图示例1中分析对比模型预测概率与实际违约概率之间是否存在误差。
上图示例2中,按照评分区间维度统计分析模型预测概率与实际违约概率,发现模型预测概率与实际违约概率在评分195分以上误差最大。模型误差校准系数(Model_Error)的计算公式=LN(实际违约概率/模型预测概率)。
2.2.按照某一时间跨度细化模型误差
从上图示例2分析发现,模型预测概率与实际违约概率存在误差,接下来需要按照一定时间跨度细化误差值,并分析其变化趋势。
上图示例3按照一个月为观测模型误差的时间跨度,图例仅展示部分观测月份(2016.1-6月)每个月的模型预测概率与实际违约率之间的误差波动范围,用于细化模型误差校准系数。
2.3.模型违约预测概率的校准
通过对历史数据模型违约概率误差的逐月分析,观察模型误差是否有季度性变化趋势,进而计算出季度性模型误差平均值,进一步计算出不同评分区间的整体模型误差加权平均值,即调整后的模型误差。
假设最终分析得出,不同分数区间调整后的模型误差如上图示例4所示。接下来进行最后一步,上线模型评分违约预测概率的校准。
如上图示例5所示,在模型上线实际应用后,某个月的不同评分区间对应的模型违约预测概率如图所示,最终应用于模型策略的校准后的模型预测概率计算公式=模型预测概率*EXP(Adjuested_Model_Error)。
比如,评分区间在195分以上的客群,模型预测概率为0.029872904,对应调整后模型误差系数为1.57%,则其校准后的模型违约预测概率
0.030345595=0.029872904*EXP(1.57%)。
3.关于模型违约预测概率误差校准的几点建议
评分模型违约预测概率与实际违约率之间的误差不可避免,误差校准的目的并不是完全消除误差,只是尽可能的将误差降低到最低点。
在误差校准系数估计的过程中,可以按照每个月的时间跨度作为最小观测时间区间,也可以按照每周、每季度,具体时间颗粒度的大小取决于数据量以及误差估计精细化程度,因人而异。
在分析不同时间跨度趋势进行误差估计时,简单易用的估计方法是平均值法,稍微复杂一些的方法可以建立时间序列模型,甚至LSTM模型。但二次构建模型本身就又存在模型误差,所以实际业务中需要权衡考量估算方法。个人认为简单易解释的估算方法就是好用的商业方法,毕竟Simple is the bset!
05
评分模型如何应用于决策
常常有人问起来,模型和策略之间到底是个什么关系。其实往往,模型是策略流程中非常重要的一个环节:可以直接根据评分卡分数拒绝掉一部分客户,或着根据分数走不同的审批流程、使用不同的额度策略。
那么问题就在于,这个划分的切点到底应该定在哪里?到底违约概率高到什么程度的客户需要走人工电核?这个问题,可不是等频或等距切分就可以随随便便解决的了,下面介绍三种量化的方法。
1
违约率&通过率
通过违约率和通过率切分可以说是最简单粗暴的了,但是前提是已经有一个确定好的违约率or通过率。比如说,我就是希望会有30%的客户通过,那就可以找全量样本(需要是无偏的)的分数30%分位数的水平,作为一个切分标准;或者说我希望违约概率在5%以上的样本直接拒绝,那就寻找5%违约概率对应的分值即可。
2
KS值
大家都知道KS值的计算公式为累计坏样本比例 – 累计好样本比例的最大值,也就是说取到最大值的这个点好坏区分是最开的,这个点对应的分数可以说是一个很优秀的切分点了。
以上图为例,粗略来看,700分的时候累计坏 – 累计好达到了最大值,可以考虑作为一个切分点。但是这个点具体是高风险和中风险的分界线,或者是中风险和低风险的分界线,又或是用作其他用途,就要综合考虑通过率和坏样本率来决定了。
3
F-score
模型决策的过程通常是精准率和召回率的权衡,其中精准率precision = TP / (TP + FP),即被判定为坏中实际为坏的比例;召回率recall = TP / (TP + FN),即有多少坏样本被判断为坏样本,简单点说就是累计坏样本率。
而F-score,就是一个综合考虑了精准率和召回率的指标,是它们的加权调和平均值:
其中β是一个用于调整精准率和召回率权重的指标,在下面的例子中我们取β=1,认为两者权重是相等的。
可以看到在600分的时候,F-score取到了最大值,意味着这是在该衡量标准下最有效的切分点。
在本文的例子中,我们得到了600分和700分两个数据层面最优的切点,在实际运算的时候可以切分的更细,得到更加精确的值。然而在真正做决策的时候,用哪个,怎么用,都是要结合违约率和通过率以及其他业务逻辑综合考虑的。
06
技术的升华之路
大家都认为,有技术的人一定行,工资高、有市场竞争力,感觉谁都可以Diss。其实技术员才是“社会弱势群体”。为何华为要裁员35岁的程序猿,不去裁员人资行政,互联网公司为何是经济下行期首批发起裁员潮的行业。
究其根本,还是大多数技术员能力单一。
在我看来,如果一个人成长到一定阶段,仍在驻足在技术层面上,作为社会职业人的其他能力没有被历练出来,他在公司甚至社会的贡献价值将会逐渐降低。
除了技术,你的沟通能力、协同能力、管理能力、跨部门撕逼能力甚至职场情商,都需要在进入社会职场的前5-8年快速锻炼起来。
在集团看到某某人因为与领导关系好走的近,一路高升,正常人心里一定是如此OS:不就是会讨好领导吗,这算什么本事。其实你错了,能把握领导心理,投其所向,完成领导的KPI,这是大本事,比学会Python撸Xgboost还难。
当然,我在这里不是要所有人都去想办法巴结领导,这种“技术活”是要求有一定天赋和阅历的。作为一个职业人,先提升自身实力是最重要。
回到技术绑架,除了上面聊的多元化能力发展,技术员如何把握技术在工业场景应用的深度,也十分重要。
我带FAL在进入大学后才发现,学术界与工业界的脱节是特别严重的。
世界一流、国内985的大学还稍微好一点,利用自身知名度,可以与很多企业建立产学研基地,并把企业的脱敏数据、落地技术带回到课堂。这样的大学在企业面前有一些强硬话语权。
对于其他的大学甚至专科院校,学校老师教学所用的数据是10年、20年前的公开数据,所教的课程与实际工作所需脱离太多,学生们也因为没有真实业务场景导致所学非所需,发生严重的应用断层。
想象与实际应用的差异,不仅在学术界,在社会工业界也有表现。
我发现,前2年在交流风控评分模型时,大家多交流的是LR逻辑回归算法,包括一些具体的分箱、挑选变量、特征工程。现在大家不聊一些LSTM、Neo4j感觉都不是模型圈内人。企业招聘也会罗列一大堆的机器学习算法,但除了一些特定场景,在金融信贷真实应用的还是最基础的树模型和LR做打分卡。一旦业务成规模后,模型的根本在于如何稳定的运行,而不是三天两头的迭代。那些鼓吹自家运用区块链技术、深度神经网络等一长串的华丽词藻,刨丝薄茧后也不过仍然是最基础的技术架构和算法。至于那些话,留给投资人看就好了,毕竟投资圈是需要“高度的”。
不知不觉,大家慢慢被技术绑架到一定高度,难以下台。
大道至简,繁在人心。
中国古人的诗文,讽刺的是,我在美国的金融科技看到了“至简”,中国的金融科技看到了“繁心”。
美国的风控建模工程师很幸福,因为有三大征信局和其他数据供应商的数据加持,不需要开发多复杂的模型,模型的风险识别能力强且稳定;美国的风控策略分析员很幸福,因为在策略设计、风险定价上,简简单单,逻辑清晰。风控内部调整起来容易,业务部门执行起来方便,甚至监管机构和投资机构理解起来也简单清晰。
而在我们这里,因为业务环境和客群复杂,需要大量模型做精细差异化管理,单单模型层面,申请模型、反欺诈模型、复杂网络、催收模型、额度模型,甚至有一些我们难以获取的数据,也有相应的模型,如收入预测模型,学历预测模型、星座特征模型、Burota特征筛选。
如果开发模型的人员没有做好模型开发及上线运营记录报告,缺少模型交付标准化报告和严谨的模型交付验收流程,一旦开发模型的人离职没交接好,相当长时间决策引擎和模型都不敢调整优化,新招聘的模型工程师,也要花大量的时间去填坑,造成资源严重浪费。这些状况并不是个例,身边比比皆是。
我们不应该强加技术,技术应该顺应需要被创新。
几个策略节点和评分卡可以解决的信用风险,没必要设计的过于复杂。我们更需要模型稳定和解释性,以及调控便利性。
作为一个职业人,尤其是技术员,别只专注于技术本身,多接触下产品,了解产品业务逻辑,甚至和人力行政聊聊天,了解公司下一步规划,是否要裁员、自己是否在优化名单,比你多撸几天代码来的更有安全感。
在这个时代,技术已被赋予多元的意义!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134651.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...