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

发布时间:2026/7/9 22:25:30

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/9 20:13:50

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/9 3:46:04

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/7 18:16:15

如何快速搭建 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 是一个专注于 …

OpenCV 4.8 亚像素边缘检测实战:高斯与线性插值对比,精度提升至1/25像素

OpenCV 4.8 亚像素边缘检测实战:高斯与线性插值对比,精度提升至1/25像素

2026/7/9 22:20:38

OpenCV 4.8 亚像素边缘检测实战:高斯与线性插值对比,精度提升至1/25像素在工业检测、医学影像和自动驾驶等领域,边缘检测的精度往往直接决定整个系统的性能上限。传统像素级边缘检测受限于传感器物理分辨率,当需要测量微米级位移或…

TT马达 3V-6V 直流减速电机选型指南:1:48/1:120/1:220 三档减速比实测对比

TT马达 3V-6V 直流减速电机选型指南:1:48/1:120/1:220 三档减速比实测对比

2026/7/9 22:20:38

TT马达3V-6V直流减速电机深度选型指南:1:48/1:120/1:220减速比性能实测与应用场景解析在智能小车、教育机器人等创客项目中,电机选型往往是决定项目成败的关键因素之一。作为市面上最常见的直流减速电机类型,TT马达以其亲民的价格、稳定的性能…

Godot4 2D灯光系统实战:从PointLight2D到性能优化的完整工作流

Godot4 2D灯光系统实战:从PointLight2D到性能优化的完整工作流

2026/7/9 22:20:38

1. 项目概述:为什么你需要深入理解Godot4的2D灯光系统? 如果你正在用Godot4开发2D游戏,并且希望你的场景不仅仅是平铺的精灵,而是拥有氛围、深度和沉浸感,那么灯光系统就是你绕不开的核心工具。很多开发者初次接触Godo…

Unity热更新实战:HybridCLR核心原理、环境配置与真机调试全解析

Unity热更新实战:HybridCLR核心原理、环境配置与真机调试全解析

2026/7/9 22:20:38

1. 项目概述:为什么HybridCLR是Unity热更新的“硬核”选择?在Unity项目,尤其是手游的漫长生命周期里,最让开发者头疼的莫过于“热更新”。想象一下,你的游戏上线后发现了一个致命Bug,或者想紧急上线一个节日…

MCP3551高精度ADC与PIC32MZ的嵌入式系统设计

MCP3551高精度ADC与PIC32MZ的嵌入式系统设计

2026/7/9 22:20:38

1. 项目背景与硬件选型解析在工业测量和精密仪器领域,22位高精度ADC的应用正变得越来越广泛。MCP3551作为Microchip推出的一款ΔΣ型模数转换器,其单周期转换特性和内置自动校准功能,使其成为低频信号测量的理想选择。与PIC32MZ2048EFM100这款…

Python 代码保护方案对比:PyArmor 8.4.4 加密 vs Cython 编译 vs Nuitka 打包

Python 代码保护方案对比:PyArmor 8.4.4 加密 vs Cython 编译 vs Nuitka 打包

2026/7/9 22:10:38

Python商业级代码保护方案全景评测:PyArmor vs Cython vs Nuitka当Python代码需要作为商业产品分发时,如何有效保护知识产权成为开发者必须面对的挑战。不同于传统编译型语言,Python的字节码相对容易被反编译,这使得代码保护方案的…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/8 14:04:34

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

平价正宗重庆火锅实测|理性避坑选型指南

平价正宗重庆火锅实测|理性避坑选型指南

2026/7/9 0:09:12

一、引言:重庆火锅消费现存痛点当下大众平价川渝火锅赛道竞争白热化,普通消费者就餐普遍面临三大选型难题:一是口味同质化严重,大量门店采用预制锅底、半成品食材,打着重庆老火锅旗号弱化牛油本味,麻辣口感…

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

2026/7/9 0:09:12

AcFunDown:打破A站视频离线观看壁垒的终极解决方案 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown 想象一下这样的场景…

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

2026/7/9 0:09:12

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…