如何基于导入的pandas DataFrame账龄数据生成迁徙率矩阵
基于Pandas实现账龄迁徙率矩阵计算的实操步骤
前置数据准备
- 首先明确固定账龄状态的风险递进顺序:
["NYD", "DPD30", "DPD60", "DPD90", "DPD120", "DPD150", "Loss"],列顺序不能错位,否则会导致计算逻辑匹配错误 - 对导入的DataFrame做时间清洗与排序,保证相邻月份按时间顺序严格对应:
import pandas as pd # 固定账龄状态顺序(按风险从低到高排列) aging_status = ["NYD", "DPD30", "DPD60", "DPD90", "DPD120", "DPD150", "Loss"] # 数据清洗 df["Month"] = pd.to_datetime(df["Month"]) df = df.sort_values("Month", ascending=True).reset_index(drop=True)
核心计算逻辑实现
- 计算规则完全匹配业务定义:对任意相邻的基准月t、观测月t+1,t月各状态的迁徙率 = t+1月风险层级向前移动一位的余额 / t月当前层级的余额
- NYD迁徙率 = (t+1月DPD30余额)/(t月NYD余额),对应你举例的“2月DPD30余额400 / 1月NYD余额1000 = 40%”的计算逻辑
- DPD30迁徙率 = (t+1月DPD60余额)/(t月DPD30余额)
- 按此递进规则,直到最后一档DPD150的迁徙率 = (t+1月Loss余额)/(t月DPD150余额)
- 代码实现:
# 提取结构化的账龄数值矩阵:行是按时间排序的月份,列是固定顺序的账龄状态 aging_matrix = df[aging_status].values # 提取标准化月份标签 month_labels = df["Month"].dt.strftime("%Y-%m").tolist() # 初始化结果存储容器 migration_result = [] # 遍历所有可计算的基准月(最后一个月没有后续观测月,无法计算迁徙率) for base_month_idx in range(len(month_labels) - 1): # 当前基准月的各状态余额 base_bal = aging_matrix[base_month_idx] # 观测月的余额向前偏移一位(从第二列DPD30开始取值,和基准月的NYD到DPD150序列一一对应) observed_bal_shifted = aging_matrix[base_month_idx + 1][1:] # 逐档计算迁徙率,加入除零保护避免报错 current_rate_row = [] for level_idx in range(len(observed_bal_shifted)): if base_bal[level_idx] == 0: current_rate_row.append(pd.NA) else: current_rate_row.append(observed_bal_shifted[level_idx] / base_bal[level_idx]) # 拼接行数据 migration_result.append([f"{month_labels[base_month_idx]} 基准月"] + current_rate_row) # 生成最终的迁徙率矩阵表 migration_df = pd.DataFrame( migration_result, columns=["基准月份"] + [f"{status} 迁徙率" for status in aging_status[:-1]] )
结果校验与格式调整
- 数值校验:代入示例场景验证,若1月NYD余额为1000、2月DPD30余额为400,结果表中1月基准月对应的“NYD 迁徙率”值应为0.4,和业务规则完全匹配
- 格式调整:若需要以百分比格式展示结果,可对数值列做格式化处理:
migration_df.iloc[:, 1:] = migration_df.iloc[:, 1:].applymap( lambda x: f"{x:.1%}" if pd.notna(x) else "-" )
注意事项
- 不要误用pandas行维度的
shift函数:本次计算的错位是列维度(不同账龄状态的层级偏移),不是行维度的时间偏移,直接用行shift会导致逻辑完全错位 - 保留除零保护逻辑:当基准月某账龄状态余额为0时(如当月无新增贷款导致NYD余额为0),对应迁徙率无业务意义,应设为空值而非计算出无意义的无穷值
内容的提问来源于stack exchange,提问作者Mohsin Jamil
相关产品推荐
相关产品推荐

