金融风险控制理论有哪些(金融风控建模概述)

学习目标

知道信贷审批业务的基本流程知道ABC评分卡是什么,有什么区别知道风控建模的流程掌握评分卡模型正负样本定义方法知道如何构建特征,如何评估特征

1 互联网金融风控体系介绍¶

信贷审批业务基本流程四要素认证:银行卡持有人的姓名、身份证号、银行卡号、手机号 互联网金融风控体系主要由三大部分组成:用户数据:用户基本信息、用户行为信息、用户授权信息、外部接入信息。数据采集会涉及到埋点和爬虫技术,基本上业内的数据都大同小异。免费的运营商数据安卓可爬的手机内部信息(app名称,手机设备信息,部分app内容信息)收费的征信数据、各种信息校验、外部黑名单之类的特定场景的现金贷和消费金融会有自有的数据可供使用比如我爱线报网阿里京东自己的电商数据滴滴的司机数据、顺丰中通的快递数据用户基本信息(联系人,通讯录,学历…)用户行为信息(操作APP时的行为,注册,点击位置…)用户授权信息(运营商,学信网,设备IMEI….)外部接入信息(P2P信贷,其它金融机构如芝麻信用分…)策略体系:反欺诈规则、准入规则、运营商规则、风险名单、网贷规则收集来用户的信息之后,把用户信息输入到策略引擎欺诈规则准入规则(年龄,地域,通讯录,行为规则)运营商规则(通话规则)风险名单(黑名单,失信名单,法院名单)网贷(多头,白户…)机器学习模型:欺诈检测模型、准入模型、授信模型、风险定价、额度管理、流失预警、失联修复。

贷前准入我爱线报网

贷中管理

贷后催收

信用

申请评分卡

行为评分卡

催收评分卡

反欺诈

申请反欺诈

交易反欺诈

运营

用户响应模型

用户流失模型、用户分群、用户画像

失联修复

其他

套现识别、洗钱识别

2 风控建模流程¶

2.1 评分卡简介¶

风控模型其中包含了A/B/C卡。模型可以采用相同算法,一般以逾期天数来区分正负样本,也就是目标值Y的取值(0或1)贷前 申请评分卡 Application score card贷中 行为评分卡 Behavior score card贷后 催收评分卡 Collection score cardC卡因为用途不同Y的取值可能有区别公司有内催,有外催。外催回款率低,单价贵可以根据是否被内催催回来定义C卡的Y。

2.我爱线报网2 机器学习模型的完整工程流程¶

准备明确需求模型设计业务抽象成分类/回归问题定义标签(目标值)样本设计特征工程数据处理,选取合适的样本,并匹配出全部的信息作为基础特征特征构建特征评估模型模型训练模型评价模型调优上线运营模型交付模型部署模型监控

2.3 项目准备期¶

项目准备期 → 特征工程 → 模型构建 → 上线运营

明确需求目标人群:新客,优质老客,逾期老客给与产品:额度,利率市场策略:冷启动,开拓市场,改善营收使用时限:紧急使用,长期部署举例业务需要针对全新客户开放一个小额现金贷产品,抢占新市场针对高风险薄数据新客的申请评分卡模型设计业务抽象成分类/回归问题风控场景下问题通常都可以转化为二分类问题我爱线报网信用评分模型期望用于预测一个用户是否会逾期,逾期用户1营销模型期望用于预测一个用户被营销后是否会来贷款,没贷用户1失联模型期望用于预测一个用户是否会失联,失联用户1风控业务中,只有欺诈检测不是二分类问题。因为样本数量不足,可能是一个无监督学习模型模型算法规则模型逻辑回归集成学习融合模型模型输入:数据源时间跨度Y标签定义在构建信贷评分模型时,原始数据中只有每个人的当前逾期情况,没有负样本,负样本需要人为构建通常选一个截断点(阈值),当逾期超过某个阈值时,就认定该样本是一个负样本,未来不会还钱比如逾期15天为正负样本的标记阈值,Y = 1的客户均是逾期超过15天的客户逾期>15天时 Y = 1,我爱线报网那么Y=0如何定义只会将按时还款和逾期较少的那一部分人标记为0。如:将逾期<5天和没有逾期的人作为正样本逾期5~15天的数据(灰样本)会从样本中去掉,去掉“灰样本”,会使样本分布更趋于二项分布,对模型学习更加有利。“灰样本”通常放入测试集中,用于确保模型在训练结束后,对该部分样本也有区分能力。样本选取代表性:样本必须能够充分代表总体。如消费贷客群数据不能直接用到小额现金贷场景充分性:样本集的数量必须满足一定要求。评分卡建模通常要求正负样本的数量都不少于1500个。随着样本量的增加,模型的效果会显著提升时效性:在满足样本量充足的情况下,通常要求样本的观测期与实际应用时间节点越接近越好。如银行等客我爱线报网群稳定的场景,观察期可长达一年半至两年。排除性(Exclusion):虽然建模样本需要具有代表整体的能力,但某些法律规定不满足特定场景贷款需求的用户不应作为样本,如对行为评分卡用户、无还款表现或欺诈用户均不应放入当前样本集。评分卡建模通常要求正负样本的数量>=1500,但当总样本量超过50000个时,许多模型的效果不再随着样本量的增加而有显著提升,而且数据处理与模型训练过程通常较为耗时。如果样本量过大,会为训练过程增加不必要的负担,需要对样本做欠采样(Subsampling)处理。由于负样本通常较少,因此通常只针对正样本进行欠采样。常见的欠采样方法分为:随机欠采样:直接将正样本欠采样至预期比例我爱线报网。分层抽样:保证抽样后,开发样本、验证样本与时间外样本中的正负样本比例相同。等比例抽样:将正样本欠采样至正负样本比例相等,即正样本量与负样本量之比为1:1。 需要注意的是,采样后需要为正样本添加权重。如正样本采样为原来的¼,则为采样后的正样本增加权重为4,负样本权重保持为1。因为在后续计算模型检验指标及预期坏账时,需要将权重带入计算逻辑,才可以还原真实情况下的指标估计值,否则预期结果与实际部署后的结果会有明显偏差。而当负样本较少的时候,需要进行代价敏感加权或过采样(Oversampling)处理观察期和表现期观察期是指用户申请信贷产品前的时间段表现期是定义好坏标签的时间窗口,如果在该时间窗口内我爱线报网触发坏定义就是坏样本,反之就是好样本。举例: 要建立A卡模型, 观察期12个月,表现期3个月用户贷款前12个月的历史行为表现作为变量,用于后续建模如设定用户在到期3个月内未还款,即认为用户为负样本,则称表现期为3个月训练数据测试数据划分数据集在建模前需要划分为3个子集:开发样本(Develop):开发样本与验证样本使用分层抽样划分,保证两个数据集中负样本占比相同验证样本(Valuation): 开发样本与验证样本的比例为6:4时间外样本(Out of Time,OOT): 通常使用整个建模样本中时间最近的数据, 用来验证模型对未来样本的预测能力,以及模型的跨时间稳定性。举例:

申请评分卡

行为评分我爱线报网

催收评分卡

客群

新客

未逾期老客

逾期老客

观察期

申请时点前一年

当期某一日前一年

当期还款日前一年

表现期

FPD30

DPD60

DPD1->DPD30

样本设计选取客群:新客,未逾期老客,逾期老客训练集测试集1月2月3月4月5月6月7月8月总#100200300400500600700800坏#366815121424坏%3%3%2%2%3%2%2%3%客群描述:首单用户、内部数据丰富、剔除高危职业、收入范围在XXXX客群标签:好: FPD<=5 坏: FPD>15, (5,15)灰样本,不参与训练,参与测试评估

2.4 特征工程¶

数据调研明确对目标人群有哪些可用数据, 明确数据获取逻辑明确数据的质量,覆盖度我爱线报网,稳定性特征构建误区:拿到数据之后,立即做特征构建特征之前需要明确:数据源对应的具体数据表,画出ER图评估特征的样本集B卡样本集不能包含逾期数据C卡样本集不能包含按时还款的数据特征框架,确保对数据使用维度进行了全面思考确定思维框架, 与组内其它人讨论明确数据源对应的具体数据表明确数据是从哪里来的: (DE Data Engineer 数仓工程师)数据分析师拿到的数据可能是:数仓原始表 数仓重构表数仓原始表和数仓重构表可能数据量有差异,因为更新时间不同!尽量使用数仓工程师加工好的重构表,确保逻辑统一实时预测要确保生产数据库和数据仓库数据一致 (很难)画出类ER图 数据关系 一对一,一对多,多对多我爱线报网写SQL查询时要从 用户列表出发, Join其它表不能出现**SELECT** DISTINCT user_id FROM order_table明确评估特征的样本集新申请客户没有内部信贷数据未逾期老客户当期没有逾期信息逾期老客户和未逾期老客的还款数据一定差别很大如何从原始数据中构建特征:指定特征框架,确保对数据使用维度进行了全面思考每个属性都可以从R(Recency) F(Frequency) M(Monetary)三个维度思考,来构建特征GPS经纬度R最近GPS所在省市区, 申请时间GPS所在省市区FGPS出现过的省市区,出现最多的省市区MGPS出现最多的省市区的GDP,人口,坏账率, 该地区的其我爱线报网他统计信息时间R最近一天/周/月的GPS数F过去N天/周/月的GPS的平均数, 早上/中午/晚上/上班日/周末GPS数MNone地址R最近GPS距离家庭/工作地址距离F出现最多GPS距离家庭/工作地址距离MGPS序列围绕家庭/工作地址的信息熵补充是否授权GPS,最近连续无GPS的天数特征构建方法用户静态信息特征:用户的姓名,性别,年龄用户时间截面特征:截面时点电商购物GMV截面时点银行存款额截面时点逾期最大天数用户时间序列特征 用户过去一个月的GPS数据 用户过去六个月的银行流水 用户过去一年的逾期记录特征评估什么是好的特征好的特征需要满足的条件: 评估指标 覆盖度高,很多用户都能使用 稳定,我爱线报网在后续较长时间可以持续使用 PSI (Population Stability Index) 区分度好,好坏用户的特征值差别大 IV (Information Value)也可以用模型的评估指标来评估特征:单特征AUC, 单特征KS可以拿效果最好的单特征的AUC,KS来估计模型的效果特征评估报表全量样本带标签样本特征名称覆盖度缺失率零值率AUCKSIV全量样本—覆盖度:全量样本上,有多少用户有这个特征全量样本:包含不带标签的样本缺失率:带标签样本缺失率,与全量样本覆盖度作对比,看差距是不是很大,选择差距不大的特征零值率:好多特征是计数特征,比如电商消费单数,通信录记录数,GPS数据,如零值太多我爱线报网,特征不好剔除风险趋势不合逻辑的特征,用常识和业务逻辑去评估

2.5 模型构建¶

设计实验→模型训练→模型评估

设计实验训练模型时有很多可能的因素会影响模型效果我们需要通过设计实验去验证哪些因素是会提升模型效果的模型评估好的模型需要满足的条件: 稳定,在后续较长时间可以持续使用 PSI (Population Stability Index) 区分度好,好坏用户的信用分差别大 AUC, KS, GINI报表一:区分度,抓坏人能力在不同分段的表现分数段总人数坏人数坏人率KS[300, 550][500, 600][600, 700][700, 750][750, 800][800, 850][850,我爱线报网 950]报表二:跨时间稳定性分数段测试集1测试集2线上1期线上2期…[300, 550]10%10%[500, 600]20%20%[600, 700]20%20%[700, 750]25%25%[750, 800]20%20%[800, 850]4%4%[850, 950]1%1%决策点上比例50%50%总用户数30002000平均分730725PSI-0.01

2.6 上线运营¶

模型交付→模型部署→模型监控

模型交付交付流程:1 提交特征和模型报表2 离线结果质量复核 (无缺失,无重复,存储位置正确,文件名规范)3 保存模型文件,确定版本号,提交时间4 老大审批,通知业务方5 线上部署,我爱线报网案例调研, 持续监控特征报告1 特征项目需求2 特征项目任务列表3 特征项目时间表4 类ER图5 样本设计6 特征框架7 每周开发进度和结果8 每周讨论反馈和改进意见笔记9 特征项目交付说明10 特征项目总结模型报告1 模型项目需求2 模型项目任务列表3 模型项目时间表4 模型设计5 样本设计6 模型训练流程和实验设计7 每周开发进度和结果8 每周讨论反馈和改进意见笔记9 模型项目交付说明10 模型项目总结模型部署确保开发环境和生产环境一致性使用PMML文件或Flask API进行部署一定要做:对一批客户进行离线打分和线上打分,确保离线结果和线上结果一致模型监控特征监控:特征稳定性模型监控:模我爱线报网型稳定性

3 业务规则挖掘¶

3.1 规则挖掘简介¶

两种常见的风险规避手段:AI模型规则如何使用规则进行风控使用一系列判断逻辑对客户群体进行区分,不同群体逾期风险有显著差别举例:多头借贷数量是否超过一定数量如果一条规则将用户划分到高风险组,则直接拒绝,如果划分到低风险组则进入到下一规则规则 和 AI模型的优缺点规则,可以快速使用,便于业务人员理解,但判断相对简单粗暴一些,单一维度不满足条件直接拒绝AI模型,开发周期长,对比使用规则更复杂,但更灵活,用于对风控精度要求高的场景可以通过AI模型辅助建立规则引擎,决策树很适合规则挖掘的场景

3.2 规则挖掘案例¶

案例背景某互联网公司拥有多个业务板块,每个板我爱线报网块下都有专门的贷款产品外卖平台业务的骑手可以向平台申请“骑手贷”电商平台业务的商户可以申请“网商贷”网约车业务的司机可以向平台申请“司机贷”公司有多个类似的场景,共用相同的规则引擎及申请评分卡,贷款人都是该公司的兼职人员近期发现,“司机贷”的逾期率较高整个金融板块30天逾期率为1.5%“司机贷”产品的30天逾期达到了5%期望解决方案现有的风控架构趋于稳定希望快速开发快速上线,解决问题尽量不使用复杂的方法考虑使用现有数据挖掘出合适的业务规则数据字典

变量类型

基础变量名

释义

数值型

oil_amount

加油升数

discount_amount

折扣金额

sale_amount

促销金额

amount

总金额

pay_我爱线报网amount

实际支付金额

coupon_amount

优惠券金额

payment_coupon_amount

支付优惠券金额

分类型

channel_code

渠道

oil_code

油品品类(规格)

scene

场景

source_app

来源端口(1货车帮、2微信)

call_source

订单来源(1:中化扫描枪 2:pos 3:找油网 4:油掌柜5:司机自助加油 6 油站线)

class_new

用户评级

日期时间

create_dt

账户创建时间

oil_actv_dt

放款时间

标签

bad_ind

正负样本标记

加载数据import pandas as pd import numpy as np data = pd.read_excel(data/我爱线报网rule_data.xlsx) data.head()

显示结果:

uidoil_actv_dtcreate_dttotal_oil_cntpay_amount_totalclass_newbad_indoil_amountdiscount_amountsale_amountamountpay_amountcoupon_amountpayment_coupon_amountchannel_codeoil_codescenesource_appcall_source0A82177102018-08-192018-08-17275.048295495.4B03308.561760081.01796001我爱线报网.01731081.08655401.01.01.0132031A82177102018-08-192018-08-16275.048295495.4B04674.682487045.02537801.02437845.012189221.01.01.0132032A82177102018-08-192018-08-15275.048295495.4B01873.06977845.0997801.0961845.04809221.01.01.0122033A82177102018-08-192018-08-14275.048295495.4B04837.782526441.02578001.0我爱线报网2484441.012422201.01.01.0122034A82177102018-08-192018-08-13275.048295495.4B02586.381350441.01378001.01328441.06642201.01.01.012203

查看class_newdata.class_new.unique()

显示结果:

array([B, E, C, A, D, F], dtype=object)

原始数据的特征太少,考虑在原始特征基础上衍生出一些新的特征来,将特征分成三类分别处理数值类型变量:按照id分组后,采用多种方式聚合,衍生新特征分类类型变量,按照id分组后,聚合查询条目数量,衍生我爱线报网新特征其它:日期时间类型,是否违约(标签),用户评级等不做特征衍生处理org_list = [uid,create_dt,oil_actv_dt,class_new,bad_ind] agg_list = [oil_amount,discount_amount,sale_amount,amount,pay_amount,coupon_amount,payment_coupon_amount] count_list = [channel_code,oil_code,scene,source_app,call_source] 创建数据副本,保留底表,并查看缺失情况df = data[org_list].cop我爱线报网y() df[agg_list] = data[agg_list].copy() df[count_list] = data[count_list].copy() df.isna().sum()

显示结果:

uid 0 create_dt 4944 oil_actv_dt 0 class_new 0 bad_ind 0 oil_amount 4944 discount_amount 4944 sale_amount 4944 amount 4944 pay_amount 4944 coupon_amount 4944 payment_coupon_amount 4946 channel_code 0 oil_code 0sce我爱线报网ne0 source_app 0 call_source 0 dtype: int64

查看数值型变量的分布情况df.describe()

显示结果:

bad_indoil_amountdiscount_amountsale_amountamountpay_amountcoupon_amountpayment_coupon_amountchannel_codeoil_codescenesource_appcall_sourcecount50609.00000045665.0000004.566500e+044.566500e+044.566500e+044.566500e+0445665.0000004566我爱线报网3.00000050609.00000050609.00000050609.00000050609.00000050609.000000mean0.017764425.3761071.832017e+051.881283e+051.808673e+059.043344e+050.576853149.3953971.4763781.6178941.9065190.3060722.900729std0.132093400.5962442.007574e+052.048742e+051.977035e+059.885168e+050.494064605.1388231.5114703.0741660我爱线报网.3672800.8936820.726231min0.0000001.0000000.000000e+000.000000e+001.000000e+005.000000e+000.0000000.0000000.0000000.0000000.0000000.0000000.00000025%0.000000175.4400006.039100e+046.200100e+045.976100e+042.988010e+050.0000001.0000001.0000000.0000002.0000000.0000003.00000050%0.000000336.1600001.229310我爱线报网e+051.279240e+051.209610e+056.048010e+051.0000001.0000001.0000000.0000002.0000000.0000003.00000075%0.000000557.6000002.399050e+052.454010e+052.360790e+051.180391e+061.000000100.0000001.0000000.0000002.0000000.0000003.000000max1.0000007952.8200003.916081e+063.996001e+063.851081e+061.925540e+071.00000我爱线报网050000.0000006.0000009.0000002.0000003.0000004.000000

缺失值填充对creat_dt做补全,用oil_actv_dt来填补截取申请时间和放款时间不超过6个月的数据(考虑数据时效性)def time_isna(x,y): if str(x) == NaT: x = y return x df2 = df.sort_values([uid,create_dt],ascending = False) df2[create_dt] = df2.apply(lambdax: time_isna(x.create_dt,x.oil_actv_dt我爱线报网),axis =1) df2[dtn] = (df2.oil_actv_dt – df2.create_dt).apply(lambda x :x.days) df = df2[df2[dtn]<180] df.head()

显示结果:

uidcreate_dtoil_actv_dtclass_newbad_indoil_amountdiscount_amountsale_amountamountpay_amountcoupon_amountpayment_coupon_amountchannel_codeoil_codescenesource_appcall_sourced我爱线报网tn50608B964363919850357032018-10-082018-10-08B0NaNNaNNaNNaNNaNNaNNaN69234050607B964363919846933972018-10-112018-10-11E0NaNNaNNaNNaNNaNNaNNaN69234050606B964363919772174682018-10-172018-10-17B0NaNNaNNaNNaNNaNNaNNaN69234050605B964363919764808922018-09-282018-09-28B0NaNNaNNaNNaNNaNNaNNaN69234050604B9643我爱线报网63919721060432018-10-192018-10-19A0NaNNaNNaNNaNNaNNaNNaN692340

将用户按照id编号排序,并保留最近一次申请时间,确保每个用户有一条记录base = df[org_list] base[dtn] = df[dtn] base = base.sort_values([uid,create_dt],ascending = False) base = base.drop_duplicates([uid],keep = first) base.shape

显示结果:

(11099, 6)

特征衍生对连续统计型变量进行函数聚合方法包括对历史特征值计数、求历史特征值大于0的个我爱线报网数、求和、求均值、求最大/小值、求最小值、求方差、求极差等gn = pd.DataFrame() for i in agg_list: tp = df.groupby(uid).apply(lambda df:len(df[i])).reset_index() tp.columns = [uid,i + _cnt] if gn.empty: gn = tp else: gn = pd.merge(gn,tp,on = uid,how = left) #求历史特征值大于0的个数 tp = df.groupby(uid).apply(lambda df:np.where(df[i]>0,1,我爱线报网0).sum()).reset_index() tp.columns = [uid,i + _num] if gn.empty: gn = tp else: gn = pd.merge(gn,tp,on = uid,how = left) #求和 tp = df.groupby(uid).apply(lambda df:np.nansum(df[i])).reset_index() tp.columns = [uid,i + _tot] if gn.empty: gn = tp else: gn = pd.merge(gn,tp,on = uid,how = left) #求平均我爱线报网 tp = df.groupby(uid).apply(lambda df:np.nanmean(df[i])).reset_index() tp.columns = [uid,i + _avg] if gn.empty: gn = tp else: gn = pd.merge(gn,tp,on = uid,how = left) #求最大值 tp = df.groupby(uid).apply(lambda df:np.nanmax(df[i])).reset_index() tp.columns = [uid,i + _max] if gn.empty: gn = tp el我爱线报网se: gn = pd.merge(gn,tp,on = uid,how = left) #求最小值 tp = df.groupby(uid).apply(lambda df:np.nanmin(df[i])).reset_index() tp.columns = [uid,i + _min] if gn.empty: gn = tp else: gn = pd.merge(gn,tp,on = uid,how = left) #求方差 tp = df.groupby(uid).apply(lambda df:np.nanvar(df[i])).reset_index() tp.c我爱线报网olumns = [uid,i + _var] if gn.empty: gn = tp else: gn = pd.merge(gn,tp,on = uid,how = left) #求极差 tp = df.groupby(uid).apply(lambda df:np.nanmax(df[i]) -np.nanmin(df[i]) ).reset_index() tp.columns = [uid,i + _ran] if gn.empty: gn = tp else: gn = pd.merge(gn,tp,on = uid,how = left) 查看衍生结果gn.columns我爱线报网

显示结果:

Index([uid, oil_amount_cnt, oil_amount_num, oil_amount_tot, oil_amount_avg, oil_amount_max, oil_amount_min, oil_amount_var_x, oil_amount_var_y, discount_amount_cnt, discount_amount_num, discount_amount_tot, discount_amount_avg, discount_amount_max, discount_amount_min, discount_amount_var_x, discount_amount_va我爱线报网r_y, sale_amount_cnt, sale_amount_num, sale_amount_tot, sale_amount_avg, sale_amount_max, sale_amount_min, sale_amount_var_x, sale_amount_var_y, amount_cnt, amount_num, amount_tot, amount_avg, amount_max, amount_min, amount_var_x, amount_var_y, pay_amount_cnt, pay_amount_num, pay_amount_tot, pay_amount_avg, pay_amount_m我爱线报网ax, pay_amount_min, pay_amount_var_x, pay_amount_var_y, coupon_amount_cnt, coupon_amount_num, coupon_amount_tot, coupon_amount_avg, coupon_amount_max, coupon_amount_min, coupon_amount_var_x, coupon_amount_var_y, payment_coupon_amount_cnt, payment_coupon_amount_num, payment_coupon_amount_tot, payment_coupon_amount_我爱线报网avg, payment_coupon_amount_max, payment_coupon_amount_min, payment_coupon_amount_var_x, payment_coupon_amount_var_y], dtype=object)

对dstc_lst变量求distinct个数gc = pd.DataFrame() for i in count_list: tp = df.groupby(uid).apply(lambda df: len(set(df[i]))).reset_index() tp.columns = [uid,i + _dstc] ifgc.empty我爱线报网: gc = tpelse: gc = pd.merge(gc,tp,on = uid,how = left) 将变量组合在一起fn = pd.merge(base,gn,on= uid) fn = pd.merge(fn,gc,on= uid) fn.shape

显示结果:

(11099, 67)

merge过程中可能会出现缺失情况,填充缺失值fn = fn.fillna(0) fn.head(100)

显示结果:

uidcreate_dtoil_actv_dtclass_newbad_inddtnoil_amount_cntoil_amount_numoil_amount_totoil_amount_avg…我爱线报网payment_coupon_amount_maxpayment_coupon_amount_minpayment_coupon_amount_var_xpayment_coupon_amount_var_ypayment_coupon_amount_varchannel_code_dstcoil_code_dstcscene_dstcsource_app_dstccall_source_dstc0B964363919850357032018-10-082018-10-08B00100.000.00…0.00.00.00.00.0111111B964363919846933972018-1我爱线报网0-112018-10-11E00100.000.00…0.00.00.00.00.0111112B964363919772174682018-10-172018-10-17B00100.000.00…0.00.00.00.00.0111113B964363919764808922018-09-282018-09-28B00100.000.00…0.00.00.00.00.011111

100 rows × 74 columns

训练决策树模型x = fn.drop([uid,oil_actv_dt,create_dt,bad_ind,class_new],axis = 1) y 我爱线报网=fn.bad_ind.copy() from sklearn import tree dtree = tree.DecisionTreeRegressor(max_depth = 2,min_samples_leaf = 500,min_samples_split = 5000) dtree = dtree.fit(x,y) 输出决策树图像,并作出决策需要安装 Graphviz 软件,下载地址http://www.graphviz.org/download/yum install graphviz需要安装两个python库pip install graphvizpip ins我爱线报网tall pydotplusimport pydotplus from IPython.display import Image from six import StringIO import os # os.environ[“PATH”] += os.pathsep + C:/Program Files (x86)/Graphviz2.38/bin/ # with open(“dt.dot”, “w”) as f: # tree.export_graphviz(dtree, out_file=f) dot_data = StringIO() tree.export_graphviz(dtree, out_file=dot我爱线报网_data, feature_names=x.columns, class_names=[bad_ind], filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) Image(graph.create_png())

显示结果:

利用结果划分用户group_1 = fn.loc[(fn.amount_tot>48077.5)&(fn.amount_cnt>3.5)].copy() group_1[level] = past_A group_2 = f我爱线报网n.loc[(fn.amount_tot>48077.5)&(fn.amount_cnt<=3.5)].copy() group_2[level] = past_B group_3 = fn.loc[fn.amount_tot<=48077.5].copy() group_3[level] = past_C 如果拒绝past_C类客户,则可以使整体负样本占比下降至0.021如果将past_B也拒绝掉,则可以使整体负样本占比下降至0.012至于实际对past_A、past_B、past_C采取何种策略,要根据利率来做线性规划,从而实现风险定价

4 小结¶

信贷审批业务的基本流程申请→ 审批 →我爱线报网 放款→ 还款 → 再次申请 → 复贷审批 ↙↘ ↘ ↙↘

​ 规则 模型 逾期→催收 规则 模型

ABC评分卡A申请,B行为,C催收针对客群不同,可用数据不同,Y定义不同风控建模的流程项目准备 → 特征工程 → 建模 → 上线运营明确需求 数据处理 模型训练 模型交付模型设计 特征构建 模型评价 模型部署样本设计 特征评估 模型调优 模型监控评分卡模型正负样本定义方法一般习惯Y = 1 为坏用户(违约)Y=1 选取:用DPD30,DPD15…. (根据具体业务情况)做截断,删除灰色部分用户未逾期,或逾期5天以内作为好用户如何构建特征,如何评估特征特征构建画出E-R图,知道数据在哪些表中保存,表我爱线报网与表之间关系知道那些数据可以用单个特征从三个维度RFM考虑生成新特征用户时间截面特征用户时间序列特征特征评估覆盖度稳定性 PSI区分度 IV 单特征AUC/KS规则引擎如何工作使用一系列判断逻辑对客户群体进行区分,不同群体逾期风险有显著差别可以通过机器学习模型,辅助规则挖掘

推荐阅读

给力项目线报网会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

跨境电商书籍热销排行榜(跨境电商繁荣背后:低价竞争、被挤压的中间商和“绝地反击”的产业带丨2023年中出海调研)

2024-9-22 16:05:23

行业资讯

黄浦江上的游轮叫什么名字(黄浦江上惊现豪华游轮!在上海C位打卡海派剧场、临江餐厅、星光甲板……)

2024-9-22 16:26:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索