MinAI - Về trang chủ
Hướng dẫn
5/132 giờ
Đang tải...

Loan Portfolio Analysis

Phân tích danh mục cho vay: Vintage Analysis, DPD Buckets, và Collection Efficiency

0

🎯 Mục tiêu bài học

TB5 min
Sau bài học này, bạn sẽ:
  • Xây dựng Vintage Analysis để theo dõi chất lượng khoản vay theo thời gian
  • Phân tích DPD (Days Past Due) Aging và bucket migration
  • Tính Collection Efficiency Ratio (CER)
  • Phân tích Loan Portfolio theo product mix, region, và size
📋 Thông tin bài học
Thông tinChi tiết
⏱️ Thời lượng2 giờ
📖 Chủ đề chínhVintage Analysis, DPD Aging, Collection, Portfolio Mix
💡 Kiến thức cần cóBài 04 — Credit Risk Analysis
🎯 OutputLoan Portfolio Analysis Report
1

📖 Thuật ngữ quan trọng

TB5 min
Thuật ngữTiếng ViệtMô tả
VintageĐời khoản vayNhóm khoản vay theo tháng giải ngân
DPDDays Past DueSố ngày quá hạn thanh toán
MOBMonths on BookSố tháng kể từ ngày giải ngân
DelinquencyNợ quá hạnKhoản vay không thanh toán đúng hạn
BucketNhóm nợ quá hạnPhân loại theo mức DPD (0, 1-30, 31-60, 61-90, 90+)
Roll RateTỷ lệ xấu đi% khoản vay chuyển từ bucket thấp sang cao
CERCollection EfficiencyTỷ lệ thu hồi = Số tiền thu được / Số tiền phải thu
Write-offXóa nợXóa khoản vay khỏi sổ sách (thường DPD > 360)
RecoveryThu hồiThu lại tiền từ khoản vay đã write-off
Portfolio MixCơ cấu danh mụcTỷ trọng các loại sản phẩm trong danh mục

Checkpoint

Vintage Analysis nhóm khoản vay theo tháng giải ngân và theo dõi performance theo MOB. DPD Buckets phân loại: 0 (current), 1-30 (X), 31-60 (1), 61-90 (2), 90+ (3+ = NPL). CER = Tiền thu / Tiền phải thu — đo hiệu quả thu nợ. Roll Rate cho biết % khoản vay xấu đi mỗi tháng.

2

📊 Vintage Analysis

TB5 min

Vintage Analysis là gì?

Định nghĩa

Vintage Analysis nhóm khoản vay theo tháng giải ngân (vintage) và theo dõi default rate cộng dồn theo MOB (Months on Book). Giúp trả lời: "Khoản vay giải ngân tháng nào có chất lượng tốt nhất?"

📈 Vintage Analysis — Default Rate theo MOB

Trục Y: Default Rate (%) | Trục X: MOB (Months on Book)

MOBVintage Q1Vintage Q2Vintage Q3Nhận xét
10.5%0.3%0.2%Mới giải ngân
31.5%1.0%0.8%Bắt đầu có delinquency
63.0%2.2%1.8%Default tăng nhanh
94.5%3.5%2.8%
125.5%4.2%3.5%Seasoning period
187.0%5.5%4.5%
248.0%6.5%5.2%Bão hòa

Vintage Q1 xấu hơn Q2, Q3 → Chính sách cho vay đã siết chặt hơn từ Q2

SQL: Vintage Analysis

SQL
1-- 1. Vintage Analysis — Default Rate theo quý giải ngân
2WITH loan_vintage AS (
3 SELECT
4 application_id,
5 CONCAT(YEAR(application_date), '-Q', DATEPART(QUARTER, application_date)) AS vintage,
6 application_date,
7 default_flag,
8 loan_amount
9 FROM fact_loan_application
10 WHERE status = 'Approved'
11)
12SELECT
13 vintage,
14 COUNT(*) AS total_loans,
15 SUM(loan_amount) AS total_amount,
16 SUM(default_flag) AS defaults,
17 ROUND(AVG(default_flag) * 100, 2) AS default_rate_pct,
18 ROUND(AVG(loan_amount), 0) AS avg_loan_size
19FROM loan_vintage
20GROUP BY vintage
21ORDER BY vintage;

SQL: Vintage Curve (Default theo MOB)

SQL
1-- 2. Vintage curve — theo dõi default theo MOB
2WITH loan_mob AS (
3 SELECT
4 l.application_id,
5 CONCAT(YEAR(l.application_date), '-Q', DATEPART(QUARTER, l.application_date)) AS vintage,
6 DATEDIFF(MONTH, l.application_date, p.payment_date) AS mob,
7 CASE WHEN p.days_past_due > 90 THEN 1 ELSE 0 END AS is_delinquent
8 FROM fact_loan_application l
9 JOIN fact_loan_payment p ON l.application_id = p.application_id
10 WHERE l.status = 'Approved'
11)
12SELECT
13 vintage,
14 mob,
15 COUNT(DISTINCT application_id) AS active_loans,
16 SUM(is_delinquent) AS delinquent_count,
17 ROUND(AVG(CAST(is_delinquent AS FLOAT)) * 100, 2) AS delinquency_rate_pct
18FROM loan_mob
19WHERE mob BETWEEN 1 AND 24
20GROUP BY vintage, mob
21ORDER BY vintage, mob;
3

🗂️ DPD Aging & Bucket Analysis

TB5 min

DPD Buckets

📊 DPD Bucket System — Phân loại nợ quá hạn
BucketDPD (Ngày quá hạn)Trạng tháiMàu sắc
Bucket 0 (Current)DPD = 0✅ Đúng hạn🟩
Bucket XDPD 1–30⚠️ Quá hạn nhẹ🟨
Bucket 1DPD 31–60⚠️ Quá hạn🟧
Bucket 2DPD 61–90❗ Quá hạn nặng🟧
Bucket 3 (NPL)DPD 91–180❌ Nợ xấu nhóm 3🟥
Bucket 4 (NPL)DPD 181–360❌ Nợ xấu nhóm 4🟥
Bucket 5 (Write-off)DPD > 360🚫 Xóa nợ

SQL: DPD Distribution

SQL
1-- 3. DPD Aging Distribution
2SELECT
3 CASE
4 WHEN p.days_past_due = 0 THEN 'Bucket 0 (Current)'
5 WHEN p.days_past_due <= 30 THEN 'Bucket X (1-30 DPD)'
6 WHEN p.days_past_due <= 60 THEN 'Bucket 1 (31-60 DPD)'
7 WHEN p.days_past_due <= 90 THEN 'Bucket 2 (61-90 DPD)'
8 ELSE 'Bucket 3+ (90+ DPD = NPL)'
9 END AS dpd_bucket,
10 COUNT(*) AS payment_count,
11 ROUND(AVG(p.amount_due), 0) AS avg_amount_due,
12 ROUND(AVG(p.amount_paid), 0) AS avg_amount_paid,
13 ROUND(SUM(p.amount_due - p.amount_paid), 0) AS total_shortfall
14FROM fact_loan_payment p
15GROUP BY
16 CASE
17 WHEN p.days_past_due = 0 THEN 'Bucket 0 (Current)'
18 WHEN p.days_past_due <= 30 THEN 'Bucket X (1-30 DPD)'
19 WHEN p.days_past_due <= 60 THEN 'Bucket 1 (31-60 DPD)'
20 WHEN p.days_past_due <= 90 THEN 'Bucket 2 (61-90 DPD)'
21 ELSE 'Bucket 3+ (90+ DPD = NPL)'
22 END
23ORDER BY dpd_bucket;

SQL: Roll Rate Analysis

SQL
1-- 4. Roll Rate — % khoản vay xấu đi theo tháng
2-- (Simplified version using payment_status transitions)
3WITH monthly_status AS (
4 SELECT
5 p.application_id,
6 FORMAT(p.payment_date, 'yyyy-MM') AS payment_month,
7 MAX(p.days_past_due) AS max_dpd,
8 CASE
9 WHEN MAX(p.days_past_due) = 0 THEN 'Current'
10 WHEN MAX(p.days_past_due) <= 30 THEN 'DPD 1-30'
11 WHEN MAX(p.days_past_due) <= 60 THEN 'DPD 31-60'
12 WHEN MAX(p.days_past_due) <= 90 THEN 'DPD 61-90'
13 ELSE 'DPD 90+'
14 END AS dpd_status
15 FROM fact_loan_payment p
16 GROUP BY p.application_id, FORMAT(p.payment_date, 'yyyy-MM')
17)
18SELECT
19 dpd_status,
20 COUNT(DISTINCT application_id) AS loan_count,
21 ROUND(COUNT(DISTINCT application_id) * 100.0 /
22 SUM(COUNT(DISTINCT application_id)) OVER(), 2) AS pct_of_total
23FROM monthly_status
24GROUP BY dpd_status
25ORDER BY dpd_status;
4

💰 Collection Efficiency

TB5 min

Collection Efficiency Ratio (CER)

CER=Total Amount PaidTotal Amount Due×100%CER = \frac{\text{Total Amount Paid}}{\text{Total Amount Due}} \times 100\%
SQL
1-- 5. Collection Efficiency tổng thể và theo tháng
2SELECT
3 FORMAT(payment_date, 'yyyy-MM') AS payment_month,
4 COUNT(*) AS total_payments,
5 SUM(amount_due) AS total_due,
6 SUM(amount_paid) AS total_paid,
7 ROUND(SUM(amount_paid) * 100.0 / NULLIF(SUM(amount_due), 0), 2) AS cer_pct,
8 SUM(CASE WHEN payment_status = 'On-time' THEN 1 ELSE 0 END) AS on_time_count,
9 ROUND(AVG(CASE WHEN payment_status = 'On-time' THEN 1.0 ELSE 0 END) * 100, 1) AS on_time_pct
10FROM fact_loan_payment
11GROUP BY FORMAT(payment_date, 'yyyy-MM')
12ORDER BY payment_month;

CER theo Product Type

SQL
1-- 6. Collection Efficiency theo loại sản phẩm
2SELECT
3 pr.product_type,
4 COUNT(p.payment_id) AS total_payments,
5 ROUND(SUM(p.amount_paid) * 100.0 / NULLIF(SUM(p.amount_due), 0), 2) AS cer_pct,
6 ROUND(AVG(CASE WHEN p.payment_status = 'On-time' THEN 1.0 ELSE 0 END) * 100, 1) AS on_time_pct,
7 ROUND(AVG(p.days_past_due), 1) AS avg_dpd
8FROM fact_loan_payment p
9JOIN fact_loan_application l ON p.application_id = l.application_id
10JOIN dim_product pr ON l.product_id = pr.product_id
11GROUP BY pr.product_type
12ORDER BY cer_pct DESC;

Portfolio Mix Analysis

SQL
1-- 7. Portfolio mix — cơ cấu danh mục theo product type
2SELECT
3 pr.product_type,
4 COUNT(*) AS loan_count,
5 ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 1) AS pct_count,
6 SUM(l.loan_amount) AS total_amount,
7 ROUND(SUM(l.loan_amount) * 100.0 / SUM(SUM(l.loan_amount)) OVER(), 1) AS pct_amount,
8 ROUND(AVG(l.default_flag) * 100, 2) AS default_rate_pct
9FROM fact_loan_application l
10JOIN dim_product pr ON l.product_id = pr.product_id
11WHERE l.status = 'Approved'
12GROUP BY pr.product_type
13ORDER BY total_amount DESC;

Checkpoint

Vintage Analysis theo dõi chất lượng khoản vay theo tháng giải ngân — vintage nào default rate cao cần review chính sách. DPD Buckets phân loại nợ: Current → X → 1 → 2 → 3+(NPL). CER đo hiệu quả thu nợ (target > 95%). Portfolio Mix cho biết cơ cấu rủi ro: quá tập trung vào unsecured = rủi ro cao.

5

📋 Tổng kết

TB5 min

Kiến thức đã học

Chủ đềNội dung chính
Vintage AnalysisTheo dõi performance theo tháng giải ngân (MOB)
DPD BucketsPhân loại nợ: Current → X → 1 → 2 → 3+
Collection EfficiencyCER = Amount Collected / Amount Due
Portfolio MixCơ cấu danh mục theo sản phẩm, khu vực
Concentration RiskRủi ro tập trung quá nhiều vào 1 segment

Key Takeaways

  1. Vintage Analysis phát hiện chính sách tín dụng lỏng/chặt theo từng thời kỳ
  2. DPD Bucket 3+ = NPL — cần theo dõi chặt chẽ flow rates giữa các bucket
  3. CER > 95% là target chuẩn — CER thấp báo hiệu vấn đề thu hồi nợ
  4. Portfolio diversification giảm concentration risk

Câu hỏi tự kiểm tra

  1. Vintage Analysis giúp phát hiện vấn đề gì trong chính sách tín dụng?
  2. DPD Bucket X khác Current như thế nào?
  3. CER 85% có đáng lo ngại không? Tại sao?
  4. Tại sao cần đa dạng hóa danh mục cho vay?

Bài tiếp theo: Customer Segmentation →

🎉 Tuyệt vời! Bạn đã thành thạo Loan Portfolio Analysis!

Nhớ: Vintage + DPD + CER = bộ 3 theo dõi sức khỏe danh mục cho vay. Mọi ngân hàng đều cần monitoring portfolio liên tục!