Khóa Học Quant Science (Phần 4): Kỹ Thuật Tối Ưu Danh Mục — Hierarchical Risk Parity (HRP), Riskfolio-Lib & skfolio
✍️ Học Viện Giao Dịch📅 17/10/2026⏱️ 20 phút đọc🏷️ HRP, Hierarchical Risk Parity, Riskfolio-Lib, skfolio, Marcos Lopez de Prado, CVaR
Năm 1952, Harry Markowitz đặt nền móng cho tài chính định lượng hiện đại với Mô hình Tối ưu Hóa Kỳ vọng - Phương sai (Mean-Variance Optimization - MVO). Tuy nhiên, hơn 70 năm qua trên Phố Wall, các nhà quản lý quỹ thực chiến đều gọi MVO bằng một biệt danh cay đắng: "Máy Phóng Đại Sai Số" (Error Maximizer).
Khi ma trận hiệp phương sai bị đảo ngược, các sai số ước lượng nhỏ trong quá khứ bị nhân lên gấp hàng chục lần, khiến danh mục đổ dồn 80% vốn vào 1 hoặc 2 tài sản có rủi ro ngầm cao nhất. Để giải quyết triệt để tử huyệt này, tiến sĩ Marcos López de Prado đã giới thiệu giải thuật Hierarchical Risk Parity (HRP) — áp dụng học máy phân cụm hình cây để cấp phát vốn mà không cần nghịch đảo bất kỳ ma trận nào. Cùng với sự trỗi dậy của Riskfolio-Lib và skfolio, tối ưu hóa danh mục đã bước sang một kỷ nguyên hoàn toàn mới.
1. Tại Sao Markowitz Thất Bại & Sự Ra Đời Của HRP
Vấn đề toán học cốt lõi của Markowitz nằm ở bước giải hệ phương trình đạo hàm Lagrange để tìm vector trọng số tối ưu $w$:
w = (Sigma^-1 * 1) / (1^T * Sigma^-1 * 1)
Trong đó $\Sigma^{-1}$ là ma trận nghịch đảo của ma trận hiệp phương sai. Trong thế giới thực:
Số điều kiện ma trận quá lớn (Ill-conditioned Matrix): Khi các tài sản tài chính có mối tương quan cao (ví dụ: nhóm cổ phiếu ngân hàng hoặc thép), định thức $|\Sigma| \approx 0$, khiến ma trận hiệp phương sai gần như suy biến.
Hiện tượng giải pháp góc (Corner Solutions): Thuật toán tạo ra các trọng số cực đoan vô lý (ví dụ: 85% vào mã A, 0% vào 20 mã còn lại).
Nhạy cảm cực đoan với dữ liệu mẫu (Sample Instability): Chỉ cần thêm vào 5 ngày dữ liệu mới, vector trọng số của Markowitz có thể đảo lộn 180 độ, làm phát sinh chi phí đảo danh mục (Turnover Cost) khổng lồ.
⚠️
ĐỊNH LUẬT LÓPEZ DE PRADO: Đa dạng hóa danh mục thực chất không phải là mua nhiều cổ phiếu khác nhau, mà là phân bổ rủi ro đồng đều giữa các cụm rủi ro độc lập (Independent Risk Clusters). Hai mươi mã cổ phiếu bất động sản dù khác nhau về tên gọi nhưng thực chất thuộc cùng một nguồn rủi ro tín dụng và lãi suất. Markowitz hoàn toàn mù quáng trước cấu trúc cây phân cấp này!
2. Giải Thuật HRP 3 Bước Của Marcos López de Prado
Thuật toán Hierarchical Risk Parity chia nhỏ bài toán phân bổ thành 3 bước dựa trên Machine Learning không giám sát:
BƯỚC 1: CỤM HÌNH CÂY
Tree Clustering
Chuyển ma trận tương quan thành ma trận khoảng cách $d_{i,j} = \sqrt{\frac{1}{2}(1 - \rho_{i,j})}$ và xây dựng biểu đồ phân nhánh Dendrogram.
BƯỚC 2: BÁN CHÉO HÓA
Quasi-Diagonalization
Sắp xếp lại thứ tự các tài sản sao cho các tài sản tương quan cao nhất nằm cạnh nhau dọc đường chéo chính của ma trận.
BƯỚC 3: PHÂN CHIA ĐỆ QUY
Recursive Bisection
Chia đôi cây đệ quy từ trên xuống dưới, phân bổ vốn theo tỷ lệ nghịch đảo phương sai từng nhánh mà không cần nghịch đảo ma trận.
3. Sơ Đồ So Sánh: Markowitz Covariance Collapse vs HRP Tree Clustering
Sơ đồ sau minh họa sự khác biệt căn bản giữa việc nghịch đảo ma trận truyền thống (dễ dẫn đến suy biến) và phương pháp phân nhánh cây HRP:
4. Thư Viện Tối Ưu Hiện Đại: Riskfolio-Lib & skfolio
Thay vì tự lập trình lại các thuật toán tối ưu phức tạp từ đầu, cộng đồng Quant Python ngày nay sử dụng hai thư viện chuẩn công nghiệp:
Tiêu Chí So Sánh
Riskfolio-Lib (Dany Cajas)
skfolio (Scikit-Learn Ecosystem)
Triết Lý Thiết Kế
Chuyên biệt cho quản trị rủi ro định lượng thể chế.
Tuân thủ chuẩn mực Scikit-Learn (fit, transform, predict).
Thước Đo Rủi Ro Hỗ Trợ
24 thước đo: Mean-CVaR, Mean-CDaR, EVaR, Entropic Value at Risk, Ulcer Index, Worst Case.
Xuất báo cáo PDF/HTML chuyên nghiệp với các lát cắt rủi ro chi tiết.
Hỗ trợ GridSearchCV, RandomizedSearchCV để tuning siêu tham số danh mục.
💡
ƯU THẾ CỦA MEAN-CVaR (EXPECTED SHORTFALL): Trong điều kiện thị trường lao dốc, phương sai (Variance) không phản ánh được mức độ thảm họa. Tối ưu theo Mean-CVaR (Conditional Value-at-Risk ở mức tin cậy 95%) đảm bảo rằng danh mục tập trung giảm thiểu mức lỗ trung bình trong 5% các kịch bản tồi tệ nhất, bảo vệ tài khoản khỏi nguy cơ cháy quỹ.
5. Triển Khai Code Python Thực Chiến
Dưới đây là mã nguồn Python hoàn chỉnh xây dựng danh mục HRP và so sánh với mô hình Mean-CVaR bằng riskfolio-lib:
import numpy as np
import pandas as pd
import riskfolio as rp
defoptimize_portfolio_hrp_and_cvar(returns_df: pd.DataFrame):
"""
Xây dựng danh mục Hierarchical Risk Parity (HRP) và Mean-CVaR bằng Riskfolio-Lib
returns_df: DataFrame chứa lợi nhuận hàng ngày của rổ tài sản
"""# 1. KHỞI TẠO ĐỐI TƯỢNG HRP TỪ RISKFOLIO
port_hrp = rp.HCPortfolio(returns=returns_df)
# Tối ưu hóa phân cụm HRP với thước đo rủi ro CVaR
w_hrp = port_hrp.optimization(
model='HRP', # Hierarchical Risk Parity
codependence='pearson', # Ma trận đồng phụ thuộc
rm='CVaR', # Thước đo rủi ro Conditional Value-at-Risk
rf=0.04 / 252, # Lãi suất phi rủi ro ngày
linkage='ward'# Phương pháp liên kết Ward
)
print("=== TRỌNG SỐ TỐI ƯU DANH MỤC HRP (MEAN-CVaR) ===")
print((w_hrp * 100).round(2))
# 2. XÂY DỰNG DANH MỤC TRUYỀN THỐNG ĐỂ SO SÁNH
port_classic = rp.Portfolio(returns=returns_df)
port_classic.assets_stats(method_mu='hist', method_cov='hist')
# Tối ưu hóa Sharpe tỷ lệ với ràng buộc không bán khống
w_markowitz = port_classic.optimization(
model='Classic',
rm='MV', # Standard Mean-Variance
obj='Sharpe', # Tối đa hóa Sharpe
rf=0.04 / 252,
l=0
)
return w_hrp, w_markowitz
💡
TỔNG KẾT BÀI HỌC: Nắm vững Hierarchical Risk Parity và các thước đo rủi ro phi đối xứng (CVaR, CDaR) giúp danh mục của bạn miễn nhiễm trước thảm họa suy biến ma trận của Markowitz. Nhưng một hệ thống giao dịch xuất sắc không thể hoàn thiện nếu thiếu một báo cáo thẩm định hiệu suất chuẩn thể chế và chiến lược thoát lệnh tối ưu. Hãy cùng đến với Phần 5: Giải mã QuantStats Tearsheets và Tối ưu hóa Điểm Thoát Lệnh (Exit Optimization)!
🧪
Biên Soạn: Học Viện Giao Dịch — Hàng Hóa Plus
Chuỗi bài giảng Applied Quant Science được nghiên cứu và phát triển dựa trên hệ sinh thái Sunday Quant Scientist (OpenBB, Polars, PyTimeTK, Riskfolio-Lib).