RollRate:在当前催收水平下,不同逾期天数转换为坏账的概率。
Vintage:通过账龄分析评估放款的质量。其中,逾期率的计算有两种方式。
第一种:应收口径下,风险偏好偏保守。分子:已逾期的借款其所有已到期但未还本金和未到期本金,全部计入逾期未还本金中; 分母:贷款本金。具体公式
如下:
𝑜𝑑𝑢𝑒_𝑟𝑎𝑡𝑒=(𝑐𝑢𝑟𝑟𝑒𝑛𝑡_𝑜𝑑𝑢𝑒_𝑎𝑚𝑡+𝑛𝑜_𝑑𝑢𝑒_𝑎𝑚𝑡)𝑙𝑜𝑎𝑛_𝑎𝑚𝑡第二种:各借款已经到期的借款。分子:已逾期的借款其所有已到期但未还本金。分母:已到期各期本金总和。具体公式如下:
𝑜𝑑𝑢𝑒_𝑟𝑎𝑡𝑒=𝑐𝑢𝑟𝑟𝑒𝑛𝑡_𝑜𝑑𝑢𝑒_𝑎𝑚𝑡𝑑𝑢𝑒_𝑙𝑜𝑎𝑛_𝑎𝑚𝑡其中:MOB指放款后对应的第N个月月底。
对于Vintage的表现,建议关注以下几个方面:
放款后表现:观察每月审批通过后的客户第N个月的逾期比率,对比每月波动。通常波动与审批策略调整有关,
此波动在数据准备阶段的样本抽样过程需要关注。 逾期分布:
逾期分布集中在通过后的前三个月说明审批的策略有待改进,超过三个月之后才慢慢增加,说明贷中的管理 有待提高。
成熟期:确定逾期率在经历第N期趋于稳定。
标签界定多考虑,看完流转看账龄
mport pandas as pd
import numpy as np
from pandas import DataFrame, Series
import warnings
warnings.filterwarnings(action='ignore')
with open(r'F:\知识与学习\Python\Finance\Vintage\loan_detail.xlsx', 'rb') as f:
loan = pd.read_excel(f)
loan.shape
(253059, 10)
loan.sample(5)

loan.columns = loan.columns.str.lower()
for col in ['bill_reg_dt', 'perd_str_dt', 'perd_due_dt']:
loan[col] = loan[col].map(lambda x: datetime.strptime(str(x), '%Y%m%d'))
# 将结清日期转换为日期格式。将缺失值填充为2099-01-01。
loan['perd_off_dt'] = loan['perd_off_dt'].map(
lambda x: datetime.strptime(str(int(x)), '%Y%m%d') if x > 0
else datetime.strptime('20990101', '%Y%m%d'))
loan['MOB'] = loan['perd_num'].map(lambda x: 'MOB' + str(x))
loan.loc[loan['bill_no'] == 'BILL2019040217271500079112', :]

按照第一种方法(应收口径)计算Vintage
# 计算分子中的逾期应还本金。逾期应还本金包括:逾期应还而未还本金和未到期用户本金。
# 提取所有订单明细。
bill_nos = pd.unique(loan['bill_no'])
date = datetime(year=datetime.today().year, month=datetime.today().month, day=1) - timedelta(days=1)
date = datetime(year=date.year, month=date.month, day=25)
# 对于在当前日期尚未到期的用户同一清除。
loan = loan.loc[(date - loan['perd_due_dt']).map(lambda x: x.days) > 0, :]
loan.head()

dct = dict()
for bill_no in bill_nos:
part = loan.loc[loan['bill_no'] == bill_no, :]
part = part.sort_values(['perd_num'])
# 计算截至每一期期末应还本金的累计金额。
part['cum_sum_amt'] = part['perd_prcp_amt'].cumsum()
# 分期计算各期的还款情况。
perds = pd.unique(part['perd_num'])
for perd in perds:
part_perd = part.loc[part['perd_num'] <= perd, :]
# 计算每一期期末的日期,用于比较是否已经还款和历史最大逾期天数。
due_date = max(part_perd['perd_due_dt'])
due_amt = max(part_perd['cum_sum_amt'])
# 计算与MOB期末的时间间隔。
part_perd['delta_days'] = (due_date - part_perd['perd_due_dt']).map(lambda x: x.days)
# 只要在MOB期末最后一天及以前显示还款(即还清时间小于MOB期末时间),则对应的期数不再纳入最大逾期天数的计算。
part_perd['is_payoff'] = (due_date - part_perd['perd_off_dt']).map(lambda x: x.days)
# 计算累计还款金额。
payoff_amt_df = part_perd.loc[part_perd[

文章介绍了如何利用Python进行金融数据分析,特别是针对逾期贷款的风险评估。通过RollRate计算不同逾期天数转化为坏账的概率,以及运用Vintage分析放款质量,关注放款后的逾期比率、逾期分布和成熟期。文章提供了详细的代码示例,展示了如何处理和计算逾期率,并绘制Vintage图表以展示客户表现趋势。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



