Giới thiệu chung về mô hình Markowitz

Mô hình Markowitz, hay còn gọi là Mô hình Tối ưu hoá Danh mục đầu tư (Mean-Variance Optimization), là một trong những nền tảng quan trọng nhất của lý thuyết tài chính hiện đại. Được Harry Markowitz giới thiệu vào năm 1952, mô hình này dựa trên quan niệm rằng nhà đầu tư luôn muốn tối đa hoá lợi nhuận kỳ vọng đồng thời giảm thiểu rủi ro (được đo bằng phương sai hoặc độ lệch chuẩn).

Trong thực tiễn, việc vẽ hàm Markowitz (còn gọi là đường biên hiệu quả – Efficient Frontier) giúp nhà đầu tư hình dung mối quan hệ giữa lợi nhuận kỳ vọng và rủi ro của các danh mục đầu tư khác nhau, từ đó lựa chọn danh mục tối ưu phù hợp với khẩu vị rủi ro.

Bài viết này sẽ hướng dẫn chi tiết cách vẽ hàm Markowitz, bao gồm:

  1. Thu thập và chuẩn bị dữ liệu (lợi nhuận lịch sử, phương sai, hiệp phương sai).
  2. Tính toán các tham số cần thiết (trung bình lợi nhuận, ma trận hiệp phương sai, vector trọng số).
  3. Xây dựng mô hình tối ưu hoá (bằng công cụ Excel, Python, R…).
  4. Vẽ đường biên hiệu quả và đánh giá các danh mục (điểm CML, CAL, CAPM…).
  5. Phân tích và giải thích kết quả, đồng thời đưa ra những lưu ý thực tiễn.

1. Thu thập và chuẩn bị dữ liệu

1.1. Lựa chọn tài sản

  • Số lượng tài sản (n): Đối với mục đích học tập, thường chọn 4‑6 tài sản để dễ dàng tính toán và trực quan hoá. Khi số tài sản quá lớn, việc tính toán sẽ phức tạp hơn và yêu cầu phần mềm mạnh hơn.
  • Loại tài sản: Cổ phiếu, trái phiếu, quỹ ETF, hàng hoá… Tùy vào mục tiêu và phạm vi nghiên cứu.

1.2. Dữ liệu lịch sử

  • Nguồn dữ liệu: Yahoo Finance, Google Finance, Bloomberg, Reuters, hoặc dữ liệu nội bộ công ty.
  • Khoảng thời gian: Tối thiểu 2‑3 năm dữ liệu hàng ngày hoặc hàng tuần để tính toán ổn định. Đối với các tài sản ít giao dịch, có thể dùng dữ liệu hàng tháng.
  • Biến số cần lấy: Giá đóng cửa (adjusted close) để tính lợi nhuận.

1.3. Tính lợi nhuận lịch sử

Cách Vẽ Hàm Markowitz
Cách Vẽ Hàm Markowitz

Lợi nhuận thường được tính theo công thức log‑return hoặc simple return:

  • Simple return:

    r_{t} = \frac{P_{t} – P_{t-1}}{P_{t-1}}

  • Log return:

    r_{t} = \ln\left(\frac{P_{t}}{P_{t-1}}\right)

Log‑return có ưu điểm là tính cộng dồn được và phù hợp cho việc giả định phân phối chuẩn.

Sau khi tính xong, chúng ta tạo ma trận lợi nhuận (\mathbf{R}) có kích thước (T \times n) (T = số quan sát, n = số tài sản).

2. Tính toán các tham số thống kê

2.1. Vector lợi nhuận kỳ vọng (\mu)

\mu_i = \frac{1}{T}\sum_{t=1}^{T} r_{i,t}

Kết quả là một vector cột (\mu) kích thước (n \times 1).

2.2. Ma trận hiệp phương sai (\Sigma)

\Sigma_{ij} = \frac{1}{T-1}\sum_{t=1}^{T}(r_{i,t} – \mu_i)(r_{j,t} – \mu_j)

(\Sigma) là ma trận vuông (n \times n), đối xứng và dương xác định (nếu dữ liệu đủ phong phú).

2.3. Độ lệch chuẩn (rủi ro) của từng tài sản

\sigma_i = \sqrt{\Sigma_{ii}}

2.4. Vector trọng số (\mathbf{w})

Cách Vẽ Hàm Markowitz
Cách Vẽ Hàm Markowitz

Mỗi danh mục đầu tư được biểu diễn bằng một vector trọng số (\mathbf{w} = (w_1, w_2, …, w_n)^T) thỏa mãn:

\sum_{i=1}^{n} w_i = 1 \quad \text{và} \quad w_i \ge 0 \ \text{(nếu không cho phép bán khống)}

3. Xây dựng mô hình tối ưu hoá

3.1. Bài toán Markowitz truyền thống

Mục tiêu: Giảm thiểu phương sai (\mathbf{w}^T \Sigma \mathbf{w}) cho một mức lợi nhuận kỳ vọng (\mu_p) cố định.

\begin{aligned}
\min_{\mathbf{w}} \quad & \mathbf{w}^T \Sigma \mathbf{w} \
\text{s.t.} \quad & \mathbf{w}^T \mu = \mu_p \
& \mathbf{1}^T \mathbf{w} = 1 \
& w_i \ge 0 \; (\text{nếu không cho phép short})
\end{aligned}

Hoặc ngược lại, tối đa hoá lợi nhuận kỳ vọng cho một mức rủi ro (\sigma_p) cố định.

3.2. Giải bằng công cụ Excel (Solver)

  1. Tạo bảng dữ liệu:
  2. Cột A: Tên tài sản
  3. Cột B: Trọng số (w_i) (đặt giá trị khởi tạo, ví dụ 1/n).
  4. Cột C: Lợi nhuận kỳ vọng (\mu_i).
  5. Cột D: Độ lệch chuẩn (\sigma_i).

  6. Tính lợi nhuận danh mục:

    \text{Expected Return} = \mathbf{w}^T \mu = \sum w_i \mu_i

  7. Tính rủi ro danh mục (phương sai):

  8. Tạo ma trận hiệp phương sai trong một vùng bảng (ví dụ E2:H5).
  9. Dùng công thức ma trận: =MMULT(TRANSPOSE(B2:B5), MMULT(E2:H5, B2:B5)) để tính phương sai.
  10. Độ lệch chuẩn = =SQRT(result).

  11. Mở Solver:

  12. Set Objective: giảm thiểu ô chứa phương sai.
  13. By Changing Variable Cells: ô chứa trọng số.
  14. Constraints:
    • SUM(B2:B5) = 1
    • Expected Return >= mục tiêu (hoặc Expected Return = mục tiêu nếu muốn một điểm cố định)
    • B2:B5 >= 0 (nếu không cho phép short).
  15. Chọn GRG Nonlinear hoặc Simplex LP (đối với bài toán tuyến tính).

  16. Lặp lại: Thay đổi mục tiêu lợi nhuận để tạo ra nhiều điểm trên đường biên hiệu quả.

3.3. Giải bằng Python (NumPy, SciPy, cvxpy)

import numpy as np
import pandas as pd
import cvxpy as cp
import matplotlib.pyplot as plt # 1. Load dữ liệu
prices = pd.read_csv('prices.csv', index_col=0, parse_dates=True)
returns = np.log(prices / prices.shift(1)).dropna() # 2. Thống kê
mu = returns.mean().values # (n,)
Sigma = returns.cov().values # (n, n) n = len(mu) # 3. Hàm tạo danh mục cho một mức lợi nhuận mục tiêu
def efficient_portfolio(target_ret): w = cp.Variable(n) risk = cp.quad_form(w, Sigma) # w^T Sigma w constraints = cp.sum(w) == 1, mu @ w == target_ret, w >= 0 # không cho short prob = cp.Problem(cp.Minimize(risk), constraints) prob.solve() return w.value, np.sqrt(risk.value) # trọng số, độ lệch chuẩn # 4. Tạo đường biên hiệu quả
target_returns = np.linspace(mu.min(), mu.max(), 100)
risks = weights = for r in target_returns: w_opt, sigma_opt = efficient_portfolio(r) risks.append(sigma_opt) weights.append(w_opt) # 5. Vẽ
plt.figure(figsize=(10,6))
plt.plot(risks, target_returns, 'b-', lw=2, label='Đường biên hiệu quả')
plt.title('Đường biên hiệu quả Markowitz')
plt.xlabel('Độ lệch chuẩn (Rủi ro)')
plt.ylabel('Lợi nhuận kỳ vọng')
plt.legend()
plt.grid(True)
plt.show()

Giải thích mã:

  • cp.quad_form(w, Sigma) tính (\mathbf{w}^T \Sigma \mathbf{w}).
  • mu @ w là tích vô hướng, đại diện cho lợi nhuận kỳ vọng.
  • Vòng lặp tạo 100 danh mục với mức lợi nhuận mục tiêu khác nhau, cho ra các cặp (rủi ro, lợi nhuận) để vẽ đường biên.

3.4. Giải bằng R (Package quadprog)

Cách Vẽ Hàm Markowitz
Cách Vẽ Hàm Markowitz
library(quadprog) # Dữ liệu
mu <- colMeans(returns) # vector lợi nhuận kỳ vọng
Sigma <- cov(returns) # ma trận hiệp phương sai
n <- length(mu) # Hàm tạo danh mục tối ưu cho mục tiêu lợi nhuận r
efficient.portfolio <- function(r){ Dmat <- 2Sigma dvec <- rep(0, n) Amat <- cbind(rep(1, n), mu, diag(n)) bvec <- c(1, r, rep(0, n)) result <- solve.QP(Dmat, dvec, Amat, bvec, meq=2) list(w = result$solution, sigma = sqrt(t(result$solution) %% Sigma %% result$solution))
} target.r <- seq(min(mu), max(mu), length.out=100)
out <- lapply(target.r, efficient.portfolio) risks <- sapply(out, function(x) x$sigma)
weights <- sapply(out, function(x) x$w) plot(risks, target.r, type='l', col='blue', lwd=2, xlab='Độ lệch chuẩn (Rủi ro)', ylab='Lợi nhuận kỳ vọng', main='Đường biên hiệu quả Markowitz')
grid()

4. Vẽ hàm Markowitz và các đường hỗ trợ

4.1. Đường biên hiệu quả (Efficient Frontier)

Sau khi có các cặp (rủi ro, lợi nhuận) từ bước tối ưu hoá, ta vẽ chúng trên mặt phẳng σ – μ. Đường cong này luôn có hình dạng làm cong lên (convex) và nằm trên phía trên của tập hợp tất cả các danh mục khả thi.

4.2. Đường CML (Capital Market Line)

Nếu có tài sản không rủi ro (risk‑free asset) với lợi nhuận (r_f) và độ lệch chuẩn 0, ta có thể kết hợp tài sản rủi ro với tài sản không rủi ro để tạo ra đường CML:

\text{CML}: \ \mu_p = r_f + \frac{\mu_m – r_f}{\sigma_m} \sigma_p

Trong đó ((\mu_m, \sigma_m)) là cặp lợi nhuận‑rủi ro của danh mục thị trường (tổng hợp tất cả tài sản rủi ro). Đường này là đường thẳng tiếp xúc duy nhất với đường biên hiệu quả tại danh mục thị trường.

Cách Vẽ Hàm Markowitz
Cách Vẽ Hàm Markowitz

4.3. Đường CAL (Capital Allocation Line)

Nếu không có danh mục thị trường, mỗi cặp tài sản rủi ro + tài sản không rủi ro sẽ tạo ra một CAL riêng. Khi vẽ nhiều CAL, ta quan sát được tập hợp các điểm tối ưu – vòng tròn nội tiếp của các CAL sẽ trùng với đường biên hiệu quả.

4.4. Đồ thị bổ sung

  • Scatter plot các tài sản riêng lẻ (σ_i, μ_i) để thấy vị trí của chúng so với đường biên.
  • Mark các danh mục tối ưu: Minimum Variance Portfolio (MVP) – điểm có σ nhỏ nhất trên đường biên, và Tangency Portfolio – điểm tiếp xúc của CML.
  • Hiển thị trọng số: Khi di chuyển trên đường biên, hiển thị trọng số của từng tài sản giúp người dùng hiểu cách phân bổ thay đổi.

Ví dụ (Python + Matplotlib):

# Vẽ các tài sản
plt.scatter(np.sqrt(np.diag(Sigma)), mu, c='red', marker='o', s=100, label='Tài sản')
for i, txt in enumerate(returns.columns): plt.annotate(txt, (np.sqrt(Sigmai,i), mui), textcoords="offset points", xytext=(5,-5)) # Vẽ đường biên hiệu quả
plt.plot(risks, target_returns, 'b-', lw=2, label='Đường biên hiệu quả') # Tính và vẽ CML
rf = 0.02 # lợi nhuận không rủi ro 2%
# Tìm danh mục thị trường (tangency)
inv_Sigma = np.linalg.inv(Sigma)
ones = np.ones(n)
w_mkt = inv_Sigma @ (mu - rfones)
w_mkt = w_mkt / (ones @ inv_Sigma @ (mu - rfones))
mu_mkt = mu @ w_mkt
sigma_mkt = np.sqrt(w_mkt.T @ Sigma @ w_mkt) # Đường CML
sigma_cml = np.linspace(0, sigma_mkt1.5, 100)
mu_cml = rf + (mu_mkt - rf)/sigma_mkt sigma_cml
plt.plot(sigma_cml, mu_cml, 'g--', lw=2, label='CML') plt.legend()
plt.show()

5. Phân tích kết quả và các lưu ý thực tiễn

5.1. Đánh giá danh mục tối ưu

  • Minimum Variance Portfolio (MVP): Được xác định bằng cách đặt (\mu_p) ở mức thấp nhất trên đường biên. Thường có trọng số lớn ở các tài sản có độ biến động thấp và hệ số tương quan thấp.
  • Tangency Portfolio (Market Portfolio): Nơi CML tiếp xúc với đường biên. Đây là danh mục có Sharpe Ratio cao nhất:

    \text{Sharpe} = \frac{\mu_p – r_f}{\sigma_p}

    Đối với nhà đầu tư có khẩu vị rủi ro trung bình, đây thường là lựa chọn hợp lý.

5.2. Giới hạn của mô hình Markowitz

Nhược điểm Mô tả Hậu quả
Giả định lợi nhuận chuẩn Lợi nhuận được mô hình hoá bằng phân phối chuẩn Không phản ánh đuôi dày (fat‑tails) của thị trường
Dữ liệu lịch sử không phản ánh tương lai Các biến động lịch sử có thể thay đổi Rủi ro ước tính có thể sai lệch
Không tính đến chi phí giao dịch, thuế Giả định danh mục có thể tái cân bằng liên tục Thực tế lợi nhuận giảm
Độ nhạy cao với ước lượng hiệp phương sai Sai số trong ước lượng làm thay đổi trọng số lớn Danh mục có thể không ổn định

5.3. Các cải tiến thực tiễn

Cách Vẽ Hàm Markowitz
Cách Vẽ Hàm Markowitz
  1. Mô hình Black‑Litterman: Kết hợp quan điểm chuyên gia với ma trận hiệp phương sai để giảm độ nhạy.
  2. Mô hình CVaR (Conditional Value at Risk): Thay thế phương sai bằng CVaR để đo rủi ro tail.
  3. Shrinkage Estimators: Sử dụng kỹ thuật làm co ma trận hiệp phương sai (Ledoit‑Wolf) để cải thiện độ ổn định.
  4. Regularization (Lasso, Ridge): Thêm penalty vào trọng số để tránh quá khớp.

5.4. Kiểm tra độ ổn định của đường biên

  • Bootstrap: Lấy lại mẫu ngẫu nhiên từ dữ liệu lịch sử, tính lại đường biên, xem sự dao động.
  • Rolling Window: Tính toán lại mỗi 6‑12 tháng để xem đường biên có thay đổi như thế nào.

5.5. Áp dụng trong quản lý tài sản thực tế

  • Xác định khẩu vị rủi ro: Dựa vào Sharpe Ratio, mức độ chấp nhận drawdown.
  • Cân nhắc ràng buộc thực tế: Giới hạn tỷ lệ cổ phiếu, tối đa % tài sản trong một ngành, hoặc yêu cầu tối thiểu về thanh khoản.
  • Thực hiện rebalancing: Định kỳ (hàng tháng/quý) hoặc khi lệch trọng số vượt mức cho phép.

6. Kết luận

Việc vẽ hàm Markowitz không chỉ là một bài tập toán học mà còn là công cụ mạnh mẽ giúp nhà đầu tư hiểu rõ mối quan hệ giữa lợi nhuận và rủi ro, từ đó đưa ra quyết định phân bổ tài sản hợp lý. Bằng cách:

  1. Thu thập dữ liệu chính xác,
  2. Tính toán các tham số thống kê (lợi nhuận kỳ vọng, hiệp phương sai),
  3. Giải bài toán tối ưu hoá bằng các công cụ như Excel Solver, Python (cvxpy) hoặc R (quadprog),
  4. Vẽ đường biên hiệu quả cùng các đường hỗ trợ như CML, CAL,
  5. Phân tích và điều chỉnh dựa trên thực tiễn và các cải tiến mô hình,

Bạn sẽ có một nền tảng vững chắc để xây dựng danh mục đầu tư tối ưu, giảm thiểu rủi ro và tối đa hoá lợi nhuận trong môi trường tài chính đầy biến động.

Hãy bắt đầu với dữ liệu thực tế của mình, thực hành các bước trên, và dần dần nâng cao bằng các mô hình tiên tiến hơn như Black‑Litterman hay CVaR. Chúc bạn thành công trong hành trình quản lý danh mục đầu tư!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *