1) Giới Thiệu — Vì Sao Cần Quy Trình Chuẩn?
💳 Credit Scoring — Trái tim của ngành tín dụng
Mỗi khoản vay được duyệt hay từ chối tại ngân hàng đều có credit scoring model đứng sau. Một quy trình build model lỏng lẻo có thể dẫn đến hàng nghìn tỷ đồng nợ xấu — hoặc bỏ lỡ hàng triệu khách hàng tốt.
Bài viết này chuẩn hóa 9 bước phát triển mô hình Credit Scoring theo chuẩn quốc tế — được dùng tại các ngân hàng & fintech hàng đầu. Mỗi bước kèm ví dụ thực tế, kỹ thuật cụ thể, và lưu ý governance.
🎯 Bài viết này dành cho ai?
- Data Scientist / ML Engineer muốn vào ngành banking, fintech
- Risk Modeler chuẩn hóa quy trình modeling
- Sinh viên Tài chính - IT tìm hiểu Credit Scoring
- Founder fintech hiểu pipeline build credit model production
📋 Tổng quan 9 bước
| Bước | Tên | Output chính |
|---|---|---|
| 1 | Business Understanding | Mục tiêu rõ ràng (giảm default? tăng approval?) |
| 2 | Data Source & Quality Check | Dataset sạch, hợp lệ |
| 3 | Model Design | Time windows + định nghĩa Good/Bad |
| 4 | Feature Engineering | Danh sách feature ứng viên |
| 5 | Feature Transformation (WOE) | Feature chuẩn hóa, dễ giải thích |
| 6 | Feature Reduction | Tập feature tối ưu |
| 7 | Model Development | Mô hình ML được train |
| 8 | Evaluation & Interpretation | Metrics + explainability |
| 9 | Score Scaling & Calibration | Điểm 300-850 + xác suất calibrated |
2) Step 1 — Business Understanding
🎯 "Bạn đang giải bài toán gì?" — Câu hỏi đắt nhất
Đây là bước không có code nhưng quyết định 50% thành công. Model build sai mục tiêu = lãng phí 6 tháng làm việc.
🧭 Hiểu góc nhìn business
Đối tượng khách hàng là ai?
Cho vay tiêu dùng tín chấp (consumer unsecured)? Vay thế chấp (mortgage)? Thẻ tín dụng? SME loan? Mỗi nhóm có rủi ro & data hoàn toàn khác.
Mục tiêu kinh doanh chính?
- Giảm default rate — ưu tiên không cho vay người xấu
- Tăng approval rate — duyệt nhiều khách tốt hơn
- Tối ưu profit — cân bằng risk & revenue
- Cross-sell / Up-sell — chấm khách hàng hiện hữu để bán thêm
Constraints (Ràng buộc)
Timeline ra mắt? Budget? Yêu cầu explainability từ NHNN? Compliance? Một số ngân hàng buộc dùng Logistic Regression vì lý do giải trình.
Sai lầm phổ biến
Data Scientist nhảy vào code ngay khi vừa nhận data — không hỏi business muốn gì. Kết quả: model có AUC 0.85 nhưng business không dùng được vì không trả lời được câu hỏi quyết định.
3) Step 2 — Data Source & Quality Check
📥 "Garbage in, garbage out" — Quy luật vàng của Credit Scoring
Một model XGBoost với data sạch luôn thắng một Deep Learning với data rác. 60-70% thời gian một project nằm ở bước này.
📚 Các nguồn dữ liệu điển hình
🏦 Internal Banking Data
- Transaction history (chi tiêu, chuyển khoản)
- Account balance trung bình
- Repayment history (lịch sử trả nợ)
- Sản phẩm đang sử dụng
📋 Credit Bureau
- CIC (Việt Nam) — Lịch sử tín dụng liên ngân hàng
- PCB (Private Credit Bureau)
- Outstanding loan, max DPD
👤 Customer Demographics
- Tuổi, giới tính, nghề nghiệp, thu nhập
- Tình trạng hôn nhân, số người phụ thuộc
- Học vấn, nơi cư trú
📡 Alternative Data
- Mobile/Telco data
- E-commerce behavior
- Utility payment history
- Social network signals
🔍 Kiểm tra chất lượng dữ liệu
| Vấn đề | Cách phát hiện | Xử lý |
|---|---|---|
| Missing values | Tính % null mỗi cột | Imputation (mean/median/mode), drop, hoặc tạo "Missing" category |
| Outliers | Z-score, IQR, plot histogram | Capping, winsorization, log transform |
| Duplicates | Check unique customer_id | Drop, hoặc aggregate |
| Data drift | So sánh distribution train vs recent | Retrain hoặc adjust window |
| Inconsistency | Cross-validation giữa source | Master data management |
| Leakage | Feature biết được "tương lai" | Loại bỏ ngay — đây là sai lầm chết người |
4) Step 3 — Model Design (Time Windows)
⏱️ Time Windows — Khái niệm cốt lõi nhất trong Credit Scoring
Đây là khái niệm người mới hay sai nhất nhưng cực kỳ quan trọng. Hiểu sai = model hoàn toàn không dùng được.
📅 3 Time Windows
📌 Sample Point (Observation Date)
Thời điểm "chụp ảnh" khách hàng. Tất cả feature được tính tại hoặc trước mốc này.
📌 Observation Window — Cửa sổ quan sát hành vi
Thời gian trước sample point dùng để tính features. Ví dụ: 6 tháng giao dịch trước khi vay.
📌 Performance Window — Cửa sổ đánh giá kết quả
Thời gian sau sample point để gán label Good/Bad. Ví dụ: 12 tháng sau khi giải ngân — xem có default không.
📐 Sơ đồ Time Window điển hình
🏷️ Định nghĩa Good / Bad
| Định nghĩa phổ biến | Áp dụng | Lưu ý |
|---|---|---|
| Bad = Trễ > 90 ngày (DPD90+) trong 12 tháng | Consumer loan, credit card | Chuẩn Basel |
| Bad = Trễ > 30 ngày (DPD30+) | Microloan, short-term loan | Phù hợp khoản vay ngắn hạn |
| Bad = Trễ > 60 ngày | Subprime, alternative lending | Cân bằng noise vs signal |
| Indeterminate | Khách hàng "lưng chừng" | Loại khỏi sample để tránh nhiễu |
🎯 Sampling
📊 Random Sampling
Lấy ngẫu nhiên từ population. Đơn giản nhưng class imbalance (Bad thường <5%).
⚖️ Stratified Sampling
Đảm bảo tỷ lệ Good/Bad ổn định trong các fold.
🎲 Oversampling Bad (SMOTE)
Tạo synthetic Bad samples — cẩn thận với banking compliance, vì có thể tạo bias.
🔻 Undersampling Good
Giảm Good để cân bằng. Tiết kiệm compute nhưng mất thông tin.
5) Step 4 — Feature Engineering
🛠️ "Better features beat better algorithms" — Andrew Ng
Đây là nghệ thuật & khoa học. Một feature engineered tốt có thể nâng AUC từ 0.72 lên 0.82.
💎 Các nhóm feature điển hình
💰 Financial Ratios
- Debt-to-Income (DTI) = Tổng nợ / Thu nhập
- Credit Utilization = Dư nợ / Hạn mức
- Payment-to-Income = Khoản trả hàng tháng / Thu nhập
- Loan-to-Value (LTV) = Khoản vay / Giá trị tài sản (mortgage)
📊 Behavioral Aggregates
- Avg/Max/Min monthly spend
- Số tháng có giao dịch trong 6 tháng qua
- Tỷ lệ tăng/giảm chi tiêu (trend)
- Volatility của balance
⏰ Time-based Features
- Số tháng có lịch sử tín dụng
- Thời gian từ lần default gần nhất
- Tuổi tài khoản trung bình
📉 Delinquency Features
- Number of late payments (30/60/90 DPD)
- Max DPD trong 12/24 tháng
- Số lần restructure khoản vay
🔄 Trend / Velocity Features
- Tỷ lệ thay đổi DTI 3 tháng vs 12 tháng
- Số khoản vay mới mở trong 6 tháng
- Số lần inquiry credit bureau (hard pull)
Cảnh báo: Data Leakage
Đừng dùng feature mà chỉ có sau khi khách hàng default (ví dụ: "đã restructure") để dự đoán default. Đây gọi là target leakage — AUC sẽ ảo >0.95 nhưng production fail toàn tập.
6) Step 5 — Feature Transformation (WOE)
📐 WOE — Kỹ thuật "linh hồn" của Credit Scoring truyền thống
Weight of Evidence (WOE) chuyển đổi feature thành dạng có quan hệ tuyến tính với log-odds — lý tưởng cho Logistic Regression và rất dễ giải thích cho regulator.
🧮 Công thức WOE
📐 Công thức
Trong đó:
- Goodi = số Good trong bin i
- Badi = số Bad trong bin i
- WOE > 0 → bin nhiều Good hơn (rủi ro thấp)
- WOE < 0 → bin nhiều Bad hơn (rủi ro cao)
📊 Ví dụ thực tế: WOE cho DTI ratio
| DTI Bin | # Good | # Bad | % Good | % Bad | WOE |
|---|---|---|---|---|---|
| 0 - 0.2 | 3,000 | 50 | 30% | 10% | +1.10 |
| 0.2 - 0.4 | 4,000 | 150 | 40% | 30% | +0.29 |
| 0.4 - 0.6 | 2,000 | 150 | 20% | 30% | -0.41 |
| > 0.6 | 1,000 | 150 | 10% | 30% | -1.10 |
Sau WOE encoding: thay vì giá trị DTI gốc (0.35, 0.52...), feature được thay bằng WOE tương ứng (+0.29, -0.41...). Model thấy relationship tuyến tính hơn.
✅ Ưu điểm WOE
- Quan hệ tuyến tính với log-odds → tối ưu cho Logistic Regression
- Xử lý outliers & missing values tự nhiên
- Cực kỳ dễ giải thích cho regulator
- Stable theo thời gian nếu binning tốt
⚠️ Nhược điểm
- Mất một phần thông tin do binning
- Cần monotonic binning để tránh overfitting
- Không thực sự cần thiết cho XGBoost/LightGBM
🔧 Các kỹ thuật transform khác
- Log transformation — cho feature có distribution lệch (income, balance)
- Box-Cox / Yeo-Johnson — chuẩn hóa về gần normal
- Standardization (z-score) — cho neural network
- Min-max scaling — đưa về [0, 1]
- Target encoding — cho categorical với cardinality cao (cẩn thận leakage)
7) Step 6 — Feature Reduction
🎯 "Less is more" — Model quá nhiều feature dễ overfitting & khó maintain
Mục tiêu: từ 200-500 features ứng viên → giữ lại 30-80 features tốt nhất.
🛠️ 5 kỹ thuật phổ biến
📊 Information Value (IV)
Quy ước trong banking:
- IV < 0.02 → Useless
- 0.02 - 0.1 → Weak
- 0.1 - 0.3 → Medium ✓
- 0.3 - 0.5 → Strong ✓✓
- > 0.5 → Suspicious (kiểm tra leakage!)
🔗 Correlation Filtering
Loại bỏ feature có correlation > 0.7 với feature khác. Giữ feature có IV cao hơn.
📈 VIF (Variance Inflation Factor)
Phát hiện multi-collinearity. VIF > 5 → cảnh báo, > 10 → loại.
🔍 Feature Importance (Tree-based)
XGBoost/LightGBM trả về importance score → giữ top N. Lưu ý: importance có thể bias với feature high-cardinality.
📐 PCA / Dimensionality Reduction
Dùng khi có quá nhiều numeric features tương tự nhau. Ít dùng trong credit scoring vì mất explainability.
Best practice
Workflow điển hình: IV ranking → loại IV thấp → correlation filter → VIF check → final tuning bằng feature importance từ baseline model. Đừng skip step nào.
8) Step 7 — Model Development
🤖 Chọn thuật toán phù hợp — Không phải "ML mạnh nhất" thắng
Trong credit scoring, explainability quan trọng ngang accuracy. Regulator phải hiểu được tại sao khách hàng bị từ chối.
🏆 So sánh các thuật toán
| Thuật toán | AUC điển hình | Explainability | Use case |
|---|---|---|---|
| Logistic Regression + WOE | 0.70 - 0.78 | ⭐⭐⭐⭐⭐ | Banking truyền thống, regulatory model |
| Random Forest | 0.75 - 0.82 | ⭐⭐⭐ | Internal model, segmentation |
| XGBoost | 0.78 - 0.86 | ⭐⭐⭐ (kèm SHAP) | Fintech, alternative lending |
| LightGBM | 0.78 - 0.86 | ⭐⭐⭐ (kèm SHAP) | Big data, real-time scoring |
| Neural Network | 0.80 - 0.88 | ⭐⭐ | Alternative data, unstructured input |
| Stacking Ensemble | 0.82 - 0.89 | ⭐⭐ | Champion model production |
💡 Lời khuyên thực tế
Nhiều ngân hàng tier 1 vẫn dùng Logistic Regression + WOE làm model chính vì compliance. Trong khi đó fintech & alternative lender (Trusting Social, Kalapa, Datanest...) dùng XGBoost. Xem thêm: Case study Fintech VN ứng dụng AI.
9) Step 8 — Evaluation & Interpretation
📏 Test trên 3 samples — đảm bảo model không "thuộc bài"
📚 Training Sample
~70% data dùng để train. Model học pattern ở đây.
📖 Validation Sample (Hold-out)
~15% data lấy cùng thời gian, không cho model thấy lúc train. Đánh giá khả năng generalize.
📕 Out-of-Time (OOT) Sample
Data sau thời điểm train. Quan trọng nhất — kiểm tra stability theo thời gian.
🌍 Out-of-Sample (OOS)
Data từ population khác (segment khác, region khác). Test generalization.
📊 Metrics chuẩn ngành banking
| Metric | Ý nghĩa | Ngưỡng tốt |
|---|---|---|
| AUC-ROC | Khả năng phân biệt Good/Bad | > 0.70 acceptable, > 0.75 tốt |
| Gini | = 2 × AUC - 1 | > 0.40 acceptable, > 0.50 tốt |
| KS Statistic | Max khoảng cách giữa CDF của Good & Bad | > 0.25 acceptable, > 0.40 tốt |
| Precision @ K% | Trong top K% xấu nhất, bao nhiêu thực sự Bad | Tùy threshold business |
| Lift | Mức cải thiện so với random | Lift @ top 10% > 3.0 là tốt |
| PSI (Population Stability Index) | Đo drift của score distribution | < 0.1 ổn, > 0.25 cần retrain |
🔬 Interpretation
📈 SHAP Values
Tiêu chuẩn vàng cho giải thích model phức tạp. Cho biết mỗi feature contribute bao nhiêu vào prediction.
📊 Feature Importance
Top 10-15 features quan trọng nhất — phải make sense về mặt business. Nếu "tên khách hàng" top 1 → có bug.
📉 Partial Dependence Plots (PDP)
Quan hệ feature → prediction phải monotonic theo business sense (DTI tăng → risk tăng).
🧪 Reason Codes
Mỗi prediction đi kèm 3-5 lý do từ chối/duyệt — bắt buộc cho Adverse Action Notice ở nhiều quốc gia.
10) Step 9 — Score Scaling & Calibration
🎯 Từ Probability → Credit Score → Quyết định
Model output xác suất default (0.0 - 1.0) — nhưng business cần điểm dễ hiểu như FICO Score (300-850).
📐 Score Scaling Formula
🔢 Công thức chuẩn ngành
Trong đó:
- p = probability of default
- Factor = PDO / ln(2) — với PDO (Points to Double Odds) thường là 20
- Offset = Score_anchor − Factor × ln(Odds_anchor)
Ví dụ chuẩn: PDO = 20, anchor 600 = odds 50:1 → mỗi lần score tăng 20, odds tốt gấp đôi.
⚖️ Probability Calibration
Vì sao cần calibration?
Model output 0.82 không có nghĩa 82% sẽ default thật. XGBoost, Random Forest thường output xác suất bị over-confident hoặc under-confident. Calibration điều chỉnh để xác suất khớp với reality.
| Phương pháp | Khi dùng | Ưu/Nhược |
|---|---|---|
| Platt Scaling | SVM, model có ít data | Đơn giản, fit logistic lên output |
| Isotonic Regression | Tree-based, nhiều data | Flexible hơn, cần >10K samples |
| Beta Calibration | Output gần 0/1 | Tốt cho neural network |
| Temperature Scaling | Neural network | 1 parameter, hiệu quả cho softmax |
📊 Ví dụ Calibration
- Raw XGBoost output: 0.82 (model "nói" 82% default)
- Sau Isotonic Calibration: 0.74 (reality: nhóm này thực sự default ~74%)
- Sau Score Scaling: Credit Score = 580 (low-mid range)
🎚️ Score Bands & Decision Cutoff
| Score Range | Risk Tier | Decision điển hình |
|---|---|---|
| 750 - 850 | Super Prime | Auto-approve, best rate |
| 700 - 749 | Prime | Approve, competitive rate |
| 650 - 699 | Near Prime | Approve với rate cao hơn |
| 600 - 649 | Subprime | Manual review |
| < 600 | Deep Subprime | Reject hoặc collateral required |
11) Mapping Sang MLOps Banking Governance
🏛️ Build xong model mới chỉ là bắt đầu — Governance & MLOps
Trong banking, model phải qua nhiều checkpoint governance trước khi go-live và phải được monitor liên tục.
🛡️ Model Risk Management (MRM)
Framework đánh giá rủi ro mô hình theo SR 11-7 (Fed Reserve) hoặc TT13/NHNN. Phân loại Tier 1/2/3 theo impact.
✅ Independent Validation
Team riêng (không phải team build) độc lập review: data, methodology, performance, documentation. Sign-off trước go-live.
📊 Performance Monitoring
Track AUC, KS, PSI hàng tháng. Alert nếu PSI > 0.25 hoặc AUC giảm > 5%.
⚖️ Calibration Monitoring
So sánh predicted PD vs actual default rate theo từng bucket. Recalibrate khi lệch lớn.
🌊 Drift Detection
Data drift (input distribution thay đổi) & concept drift (relationship thay đổi). Dùng PSI, KS test, Kolmogorov-Smirnov.
📜 Documentation & Audit
Model Development Document (MDD), Model Validation Report, Change Log. Lưu giữ tối thiểu 5-7 năm theo quy định.
🔄 Vòng đời mô hình
♻️ Model Lifecycle
Chu kỳ retrain điển hình: 6-18 tháng tùy stability. Recalibration có thể hàng quý.
12) Kết Luận
✨ Tóm lại flow 9 bước
Business → Data → Design → Feature Engineering → Transform → Reduce → Train → Evaluate → Scale
Đây không chỉ là quy trình kỹ thuật — mà là khung tư duy chuẩn ngành được áp dụng tại 100% các ngân hàng & fintech lớn trên thế giới.
🔑 Key Takeaways
- Business Understanding quan trọng hơn coding — sai mục tiêu = vứt 6 tháng
- Time Windows (Observation + Performance) là khái niệm cốt lõi không thể bỏ qua
- WOE là kỹ thuật signature của Credit Scoring truyền thống — vẫn rất giá trị 2026
- Feature Reduction: IV ranking → correlation filter → VIF → feature importance
- Model choice: Logistic Regression cho banking, XGBoost cho fintech — phụ thuộc compliance
- Evaluation: AUC + KS + Gini + PSI trên Training + Validation + OOT + OOS
- Calibration cần thiết khi convert raw probability sang business decision
- Governance & MLOps: Build xong mới chỉ là 50% — monitor & recalibrate là phần còn lại
💬 Lời khuyên cuối
Nếu bạn muốn vào ngành risk modeling tại banking/fintech, đừng chỉ học ML thuần — hãy đầu tư vào SQL, business sense về tài chính, hiểu Basel/Nghị định 13, và quy trình validation. Đây mới là kỹ năng phân biệt một Data Scientist generic với một Risk Modeler chuyên nghiệp.
🎓 Học Credit Scoring & Risk Modeling thực chiến
MinAI có lộ trình Data Science cho Banking & Fintech với case study credit scoring, fraud detection, project thực tế. AI Tutor 24/7 + dataset banking thật.
Xem khóa học →