风控迁徙率报表逻辑和开发(Python)

出品人:东哥起飞
原创:👉原创大数据风控课程《100天风控专家》

一、迁徙率介绍

什么是迁徙率呢?

我们说,一个账户现在处于某一逾期状态(比如M1),一个月后,这个账户要么从良为M0状态,要么恶化为更坏的下一个逾期状态M2。迁徙率表示上一个阶段有多少比例的逾期金额会向下一个逾期阶段继续转化,它描述了逾期状态向后恶化的程度。

一般用 M(n-1)-M(n) 的形式表示,例如:

M0-M1 = 当月进入M1的贷款余额 / 上月末M0的贷款余额

M1-M2 = 当月进入M2的贷款余额 / 上月末M1的贷款余额

M(n-1)-M(n) = 当月进入M(n)的贷款余额 / 上月末M(n-1)的贷款余额

上面就是迁徙率报表的形式,横轴表示各个观察月,纵轴就是不同逾期状态的迁徙。这个报表要如何看呢?

迁徙的过程是随着时间的推移才发生的,因此我们要按照这个红色箭头的方向看迁徙率。

比如2022年4月时,M0-M1的迁徙率为1.24%,说明有1.24%的客户从3月份的M0未逾期变成了M1逾期,那么这M1逾期的客户是否会继续向后转化为M2呢?还是会变为M0呢?

那只有通过下个月5月份才能知道了,因此我们看5月份时M1-M2的迁徙率为93.46%,说明进入M1的客户基本很少有还钱的,大部分会继续逾期至M2,以此类推,只要在观察时间范围内,我们就可以一直观察到M7+,180天以上。

这样就可以看出3月放款的资产,它们逾期状态迁移的过程。其他月份也是同理的,也按着这红条线观察,可以观察到时间范围内所有月份的。这就是迁徙率的形式以及观察方式。

二、迁徙率应用

01 模型Y标签定义

迁徙率可以用来分析资产变化情况,能够形象的展示客户贷款账户在整个生命周期的变化轨迹,比如通过各月迁徙率的平均值情况来看,我们发现从M1到M2的迁徙率达到了71.37%,从M2到M3的迁徙率达到了79%,后面接近100%,说明客户从M1以后已经基本不会从良还款了,有70%的比例会继续向后逾期(如下图拐点)。

因此,我们可以将逾期M1及以上定义为坏客户,即DPD30+。这对做模型制定坏客户标准的时候是一个很好的数据支撑。

02 预测坏账损失

迁徙率也可以用来预测未来坏账损失。

假如我们定义逾期超过90天以上是坏账(即M4+),那么根据当前的资产分布情况,结合过往迁徙率数据可以分段的预估出M4+逾期率,即坏账的损失。坏账损失一般用于公司财务进行风险的计提。

我们根据各月迁徙率的平均值进行评估,可以分段的预估出现阶段各个逾期状态转化为未来M4+的金额有多少,以及逾期率。最后再进行求总即可,得到预估的总的M4+逾期金额和逾期率。

三、迁徙率报表底层计算逻辑

实现迁徙率报表所需要的底层变量与Vintage是相同的,同样基于还款计划表和借据表。

基于应还日期、实还日期、应还金额、实还金额、借款金额、期数等字段进行逾期判断以及逾期天数的计算,本质上还是根据客户还款和逾期的行为数据进行逾期状态的历史还原。但二者最终的展现形式是不同的,Vintage用于横向比较各月资产质量以及逾期走势,而迁徙率用于观察逾期状态的转移过程。

那么基于同样的底层变量,如何加工出迁徙率报表呢?

具体的操作步骤如下:

  • 根据已计算好的逾期天数定义逾期状态,如M0、M1、M2…M(n)

  • 将观察月和各逾期状态进行透视,对剩余未还金额(贷款余额)求和

  • 计算各逾期状态之间的迁徙率,如M0-M1、M1-M2… M(n-1)-M(n)

比如2022年4月的M0贷款余额为113867000,到了4月份时进入M1的贷款余额有1413968,那么对于4月份来说 M0-M1= 1413968/113867000=1.24%,同理M1-M2,以及其他月份的迁徙率也就都计算出来了。

############################M逾期期数#########################################
# data_all_1['odu_status'] = ''
data_all_1.loc[data_all_1['odu_days']<1, 'odu_status'] = 'M0'
data_all_1.loc[(1<=data_all_1['odu_days'])&(data_all_1['odu_days']<=30), 'odu_status'] = 'M1'
data_all_1.loc[(30<data_all_1['odu_days'])&(data_all_1['odu_days']<=60), 'odu_status'] = 'M2'
data_all_1.loc[(60<data_all_1['odu_days'])&(data_all_1['odu_days']<=90), 'odu_status'] = 'M3'
data_all_1.loc[(90<data_all_1['odu_days'])&(data_all_1['odu_days']<=120), 'odu_status'] = 'M4'
data_all_1.loc[(120<data_all_1['odu_days'])&(data_all_1['odu_days']<=150), 'odu_status'] = 'M5'
data_all_1.loc[(150<data_all_1['odu_days'])&(data_all_1['odu_days']<=180), 'odu_status'] = 'M6'
data_all_1.loc[(180<data_all_1['odu_days'])&(data_all_1['odu_days']<=210), 'odu_status'] = 'M7'
data_all_1.loc[(210<data_all_1['odu_days'])&(data_all_1['odu_days']<=240), 'odu_status'] = 'M8'
data_all_1.loc[(240<data_all_1['odu_days']), 'odu_status'] = 'M9+'
data_all_1['obser_month'] =  data_all_1['obser_month_end'].astype(str).map(lambda x:x[:7])# 生成迁徙率表格
migr_1 = pd.pivot_table(data_all_1, index='odu_status', columns='obser_month', values='balance', aggfunc='sum').sort_index()
migr_df = migr_1/migr_1.shift(1,axis=1).shift(1,axis=0)
migr_df = migr_df.iloc[1:,1:12]
migr_df.index = ['MO->M1','M1->M2','M2->M3','M3->M4','M4->M5','M5->M6','M6->M7','M7->M8','M8->M9+']
migr_df.iloc[:-1,:-1]

这里巧用pandas的shift函数可直接加工出迁徙率报表。

# 迁徙率
import seaborn as sns
plt.figure(figsize=(15, 8))
plt.title('Migration Rate')
sns.heatmap(data=migr_df.iloc[:-1,:-1],annot = True,fmt = '.2%',cmap='YlOrRd')
plt.show()

以上内容是《100天风控专家》报表篇Vintage理论篇节选内容,本专栏共更新100期以上,涵盖业务、产品、策略、模型、数据、系统等6大核心模块,理论+Python代码实操,课件+数据+代码均支持下载学习。规则篇课件内容如下。

Vintage账龄报表,30页PPT,40min视频👇

感兴趣可VX搜:100天风控专家
我是东哥,我们下期再见

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode只修改几行,git却显示整个文件都被修改

原因&#xff1a;不同的操作系统默认的回车换行符是不一样的&#xff0c;有些编辑器会自动修改回车换行&#xff0c;然后就整个文件都变化了。 Unix/Linux/Mac使用的是LF&#xff0c;但Windows一直使用CRLF【回车(CR, ASCII 13, r) 换行(LF, ASCII 10, n)】作为换行符。 解决&a…

Zookeeper(从入门到掌握)看完这一篇就够了

文章目录 一、初识 Zookeeper1.Zookeeper 概念2.Zookeeper 数据模型3.Zookeeper 服务端常用命令4.Zookeeper 客户端常用命令 二、ZooKeeper JavaAPI 操作1.Curator 介绍1.Curator API 常用操作&#xff08;1&#xff09;建立连接&#xff08;2&#xff09;添加节点&#xff08;…

电脑重启后word文档空白或打不开,word无法自动修复,如何拯救

最近编辑word文档&#xff0c;写了好几个星期的内容随着电脑重启的一瞬间&#xff0c;灰飞烟灭&#xff0c;让我简直痛不欲生&#xff01; 好在&#xff0c;天无绝人之路&#xff0c;以下两个方法拯救了地球 第一&#xff0c;普通的文档word自动修复不好使的时候&#xff0c;…

Git常用命令rebase(图文详解,彻底理解)

Git常用命令rebase&#xff08;图文详解&#xff0c;彻底理解&#xff09; 先看一个实际场景git rebase 过程中如何解决冲突git rebase 的优缺点 先看一个实际场景 首先构造两个分支 master 和 feature分支&#xff0c;其中 feature 分支是基于 master 分支拉的新分支&#xf…

使用 Docker 部署 instantbox 轻量级 Linux 系统

1&#xff09;instantbox 介绍 GitHub&#xff1a;https://github.com/instantbox/instantbox instantbox 是一款非常实用的项目&#xff0c;它能够让你在几秒内启动一个主流的 Linux 系统&#xff0c;随起随用&#xff0c;支持 Ubuntu&#xff0c;CentOS&#xff0c; Arch Li…

RocketMQ 06 消息存储机制

RocketMQ 06 消息存储机制 消息存储 image-20200228140910086.png 磁盘存储速度问题 省去DB层提高性能 RocketMQ 使用文件系统持久化消息。性能要比使用DB产品要高。 M.2 NVME协议磁盘存储 文件写入速度 顺序读写&#xff1a;3G左右 随机读写2G 数据零拷贝技术 很多使…

css面试题之flex实现麻将三饼布局

麻将应该很多人都熟悉吧&#xff0c;那如何通过flex布局尽可能使用少的节点来实现“三饼&#xff08;也有人管它叫桶&#xff09;”的效果呢&#xff1f;&#xff08;ps:麻将牌效果如下&#xff09; 实现步骤&#xff1a; 1.首先先通过flex修饰外层容器&#xff0c;内部的三个…

高风险IP的来源及其影响

随着互联网的发展&#xff0c;网络安全问题越来越引人关注。其中&#xff0c;高风险IP的来源成为了研究和讨论的焦点之一。高风险IP指的是那些经常涉及到网络攻击、恶意软件传播以及其他不良行为的IP地址。它们的存在不仅对个人和组织的网络安全构成威胁&#xff0c;还可能给整…

独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测

独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现INFO-BiTCN-BiGRU-Attention向量加权算法优化双向时间卷积…

hive: 自定义函数的用法

一、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

企业中台技术架构解决方案(中台建设指南Word原件2024)

通过中台建设实现企业能力复用&#xff0c;包括能力整合、业务创新、业务和数据闭环、组织模式演进等。 数字能力整合 企业的数字能力一般包括数字化营销、数字化产品、数字化供应链、数字化生产、数字化运营等。企业的数字化能力的充分利用&#xff0c;从而达到可持续发展。数…

爬虫 | 垃圾处理设施数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目通过发送网络请求&#xff08;requests&#xff09;&#xff0c;从指定的 URL 获取垃圾处理设施的相关数据&#xff0c;并将数据保存到 CSV 文件中&#xff0c;以供后续分析和利用。 目录 一、项目结构 二、详细说明 三…

面试官:请实现一个接口错误重试功能

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 背景 什么是接口错误重试&#xff1f; 明确关键点 接口重试功能的实现 A…

防御式编程

前言 编写高质量代码有什么用&#xff1f; 作为一名程序猿&#xff0c;或软件开发工程师&#xff0c;或技术工人&#xff0c;首要任务就是编写好代码(编写高质量代码)。那么编写好代码有什么用呢&#xff1f;靠编写好代码可以维持你的工作&#xff08;基础&#xff09;&#…

有点意思!腾讯 ARC Lab 最新发布的MiraData数据集,用于长视频生成,从这些方面做了clip分层描述……

最近小编网上冲浪时&#xff0c;被腾讯 PCG ARC Lab 新开源的文本-视频数据集——MiraData 吸引了目光。 这个数据集有多新&#xff1f;Readme在一天前刚更新完的那种&#xff0c;而且数据集有一大特点&#xff0c;是专门为长视频生成任务设计的大规模视频数据集&#xff0c;不…

2024年生物医学与食品安全国际会议 (ICBFS 2024)

2024年生物医学与食品安全国际会议 (ICBFS 2024) 2024 International Conference on Environmental Prevention and New Materials 【会议简介】 2024年生物医学与食品安全国际会议即将在成都召开。本次会议将汇聚全球生物医学与食品安全领域的专家学者&#xff0c;共同探讨生…

【JavaSE进阶】05-集合

集合继承结构图 集合继承结构图_Collection部分 注&#xff1a;泛化关系即继承关系&#xff0c;is a&#xff1b;关联关系&#xff0c;has a&#xff1b;实现关系&#xff0c;like a 1 接口java.util.Collection<E>: 接口Collection是集合中的超级父接口 Iterator it…

英特尔推出中国特供版Gaudi 3芯片,性能暴降92%以应对美国出口管制|TodayAI

英特尔近期发布消息&#xff0c;其将在中国市场推出专为该地区定制的“特供版”Gaudi 3 AI芯片&#xff0c;以符合美国对AI芯片的出口管制。这一版本包括HL-328型号的OAM兼容夹层卡&#xff0c;预计将于6月24日发布&#xff1b;以及HL-388型号的PCIe加速卡&#xff0c;计划在9月…

网络编程文件传输小练习

客户端 public class client {public static void main(String[] args) {try {//创建一个客户端的发送对象,指定一个端口号Socket socketnew Socket("127.0.0.1",10000);//读取本地文件的数据//将本地文件读到输入流中//bis是输入流,将本地文件读入流中,bos是输出流…

C#-哈希表

哈希表&#xff08;Hash Table&#xff09;是一种数据结构&#xff0c;用于实现键值对之间的映射关系。在哈希表中&#xff0c;通过将键&#xff08;key&#xff09;通过哈希函数转换成索引&#xff0c;然后将值&#xff08;value&#xff09;存储在对应索引的位置上&#xff0…