一文看懂风控模型所有(应该)

传统信用评估模型的基本思想是比较借款人信用历史资料与数据库中的全体借款人的信用习惯,检查借款人的发展趋势跟经常违约、随意透支、甚至没有债偿能力等各种陷入财务困难的借款人的发展趋势是否相似。

传统信用评估模型的基本算法是运用线性模型中的逻辑回归模型对一些强金融属性(如借款人一个月内多次申请贷款次数)、弱金融属性(如借款人月收入余额)以及关联金融属性(如借款人申请借款时段)数据进行挖掘建模,最终实现借款人违约概率的排序和评分等级。

传统信用评估模型主要从以下5个方面考查用户的信贷资质

2

大数据信用评估模型的基本思路是一切数据都和信用有关,在能够获取的数据中尽可能的挖掘信用信息。

大数据信用评估模型从大数据采集和大数据分析挖掘两个层面为缺乏信用记录的人挖掘出信用。

通过大数据采集技术,挖掘一个借款人的信用变得更加多元化,比如一个借款人缺乏银行信用卡的数据,但从借款人的航旅出行数据中挖掘出具备较好的信用资质,同样可以完成借款人的信用贷款。

通过多源化的信息采集,一方面传承了传统征信体系的金融决策变量,重视深度挖掘授信对象的信贷历史,另一方面能够将影响用户信贷水平的其他因素也考虑进去,如社交网络数据、用户申请信息等,从而实现深度和广度的高度融合。

以网络数据为例,如IP地址、浏览器版本甚至是电脑屏幕分辨率,这些数据可以挖掘出用户的位置信息、性格、行为以及消费能力,有利于评估用户当下信贷风险。

大数据信用评估模型通过融合多源信息,采用先进的机器学习的预测模型和集成学习的策略,进行大数据挖掘。

首先,上万种数据源被输入到征信系统,其次,寻找数据之间的关联性并进行数据转换,再次,在关联性基础上将变量重新整合为较大的测量指标,每一种指标反映借款人的某一方面特征,如诈骗概率、长期或短期借款人的信用风险和偿还能力等,然后将这些较大的变量输入到不同的分析模型中,最终将每一个模型输出的结论按照投票的原则,形成最终的信用分数。

3

在当下80%的银行和非银机构信用风险评估模型仍以传统信用评估模型为主,不仅因为其技术的成熟和模型的稳定,更因为现阶段大数据征信数据体量并不能完全开发大数据信用评估模型,对于大量极弱金融属性甚至毫无金融属性的数据进行特征关联和转换,对数据广度和厚度本身的要求往往高于模型算法,大数据采集和加工更应该作为基础建设去搭建。

在5G网络建设的大环境下,传统信用评估模型与大数据信用评估模型这一场较量我更相信结果是其乐融融,互补应用。

风控建模/算法工程师,从业务角度比较,普遍建模工程师比算法研究员更熟悉自家信贷产品的业务,因为其在构建风控特征指标过程中,很重要的衡量标准是其开发的指标是否具有业务意义,但对于业务和风险的整体理解,也仅止于局部,难以与风控策略分析人员相比较。

样本准备

在正式开始建模前,首先需要搞清楚一点:产品的目标客群是怎样的?建成的评分卡是要用在哪些人身上的?有哪些样本是不适合拿来建模的?举个例子,如果准入规则直接拒绝了25岁以下的客户,那么对应建模时也应该筛选掉这部分样本(非准入客群)。又或者,有一些客户虽然申请了额度,但是并未真正申请放款,那么这些无行为表现客户也不应该包含在建模样本之内。

好坏定义

相信很多没做过建模的读者朋友也听说过“好客户”、“坏客户”的说法,但其实在这其中,怎样的客户算“好”,怎样的客户算“坏”都是很有讲究的。这个好坏定义首先和评分卡真正关心的客户类型有关,比如说一个反欺诈评分卡的“坏客户”定义可能是首逾30天以上(FPD30+),而审批评分卡的定义可能是M3+。而具体逾期多少天算“坏”,就要进行RollRate分析了。

观察期和表现期

细分分析

有的时候,如果面对各种各样的客户通通使用同一张评分卡,可能效果并不是那么的好;但是如果对不同类型(某种维度意义上)客户都使用不同的评分卡,过多的评分卡不好管理,不同评分卡之间得出的结果有时也不具备可比性。

因此,需要找出最佳的群体分组,使得以此为基础建立的一组评分模型可使整个评分系统的预测能力最大化。当然,如果是在样本量比较少的情况下,这一步就可以跳过了。

数据准备

数据准备的过程包括数据清洗、缺失值处理、离群值处理等等,目的是让数据足够“干净”,而不会因为其中的一些乱码或格式问题影响后续建模。在逻辑回归模型中,合理的缺失值和离群值都是可以不做处理的,因为在进行分箱和WOE转换时可以解决掉这些问题。

其中合理指的是数据本身就是缺失的,比如在填写某些非必填信息的时候客户没有填写导致的缺失,而不是像第三方数据覆盖率不足等原因导致的缺失,类似这种本不应该缺失只是因为各种原因没有获取到数据而导致的缺失,是应该进行缺失值处理的。在这一步,可以筛选掉一部分缺失率过高的变量。

变量衍生

变量衍生是整个建模过程中最重要的一个环节,往往在同样的数据和维度条件下,谁的评分卡模型效果更好,看的就是这一步。变量衍生有各种各样的方法,比的就是谁的脑洞更大。可以简单粗暴的根据业务理解进行变量的组合,生成交叉变量,比如说,不同年龄段的客户的婚姻状况可以给予不同的打分标准。又或者,可以利用一些机器学习算法,比如xgboost,从数据的角度来进行变量衍生。

训练集和验证集

在真正进入建模过程前,还需要预留出一部分样本用作模型的验证,这是为了防止模型的不稳定:在训练集上表现良好、在验证集中却无法很好的预测。然而只要手气足够好,随机抽取验证样本时足够“随机”,训练集和验证集各指标的分布足够近似,验证集的表现一般不会和训练集有太大的差距,但这并不一定代表模型就是稳定的了。

分箱和WOE转换

共线性检验

逐步回归

这是一个基本上完全交给程序的过程,通过不断增加、删减变量,从数据层面挑选使模型的预测能力达到最大的变量组合。然而,虽然已经进入变量筛选阶段的尾声,逐步回归跑出来的变量也不一定就符合要求了,还会有可能出现逻辑回归的系数正负符号不一致的情况。这种时候,就需要结合前面的共线性检验,不断的调整进入逐步回归的变量,以得到合理的最终入模变量。

模型表现

拒绝推断

拒绝推断是给被拒绝的申请人赋予一个理论上的表现的过程。等价于说:“如果申请人被接受了,他们的表现会是什么?”由于审批时有一定的拒绝条件,所以被批准的客户群体并不是申请群体的无偏差代表,相反由于审批的选择性导致了被批准客户群体的信用质量高于申请人群体的总体信用质量。如果最终的评分卡只是基于被接受的群体创建,可能会造成一定程度的偏差。

拒绝推断的流程为:先建立一个已有客户模型,使用已有客户模型给拒绝客户打分,再基于已有客户和拒绝客户的群体集合建立新的评估分数。如果之前的审批策略效果不佳,已有客群和拒绝客群差别很小,是可以跳过拒绝推断这一步的。

标准评分卡

在评分卡模型建立的最后,需要将模型转化成一个更加直观、更容易部署的形式,也就是标准评分卡。标准评分卡可以一眼看出每一个入模变量落在哪个区间可以得到多少分。简单来说,就是需要将每个变量每个分箱的系数*WOE变成一个分数,这个过程会使用到三个参数:标准分、标准好坏比、PDO,最终计算出好坏比和分数的一一对应关系。

首先,我先来聊聊评分模型里的A、B、C卡到底是什么。

一个公式!

假定一个客户好为0,坏为1,预测这个客户是好or坏的概率p属于[0,1]

评分卡按照使用阶段分为申请卡、行为卡、催收卡

三张卡的区别

申请评分卡的评分结果将决定:

行为评分卡的评分结果将决定:

催收评分卡的评分结果将决定:

现在很多科技数据公司一味的去强调算法、大维度变量,但却忽略了业务数据的理解,做出来的模型自然也就与实际业务偏差很大,就算是ks为0.5以上也是很难实际落地。

变量业务理解梳理,尽管很繁琐,却尤为重要。

对于现在很流行的cashloan业务,客户申请收集基本三要素:姓名,身份证、手机号,通过用户授信、SDK抓取,以及三方数据调用,可以获得多维度的用户数据。

对于一个客户填写了这三要素之后,业务生产库里就会存在name、idcard、phonenumber三个字段去存储每一个申请客户的数据。如果对于建模的你来说,没有权限看到生产库的数据,只有数据仓库给你使用,你从数仓里看到了sex、province、city、sex、Valid_period_of_ID_card等等。这些字段都是从生产库里衍生出来的,有些是业务逻辑需要,有些是报表需求。

就以身份证idcard为例,一个申请客户提供了idcard:440306199005113437,申请时点为2017.10.28,18位身份证号码个位含义:

根据身份证编码含义,我们就可以在在数仓里衍生出如下字段

对于Valid_period_of_ID_card这个变量的衍生,大家首先要知道身份证号的含义,还要去测算申请客户目前是第几代身份证,然后去了解关于身份证法对于身份证有效期的划分标准,最后根据客户申请时点去测算他目前的身份证还有多长的有效期。

Valid_period_of_ID_card这个衍生变量可以在策略规则和建模中使用,比如身份证有效期较短的客群通过历史数据分析发现在公司cashloan中大占比为骗贷客户,策略引擎里已经设置了强拒绝规则,那么我们在建模的时候,就要把身份证有效期超出相应规则界限的客群剔除掉,直接排除这部分数据进入评分卡模型的训练样本,可以很好的排除这部分客群对模型的干扰,提升模型的区分好坏能力。

在SASBASE里有几个函数可以用来进行数据探索分析

1.ProcMeans

直接运行procmeans过程时,会对所有数值型变量进行操作,得到各变量的非缺失观测数N,均值MEAN,标准差STDDEV,最大值Max和最小值Min,我们还可以增加range(极差)sum(和)var(方差)nmiss(缺失值个数)median(中值)等选项得到其统计量。

2.ProcFreq

直接运行procfreq过程时,会对所有变量(一般针对离散型变量,如果是连续型变量,通过Format进行离散化处理)进行操作,得到各变量的频数、百分比、累积频数、累积百分比,我们还可以增加多变量的交叉表频数统计。

3.ProcUnivariate

探索性数据分析最常用的过程步之一就是procunivariate,直接运行procunivariate过程时,会对所有变量进行操作,得到矩、位置和可变形的基本测度、位置检验、分位数、极值观测。

若加了一个HISTOGRAM则增加了一个直方图;加一个NORMAL选项则在直方图上面加了一根拟合后的正态分布图,并且还增加了拟合正态分布的参数估计、拟合优度、分位数;加一个KERNEL则在直方图中加了一根实际数据核分布的密度曲线;加一个plot选项,在结果中增加了分析变量数据的分布图、箱型图、以及概率图,等等。

我们重点要从下面几个维度去进行关联性探索分析:

1.产品基本情况

2.产品逾期情况

3.参考已上线评分卡监控报表,参照模型变量及分组表现

目标变量就是假定申请客户的好坏,逻辑回归公式里的Y,先来看下逻辑回归公式

其中,

我们可以看到,通过sigmoid函数输出的y介于(0,1)之间,这样就表明了数据属于某一类别的概率,例如:

假定Y定义为申请客户为好客户还是坏客户,也就是历史数据非0(好客户)即1(坏客户),通过测算业务放款收益损失我们找到了一个公司可接受的逾期率P

当然实际情况好坏客户的划分并没有这么简单,单单是收益损失测算就需要考虑综合费率、资金成本等较多维度。

2.目标变量的界定

对于评分卡目标变量Y的界定,我们主要从RollRate和Vintage来观察分析,重点需要考虑三个方面

逾期流转比例

样本容量

先分析Rollrate

RollRate的定义为在当前催收水平下不同逾期天数转化为坏账的概率。从RollRate我们看到2017年开始放款,M0toM1的流转率约为7.8%,M3toM4的流转率为100%,也就是说,处于M3逾期阶段内的客户基本很难催收,逾期天数大于60天的客户基本为坏客户了。

再分析Vintage

在开发评分模型前,如果可以在样本设计阶段尽可能的涵盖到体现客户风险的所有特征维度,那么对于之后模型开发工作,将会起到事半功倍的效果。

究竟应该如何设计样本。接下来我将为读者朋友们深入浅出的分析讲解。对于没有接触或者未从事模型设计开发工作的读者朋友们,不妨也了解下设计思路,便于提升风控策略等其他工作的风险管理效能,毕竟,风控评分模型、策略规则甚至产品设计,彼此不分家!

对于不同形态的金融产品,样本特征集的设计框架彼此不同,但设计出发点都是为了体现用户的全部潜在风险。

以个人信贷为例,样本特征集应该至少包括客户基础信息、申请行为信息、历史借贷信息、社交属性信息、征信查询信息、个人及家庭资产信息、历史交易类信息、地理信息。其中,征信查询信息包括第三方数据供应商提供的信息。

以征信查询信息为例,征信机构(包括第三方数据提供商)从会员单位(银行、小贷公司、零售商、信用卡机构、公用事业公司等)和公共渠道(法院、政府部分等)收集信息,并用手机号、身份证号匹配整合到一起。

一般征信机构提供的征信数据分为几类:公共信息(如法院判决)、查询检索(如历史查询记录)、共享信息(如不同贷款机构的整合数据)、聚合信息、欺诈预警(如无效的地址或身份证号)、附加价值(征信机构通用分)。

对于小微金融信贷的特征集设计,除了个人信息之外,还会加入税务、上下游供应商、发票、公司社保缴纳、水电费、公司财务等体现企业经营稳定性和发展力的特征数据,综合评估小微企业的还款能力和小微企业主的还款意愿。

所以,在设计样本特征集时,需要将以上风险特征变量尽可能的收集聚合在样本特征集中。

在构建出样本特征集之后,需要按照模型开发、模型验证、模型测试三个环节,将总样本拆分成训练样本、验证样本、测试样本和近期样本。

近期样本是在开发前仅三个月左右的样本,没有表现结果。近期样本主要用来确保评分卡特征变量的稳定。

一般对于建模样本,常遇到两类问题:建模样本总量少和样本不均衡。

对于建模样本总量少的情况,需要按照最大、最小样本设计策略重新进行观察期和表现期以及观察点的选择,同时结合计算能力以及外部数据征信成本进行综合考量,在这里不进行过多赘述。

对于样本不均衡问题,一般有三种处理方法:欠采样、过采样和样本分类阈值移动。欠采样是减少数量较多那一类样本(一般是好样本)的数量,使得正负样本比例均衡;过采样是增加数量较少那一类样本(一般是坏样本)的数量,使得正负样本比例均衡。

样本分类阈值移动的设计方法是,在分类学习中面对样本不均衡时,我们可以采用原有不均衡的样本进行学习,然后通过改变决策规则来做分类,比如在样本均衡时我们0.5作为分类阈值,而在样本不均衡的情况下我们可以规定预测概率需要达到0.8才能被预测为多数类。

4

数据清洗这四个字对于常常做数据分析建模的同学们一定不陌生,不管在实际工作中有没有真正做清洗,我们都会先把这个口号喊出来,数据清洗这块其实我也一直不太愿意说,因为这种活实在太结合业务理解了,而且还见仁见智,并不是简简单单的三步------缺失值填补、异常值删除、错误值处理。但是做数据建模,也不能跳过这步,那我就从操作手法和操作目的两个方面来聊聊我认为怎么做数据清洗。

数据缺失引起的原因多种多样,大致可以概括为IT系统原因、前端录入原因和接入征信公司原因。

在做缺失值填补前,同学们应该先看看有哪些字段是缺失的,缺失比例如何,是否对我们业务和模型有作用。如果这些缺失字段是不必要的,那我们没有必要花功夫去填补它们。

2.1筛选出缺失的数据

2.2查看缺失比例,判断是否必要

对筛选出缺失数据字段的missing数据集,通过观察缺失比例和建模产品的逾期率去判断是否有必要做缺失值填补。

比如,建模产品的逾期率比较高,也就是建模样本里的坏样本比较多,变量分箱的目的是更希望将坏样本分到一个组里,这个时候一个分箱变量的缺失率很高,不论是做特征值替换、线性插值、逻辑匹配填补或者作为MISSING处理,都容易造成分箱组里sample的极端分布不均,这个时候如果你做并组,会造成分箱区分度下降,如果你不做并组,这个分箱变量会有不稳定的潜在隐患。

所以,对于逾期率高的产品建模,缺失比例高的话就不建议进入模型,同比,对于逾期率低的建模产品,缺失率的容忍度就好了很多,具体这个balance的线在哪里,我提供一个经验建议:

更严谨的做法是每次建模时候根据我上面的逻辑去校验样本可接受缺失比例的balancepoint,然后判断哪些字段是需要继续操作,哪些字段可以直接舍弃。

2.3缺失值填补ornot

通过第二步我们已经知道哪些字段是可以继续操作下去的,这个时候我们就要选择用什么方法去对缺失数据处理。

统计学上的缺失值处理常用手法有特征值(mean\median…)替换、线性插值等,但实际建模中更常用的是结合业务逻辑匹配,或者作为MISSING不做处理。

举个例子,如果我们分析产品的业务线前端采集到了用户的身份证照片,这个照片不仅仅可以用来ORC活体检测,身份证里的信息数据可以进行逻辑匹配填补诸如常住地、性别、年龄等这些因为前段录入操作原因造成的数据缺失。

比如我们的age这个字段有数据缺失,但是缺失比例是我们可接受范围内,此时我们就可以通过身份证号的编码规则来推断匹配这个申请客户的年龄,通过这种匹配方法填补的缺失值往往更加能反应客户的真实信息。

对于接入不同征信公司造成的某些关键字段的数据缺失,同样缺失比例是我们可接受范围内,这个时候就需要参考这个字段的衍生逻辑来选择用什么方法来填补,更多的做法是不做缺失值填补,作为MISSING单独一组。

造衍生变量是整个开发评分卡模型过程中最重要、最艰辛也最有趣的一个节点。

最重要是因为衍生变量的好坏往往会影响评分卡模型的各种测评指标,决定策略的反欺诈能力;

当然现在也可以结合一些算法比如DT、RandomForrest进行特征工程造衍生变量,但是造好的变量是否可以进入评分卡模型以及是否容易在策略引擎上部署等问题又要反复校验(如果你公司是基于Python或则R自主开发的strategysystem,那衍生变量的部署就变的比较方便);

最有趣是因为造变量过程虽然艰辛,但造好变量进入模型上线部署的成就感是很强烈的。

那么大家可能会问,到底如何造衍生变量呢?

这里没有绝对方法,也需要你沉下心研究。

在建模的过程中,通过变量交叉或者GBDT等算法可能衍生出成百上千个指标,然而最终入模的往往只有十几个。那么这十几个变量是如何经过层层筛选“出人头地”的呢?在这其中往往有很多层考量。

一个变量,如果缺失率过高,他所包含的信息往往也比较少,做缺失值填补也会比较困难。同时该变量如果在建模样本中大量缺失,很可能投入生产后也是差不多的情况,那进入模型也就没有太大的意义了。

一般情况下,如果模型中加入过多的指标往往会比较冗余,因此在有限个指标中要使模型的效果更佳,自然需要挑选对坏样本识别能力较强的变量。通常的做法是计算每个变量的IV值,或者单变量KS/AR值,并从大到小进行排序,挑选排名前多少的变量,或者大于一定阈值的变量。对于IV值较低的变量,他们本身能提供给模型的贡献也比较少,剔除掉也不足为惜了。

一个指标光是自己表现的足够好也是没有用的,还要考虑它和所有其他自变量之间的“团队协作能力”。一个优秀的团队,往往需要队员之间取长补短,各自分工,而不是大家擅长的事物都一样,而短板却无人弥补。放在模型上面也是一样的道理。如果模型中的自变量之间具有完全多重共线性,那么训练出来的系数便会失去统计学意义。即使是不完全共线性,也会导致系数失真,从而导致模型的效果无法达到预期。

这个时候,如果单纯计算变量的VIF,虽然能检验共线性问题是否存在,但是却无法判断应该保留哪些变量、剔除哪些变量。因此可以综合考虑单变量或多变量的AR值。

5

除了上面几点可以通过各种指标量化的筛选条件以外,业务逻辑也往往是一个不可忽视的门槛。

比如说学历这个指标,从直观上来看往往学历越高,信用风险就越低。因此在分箱的过程中,各箱的坏样本率也需要符合这一趋势。否则最后转换为标准评分卡后,低学历客户的单项得分比高学历客户的还高,这显然是不合常理的。对于趋势与业务逻辑不一致的指标,往往也会予以剔除,来满足评分模型的可解释性。这就是为什么常说,做模型一定要将数据与业务相结合,光靠数据跑出来而没有业务做支撑的模型,往往也是不可靠的。

6

逐步回归是一个不断往模型中增加或删除变量,直到找到最优的变量组合、新增变量不再产生具有统计显著意义的增量效应为止。一般来说,这就是指标筛选的最后一步了,如果使用SAS进行逐步回归往往也能控制住入模变量的显著性,因此此时最需要注意的是模型拟合出来的系数方向是否一致,如果出现不一致的情况,可以考虑在变量清单中剔除掉这部分指标,重新进行逐步回归分析,直到系数方向一致为止。

经过了这么多步骤的严格筛选,最终留下的入模指标都是整个指标池中的“佼佼者”,肩负着判断客户信用风险的“伟大使命”。它们个人能力强,团队协作也足够优秀,同时还非常稳定,才能让各路违约风险无处遁形。

在R语言中,想要知道决策树的最优分箱切点,只需要一个函数:

library(smbinning)

smbinning(df,"FLAG","Variable",p=0.05)

其中,df是指标所在的数据集,FLAG是二分类的目标变量,Variable是需要进行分箱的指标名字,p是指每一箱里至少有多少比例的样本,取值范围为0~0.5。

然而光是知道了决策树的最优分箱切点,每一箱的好坏比趋势却不一定符合业务逻辑,这个时候可能就需要根据经验人为的去调整分箱切点。同时,如果好坏样本本身并不均衡,坏样本占比过少,还可能会报“Nosignificantsplits”的错误。既然程序没办法给你答案,就只能自己寻找答案了。

除了最优分箱,smbinning包中还可以自己输入分箱切点来查看每一箱的好坏样本分布情况:

smbinning.custom(df,"FLAG","Variable",cuts)

除了最后的cuts参数,其他的都和smbinning是一致的。那么显而易见,cuts就是我们分箱的切点了,用向量c()的形式表达即可。

在人工调整分箱的时候,需要注意的地方有:

具体人工分箱的切点如何选取,这个就比较因人而异了。可以在最优分箱的基础上进行调整,也可以等频或等距分箱后参考好坏比趋势进行合并和调整。

逻辑回归拟合模型,我主要聊逻辑回归的变量选择方法

模型建立的主要工作就是变量选择,一般统计分析软件(比如SAS、Python等)的logistic回归程序都提供自动变量选择的功能,包括了前向逐步(ForwardStepwise)回归、后向逐步(BackwardStepwise)回归和混合逐步(CombinedStepwise)回归。

他们三者有什么差别,我该如何选择变量选择方法呢?

顾名思义,FS(ForwardStepwise)回归是让所有建模指标变量一个一个地进入回归方程,按照预先设定的显著性检验标准,最显著的指标变量最先进入,然后其次就是次显著的指标变量进入,依次类推。

明白了FS回归,BS回归就很容易理解。它的逻辑是首先让全部指标变量都进入回归方程,按照预先设定的显著性检验标准,把不显著的变量逐一剔除。

CS回归是融合FS和BS回归的优缺点,提出的一种变量选择方法,它的原理如下:按照预先设定的显著性检验标准,逐步加入或者剔除指标变量,可以由前向逐步回归开始,也可以由后向逐步回归开始,例如由前向逐步回归开始,当新指标变量进入时,如果老指标变量不满足预先设定的标准可以后向剔除,而对比前向逐步回归,变量一旦进入,就不再退出。

说白了,CS回归就是指标变量有进有出,不停迭代对比指标变量对预测结果的有效显著性。

我们在评分模型变量选择方法上,经验建议优先选择CombinedStepwise,其次是ForwardStepwise。

对于训练出来的ScoreModel,需要一系列指标对Model进行关于稳定性、区分能力等效用来度量。

KS曲线是一种表示评分卡有效性的可视化工具,基于经验累积分布函数(ECDF)画出好客户和坏客户在分数区间上的累积分布。

KS统计量就是两条曲线垂直距离绝对值最大的距离,所以KS取值范围为[0,1]。上图中40分处KS曲线绝对值距离达到最大(72%-36%)

KS=Max{|retain_bad_pct-retain_good_pct|}

我认为对于评分模型的KS取值应有如下要求:

KS统计量简单易懂,实际上可能又过于简单。KS距离最大处的分数可能与实际应用中切分点没有直接关联,尤其是当分数离当前最大KS对应分数(比如上图40)很远的时候,KS指标的重要性就越发不明显。

使用主流统计分析软件计算KS指标并画出KS曲线:

1.SAS(计算KS)

2.PYTHON

3.R

Gini的计算公式(我知道没几个人愿意看公式,但我写出来的目的是警示大家这个Gini和基尼不纯度的本质区别)

在评分模型中,可以看下面表来理解下Gini的计算过程

其中,G_num代表好客户数量,B_num代表坏客户数量,Retain代表累积。

虽然Gini指标与Ks一样也是金融评分模型界通用的核心指标,但是它的使用也是有2点需要注意的地方:

所以要想Gini指标精确有效,那么目标变量Y的定义在评分卡开发初期是十分重要和严谨的步骤。

Gini系数的不同范围值对应的评分模型区分能力高低也不一样,行业内也没有一个绝对标准,以下个人经验,可供参考:

针对评分卡集群来说,申请评分卡集的GINI标准:

行为评分卡集群的GINI标准:

当然了,对于单一子评分卡模型的话,Gini的接受浮动就比较大了,比如某一特定场景开发出的申请评分卡,因为IV高于0.1的变量本身就很少了,这个时候的Gini标准就不需要再采用模型集群的GINI标准了。

准确率(正确率)=所有预测正确样本/总的样本(TP+TN)/总

accuracy_score函数计算了准确率,不管是正确预测的fraction(default),还是count(normalize=False)。

函数:sklearn.metrics.accuracy_score

用法:fromsklearn.metricsimportaccuracy_score

#normalize表示返回值是正确预测率还是正确预测个数

accuracy_score(X,y,normalize=False)

精确率=将正类预测为正类/所有预测为正类TP/(TP+FP)

函数:sklearn.metrics.precision_score

用法:fromsklearn.metricsimportprecision_score

#参数average为对多分类权重模式的分配

召回率=将正类预测为正类/所有正真的正类TP/(TP+FN)

函数:sklearn.metrics.recall_score

用法:fromsklearn.metricsimportrecall_score

F值=正确率*召回率*2/(正确率+召回率)

函数:sklearn.metrics.f1_score

用法:fromsklearn.metricsimportf1_score

ROC曲线:接收者操作特征,roc曲线上每个点反映着对同一信号刺激的感受性。该函数需要二分类的真实值和预测值,它可以是正例的概率估计,置信值,或二分决策值。

函数:sklearn.metrics.roc_curve

用法:fromsklearn.metricsimportroc_curve

#函数返回值为FPR假正类率、TPR真正类率和和阈值

#pos_label为标签认定为正的label个数

fpr,tpr,thesholds=roc_curve(X,y,pos_label=2)

在建立评分卡模型的时候,往往建模样本的好坏比和实际情况是不一致的,这是因为:

然而,用一个好坏比失真的样本建立好评分卡模型后,如果想要计算每个分数段的坏样本率,得出来的结果是会大于真实情况的。原因很简单,逻辑回归中的截距是约等于好坏比的对数的(因为评分卡模型预测的是该样本为坏样本的概率,因此使用的是坏:好)。如果样本的坏样本占比比实际情况要高,那么模型预测出来的每个样本的违约概率都会偏大。那么想要还原每个客户真实的违约概率,就需要进行一个概率校准。

校准的方式也非常简单。首先我们需要一个目标好坏比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列就是各分数段预测出来的真实水平的违约概率。

评分模型因为开发环境不同,实际运用前都会使用不同方法进行校准。第12小节为读者朋友们介绍了因为建模样本分层抽样,导致建模样本的好坏比与真实客群好坏比不一致,进而进行的概率校准方法。

接下来,为读者朋友们介绍因为模型违约预测概率与实际违约率之间存在模型误差,进而在模型开发实际投入运用前,需要进行的违约预测概率误差校准方法。

相较于因建模样本抽样而做的模型校准,违约预测概率的误差校准更具有普适性,更容易实际操作。

评分模型是使用大量历史数据,基于统计学、机器学习方法,找到历史数据与目标变量之间的一种函数关系。在金融信贷业务场景中广泛使用的违约评分模型,是基于历史借贷人的不同维度,预测未来借款人发生违约可能性的概率大小。

既然是利用历史预测未来,预测与实际之间就一定存在误差。

我们在实际业务场景中,如果可以将这种误差校准过来,违约预测概率尽可能与实际违约率一致,这样不仅有利于精细化模型评分的风险管理,还可以在审批策略管理上防止一定程度的模型误杀。

上图示例1中,Credit_score_range是模型应用的评分区间,Prob_df是模型违约预测概率,If_due是客户实际是否违约。假设我们应用模型评分区间进行模型策略管理,接下来我们要在模型评分区间策略应用前,完成模型违约预测概率的校准。

2.1.模型预测概率与实际违约概率对比

首先我们应该基于模型评分区间维度,从上图示例1中分析对比模型预测概率与实际违约概率之间是否存在误差。

上图示例2中,按照评分区间维度统计分析模型预测概率与实际违约概率,发现模型预测概率与实际违约概率在评分195分以上误差最大。模型误差校准系数(Model_Error)的计算公式=LN(实际违约概率/模型预测概率)。

2.3.模型违约预测概率的校准

通过对历史数据模型违约概率误差的逐月分析,观察模型误差是否有季度性变化趋势,进而计算出季度性模型误差平均值,进一步计算出不同评分区间的整体模型误差加权平均值,即调整后的模型误差。

假设最终分析得出,不同分数区间调整后的模型误差如上图示例4所示。接下来进行最后一步,上线模型评分违约预测概率的校准。

如上图示例5所示,在模型上线实际应用后,某个月的不同评分区间对应的模型违约预测概率如图所示,最终应用于模型策略的校准后的模型预测概率计算公式=模型预测概率*EXP(Adjuested_Model_Error)。

比如,评分区间在195分以上的客群,模型预测概率为0.029872904,对应调整后模型误差系数为1.57%,则其校准后的模型违约预测概率

0.030345595=0.029872904*EXP(1.57%)。

3.关于模型违约预测概率误差校准的几点建议

评分模型违约预测概率与实际违约率之间的误差不可避免,误差校准的目的并不是完全消除误差,只是尽可能的将误差降低到最低点。

常常有人问起来,模型和策略之间到底是个什么关系。其实往往,模型是策略流程中非常重要的一个环节:可以直接根据评分卡分数拒绝掉一部分客户,或着根据分数走不同的审批流程、使用不同的额度策略。

那么问题就在于,这个划分的切点到底应该定在哪里?到底违约概率高到什么程度的客户需要走人工电核?这个问题,可不是等频或等距切分就可以随随便便解决的了,下面介绍三种量化的方法。

违约率&通过率

通过违约率和通过率切分可以说是最简单粗暴的了,但是前提是已经有一个确定好的违约率or通过率。比如说,我就是希望会有30%的客户通过,那就可以找全量样本(需要是无偏的)的分数30%分位数的水平,作为一个切分标准;或者说我希望违约概率在5%以上的样本直接拒绝,那就寻找5%违约概率对应的分值即可。

KS值

大家都知道KS值的计算公式为累计坏样本比例-累计好样本比例的最大值,也就是说取到最大值的这个点好坏区分是最开的,这个点对应的分数可以说是一个很优秀的切分点了。

以上图为例,粗略来看,700分的时候累计坏-累计好达到了最大值,可以考虑作为一个切分点。但是这个点具体是高风险和中风险的分界线,或者是中风险和低风险的分界线,又或是用作其他用途,就要综合考虑通过率和坏样本率来决定了。

F-score

模型决策的过程通常是精准率和召回率的权衡,其中精准率precision=TP/(TP+FP),即被判定为坏中实际为坏的比例;召回率recall=TP/(TP+FN),即有多少坏样本被判断为坏样本,简单点说就是累计坏样本率。

而F-score,就是一个综合考虑了精准率和召回率的指标,是它们的加权调和平均值:

其中β是一个用于调整精准率和召回率权重的指标,在下面的例子中我们取β=1,认为两者权重是相等的。

可以看到在600分的时候,F-score取到了最大值,意味着这是在该衡量标准下最有效的切分点。

在本文的例子中,我们得到了600分和700分两个数据层面最优的切点,在实际运算的时候可以切分的更细,得到更加精确的值。然而在真正做决策的时候,用哪个,怎么用,都是要结合违约率和通过率以及其他业务逻辑综合考虑的。

大家都认为,有技术的人一定行,工资高、有市场竞争力,感觉谁都可以Diss。其实技术员才是“社会弱势群体”。为何华为要裁员35岁的程序猿,不去裁员人资行政,互联网公司为何是经济下行期首批发起裁员潮的行业。

究其根本,还是大多数技术员能力单一。

在我看来,如果一个人成长到一定阶段,仍在驻足在技术层面上,作为社会职业人的其他能力没有被历练出来,他在公司甚至社会的贡献价值将会逐渐降低。

除了技术,你的沟通能力、协同能力、管理能力、跨部门撕逼能力甚至职场情商,都需要在进入社会职场的前5-8年快速锻炼起来。

在集团看到某某人因为与领导关系好走的近,一路高升,正常人心里一定是如此OS:不就是会讨好领导吗,这算什么本事。其实你错了,能把握领导心理,投其所向,完成领导的KPI,这是大本事,比学会Python撸Xgboost还难。

当然,我在这里不是要所有人都去想办法巴结领导,这种“技术活”是要求有一定天赋和阅历的。作为一个职业人,先提升自身实力是最重要。

回到技术绑架,除了上面聊的多元化能力发展,技术员如何把握技术在工业场景应用的深度,也十分重要。

我带FAL在进入大学后才发现,学术界与工业界的脱节是特别严重的。

世界一流、国内985的大学还稍微好一点,利用自身知名度,可以与很多企业建立产学研基地,并把企业的脱敏数据、落地技术带回到课堂。这样的大学在企业面前有一些强硬话语权。

对于其他的大学甚至专科院校,学校老师教学所用的数据是10年、20年前的公开数据,所教的课程与实际工作所需脱离太多,学生们也因为没有真实业务场景导致所学非所需,发生严重的应用断层。

想象与实际应用的差异,不仅在学术界,在社会工业界也有表现。

我发现,前2年在交流风控评分模型时,大家多交流的是LR逻辑回归算法,包括一些具体的分箱、挑选变量、特征工程。现在大家不聊一些LSTM、Neo4j感觉都不是模型圈内人。企业招聘也会罗列一大堆的机器学习算法,但除了一些特定场景,在金融信贷真实应用的还是最基础的树模型和LR做打分卡。一旦业务成规模后,模型的根本在于如何稳定的运行,而不是三天两头的迭代。那些鼓吹自家运用区块链技术、深度神经网络等一长串的华丽词藻,刨丝薄茧后也不过仍然是最基础的技术架构和算法。至于那些话,留给投资人看就好了,毕竟投资圈是需要“高度的”。

不知不觉,大家慢慢被技术绑架到一定高度,难以下台。

大道至简,繁在人心。

中国古人的诗文,讽刺的是,我在美国的金融科技看到了“至简”,中国的金融科技看到了“繁心”。

美国的风控建模工程师很幸福,因为有三大征信局和其他数据供应商的数据加持,不需要开发多复杂的模型,模型的风险识别能力强且稳定;美国的风控策略分析员很幸福,因为在策略设计、风险定价上,简简单单,逻辑清晰。风控内部调整起来容易,业务部门执行起来方便,甚至监管机构和投资机构理解起来也简单清晰。

而在我们这里,因为业务环境和客群复杂,需要大量模型做精细差异化管理,单单模型层面,申请模型、反欺诈模型、复杂网络、催收模型、额度模型,甚至有一些我们难以获取的数据,也有相应的模型,如收入预测模型,学历预测模型、星座特征模型、Burota特征筛选。

我们不应该强加技术,技术应该顺应需要被创新。

几个策略节点和评分卡可以解决的信用风险,没必要设计的过于复杂。我们更需要模型稳定和解释性,以及调控便利性。

作为一个职业人,尤其是技术员,别只专注于技术本身,多接触下产品,了解产品业务逻辑,甚至和人力行政聊聊天,了解公司下一步规划,是否要裁员、自己是否在优化名单,比你多撸几天代码来的更有安全感。

THE END
1.计算机10大经典算法计算机经典算法在介绍了快速排序和归并排序这两种高效的排序算法后,我们现在来看看另一种重要的排序方法——堆排序。堆排序是一种基于完全二叉树结构的比较排序算法,它利用了堆的特性来进行高效排序20。其核心思想是将待排序的数据构造成一个大顶堆或小顶堆,然后逐步交换堆顶元素和堆尾元素,同时调整堆结构,最终得到有序序列21。https://blog.csdn.net/2401_86544677/article/details/143141716
2.共识算法介绍2、主流的共识算法有哪些? 3、目前主流区块链(比特币、以太坊等)分别采用哪种共识算法? 4、哪种共识算法最好? 1、什么是共识机制? 我们都知道,区块链可以看作一本记录所有交易的分布式公开帐簿,区块链网络中的每个参与者都把它看作一本所有权的权威记录。 https://www.jianshu.com/p/8b50304db034
3.Contents/premium.mdatmaster·Newslab2020/Contents·GitHub封城之后会留下什么? 582 知网、Sci-Hub与学术出版业的暴利 2022/4/21 “学者都是出版商的奴隶”; 学术出版行业背后的英国大亨; Sci-Hub能否挑战出版商霸权? 581 三个与对话、求真有关的项目 2022/4/16 Letter:公开、真诚的通信对话; Pairagraph:公共议题的回合辩论; https://github.com/Newslab2020/Contents/blob/master/premium.md
4.智能机器人系列报告三:技术的盛宴,服务机器人核心技术与模块解析激光雷达是“机器之眼”,能够获得周边环境的点云数据模型,现在多用于在测量中有一定精度要求的领域,或需要测量自身与人体距离的智能装备,在测量与人的距离这一功能上尚无完美替代方案。在目前主流的前沿机器人身上已经装备了激光雷达模块,如Atlas和pepper等。https://blog.sina.com.cn/s/blog_a816de580102wu8z.html?bsh_bid=1917182908
5.现在主流的软件开发技术有哪些?TensorFlow和PyTorch是两个流行的机器学习框架,它们提供了强大的工具和算法,用于开发各种智能应用和模型。 Scikit-learn: Scikit-learn是一个用于机器学习的Python库,包含了许多常用的算法和工具,使得机器学习的应用更加方便。 7. 云计算 AWS、Azure、Google Cloud: http://www.apppark.cn/t-49941.html
6.主流的哈希算法有哪几种?SHA-3(Secure Hash Algorithm 3):是美国国家标准与技术研究院(NIST)于2015年发布的新一代安全哈希算法,其基于 Keccak 算法,提供了多个摘要长度选项,如 SHA-3-224、SHA-3-256、SHA-3-384 和 SHA-3-512。 CRC32(Cyclic Redundancy Check):产生32位的哈希值,主要用于数据校验和错误检测,如文件校验、网络通信等https://www.nowcoder.com/discuss/621489203938930688
7.把这些计算机基础知识学完后,我飘了!RLE 算法的机制 接下来就让我们正式看一下文件的压缩机制。首先让我们来尝试对AAAAAABBCDDEEEEEF这 17 个半角字符的文件(文本文件)进行压缩。虽然这些文字没有什么实际意义,但是很适合用来描述RLE的压缩机制。 由于半角字符(其实就是英文字符)是作为 1 个字节保存在文件中的,所以上述的文件的大小就是 17 字节。如图https://maimai.cn/article/detail?fid=1400649709&efid=VmhIiOBVBH0ua86U1tJoEA
8.《SEO实战密码(第3版)》精华整理整个第3版600多页,就中国大陆人来看很臃肿,毕竟中国大陆以百度为主,书中包括外链、作弊方式等等很多都过时了,但这本书只有新增补充,并没有做太多相应的删减。 尽信书不如无书,学会带着自己思维去看去做会更好,SEO算法本就不是公开的,一旦公开可能又会有很多作弊手段出现,但现在百度官方给出了很多良好的建议https://lusongsong.com/yulu/wap.asp?id=7015
9.20年前100块≈现在310?通胀之下,准备多少钱才够养老?另外提醒大家:目前并没有官方统计的通货膨胀率,以下仅为两种网络主流算法,计算思路及结果仅供参考。 思路一:消费者物价指数(CPI算法) CPI(消费者物价指数),能很好地反映生活中那些消费品,如肉蛋奶、烟酒茶的价格变化,一定程度上,能反映通货膨胀率。 我们统计了从 2002 年开始,到 2021 年的 CPI 数据,各年度波动https://www.shenlanbao.com/caifu/1635471539614597120
10.web3:同态加密(一)SWHE方案稍弱,但也意味着开销会变得较小,容易实现,现在已经可以在实际中使用。 主流同态加密算法原理 满足有限运算同态性而不满足任意运算同态性的加密算法称为半同态加密。典型的半同态加密特性包括乘法同态、加法同态、有限次数全同态等。 乘法同态加密算法https://developer.aliyun.com/article/1154858
11.路飞学城1、对各种高精尖算法有较深研究; 2、精读Python源码,熟知Python解释器底层技术实现; 3、擅长领域:汇编、C/C++、Python、Java、逆向工程、机器学习与人工智能等; 教学大纲 包含Python工程师需要的全部技术要求 第一阶段:Python开发基础(3周) 可掌握的核心能力: 1、掌握文件操作、字符编码及转换、函数编程等开发人https://m.luffycity.com/light-course/python
12.电商主流推荐算法概要51CTO博客现在在京东、易迅、亚马逊等看到的主流推荐算法,一般都是基于物品自身相似性(不依赖于用户数据,没有冷启动问题)、基于用户浏览、喜欢、购买等数据的协同过滤推荐(用户纬度和商品纬度)。 其实这些推荐算法的核心思路,是很朴素的。 一、基于物品自身相似度:例如衣服A和衣服B,对于它们在分类、价格段、属性、风格、品牌定https://blog.51cto.com/u_16081606/6210192
13.主流大数据平台算法有哪些帆软数字化转型知识库以上这些大数据平台算法各有特长和应用场景,在选择时需要根据具体的业务需求、数据量级和实时性等因素进行权衡,以达到最佳效果。 相关问答FAQs: 主流大数据平台算法有哪些? Hadoop大数据平台算法:Hadoop是最常用的大数据平台之一,其算法包括MapReduce算法、Hive查询语言、HBase分布式数据库、Pig数据分析平台等。MapReduce是Hahttps://www.fanruan.com/blog/article/495/
14.EdgeDetection:C++实现的主流边缘检测算法(CannySobel3.5 双边滤波算法 三、图像增强 四、边缘检测 1. Canny算子 2. Sobel算子 3. Laplace算子 4. Roberts算子 五、MFC实现 1. 框架搭建 2. 功能实现 六、小结 摘要:本文主要介绍了几种主流的图像边缘检测算法,包括Canny算子、Sobel算子、Laplace算子、Roberts算子、Krisch算子、Prewitt算子、Susan角点检测算法等。另外https://gitee.com/yczha/EdgeDetection
15.中国“缺芯少魂”之痛难破解,打破AI核心技术瓶颈才有未来现在,全球AI领域,深度学习已经超越传统机器学习,成为主流算法。但是,机器学习仍未被取代,两者呈现互补的态势。随着深度学习与神经网络算法的结合,不仅降低了算法训练的门槛,更衍生出大量热门算法以及相应的底层构架。 与依赖于芯片的算力不同,算法由于开源代码、自动化工具等助力,门槛相对降低不少,因而成为初创公司不错的https://www.iyiou.com/news/20191129119131
16.几种主流贴图压缩算法的实现原理详解几种主流贴图压缩算法的实现原理详解 对于不同的项目其中关于贴图压缩这块需要针对不同的平台做不同的设置,下面就和大家介绍下在各种平台中常使用的几种贴图压缩格式及其细节,以便更加适宜地选择在特定设备下的压缩格式以便节省资源。关于移动平台和硬件设备与压缩格式的对应关系可以参考下这里,基本上比较清楚了。https://gwb.tencent.com/community/detail/123075