Tín dụng 3 — Chấm điểm tín dụng & scorecard
Chấm điểm tín dụng & Scorecard
Ở bài Thẩm định tín dụng ta đã thấy con người dùng khung 5C để phán đoán một hồ sơ. Nhưng khi ngân hàng phải xử lý hàng nghìn hồ sơ mỗi ngày — đặc biệt là tín dụng bán lẻ (thẻ, vay tiêu dùng, vay tín chấp) — thì phán đoán thủ công vừa chậm, vừa thiếu nhất quán, vừa dễ cảm tính. Đây là lúc chấm điểm tín dụng (credit scoring) bước vào: biến hồ sơ người vay thành một con số phản ánh mức độ rủi ro, để quyết định có thể tự động hoá, khách quan và định lượng được.
Bài này đi sâu vào công cụ trung tâm của credit scoring là scorecard (bảng điểm): nó là gì, xây bằng kỹ thuật nào (WOE/IV, logistic regression, scaling điểm), làm sao ra được PD (Probability of Default — xác suất vỡ nợ), chọn ngưỡng duyệt (cutoff) ra sao, xử lý hồ sơ bị từ chối (reject inference) thế nào, và cuối cùng là giám sát mô hình qua thời gian (KS, Gini, PSI). Xuyên suốt bài, ta liên tục nối với tư duy Machine Learning vì bản chất scorecard chính là một mô hình học máy được "đóng gói" cho ngành ngân hàng — xem thêm Quy trình ML.
Lưu ý: các con số trong bài (điểm mẫu, PD, cutoff) đều là minh hoạ tư duy. Ngưỡng thực tế phụ thuộc khẩu vị rủi ro từng ngân hàng, danh mục sản phẩm và quy định NHNN hiện hành.
1. Vì sao phải chấm điểm?
Trước khi có scorecard, quyết định cho vay dựa vào kinh nghiệm của cán bộ tín dụng. Cách này có bốn điểm yếu mà scoring giải quyết:
- Khách quan & nhất quán: hai hồ sơ giống nhau phải nhận cùng một điểm, bất kể ai xử lý hay xử lý lúc nào. Con người thì thay đổi theo tâm trạng, kinh nghiệm, thiên kiến.
- Tự động hoá & tốc độ: một scorecard chạy trong mili-giây, cho phép duyệt tức thời (instant approval) cho thẻ tín dụng, ví trả sau, khoản vay nhỏ.
- Định lượng rủi ro: thay vì "hồ sơ này khá ổn", scoring cho ra PD = 3,2% — một con số có thể đưa thẳng vào tính giá, tính dự phòng (IFRS 9/ECL), tính vốn.
- Quản trị danh mục: khi mọi khách hàng đều có điểm, ngân hàng nhìn được phân bố rủi ro toàn danh mục, mô phỏng được tác động của việc nới/siết cutoff.
Điểm mấu chốt: scorecard không dự báo một cá nhân sẽ vỡ nợ hay không (điều đó bất khả thi), mà ước lượng xác suất vỡ nợ trong một cửa sổ thời gian. Trên một nhóm 1.000 khách có PD ~3%, ta kỳ vọng khoảng 30 người sẽ "bad".
2. Các loại scorecard
Scorecard không chỉ có một loại. Chúng khác nhau ở thời điểm sử dụng và dữ liệu đầu vào:
- Application scorecard (A-card): dùng lúc xét duyệt hồ sơ mới. Đầu vào là dữ liệu tại thời điểm nộp: thu nhập, tuổi, nghề nghiệp, DTI, lịch sử tại CIC/bureau, sản phẩm đề nghị. Trả lời: "Có nên cấp tín dụng cho người này không, hạn mức bao nhiêu?"
- Behavior scorecard (B-card): dùng cho khách hàng hiện hữu. Đầu vào là hành vi đã quan sát được: lịch sử trả nợ, mức sử dụng hạn mức (utilization), số lần chậm trả, biến động số dư, giao dịch. Trả lời: "Khách này đang tốt lên hay xấu đi? Có nên tăng/giảm hạn mức, tái cấp?" B-card thường mạnh hơn A-card vì hành vi thực tế dự báo tốt hơn thông tin khai báo.
- Collection scorecard (C-card): dùng cho khách đã quá hạn, ước lượng khả năng thu hồi để phân luồng xử lý (nhắc nhẹ, gọi điện, khởi kiện...) — nối với Cảnh báo sớm & giám sát.
Trong bài này ta tập trung vào application scorecard vì nó là nền tảng; kỹ thuật xây B-card/C-card tương tự, chỉ khác tập biến.
3. Định nghĩa "bad" — trái tim của mọi scorecard
Trước khi xây được bất cứ điểm nào, phải trả lời câu hỏi: thế nào là một khách hàng "bad"? Đây là quyết định quan trọng nhất và thường bị xem nhẹ. "Bad" thường được định nghĩa dựa trên số ngày quá hạn (DPD), phổ biến là quá hạn 90+ ngày (90 DPD) — trùng với định nghĩa default trong Basel và IFRS 9, giúp mô hình nhất quán với chính sách dự phòng và vốn.
Đi kèm định nghĩa bad là hai cửa sổ thời gian:
- Observation window (cửa sổ quan sát): mốc thời gian ta thu thập đặc trưng đầu vào của khách (ví dụ trạng thái hồ sơ tại ngày mở khoản vay).
- Performance window (cửa sổ hiệu suất): khoảng thời gian sau đó mà ta theo dõi để dán nhãn good/bad (ví dụ 12 tháng kể từ khi giải ngân).
Timeline một quan sát (obligor)
observation performance
point window
─────────────────●──────────────────────────────────────────────►
thu thập đặc trưng│ theo dõi 12 tháng → dán nhãn good/bad
(income, DTI, │ nếu chạm 90+ DPD trong cửa sổ → BAD
CIC, tuổi...) │ ngược lại (và đủ "chín") → GOOD
Một vấn đề tinh tế là "indeterminate" (nhập nhằng): khách quá hạn 30–60 ngày, chưa đủ xấu để là bad nhưng cũng không sạch để là good. Thông lệ là loại nhóm này khỏi tập huấn luyện để hai lớp good/bad tách bạch. Ngoài ra cần đảm bảo performance window đủ dài để rủi ro "chín" (matured) — nếu cắt nhãn quá sớm, nhiều khách sẽ default sau cửa sổ mà ta lại gán là good.
4. Kỹ thuật xây scorecard truyền thống
Scorecard cổ điển (vẫn thống trị ngành ngân hàng vì tính minh bạch) được xây theo pipeline sau:
4.1 Binning (chia nhóm)
Mỗi biến (kể cả biến liên tục như tuổi, thu nhập) được chia thành các nhóm (bins). Ví dụ tuổi → {<25, 25–35, 35–50, 50+}. Binning giúp: (1) xử lý quan hệ phi tuyến, (2) chịu được ngoại lai và missing (missing thành một bin riêng), (3) làm điểm dễ diễn giải. Nguyên tắc: mỗi bin nên đủ lớn, tỷ lệ bad thay đổi đơn điệu hoặc có nghĩa nghiệp vụ giữa các bin.
4.2 WOE (Weight of Evidence) & IV (Information Value)
Với mỗi bin, ta tính WOE — đo mức độ bin đó lệch về phía good hay bad:
WOE_bin = ln( %good_trong_bin / %bad_trong_bin )
trong đó
%good_trong_bin = (số good trong bin) / (tổng số good)
%bad_trong_bin = (số bad trong bin) / (tổng số bad)
WOE > 0 → bin "tốt" hơn trung bình (nhiều good)
WOE < 0 → bin "xấu" hơn trung bình (nhiều bad)
WOE = 0 → bin trung tính
Thay giá trị gốc bằng WOE mang lại lợi ích lớn: biến trở nên tuyến tính theo log-odds, đúng dạng mà logistic regression cần; mọi biến về cùng thang đo; quan hệ đơn điệu sạch sẽ.
IV (Information Value) đo sức phân biệt tổng thể của cả biến (tổng trên các bin):
IV = Σ_bins ( %good_bin − %bad_bin ) × WOE_bin
Quy tắc kinh nghiệm phổ biến để chọn biến theo IV:
IV < 0.02 : gần như vô dụng → loại
0.02 – 0.1 : yếu
0.1 – 0.3 : trung bình → dùng được
0.3 – 0.5 : mạnh
> 0.5 : rất mạnh (cẩn thận! → nghi rò rỉ / over-predictive)
IV quá cao thường là dấu hiệu leakage (biến vô tình chứa thông tin của nhãn, ví dụ "số ngày quá hạn hiện tại" khi dự báo default) — cần soát kỹ.
Ví dụ bảng WOE cho biến tuổi (minh hoạ):
Bien: Tuoi #Good #Bad %Good %Bad WOE IV_bin
------------------------------------------------------------------
< 25 800 200 0.089 0.222 -0.913 0.121
25 - 35 2500 350 0.278 0.389 -0.337 0.037
35 - 50 3500 250 0.389 0.278 0.336 0.037
50+ 2200 100 0.244 0.111 0.788 0.105
------------------------------------------------------------------
Tong 9000 900 1.000 1.000 IV=0.300
(9000 good, 900 bad → bad rate toan tap ~9%)
4.3 Logistic Regression
Trên các biến đã WOE-hoá, ta fit một hồi quy logistic — mô hình dự báo log-odds của "bad" (hoặc "good", tuỳ quy ước) theo tổ hợp tuyến tính:
ln( P(bad) / (1 − P(bad)) ) = β0 + β1·WOE_1 + β2·WOE_2 + ... + βk·WOE_k
Vì sao ngành ngân hàng "chung thuỷ" với logistic regression suốt hàng chục năm? Vì nó minh bạch (mỗi biến một hệ số, giải thích được cho cơ quan quản lý và khách hàng bị từ chối), ổn định, và cho ra xác suất hiệu chỉnh tốt.
# (minh hoa) fit logistic regression tren bien da WOE-hoa
import numpy as np
from sklearn.linear_model import LogisticRegression
# X_woe: DataFrame cac cot da thay bang gia tri WOE; y: nhan 1=bad, 0=good
model = LogisticRegression(C=1.0, max_iter=1000)
model.fit(X_woe, y)
# xac suat bad du bao (PD tho, truoc calibration)
pd_hat = model.predict_proba(X_woe)[:, 1]
# log-odds tuyen tinh dung de scale ra diem
log_odds = model.decision_function(X_woe) # = beta0 + sum(beta_i * WOE_i)
4.4 Scaling điểm (PDO, base score/odds)
Kết quả logistic là log-odds — con số khó đọc. Ngân hàng biến nó thành điểm số nguyên dễ hiểu (kiểu FICO 300–850) qua công thức scaling tuyến tính, neo bởi ba tham số:
- Base score: điểm chuẩn (ví dụ 600).
- Base odds: tỷ lệ good:bad tại base score (ví dụ 50:1).
- PDO (Points to Double the Odds): bao nhiêu điểm thì odds tăng gấp đôi (ví dụ 20 điểm → odds tốt gấp đôi).
Factor = PDO / ln(2)
Offset = BaseScore − Factor × ln(BaseOdds)
Score = Offset + Factor × ln(odds_good/bad)
Ví dụ: PDO=20, BaseScore=600, BaseOdds=50
Factor = 20 / 0.6931 = 28.85
Offset = 600 − 28.85 × ln(50) = 600 − 28.85 × 3.912 = 487.14
Từ đây, điểm của từng thuộc tính được phân bổ ra bảng, để cộng lại thành tổng điểm — đây chính là "scorecard" theo nghĩa đen:
Diem_thuoc_tinh = − ( β_i × WOE_bin + β0/k ) × Factor + Offset/k
(k = so bien trong model; dau tuy quy uoc good/bad)
Ví dụ một scorecard đã scale (minh hoạ):
Thuoc tinh Diem
--------------------------------------
Base + 300
Tuoi: < 25 - 22
25 - 35 + 8
35 - 50 + 28
50+ + 45
DTI: > 60% - 35
40 - 60% - 5
< 40% + 30
Lich su CIC: co no xau 12t - 60
sach + 25
So san pham ngan hang: >= 2 + 15
--------------------------------------
Vi du khach A: 300 +28 +30 +25 +15 = 398 diem
Đọc rất trực quan: cán bộ nhìn ngay được yếu tố nào cộng, yếu tố nào trừ — cực kỳ hữu ích khi phải giải thích lý do từ chối (adverse action).
5. Từ điểm ra PD & hiệu chỉnh (calibration)
Điểm và PD gắn với nhau qua công thức scaling ở trên (đảo ngược lại). Nhưng có một cạm bẫy: nếu tập huấn luyện được oversample nhóm bad (thường làm vì bad hiếm), hoặc tỷ lệ bad trong mẫu ≠ tỷ lệ bad thực tế của danh mục, thì PD thô sẽ lệch. Calibration là bước chỉnh lại để PD dự báo khớp với tỷ lệ default quan sát thực tế.
Kiểm tra calibration đơn giản: chia khách thành các nhóm điểm, so PD trung bình dự báo với bad rate thực:
Rating Score band PD du bao Bad rate thuc te #KH
------------------------------------------------------------
A > 380 1.2% 1.4% 2100 ✓ khop
B 340 - 380 3.5% 3.3% 3400 ✓ khop
C 300 - 340 8.0% 8.6% 2800 ~ khop
D 260 - 300 16.0% 15.2% 1300 ~ khop
E < 260 30.0% 31.5% 300 ✓ khop
Nhóm điểm khi gộp lại thành rating grades (thang hạng) như trên chính là cầu nối sang xếp hạng nội bộ, tính ECL và định giá.
6. Cutoff & chiến lược duyệt
Có điểm rồi, phải chọn cutoff (ngưỡng): điểm >= ngưỡng thì duyệt, dưới thì từ chối. Đây là bài toán đánh đổi giữa approval rate (tỷ lệ duyệt, liên quan doanh thu) và bad rate (tỷ lệ nợ xấu, liên quan tổn thất):
Cutoff Approval rate Bad rate (nhom duyet) Ghi chu
-----------------------------------------------------------------
280 85% 7.8% mo rong, rui ro cao
320 68% 4.5% can bang
360 50% 2.6% than trong
400 32% 1.3% rat chat, bo lo KH tot
Không có cutoff "đúng" — nó tuỳ khẩu vị rủi ro và kinh tế đơn vị: mỗi khách good sinh lời bao nhiêu, mỗi khách bad lỗ bao nhiêu (gắn với LGD). Cutoff tối ưu là điểm tối đa hoá lợi nhuận kỳ vọng, không phải điểm tối thiểu hoá bad rate.
Hai khái niệm quan trọng khi đổi model/cutoff:
- Swap set: khi thay scorecard cũ bằng mới, có nhóm khách trước bị từ chối nay được duyệt (swap-in) và nhóm trước được duyệt nay bị từ chối (swap-out). Đánh giá model mới tốt hơn hay không chính là so bad rate của hai nhóm swap này.
- Risk-based pricing: thay vì chỉ duyệt/từ chối nhị phân, dùng điểm để định giá theo rủi ro — khách điểm thấp hơn (nhưng vẫn trên sàn) được duyệt với lãi suất cao hơn để bù rủi ro, mở rộng tệp mà vẫn kiểm soát tổn thất.
7. Reject inference — vấn đề "chỉ thấy người được duyệt"
Đây là một trong những bài toán đặc thù và khó nhất của credit scoring. Khi xây model mới, ta chỉ có nhãn good/bad của những khách ĐÃ được duyệt trong quá khứ — vì chỉ họ mới có lịch sử trả nợ. Những khách bị từ chối không có nhãn (ta không biết họ sẽ trả tốt hay xấu vì chưa bao giờ cho vay).
Nếu chỉ huấn luyện trên khách được duyệt, model bị selection bias: nó chưa từng "thấy" vùng hồ sơ xấu bị lọc từ trước, nên ước lượng rủi ro ở vùng biên bị méo. Reject inference là các kỹ thuật gán nhãn suy đoán cho hồ sơ bị từ chối để đưa họ vào tập huấn luyện:
- Hard cutoff / assignment: chấm khách bị từ chối bằng model tạm, gán bad cho nhóm điểm thấp.
- Parcelling / fuzzy augmentation: gán nhãn theo xác suất (một hồ sơ vừa được tính là một phần good, một phần bad theo PD suy đoán).
- Reweighting: điều chỉnh trọng số quan sát để mẫu duyệt "đại diện" cho toàn bộ hồ sơ nộp.
Không kỹ thuật nào hoàn hảo — reject inference luôn dựa trên giả định và cần được kiểm chứng thận trọng (ví dụ qua các chương trình cấp tín dụng thử ở vùng biên). Nhưng bỏ qua nó thì model sẽ lạc quan giả tạo.
8. Đánh giá & giám sát mô hình
Một scorecard không phải xây xong là xong — nó thoái hoá theo thời gian khi hành vi khách, nền kinh tế và tệp khách thay đổi. Ba nhóm chỉ số cốt lõi:
Sức phân biệt (discrimination) — model tách good/bad tốt đến đâu:
- KS (Kolmogorov–Smirnov): khoảng cách lớn nhất giữa hàm phân phối tích luỹ của good và của bad theo điểm. KS càng cao càng tốt; scorecard bán lẻ tốt thường KS ~ 30–50%.
- Gini / AUC: Gini = 2×AUC − 1. AUC là xác suất model xếp một khách bad ngẫu nhiên rủi ro cao hơn một khách good ngẫu nhiên. Gini ~ 0,4–0,6 là khoảng thường gặp cho A-card tốt.
# (minh hoa) tinh KS va Gini/AUC
from sklearn.metrics import roc_auc_score
import numpy as np
auc = roc_auc_score(y, pd_hat) # y: 1=bad
gini = 2 * auc - 1
# KS: max khoang cach CDF good vs bad theo diem
order = np.argsort(-pd_hat)
cum_bad = np.cumsum(y[order]) / y.sum()
cum_good = np.cumsum(1 - y[order]) / (len(y) - y.sum())
ks = np.max(np.abs(cum_bad - cum_good))
Ổn định quần thể (stability) — tệp khách hôm nay có còn giống lúc xây model:
- PSI (Population Stability Index): so phân bố điểm hiện tại với phân bố lúc xây (baseline):
PSI = Σ_bins ( %hien_tai − %baseline ) × ln( %hien_tai / %baseline )
PSI < 0.1 : on dinh → khong lo
0.1 – 0.25 : dich chuyen vua → theo doi
> 0.25 : dich chuyen lon → dieu tra / tai xay model
PSI có thể tính cho điểm tổng (phát hiện tệp khách đổi) và cho từng biến (characteristic stability — biết biến nào gây dịch chuyển). Đây là công cụ chính để phát hiện drift — nối trực tiếp với tư duy giám sát mô hình trong MLOps.
Governance mô hình: ngân hàng phải có validation độc lập (đội khác đội xây), tài liệu hoá đầy đủ, tái đánh giá định kỳ, và tái xây (redevelopment) khi KS/Gini tụt hoặc PSI vượt ngưỡng. Nguồn dữ liệu cho toàn bộ chu trình này được bàn ở Dữ liệu tín dụng.
9. Xu hướng: Machine Learning cho scoring
Logistic regression vẫn là chuẩn mực, nhưng các mô hình gradient boosting (GBM — XGBoost, LightGBM) ngày càng được dùng vì bắt được tương tác phi tuyến và thường nâng KS/Gini vài điểm phần trăm. Đánh đổi là tính giải thích: cơ quan quản lý và luật bảo vệ người tiêu dùng đòi hỏi ngân hàng phải nêu lý do từ chối. Do đó ML scoring đi kèm hai yêu cầu:
- Explainability: dùng SHAP, reason codes để giải thích đóng góp từng biến cho mỗi quyết định — bù cho tính "hộp đen".
- Fairness / tuân thủ: kiểm tra model không phân biệt đối xử theo thuộc tính nhạy cảm (giới, dân tộc...) một cách bất hợp pháp; đảm bảo biến đầu vào hợp lệ và giải thích được.
Nhiều ngân hàng đi con đường lai: dùng GBM để khám phá biến/tương tác mạnh, rồi đưa insight đó về logistic scorecard minh bạch để triển khai.
Use case thực tế
Xây application scorecard cho vay tiêu dùng. Đội rủi ro lấy 2 năm hồ sơ giải ngân, định nghĩa bad = 90+ DPD trong 12 tháng kể từ giải ngân, loại nhóm indeterminate (30–60 DPD). Họ binning ~40 biến ứng viên, tính IV, giữ lại ~12 biến có IV trong khoảng 0,1–0,5 và có nghĩa nghiệp vụ (loại biến IV=0,7 vì nghi leakage). WOE-hoá, fit logistic, kiểm tra không có biến nào đảo dấu vô lý. Scale với PDO=20, base 600 / odds 50:1. Model đạt KS = 38%, Gini = 0,52 trên tập kiểm định out-of-time — đạt ngưỡng chấp nhận. Sau đó áp dụng reject inference (parcelling) để giảm selection bias và fit lại, KS nhích lên 40%.
Chọn cutoff và theo dõi. Kinh doanh muốn approval rate ~65%; đội rủi ro chạy bảng đánh đổi và chọn cutoff = 320 (approval 68%, bad rate dự phóng 4,5%), kèm risk-based pricing cho nhóm điểm 320–340. Sau 6 tháng vận hành, PSI điểm tổng = 0,08 (ổn định); nhưng PSI của biến "khu vực" = 0,3 do mở rộng sang tỉnh mới — đội đánh dấu theo dõi và lên lịch tái xây trong kỳ tới.
Ghi nhớ
- Scorecard = mô hình học máy đóng gói cho ngân hàng: minh bạch, cho ra điểm và PD — nền tảng của duyệt tự động, định giá và dự phòng.
- Application (A-card) dùng lúc xét duyệt (dữ liệu hồ sơ); behavior (B-card) dùng cho khách hiện hữu (hành vi, thường mạnh hơn); collection (C-card) cho khách quá hạn.
- Định nghĩa "bad" (thường 90+ DPD) + observation/performance window là quyết định quan trọng nhất, nối với default của IFRS 9/Basel.
- Pipeline truyền thống: binning → WOE/IV chọn biến → logistic regression → scaling (PDO, base score/odds) → bảng điểm.
- IV lọc biến (0,1–0,5 là vùng lành mạnh; quá cao nghi leakage); WOE làm biến tuyến tính theo log-odds.
- Cutoff là đánh đổi approval rate vs bad rate, tối ưu theo lợi nhuận kỳ vọng, không phải bad rate thấp nhất; chú ý swap set và risk-based pricing.
- Reject inference khắc phục selection bias vì ta chỉ có nhãn của khách đã được duyệt.
- Giám sát bằng KS, Gini/AUC (sức phân biệt) và PSI (ổn định quần thể/drift); cần validation độc lập và tái xây định kỳ.
- ML (GBM) nâng hiệu năng nhưng phải kèm explainability & fairness để tuân thủ.
Bài liên quan: Thẩm định tín dụng · IFRS 9/ECL · Cảnh báo sớm & giám sát · Dữ liệu tín dụng · Quy trình ML
Bài viết liên quan
Dòng chảy dữ liệu core -> ODS -> DWH -> BI, mô hình dữ liệu cốt lõi và bộ ví dụ SQL thực hành chạy được.
Bản chất kinh doanh của ngân hàng: trung gian tài chính, bảng cân đối, NIM và vì sao dữ liệu quan trọng.
Kiến trúc core banking, CIF, các phân hệ và xử lý online vs batch/EOD.
Nguyên lý hạch toán kép, Nợ/Có, hệ thống tài khoản và cách mọi giao dịch ngân hàng luôn cân sổ.