🎯 Mục tiêu Capstone Project
Đây là dự án tổng hợp cuối khóa. Bạn sẽ thực hiện phân tích toàn diện VNCredit Bank Data, áp dụng tất cả kiến thức từ 11 bài trước. Output: 1 báo cáo phân tích + 1 bộ dashboard design hoàn chỉnh.
| Thông tin | Chi tiết |
|---|---|
| ⏱️ Thời lượng | 4 giờ |
| 📖 Scope | End-to-end Banking Analytics |
| 💡 Kiến thức | Tất cả 11 bài trước |
| 🎯 Output | Report + Dashboard Blueprint + Recommendations |
| 📊 Dataset | VNCredit Bank (6 tables, 2.6M+ records) |
📋 Business Context & Deliverables
Scenario
Bạn là Senior Data Analyst tại VNCredit Bank. Ban Tổng Giám đốc yêu cầu báo cáo phân tích tổng thể tình hình hoạt động ngân hàng để chuẩn bị cho cuộc họp HĐQT (Hội đồng Quản trị) quý tới.
Deliverables yêu cầu
| # | Deliverable | Mô tả | Từ bài |
|---|---|---|---|
| 1 | Executive Summary | 1-page tóm tắt key findings | All |
| 2 | Portfolio Health Report | NPL, DPD, Vintage, Default analysis | 03, 04, 05 |
| 3 | Customer Insights | Segmentation, RFM, CLV, Cross-sell | 06, 09 |
| 4 | Branch Scorecard | Top/Bottom performers, Regional analysis | 08 |
| 5 | Transaction Report | Channel, Anomaly, Digital adoption | 07 |
| 6 | Risk & Compliance | NHNN classification, Provisioning | 11 |
| 7 | Dashboard Blueprint | Executive Dashboard design (mockup) | 10 |
| 8 | Recommendations | Top 5 actionable recommendations | All |
📊 Part 1: Executive Summary
Bước 1: Overall Portfolio KPIs
1-- Capstone Q1: Executive KPIs Summary2SELECT 3 '=== VNCREDIT BANK EXECUTIVE SUMMARY ===' AS report_section,4 COUNT(*) AS total_applications,5 SUM(CASE WHEN status = 'Approved' THEN 1 ELSE 0 END) AS approved_loans,6 ROUND(AVG(CASE WHEN status = 'Approved' THEN 1.0 ELSE 0 END) * 100, 1) AS approval_rate,7 SUM(CASE WHEN status = 'Approved' THEN loan_amount ELSE 0 END) AS total_portfolio,8 ROUND(AVG(CASE WHEN status = 'Approved' THEN loan_amount END), 0) AS avg_loan_size,9 ROUND(AVG(CASE WHEN status = 'Approved' THEN credit_score END), 0) AS avg_credit_score,10 ROUND(AVG(CASE WHEN status = 'Approved' THEN default_flag END) * 100, 2) AS default_rate,11 COUNT(DISTINCT customer_id) AS unique_customers,12 COUNT(DISTINCT branch_id) AS active_branches13FROM fact_loan_application;Bước 2: Growth Trend (QoQ)
1-- Capstone Q2: Quarterly Growth Analysis2WITH quarterly AS (3 SELECT 4 DATEPART(YEAR, application_date) AS yr,5 DATEPART(QUARTER, application_date) AS qtr,6 COUNT(*) AS loan_count,7 SUM(loan_amount) AS loan_amount,8 ROUND(AVG(default_flag) * 100, 2) AS default_rate9 FROM fact_loan_application10 WHERE status = 'Approved'11 GROUP BY DATEPART(YEAR, application_date), DATEPART(QUARTER, application_date)12)13SELECT 14 CONCAT('Q', qtr, '/', yr) AS quarter,15 loan_count,16 loan_amount,17 default_rate,18 ROUND(19 (loan_amount - LAG(loan_amount) OVER(ORDER BY yr, qtr)) * 100.0 20 / LAG(loan_amount) OVER(ORDER BY yr, qtr), 121 ) AS growth_pct_qoq22FROM quarterly23ORDER BY yr, qtr;📊 Part 2: Portfolio Health Deep-dive
Bước 3: Credit Quality Matrix
1-- Capstone Q3: Credit Quality Matrix (Score x DTI)2SELECT 3 CASE 4 WHEN credit_score >= 750 THEN 'Excellent (750+)'5 WHEN credit_score >= 700 THEN 'Good (700-749)'6 WHEN credit_score >= 650 THEN 'Fair (650-699)'7 WHEN credit_score >= 600 THEN 'Poor (600-649)'8 ELSE 'Very Poor (<600)'9 END AS score_band,10 CASE 11 WHEN dti_ratio <= 0.3 THEN 'Low DTI (≤30%)'12 WHEN dti_ratio <= 0.5 THEN 'Medium DTI (30-50%)'13 ELSE 'High DTI (>50%)'14 END AS dti_band,15 COUNT(*) AS loan_count,16 ROUND(AVG(default_flag) * 100, 2) AS default_rate,17 ROUND(AVG(loan_amount), 0) AS avg_loan,18 SUM(loan_amount) AS total_exposure19FROM fact_loan_application20WHERE status = 'Approved'21GROUP BY 22 CASE 23 WHEN credit_score >= 750 THEN 'Excellent (750+)'24 WHEN credit_score >= 700 THEN 'Good (700-749)'25 WHEN credit_score >= 650 THEN 'Fair (650-699)'26 WHEN credit_score >= 600 THEN 'Poor (600-649)'27 ELSE 'Very Poor (<600)'28 END,29 CASE 30 WHEN dti_ratio <= 0.3 THEN 'Low DTI (≤30%)'31 WHEN dti_ratio <= 0.5 THEN 'Medium DTI (30-50%)'32 ELSE 'High DTI (>50%)'33 END34ORDER BY score_band, dti_band;Bước 4: Vintage Performance
1-- Capstone Q4: Loan Vintage Analysis2WITH vintage AS (3 SELECT 4 FORMAT(l.application_date, 'yyyy-MM') AS vintage_month,5 l.application_id,6 l.loan_amount,7 l.default_flag,8 DATEDIFF(MONTH, l.application_date, p.payment_date) AS months_on_book,9 p.days_past_due10 FROM fact_loan_application l11 JOIN fact_loan_payment p ON l.application_id = p.application_id12 WHERE l.status = 'Approved'13)14SELECT 15 vintage_month,16 months_on_book AS mob,17 COUNT(DISTINCT application_id) AS active_loans,18 ROUND(AVG(CASE WHEN days_past_due > 90 THEN 1.0 ELSE 0 END) * 100, 2) AS npl_rate19FROM vintage20WHERE months_on_book BETWEEN 1 AND 2421GROUP BY vintage_month, months_on_book22ORDER BY vintage_month, months_on_book;📊 Part 3: Customer & Branch Analysis
Bước 5: Customer 360 Summary
1-- Capstone Q5: Customer Segmentation Summary2WITH customer_profile AS (3 SELECT 4 c.customer_id,5 c.age,6 c.income_level,7 c.occupation,8 -- Loan metrics9 COUNT(DISTINCT l.application_id) AS total_loans,10 SUM(l.loan_amount) AS total_borrowed,11 AVG(l.default_flag) AS default_rate,12 -- Transaction metrics13 COUNT(DISTINCT t.transaction_id) AS total_txns,14 SUM(t.amount) AS total_txn_amount,15 -- Segment16 CASE 17 WHEN c.income_level IN ('Very High') THEN 'Priority'18 WHEN c.income_level IN ('High') THEN 'Affluent'19 ELSE 'Mass'20 END AS segment21 FROM dim_customer c22 LEFT JOIN fact_loan_application l ON c.customer_id = l.customer_id AND l.status = 'Approved'23 LEFT JOIN fact_transaction t ON c.customer_id = t.customer_id24 GROUP BY c.customer_id, c.age, c.income_level, c.occupation25)26SELECT 27 segment,28 COUNT(*) AS customers,29 ROUND(AVG(total_loans), 1) AS avg_loans,30 ROUND(AVG(total_borrowed), 0) AS avg_borrowed,31 ROUND(AVG(default_rate) * 100, 2) AS avg_default_rate,32 ROUND(AVG(total_txns), 0) AS avg_txns,33 ROUND(AVG(total_txn_amount), 0) AS avg_txn_value34FROM customer_profile35GROUP BY segment36ORDER BY avg_txn_value DESC;Bước 6: Branch Scorecard
1-- Capstone Q6: Branch Performance Scorecard2WITH branch_metrics AS (3 SELECT 4 b.branch_id,5 b.branch_name,6 b.region,7 b.city,8 b.branch_type,9 COUNT(l.application_id) AS total_loans,10 SUM(l.loan_amount) AS total_amount,11 ROUND(AVG(l.default_flag) * 100, 2) AS default_rate,12 COUNT(DISTINCT l.customer_id) AS unique_customers,13 COUNT(DISTINCT t.transaction_id) AS total_txns,14 SUM(t.amount) AS txn_volume15 FROM dim_branch b16 LEFT JOIN fact_loan_application l ON b.branch_id = l.branch_id AND l.status = 'Approved'17 LEFT JOIN fact_transaction t ON b.branch_id = t.branch_id18 GROUP BY b.branch_id, b.branch_name, b.region, b.city, b.branch_type19),20scored AS (21 SELECT *,22 NTILE(5) OVER(ORDER BY total_amount DESC) AS volume_tier,23 NTILE(5) OVER(ORDER BY default_rate ASC) AS quality_tier,24 NTILE(5) OVER(ORDER BY unique_customers DESC) AS customer_tier,25 ROUND(26 NTILE(5) OVER(ORDER BY total_amount DESC) * 0.4 +27 NTILE(5) OVER(ORDER BY default_rate ASC) * 0.35 +28 NTILE(5) OVER(ORDER BY unique_customers DESC) * 0.2529 , 2) AS composite_score30 FROM branch_metrics31)32SELECT 33 branch_name, region, city, branch_type,34 total_loans, total_amount, default_rate,35 unique_customers, composite_score,36 CASE 37 WHEN composite_score >= 4.0 THEN '⭐ Star'38 WHEN composite_score >= 3.0 THEN '✅ Good'39 WHEN composite_score >= 2.0 THEN '⚠️ Average'40 ELSE '🔴 Underperform'41 END AS performance_tier42FROM scored43ORDER BY composite_score DESC;📊 Part 4: Actionable Recommendations
Framework viết Recommendations
Mỗi recommendation phải theo cấu trúc STAR:
| Element | Mô tả | Ví dụ |
|---|---|---|
| Situation | Hiện trạng từ data | "NPL rate hiện tại 7%, cao hơn target 3%" |
| Target | Mục tiêu cần đạt | "Giảm NPL xuống 5% trong 6 tháng" |
| Action | Hành động cụ thể | "Thắt chặt Credit Score threshold từ 600 → 650" |
| Result | Kết quả dự kiến | "Giảm ~40% default ở nhóm 600-649" |
Top 5 Recommendations Template
1. 🛡️ TỐI ƯU CHÍNH SÁCH TÍN DỤNG
| STAR | Nội dung |
|---|---|
| S | NPL tập trung ở nhóm Credit Score < 650 và DTI > 50% |
| T | Giảm default rate 30% trong 6 tháng |
| A | Nâng credit score threshold, giảm limit cho high DTI |
| R | Tiết kiệm ~XX tỷ VND chi phí dự phòng |
2. 📱 ĐẨY MẠNH DIGITAL BANKING
| STAR | Nội dung |
|---|---|
| S | X% giao dịch vẫn qua counter, chi phí cao |
| T | Tăng digital adoption lên 70% |
| A | Incentive cho mobile banking, giảm fee online |
| R | Giảm CIR xuống Y%, tiết kiệm CPVH |
3. 📎 PHÁT TRIỂN CROSS-SELL
| STAR | Nội dung |
|---|---|
| S | KH Affluent chỉ sử dụng 1.5 SP/người |
| T | Tăng lên 2.5 SP/người |
| A | Bundle products, targeted campaigns |
| R | Tăng revenue/customer XX%, tăng CLV |
4. 🏢 CẢI THIỆN CHI NHÁNH YẾU KÉM
| STAR | Nội dung |
|---|---|
| S | XX chi nhánh có default rate > 10% |
| T | Không chi nhánh nào > 8% |
| A | Training, review quy trình, leadership change |
| R | Giảm NPL tổng thể, đồng đều hiệu suất |
5. ⚠️ XÂY DỰNG EARLY WARNING SYSTEM
| STAR | Nội dung |
|---|---|
| S | Phát hiện rủi ro chủ yếu sau khi phát sinh |
| T | Phát hiện sớm 30–60 ngày trước default |
| A | Monitoring DPD trends, anomaly detection |
| R | Can thiệp sớm, giảm tỷ lệ chuyển nhóm nợ xấu |
- Data-driven: Mọi recommendation phải có con số từ analysis
- Prioritize: Sắp xếp theo impact × feasibility
- Visualize: Mỗi finding đi kèm 1 chart suggestion
- Compare: Luôn so với benchmark (industry average, target)
- Timeline: Đề xuất short-term (1-3 tháng) và long-term (6-12 tháng)
Checkpoint
Capstone VNCredit Bank: 8 deliverables (Executive Summary → Portfolio Health → Customer Insights → Branch Scorecard → Transaction Report → Risk & Compliance → Dashboard Blueprint → Recommendations). Framework STAR cho recommendations: Situation + Target + Action + Result. Output = 1 report hoàn chỉnh + 1 dashboard mockup.
📋 Tổng kết
Kiến thức đã học
| Chủ đề | Nội dung chính |
|---|---|
| Capstone Structure | 8 deliverables từ Executive Summary đến Recommendations |
| STAR Framework | Situation + Target + Action + Result |
| Portfolio Health | NPL, Default Rate, Vintage, DPD analysis |
| Customer Insights | Segmentation, RFM, Cross-sell, CLV |
| Branch Scorecard | Weighted performance scoring đa tiêu chí |
| Dashboard Blueprint | 5-page design với KPI cards, drill-down |
| Recommendations | Data-driven, prioritized theo impact × feasibility |
Key Takeaways
- ✅ 8 deliverables tạo thành báo cáo phân tích ngân hàng hoàn chỉnh
- ✅ STAR framework giúp recommendations có cấu trúc và actionable
- ✅ Data-driven — mọi khuyến nghị phải có con số từ analysis
- ✅ Capstone tích hợp tất cả kiến thức từ bài 01-11
Câu hỏi tự kiểm tra
- 8 deliverables của Capstone bao gồm những gì?
- STAR framework áp dụng cho recommendations như thế nào?
- Tại sao cần prioritize recommendations theo impact × feasibility?
- Dashboard Blueprint cần những thành phần nào?
Bài tiếp theo: Banking Analytics Quiz →
🎉 Tuyệt vời! Bạn đã hoàn thành Capstone Project!
Nhớ: Capstone là portfolio piece quan trọng nhất — thể hiện khả năng phân tích end-to-end cho ngành ngân hàng. Hãy hoàn thiện và đưa vào CV!
