Tối ưu hoá 5 — Danh mục & ALM ngân hàng
Từ tối ưu vận hành sang tối ưu tài chính
Các bài trước dùng tối ưu hoá cho bài toán vận hành: phân bổ nhân lực, chọn chiến dịch, lập lịch — LP, MILP, solver. Bài này chuyển sang lớp bài toán tài chính — nơi tối ưu hoá quyết định tiền được đặt ở đâu: danh mục đầu tư, cơ cấu bảng cân đối, phân bổ vốn giữa các mảng, hạn mức tín dụng giữa các phân khúc.
Điểm khác biệt lớn nhất so với tối ưu vận hành: rủi ro là biến số trung tâm, và đầu vào là số ước lượng, không phải số biết chắc. Lợi nhuận kỳ vọng và ma trận hiệp phương sai của tài sản không đo được trực tiếp — ta ước lượng chúng từ dữ liệu lịch sử, và mọi sai số ước lượng đó bị khuếch đại qua bài tối ưu. Đây là chủ đề xuyên suốt bài: mô hình tối ưu tài chính đẹp về toán học nhưng cực nhạy với chất lượng input và các ràng buộc quy định. Hiểu được cả hai mặt này mới dùng được trong ngân hàng.
1. Tối ưu danh mục Markowitz (mean-variance)
Năm 1952 Harry Markowitz đặt nền cho lý thuyết danh mục hiện đại (Modern Portfolio Theory) với một ý tưởng đơn giản mà sâu sắc: đừng đánh giá từng tài sản riêng lẻ, hãy đánh giá cả danh mục — vì rủi ro của danh mục không phải tổng rủi ro từng phần, mà phụ thuộc vào cách các tài sản đồng biến với nhau.
Đặt bài toán
Gọi w là vector tỷ trọng phân bổ vào n tài sản (wᵢ = phần vốn đặt vào tài sản i). Hai đại lượng đầu vào:
μ(vectorn×1): lợi nhuận kỳ vọng của từng tài sản (ước lượng).Σ(ma trậnn×n): ma trận hiệp phương sai (covariance) của lợi nhuận — đường chéo là phương sai từng tài sản, ngoài đường chéo là hiệp phương sai giữa các cặp.
Khi đó danh mục có:
- Lợi nhuận kỳ vọng:
μᵀw - Phương sai (thước đo rủi ro):
wᵀΣw— độ lệch chuẩn√(wᵀΣw)gọi là volatility.
Phương sai danh mục wᵀΣw chính là chỗ đa dạng hoá phát huy: nếu hai tài sản có hiệp phương sai âm (một lên thì kia có xu hướng xuống), ghép chúng làm phương sai tổng giảm — giảm rủi ro mà không nhất thiết giảm lợi nhuận kỳ vọng. Đây là "bữa trưa miễn phí" duy nhất trong tài chính.
Hai cách phát biểu (đều là QP)
Markowitz có hai dạng đối ngẫu, cả hai đều là Quadratic Program (QP) — mục tiêu bậc hai, ràng buộc tuyến tính, và là bài tối ưu lồi (convex) vì Σ nửa xác định dương → có nghiệm toàn cục, giải nhanh và tin cậy.
Dạng A — tối thiểu rủi ro cho mức lợi nhuận yêu cầu R:
min wᵀΣw
s.t. μᵀw ≥ R (đạt lợi nhuận mục tiêu)
Σ wᵢ = 1 (dùng hết vốn)
w ≥ 0 (không bán khống — long-only)
Dạng B — tối đa lợi nhuận trừ phạt rủi ro (risk-adjusted):
max μᵀw − γ·(wᵀΣw)
s.t. Σ wᵢ = 1, w ≥ 0
γ (gamma) là hệ số ngại rủi ro (risk aversion): γ lớn = thận trọng, ưu tiên giảm phương sai; γ→0 = chạy theo lợi nhuận. Quét γ từ nhỏ tới lớn (hoặc quét R ở dạng A) sẽ vẽ ra biên hiệu quả.
Biên hiệu quả (efficient frontier)
Với mỗi mức rủi ro chấp nhận được, tồn tại một danh mục cho lợi nhuận kỳ vọng cao nhất. Tập tất cả các danh mục tối ưu đó tạo thành biên hiệu quả (efficient frontier) — đường cong trong mặt phẳng (rủi ro, lợi nhuận). Mọi danh mục dưới biên là kém hiệu quả: luôn có danh mục khác cùng rủi ro nhưng lợi nhuận cao hơn (hoặc cùng lợi nhuận nhưng ít rủi ro hơn).
Chọn điểm nào trên biên là quyết định khẩu vị rủi ro, không phải quyết định toán học — tối ưu chỉ đảm bảo bạn nằm trên biên.
Ví dụ pseudocode CVXPY (minh hoạ, không phải SQL)
CVXPY là modeling layer Python cho bài lồi, cú pháp gần với toán:
# Minh hoạ - Markowitz dạng B trong CVXPY
import cvxpy as cp
import numpy as np
n = len(mu) # số tài sản
w = cp.Variable(n) # tỷ trọng
gamma = cp.Parameter(nonneg=True) # hệ số ngại rủi ro
ret = mu @ w # lợi nhuận kỳ vọng
risk = cp.quad_form(w, Sigma) # wᵀΣw
prob = cp.Problem(
cp.Maximize(ret - gamma * risk),
[cp.sum(w) == 1, w >= 0, # dùng hết vốn, long-only
w <= 0.30] # trần tỷ trọng mỗi tài sản 30%
)
frontier = []
for g in np.logspace(-2, 2, 40): # quét gamma để vẽ biên
gamma.value = g
prob.solve()
frontier.append((np.sqrt(risk.value), ret.value, w.value))
Đổi cp.Maximize sang cp.Minimize(risk) cộng ràng buộc ret >= R là ra dạng A.
2. Ràng buộc thực tế & mở rộng rủi ro
Markowitz "trần trụi" (chỉ Σwᵢ=1, w≥0) hầu như không dùng được trực tiếp trong ngân hàng. Thực tế phải nạp thêm ràng buộc — và mỗi ràng buộc chỉ là vài dòng tuyến tính, bài vẫn lồi:
| Ràng buộc thực tế | Biểu diễn toán |
|---|---|
| Trần/sàn tỷ trọng mỗi tài sản | lᵢ ≤ wᵢ ≤ uᵢ |
| Giới hạn theo nhóm (ngành, kỳ hạn, quốc gia) | Σ_{i∈G} wᵢ ≤ cap_G |
| Ràng buộc thanh khoản (tối thiểu % vào tài sản dễ bán) | Σ_{i∈liquid} wᵢ ≥ min_liq |
| Giới hạn tập trung (không quá k tài sản, quay vòng thấp) | cần biến nhị phân → thành MIQP |
| Bám danh mục chuẩn (tracking error) | ‖w − w_bench‖ ≤ ε |
Lưu ý: ràng buộc đếm ("chọn tối đa 20 tài sản") biến QP thành MIQP (mixed-integer QP) — khó hơn hẳn, cần solver hỗ trợ (Gurobi, CPLEX, SCIP). Ràng buộc tuyến tính liên tục thì giữ nguyên độ khó QP.
Thay phương sai bằng CVaR/VaR
Phương sai phạt cả biến động lên lẫn xuống như nhau — nhưng nhà quản lý rủi ro chỉ sợ chiều xuống (tổn thất). Hai thước đo rủi ro đuôi (tail risk) phổ biến hơn:
- VaR (Value at Risk) ở mức tin cậy
α(vd 99%): mức tổn thất mà xác suất vượt quá chỉ là1−α. "Trong 99% ngày, lỗ không quá X tỷ." Nhược điểm: VaR không lồi và không cộng gộp được (không subadditive) → tối ưu trực tiếp rất khó. - CVaR (Conditional VaR / Expected Shortfall): kỳ vọng tổn thất trong các kịch bản xấu nhất vượt ngưỡng VaR. "Khi đã lỗ quá X, trung bình lỗ bao nhiêu." CVaR lồi và có công thức Rockafellar–Uryasev cho phép tối ưu bằng LP trên tập kịch bản mô phỏng.
Mô hình CVaR (Rockafellar–Uryasev) trên S kịch bản lợi nhuận rₛ, biến phụ η (ngưỡng) và zₛ ≥ 0:
min η + (1/((1−α)·S)) · Σₛ zₛ
s.t. zₛ ≥ −rₛᵀw − η với mọi kịch bản s
Σ wᵢ = 1, w ≥ 0, (+ các ràng buộc nhóm/thanh khoản)
Đây là LP thuần — giải được bằng CBC/HiGHS. Ưu điểm lớn: CVaR bắt được rủi ro đuôi không đối xứng (danh mục trái phiếu, tín dụng có phân phối lệch trái) mà phương sai bỏ sót.
3. Quản lý Tài sản – Nợ (ALM)
Tối ưu danh mục ở trên coi ngân hàng như nhà đầu tư đơn thuần. Nhưng ngân hàng đặc biệt ở chỗ: nguồn vốn cũng là một danh mục cần quản lý — tiền gửi, phát hành giấy tờ có giá, vay liên ngân hàng đều có kỳ hạn, lãi suất, độ ổn định riêng. Quản lý đồng thời hai bên bảng cân đối là ALM (Asset-Liability Management) — xem sâu ở Treasury & ALM.
Bài toán ALM dưới góc nhìn tối ưu
ALM tối ưu cơ cấu bảng cân đối để cân bằng ba mục tiêu thường xung đột:
- Rủi ro lãi suất: khi lãi suất thị trường thay đổi, giá trị tài sản và nợ đổi khác nhau → biến động thu nhập lãi thuần (NIM) và vốn chủ. Đo bằng gap kỳ hạn định giá lại (repricing gap) và duration (thời lượng — độ nhạy giá theo lãi suất).
- Rủi ro thanh khoản: dòng tiền vào/ra không khớp theo thời gian → có thể thiếu tiền chi trả ở một thời điểm.
- Lợi nhuận: tài sản dài hạn/kém thanh khoản thường sinh lời cao hơn → luôn có đánh đổi thanh khoản–lợi nhuận.
Duration matching (khớp thời lượng)
Ý tưởng cốt lõi phòng rủi ro lãi suất: làm cho duration bình quân của tài sản xấp xỉ duration của nợ (có điều chỉnh theo đòn bẩy). Khi đó lãi suất thay đổi, giá trị hai bên di chuyển gần như song song → giá trị vốn chủ (equity) ít biến động. Ràng buộc |Duration_TS·A − Duration_Nợ·L| ≤ ε là tuyến tính trên tỷ trọng phân bổ → nhét thẳng vào bài LP/QP tối ưu cơ cấu.
Ràng buộc quy định (phải có, không thương lượng)
Ngân hàng tối ưu bảng cân đối không được vi phạm các tỷ lệ an toàn Basel III — đây là các hard constraint, không phải mục tiêu mềm:
- LCR (Liquidity Coverage Ratio) ≥ 100%: tài sản thanh khoản chất lượng cao (HQLA) phải đủ phủ dòng tiền ra ròng trong kịch bản stress 30 ngày.
- NSFR (Net Stable Funding Ratio) ≥ 100%: nguồn vốn ổn định sẵn có ≥ nguồn vốn ổn định cần thiết cho tài sản dài hạn.
- CAR (Capital Adequacy Ratio): vốn tự có / tài sản có rủi ro (RWA) ≥ ngưỡng (VN: theo Thông tư 41, tối thiểu 8%).
Về mặt mô hình, mỗi tỷ lệ là một ràng buộc tuyến tính trên các khoản mục bảng cân đối (mỗi loại tài sản/nợ có trọng số run-off, HQLA factor, RWA weight riêng). Bài ALM tối ưu điển hình: max lợi nhuận (chênh lệch lãi) s.t. LCR, NSFR, CAR, duration gap, giới hạn tập trung. Về cấu trúc đây là một LP/QP có ràng buộc quy định, giải được bằng công cụ ở bài trước.
4. Phân bổ vốn theo RAROC
Ngân hàng có vốn kinh tế (economic capital) hữu hạn phải chia giữa các mảng kinh doanh (bán lẻ, doanh nghiệp, treasury, thẻ...). Chia sao cho hiệu quả? Thước đo chuẩn là RAROC (Risk-Adjusted Return on Capital):
RAROC = (Lợi nhuận kỳ vọng − Tổn thất kỳ vọng − Chi phí) / Vốn kinh tế phân bổ
Nguyên tắc: rót thêm vốn vào mảng có RAROC cao hơn chi phí vốn (hurdle rate), rút khỏi mảng dưới ngưỡng. Dạng tối ưu: max tổng lợi nhuận điều chỉnh rủi ro s.t. Σ vốn phân bổ ≤ vốn khả dụng, cộng sàn/trần chiến lược mỗi mảng và ràng buộc đa dạng hoá (không dồn quá nhiều vào một mảng dù RAROC cao — tránh rủi ro tập trung ở cấp doanh nghiệp).
Điểm tinh tế: RAROC dùng vốn kinh tế, không phải vốn kế toán — vốn kinh tế phản ánh rủi ro không kỳ vọng (unexpected loss). Ước lượng vốn kinh tế lại phụ thuộc mô hình rủi ro (PD, LGD, tương quan) → lại là bài toán nhạy input.
5. Tối ưu danh mục tín dụng
Áp dụng cùng khung tư duy vào phân bổ hạn mức tín dụng giữa các phân khúc (ngành, vùng, sản phẩm, hạng khách) — xem giới hạn & danh mục tín dụng. Đây là "Markowitz cho khoản vay": mỗi phân khúc có lợi suất kỳ vọng (lãi biên − tổn thất kỳ vọng) và rủi ro, các phân khúc tương quan với nhau (suy thoái ngành bất động sản kéo theo xây dựng, vật liệu...).
Bài toán: phân bổ hạn mức xₛ (dư nợ cho phân khúc s) để cân đối lợi nhuận – rủi ro – tập trung:
max Σ (lãi_biênₛ − EL_rateₛ)·xₛ − λ·(rủi ro tương quan danh mục)
s.t. Σ xₛ ≤ Tổng_dư_nợ_mục_tiêu
xₛ ≤ cap_ngànhₛ (trần tập trung ngành - quy định TT)
Σ_{s∈vùng} xₛ ≤ cap_vùng (trần địa lý)
xₛ ≥ 0
Trần tập trung ngành/khách hàng lớn thường là ràng buộc pháp lý cứng (giới hạn cấp tín dụng theo Luật các TCTD), giống LCR/NSFR ở ALM — không được tối ưu vượt qua.
Vai trò của dự báo làm đầu vào
Mọi bài tối ưu trên đều cần input ước lượng: μ, Σ (danh mục), lãi suất và dòng tiền (ALM), PD/LGD và tương quan (tín dụng). Đây chính là điểm nối với chuỗi thống kê/chuỗi thời gian:
- Lợi nhuận kỳ vọng, biến động, tương quan → ước từ hồi quy & tương quan và mô hình chuỗi thời gian đưa vào production.
- Cảnh báo then chốt — estimation error: bài Markowitz khuếch đại sai số ước lượng. Một sai lệch nhỏ trong
μcó thể làm nghiệm tối ưu nhảy sang tỷ trọng cực đoan (dồn hết vào một tài sản trông "tốt" một cách giả tạo). Markowitz nổi tiếng là "cỗ máy tối đa hoá sai số ước lượng".
Cách hoá giải (robust optimization — xem tối ưu ngẫu nhiên & robust): thêm ràng buộc trần tỷ trọng, dùng shrinkage cho Σ (Ledoit–Wolf) thay ma trận mẫu thô, tối ưu robust (bảo vệ trước một vùng bất định của μ), hoặc dùng resampling trung bình nhiều nghiệm. Nguyên tắc vàng: một danh mục hơi kém tối ưu nhưng ổn định thắng một danh mục "tối ưu" nhưng dựng trên input rác.
Use case thực tế
Bối cảnh. Khối Treasury NCB có 5.000 tỷ đồng danh mục trái phiếu/giấy tờ có giá cần tái phân bổ giữa 6 nhóm tài sản (TPCP ngắn, TPCP dài, TPDN, tiền gửi liên NH, chứng chỉ tiền gửi, tín phiếu NHNN). Yêu cầu: tối đa lợi suất, giữ volatility ≤ 3%/năm, đảm bảo ≥ 40% vào tài sản HQLA để không phá LCR, và không nhóm nào vượt 35%.
Các bước.
- Nạp dữ liệu: ước
μ(lợi suất kỳ vọng) vàΣ(hiệp phương sai) từ chuỗi lợi suất 3 năm; áp shrinkage Ledoit–Wolf choΣđể giảm nhiễu. - Mô hình (CVXPY, dạng A):
min wᵀΣws.t.μᵀw ≥ R,Σwᵢ=1,w≤0.35,Σ_{HQLA} wᵢ ≥ 0.40,w≥0. - Quét R để vẽ efficient frontier, chọn điểm có volatility đúng 3%.
- Kết quả minh hoạ: danh mục tối ưu nâng lợi suất kỳ vọng từ 4,8% (phân bổ đều hiện tại) lên 5,6%/năm ở cùng mức rủi ro 3% — nhờ tận dụng hiệp phương sai âm giữa TPCP dài và tín phiếu.
- Kiểm định độ nhạy: đẩy
μ±0,3% rồi giải lại; nếu tỷ trọng nhảy quá mạnh → siết thêm trần, không tin nghiệm cực đoan. - Đưa vào quyết định: nghiệm là gợi ý cho Hội đồng ALCO, không phải lệnh tự động — kết hợp phán đoán chuyên gia và kịch bản stress.
Dưới đây là truy vấn chuẩn bị một mảnh input thực tế — cơ cấu giá trị danh mục theo loại tiền và nhóm số dư, từ dữ liệu tài khoản/giao dịch trên sandbox (dùng ước lệ minh hoạ cho "nhóm tài sản"):
-- ▶ Chạy được
WITH acct AS (
SELECT
a.id,
a.currency,
a.balance,
CASE
WHEN a.balance >= 1000000000 THEN 'lon'
WHEN a.balance >= 100000000 THEN 'vua'
ELSE 'nho'
END AS nhom_gia_tri,
COALESCE(SUM(t.amount), 0) AS dong_tien_rong
FROM accounts a
LEFT JOIN transactions t ON t.account_id = a.id
GROUP BY a.id, a.currency, a.balance
)
SELECT
currency,
nhom_gia_tri,
COUNT(*) AS so_tai_khoan,
ROUND(SUM(balance)::numeric, 2) AS tong_gia_tri,
ROUND((SUM(balance)
/ SUM(SUM(balance)) OVER (PARTITION BY currency)
* 100)::numeric, 2) AS ty_trong_pct,
ROUND(AVG(dong_tien_rong)::numeric, 2) AS dong_tien_rong_tb
FROM acct
GROUP BY currency, nhom_gia_tri
ORDER BY currency, tong_gia_tri DESC;
Bảng này (tỷ trọng giá trị theo currency × nhóm) là nguyên liệu thô cho vector phân bổ ban đầu và ràng buộc trần theo loại tiền — bước 1 trong quy trình trên. Ma trận Σ phải ước từ chuỗi lợi suất bên ngoài (không có trong 5 bảng sandbox).
Ghi nhớ
- Markowitz mean-variance là một QP lồi: min
wᵀΣwhoặc maxμᵀw − γ·wᵀΣw; nghiệm toàn cục, giải nhanh bằng CVXPY + HiGHS/OSQP. - Đa dạng hoá đến từ hiệp phương sai: rủi ro danh mục
wᵀΣw< tổng rủi ro từng phần khi tài sản không đồng biến — đây là lợi ích cốt lõi. - Efficient frontier là tập danh mục tối ưu; chọn điểm nào trên biên là quyết định khẩu vị rủi ro, không phải toán học.
- Ràng buộc thực tế (trần tỷ trọng/nhóm, thanh khoản) giữ bài lồi; ràng buộc đếm biến nó thành MIQP khó hơn.
- CVaR (Expected Shortfall) lồi và tối ưu được bằng LP (Rockafellar–Uryasev), bắt rủi ro đuôi tốt hơn phương sai; VaR không lồi, khó tối ưu trực tiếp.
- ALM: tối ưu cơ cấu bảng cân đối để cân bằng rủi ro lãi suất – thanh khoản – lợi nhuận; duration matching phòng rủi ro lãi suất; LCR/NSFR/CAR là ràng buộc cứng không được vi phạm.
- Phân bổ vốn theo RAROC: rót vốn vào mảng RAROC > hurdle rate, kèm ràng buộc đa dạng hoá.
- Tín dụng: phân bổ hạn mức giữa phân khúc theo lợi nhuận–rủi ro–tập trung; trần tập trung ngành/khách lớn là ràng buộc pháp lý cứng.
- Cảnh báo tối thượng — estimation error: tối ưu tài chính khuếch đại sai số input. Dùng shrinkage cho
Σ, ràng buộc trần, tối ưu robust; ưu tiên nghiệm ổn định hơn nghiệm "tối ưu" trên input rác. - Nghiệm tối ưu là gợi ý cho ALCO/hội đồng, không phải lệnh tự động — luôn kiểm định độ nhạy và kịch bản stress.
Bài viết liên quan
Phân biệt ước lượng điểm và ước lượng khoảng, cách xây khoảng tin cậy (CI) bằng margin of error z*·SE / t*·SE, đánh đổi mức 90/95/99%, và cách DIỄN GIẢI ĐÚNG khoảng tin cậy (95% CI không phải xác suất tham số nằm trong khoảng). Có CI cho trung bình và cho tỷ lệ, ảnh hưởng của cỡ mẫu, cùng ví dụ ngân hàng về tỷ lệ nợ xấu và số dư trung bình.
Kimball dimensional modeling: bảng fact/dimension, star vs snowflake, grain, và Slowly Changing Dimension.
Khối OLAP, các thao tác drill-down/roll-up/slice & dice/pivot, OLAP vs OLTP và ROLAP/MOLAP/HOLAP.
Từ nguồn dữ liệu qua ETL/ELT vào Data Warehouse, Data Mart đến dashboard; staging, ODS, batch vs streaming.