1. 为什么Vintage分析是信贷风控的体检报告想象你是一位医生面前躺着一位需要全面体检的病人。Vintage分析就像是给信贷资产做全面体检的仪器它能清晰展示每一笔贷款从发放到结清的生命体征。我在某消费金融公司第一次接触Vintage报表时发现它能直观回答三个关键问题不同时期放款的资产质量差异有多大风险暴露需要多长时间最终的损失率是多少核心数据表就像体检的基础指标。借据表记录贷款出生证明放款日期、金额、期限还款计划表则是每日饮食记录每期应还/实还情况。这两个表的关联就像把病人的基因数据和日常行为数据结合分析。我常用的基础表结构会包含这些字段-- 精简版借据表 CREATE TABLE loan_base ( loan_id VARCHAR(20) PRIMARY KEY, loan_date DATE, term INT, amount DECIMAL(12,2), product_type VARCHAR(10) ); -- 还款计划表 CREATE TABLE repayment_plan ( plan_id VARCHAR(25) PRIMARY KEY, loan_id VARCHAR(20), term_no INT, due_date DATE, repay_date DATE, due_amount DECIMAL(12,2), paid_amount DECIMAL(12,2) );实际工作中最容易踩的坑是还款计划表的更新逻辑。某次我们发现Vintage曲线异常波动排查后发现是部分提前还款的记录没有及时更新repay_date字段。建议每天用以下逻辑校验数据完整性# 还款计划表数据校验示例 def check_repayment_data(loan_df, plan_df): # 检查借据与还款计划对应关系 missing_loans set(loan_df[loan_id]) - set(plan_df[loan_id]) # 检查还款日期早于应还日期的异常记录 abnormal_records plan_df[plan_df[repay_date] plan_df[due_date]] return { missing_loans_count: len(missing_loans), abnormal_records: abnormal_records }2. 账龄计算给贷款贴上保质期标签MOBMonths on Book的计算看似简单但暗藏玄机。就像食品保质期可以按生产日期或开封日期计算MOB也有两种主流计算方式自然月算法放款日到观察日的整月数MOB DATEDIF(放款日, 观察日, M)账单月算法根据还款周期计算更适合信用卡# Python账单月MOB计算示例 def calculate_mob(loan_date, obs_date, billing_cycle15): if loan_date.day billing_cycle: first_due loan_date.replace(daybilling_cycle) else: first_due (loan_date relativedelta(months1)).replace(daybilling_cycle) mob (obs_date.year - first_due.year) * 12 (obs_date.month - first_due.month) return max(0, mob)我在汽车金融项目中发现自然月算法会导致不同放款日期的贷款在相同MOB时点处于不同还款阶段。比如1月1日和1月31日放款的贷款在3月1日观察时MOB都是2但前者可能已还第2期后者可能刚还第1期。这时采用账单月算法能更准确反映风险状态。3. 逾期计算的双重视角Ever vs Current逾期计算就像拍照时的单反和手机模式——Ever口径是记录历史最严重状态的专业模式Current口径是反映当前状态的自动模式。两者的区别用SQL表示最直观-- Ever口径逾期标记历史上是否曾逾期30天 SELECT loan_id, MAX(CASE WHEN overdue_days 30 THEN 1 ELSE 0 END) AS ever_30dpd FROM repayment_status GROUP BY loan_id; -- Current口径逾期标记当前是否逾期30天 SELECT loan_id, CASE WHEN current_overdue_days 30 THEN 1 ELSE 0 END AS curr_30dpd FROM latest_repayment_status;某次贷后管理会议上两个部门就逾期率上升争论不休资产管理部门用Current口径显示风险可控而财务部门用Ever口径预警风险积累。后来我们采用双维度监控矩阵才达成共识观察维度应用场景预警阈值Ever 30 DPD最终损失预估5%Current 30 DPD催收资源调配3%4. 剩余本金计算的三种武器剩余本金计算就像估算水果店的库存——既要考虑正常损耗也要处理腐烂变质的部分。经过多个项目验证这三种计算方法最实用方法1现金流折现法适合等额本息def remaining_principal(loan_amount, term, annual_rate, paid_terms): monthly_rate annual_rate / 12 factor (1 monthly_rate) ** term monthly_payment loan_amount * monthly_rate * factor / (factor - 1) remaining monthly_payment * (factor - (1 monthly_rate)**paid_terms) / (monthly_rate * factor) return round(remaining, 2)方法2逐期核销法适合提前还款频繁场景-- 通过还款计划表累计已还本金 SELECT loan_id, original_principal - SUM(paid_principal) AS remaining_principal FROM repayment_details WHERE repay_date 2023-12-31 GROUP BY loan_id, original_principal;方法3迁移率推算法适合数据不全时估算剩余本金 原始本金 × (1 - 提前还款率)^MOB × (1 - 违约损失率)在小微企业贷款项目中我们发现方法2的准确性比方法1高3-5%因为小微企业经常有部分提前还款。但方法2需要完整的还款流水记录数据成本较高。5. Vintage透视表的进阶可视化技巧基础Vintage表就像黑白X光片而好的可视化能让病灶一目了然。这几个技巧让我的报告获得过多次管理层表扬技巧1热力图矩阵import seaborn as sns vintage_pivot df.pivot_table(indexloan_month, columnsmob, valuesm1_plus_rate) sns.heatmap(vintage_pivot, annotTrue, fmt.1%)技巧2同队列追踪线// ECharts示例配置 series: [{ type: line, data: [2.1, 4.3, 5.6, 6.0, 6.2], // 2023年1月放款队列 name: 2023-01 Cohort },{ type: line, data: [1.8, 3.9, 5.1, 5.3], // 2023年2月放款队列 name: 2023-02 Cohort }]技巧3基准线对比在图表中添加行业平均水平线或公司历史最优/最差水平线立即看出相对表现。某次我发现某产品线M6逾期率比行业低2个百分点深入分析后把该产品风控策略复制到其他线。6. 从Vintage分析到风控决策的闭环Vintage分析的价值不在于报表本身而在于如何驱动风控策略迭代。我们团队形成的PDCA循环值得参考Plan发现2023年Q2放款的M3逾期率异常升高2%Do回溯当时审批策略变化发现取消了某个反欺诈规则CheckAB测试显示该规则影响度确实达1.8-2.3%Act优化规则后重新上线监控后续vintage表现更高级的应用是预测性风控。通过建立Vintage曲线预测模型我们能在MOB3时预测最终损失率准确度达到±0.5%以内。模型核心逻辑是预测损失率 a × M1逾期率 b × M3滚动率 c ×提前还款率 ε记得第一次用Vintage分析叫停某个渠道合作时避免了预计300万的损失。好的风控分析师要像老练的船长既能看清眼前的浪花实时指标也能预判远方的暗流Vintage趋势。