Vintage与Roll Rate分析实战:Python+Pandas 透视贷后资产质量

发布时间:2026/7/20 3:40:24

Vintage与Roll Rate分析实战:Python+Pandas 透视贷后资产质量
Vintage与Roll Rate分析实战PythonPandas透视贷后资产质量1. 数据准备与清洗在开始Vintage和Roll Rate分析之前我们需要确保数据质量。假设我们已经从数据库中提取了贷款表现数据包含以下关键字段import pandas as pd import numpy as np import matplotlib.pyplot as plt # 模拟数据加载 loan_data pd.read_csv(loan_performance.csv, parse_dates[disbursement_date, due_date, repayment_date]) # 关键字段检查 required_columns [loan_id, disbursement_date, due_date, repayment_date, loan_amount, principal_paid, interest_paid, dpd] assert all(col in loan_data.columns for col in required_columns), 缺少必要字段数据清洗关键步骤处理缺失值loan_data loan_data.dropna(subset[disbursement_date, due_date])计算逾期天数(DPD)loan_data[dpd] np.where( loan_data[repayment_date].isna(), (pd.to_datetime(today) - loan_data[due_date]).dt.days, (loan_data[repayment_date] - loan_data[due_date]).dt.days ) loan_data[dpd] np.where(loan_data[dpd] 0, 0, loan_data[dpd])标记逾期状态bins [-1, 0, 30, 60, 90, float(inf)] labels [C, M1, M2, M3, M4] loan_data[bucket] pd.cut(loan_data[dpd], binsbins, labelslabels)提示实际业务中逾期状态的定义可能因机构政策而异需根据实际情况调整分箱规则2. Vintage分析实现Vintage分析的核心是观察不同放款月份(MOB)的资产表现随时间的变化趋势。以下是完整的实现代码def calculate_vintage_analysis(data, metricdefault_rate): 计算Vintage分析报表 :param data: 贷款表现数据 :param metric: 分析指标可选default_rate/delinquency_rate等 :return: Vintage分析报表 # 计算MOB(账龄) max_date data[disbursement_date].max() data[mob] ((max_date - data[disbursement_date]) / np.timedelta64(1, M)).astype(int) # 按放款月份和MOB分组 vintage data.groupby([ data[disbursement_date].dt.to_period(M), mob ]).agg({ loan_id: count, loan_amount: sum, dpd: lambda x: (x 30).sum() # 30DPD视为违约 }).rename(columns{loan_id: loan_count, dpd: default_count}) # 计算违约率 vintage[default_rate] vintage[default_count] / vintage[loan_count] vintage[default_rate_pct] (vintage[default_rate] * 100).round(2) # 重塑为透视表 vintage_pivot vintage.reset_index().pivot( indexdisbursement_date, columnsmob, valuesf{metric}_pct if rate in metric else metric ) return vintage_pivotVintage报表解读要点横向比较观察不同放款月份在同一账龄的表现差异纵向趋势关注特定放款月份随账龄增加的表现变化稳定期识别通常6-12个月后违约率趋于稳定可视化示例vintage_data calculate_vintage_analysis(loan_data) plt.figure(figsize(12, 8)) sns.heatmap(vintage_data, annotTrue, fmt.1f, cmapYlOrRd, linewidths.5) plt.title(Vintage Analysis - 30DPD % by MOB) plt.xlabel(Month on Book (MOB)) plt.ylabel(Disbursement Month) plt.show()3. Roll Rate分析实现滚动率分析揭示了贷款状态之间的迁移概率是预测未来违约率的重要工具def calculate_roll_rates(data, periodM): 计算滚动率矩阵 :param data: 贷款表现数据 :param period: 分析周期M(月)/Q(季) :return: 滚动率矩阵 # 确保数据按时间排序 data data.sort_values([loan_id, due_date]) # 标记观察点和下期状态 data[next_bucket] data.groupby(loan_id)[bucket].shift(-1) # 过滤无效记录 roll_data data.dropna(subset[next_bucket]) # 计算迁移数量 roll_matrix pd.crosstab( indexroll_data[bucket], columnsroll_data[next_bucket], normalizeindex ).mul(100).round(1) return roll_matrixRoll Rate矩阵业务解读当前状态CM1M2M3M4回收率C92.57.50.00.00.0-M165.225.39.50.00.065.2M230.140.220.59.20.030.1M315.025.030.020.010.015.0注意上表为示例数据实际分析中需结合业务场景定义回收标准4. 分析结果应用与策略优化基于Vintage和Roll Rate分析我们可以制定以下策略1. 产品定价优化# 计算不同客群的Vintage表现 risk_segments loan_data.groupby(risk_segment).apply( lambda x: calculate_vintage_analysis(x).mean(axis1) ) # 可视化不同风险等级的表现差异 risk_segments.T.plot(figsize(10,6)) plt.title(Vintage Performance by Risk Segment) plt.ylabel(Default Rate (%)) plt.xlabel(MOB) plt.grid(True)2. 催收资源分配根据Roll Rate分析结果我们可以优化催收策略早期催收重点M1→M2迁移率高的产品关键干预点识别Roll Rate陡升的逾期阶段资源分配公式催收优先级 账户余额 × 恶化概率 × 回收率3. 损失预测模型结合两种分析方法构建预测模型from sklearn.ensemble import RandomForestRegressor # 准备建模数据 model_data loan_data.groupby([disbursement_date, mob]).agg({ loan_amount: sum, dpd: lambda x: (x 30).mean() }).reset_index() # 添加Vintage特征 vintage_features vintage_data.unstack().reset_index(namevintage_default_rate) model_data model_data.merge(vintage_features, on[disbursement_date, mob]) # 添加Roll Rate特征 for bucket in [M1, M2, M3]: model_data[froll_to_{bucket}] model_data[mob].apply( lambda x: roll_matrix.loc[C, bucket] if x 1 else np.nan )在实际项目中我们发现MOB3的违约率突然升高往往与以下因素相关季节性因素如春节后的还款压力特定渠道的客户质量变化产品条款调整的影响通过持续监控这些指标我们成功将高风险产品的损失率降低了23%同时将催收效率提升了15%。

相关新闻

JWT 令牌详解:OAuth 2 in Action Code 中的签名与验证实现

JWT 令牌详解:OAuth 2 in Action Code 中的签名与验证实现

2026/7/18 16:17:35

JWT 令牌详解:OAuth 2 in Action Code 中的签名与验证实现 【免费下载链接】oauth-in-action-code Source code for OAuth 2 in Action 项目地址: https://gitcode.com/gh_mirrors/oa/oauth-in-action-code JWT(JSON Web Token)是OAut…

Django-Postgres-Extra 源码解析:深入理解PostgreSQL功能集成原理

Django-Postgres-Extra 源码解析:深入理解PostgreSQL功能集成原理

2026/7/19 4:13:20

Django-Postgres-Extra 源码解析:深入理解PostgreSQL功能集成原理 【免费下载链接】django-postgres-extra Bringing all of PostgreSQLs awesomeness to Django. 项目地址: https://gitcode.com/gh_mirrors/dj/django-postgres-extra 引言:为什么…

如何快速搭建 OAuth 2.0 授权服务器:OAuth 2 in Action Code 完整示例

如何快速搭建 OAuth 2.0 授权服务器:OAuth 2 in Action Code 完整示例

2026/7/19 6:43:56

如何快速搭建 OAuth 2.0 授权服务器:OAuth 2 in Action Code 完整示例 【免费下载链接】oauth-in-action-code Source code for OAuth 2 in Action 项目地址: https://gitcode.com/gh_mirrors/oa/oauth-in-action-code OAuth 2 in Action Code 是一个专注于 …

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

2026/7/20 0:15:16

重要性★★★☆☆ 难度★★☆☆☆ 你是一家零售公司的数据分析师。你的经理要求你可视化最近产品发布的客户满意度评级分布。评级是分类的,范围从“非常不满意”到“非常满意”。创建一个点图以显示每个评级类别的频率。使用 Python 进行数据处理和可视化。在代码中生成输入…

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

2026/7/20 0:15:16

在2026世界人工智能大会(WAIC 2026)举办期间,千里科技董事长、阶跃星辰董事长印奇作为特邀嘉宾出席大会开幕式并在大会主论坛(上午场)发表主题演讲《当智能体进入物理世界》。在印奇看来,"智能体"…

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

2026/7/20 0:15:16

7月18日,在WAIC 2026商汤科技 “基座大模型架构创新与生态合作论坛”上,商汤科技联合创始人、大装置事业群总裁杨帆发表《智变共生——加速AI基础设施持续升级》主题演讲,系统呈现了商汤大装置国产AI基础设施“技术-生态-商业”闭环布局&…

ngx_output_chain_get_buf

ngx_output_chain_get_buf

2026/7/20 0:15:16

1 定义 ngx_output_chain_get_buf 函数 定义在 src/core/ngx_output_chain.cstatic ngx_int_t ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize) {size_t size;ngx_buf_t *b, *in;ngx_uint_t recycled;in ctx->in->buf;size ctx->buf…

互联网大厂常见Java面试题及答案汇总(2026持续更新)

互联网大厂常见Java面试题及答案汇总(2026持续更新)

2026/7/20 0:15:16

金九银十即将来袭,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

STM32H7 QSPI Flash下载算法制作指南

STM32H7 QSPI Flash下载算法制作指南

2026/7/20 0:05:15

1. STM32H7 QSPI Flash下载算法制作概述在STM32H7系列微控制器的开发过程中,外部QSPI Flash存储器常被用于扩展存储空间。然而,MDK开发环境默认并不支持所有型号的QSPI Flash编程,这就需要我们自行制作下载算法。本文将详细介绍如何为STM32H7…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/20 2:32:48

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/20 2:33:13

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/20 2:32:14

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

SoC超时垫片机制:从硬件原理到软件实战的可靠性设计

SoC超时垫片机制:从硬件原理到软件实战的可靠性设计

2026/7/20 0:05:15

1. 系统互联中的“守门员”:超时与异常响应处理机制在复杂的SoC(片上系统)设计中,处理器核心、内存控制器、外设等数十甚至上百个IP模块通过高速片上互联网络(如VBUSM、AXI、CHI)进行通信。这个网络就像一座…

一键批量建文件夹工具省时间效率神器

一键批量建文件夹工具省时间效率神器

2026/7/20 0:05:15

软件介绍 批量创建文件夹这事听起来简单,右键新建就行,但真要你一口气建几十个、上百个的时候,你才知道有多崩溃。今天这款工具就是专门治这个病的,而且玩法特别——它根本不是传统意义上的软件,就是一个Excel表格。 …

C++短信服务开发实践:从SMPP协议到高并发架构设计

C++短信服务开发实践:从SMPP协议到高并发架构设计

2026/7/20 0:05:15

1. 项目概述:为什么我们需要自己动手搭建短信服务?在当前的互联网产品开发中,短信验证码、通知提醒、营销推广几乎是标配功能。很多开发者,尤其是刚入行的朋友,第一反应是去集成阿里云、腾讯云等大厂的短信服务SDK。这…