16  Mô hình định giá tài sản vốn (CAPM)

16.1 Từ danh mục hiệu quả đến giá cân bằng

Chương trước về Lý thuyết danh mục đầu tư hiện đại (MPT) đã chỉ ra cách một nhà đầu tư có thể xây dựng các danh mục đánh đổi tối ưu giữa rủi ro và lợi nhuận kỳ vọng. Nhưng MPT để ngỏ một câu hỏi then chốt: điều gì quyết định chính các lợi nhuận kỳ vọng? Tại sao một số tài sản đòi hỏi phần bù rủi ro cao hơn những tài sản khác?

Mô hình định giá tài sản vốn (CAPM) trả lời câu hỏi này. Được phát triển đồng thời bởi Sharpe (1964), Lintner (1965) và Mossin (1966), CAPM mở rộng MPT để giải thích tài sản nên được định giá như thế nào ở trạng thái cân bằng khi mọi nhà đầu tư đều tuân theo nguyên tắc tối ưu hóa trung bình–phương sai. Nhận định trung tâm của CAPM vừa tao nhã vừa trái với trực giác: không phải mọi rủi ro đều được bù đắp. Chỉ thành phần rủi ro không thể triệt tiêu bằng đa dạng hóa (tức là rủi ro hệ thống) mới đòi hỏi phần bù rủi ro ở trạng thái cân bằng.

CAPM vẫn là nền tảng của lý thuyết định giá tài sản, không phải vì nó mô tả thực tế một cách hoàn hảo, mà vì nó cung cấp khung nhất quán đơn giản nhất để hiểu mối quan hệ giữa rủi ro và lợi nhuận kỳ vọng. Mọi mô hình mở rộng hay thay thế trong định giá tài sản (ví dụ, từ các nhân tố Fama-French đến định giá dựa trên tiêu dùng) đều xây dựng trên, hoặc phản biện lại, logic nền tảng của CAPM.

Trong chương này, chúng ta suy ra CAPM từ các nguyên lý đầu tiên, minh họa nền tảng lý thuyết của mô hình, và trình bày cách ước lượng các tham số của nó bằng thực nghiệm. Chúng ta tải dữ liệu thị trường chứng khoán, ước lượng beta bằng phân tích hồi quy, và đánh giá hiệu quả của tài sản so với dự báo của mô hình.

Hiện mã
import pandas as pd
import numpy as np
import tidyfinance as tf

from plotnine import *
from mizani.formatters import percent_format
from adjustText import adjust_text

16.2 Rủi ro hệ thống và rủi ro đặc thù

Trước khi đi vào phần toán học, chúng ta cần hiểu sự phân biệt cơ bản giúp CAPM vận hành: sự khác biệt giữa rủi ro hệ thống và rủi ro đặc thù.

16.2.1 Rủi ro đặc thù: có thể đa dạng hóa và không được bù đắp

Hãy xét những sự kiện ảnh hưởng đến từng công ty riêng lẻ nhưng không ảnh hưởng đến thị trường nói chung: một CEO bất ngờ từ chức, một sản phẩm ra mắt thất bại, lợi nhuận làm các nhà phân tích thất vọng, hoặc một nhà máy bị cháy. Những sự kiện riêng của công ty này có thể tác động mạnh đến giá cổ phiếu từng công ty, nhưng chúng có xu hướng triệt tiêu lẫn nhau trong một danh mục đa dạng hóa. Khi một công ty gặp tin xấu, công ty khác thường có tin tốt; các cú sốc phần lớn không tương quan với nhau.

Rủi ro đặc thù (hay rủi ro riêng của doanh nghiệp) này có thể được loại bỏ thông qua đa dạng hóa. Bằng cách nắm giữ một danh mục gồm nhiều cổ phiếu, nhà đầu tư có thể giảm rủi ro đặc thù xuống gần bằng không. Vì rủi ro này có thể tránh được mà không tốn chi phí, nhà đầu tư không nên kỳ vọng được bù đắp cho việc gánh chịu nó. Ở trạng thái cân bằng, rủi ro đặc thù không mang lại phần bù nào.

16.2.2 Rủi ro hệ thống: không thể đa dạng hóa và được định giá

Ngược lại, rủi ro hệ thống ảnh hưởng đồng thời đến mọi tài sản. Suy thoái kinh tế, thay đổi lãi suất, khủng hoảng địa chính trị và đại dịch tác động đến hầu như mọi công ty ở một mức độ nào đó. Không một mức đa dạng hóa nào có thể loại bỏ mức độ phơi nhiễm trước những cú sốc trên toàn nền kinh tế này; chúng là điều vốn có khi tham gia vào thị trường.

Vì rủi ro hệ thống không thể triệt tiêu bằng đa dạng hóa, nhà đầu tư thực sự không ưa nó. Họ phải được bù đắp khi gánh chịu nó. CAPM chính thức hóa trực giác này: lợi nhuận kỳ vọng chỉ nên phụ thuộc vào rủi ro hệ thống, chứ không phải tổng rủi ro. Hai tài sản có cùng tổng độ biến động có thể có lợi nhuận kỳ vọng rất khác nhau nếu mức phơi nhiễm rủi ro hệ thống của chúng khác nhau.

16.2.3 Một minh họa đơn giản

Hãy hình dung hai cổ phiếu có cùng độ biến động 30% mỗi năm. Cổ phiếu A là một công ty khai thác vàng có lợi nhuận biến động ngược chiều với toàn thị trường: nó hoạt động tốt khi nền kinh tế khó khăn và kém khi nền kinh tế bùng nổ. Cổ phiếu B là một nhà bán lẻ hàng xa xỉ khuếch đại các biến động của thị trường: tăng vọt khi thời thế thuận lợi và sụp đổ khi thời thế bất lợi.

Cổ phiếu nào nên mang lại lợi nhuận kỳ vọng cao hơn? Trực giác có thể gợi ý rằng chúng nên bằng nhau vì cả hai có cùng độ biến động. Nhưng CAPM nói rằng Cổ phiếu B nên mang lại lợi nhuận cao hơn đáng kể. Vì sao? Vì Cổ phiếu B hoạt động kém đúng vào lúc tổng tài sản của nhà đầu tư vốn đã sụt giảm (trong các đợt thị trường sụp đổ), khiến lợi nhuận của nó đặc biệt đau đớn. Ngược lại, Cổ phiếu A đóng vai trò như một loại bảo hiểm. Hiệu quả mạnh của nó trong các giai đoạn thị trường suy giảm bù đắp một phần khoản lỗ ở nơi khác trong danh mục. Nhà đầu tư coi trọng tính chất bảo hiểm này và sẵn sàng chấp nhận lợi nhuận kỳ vọng thấp hơn để đổi lấy nó.

Đây là nhận định cốt lõi của CAPM: lợi nhuận kỳ vọng bù đắp cho nhà đầu tư về mức phơi nhiễm rủi ro hệ thống, được đo bằng việc lợi nhuận của một tài sản đồng biến với danh mục thị trường như thế nào.

16.3 Chuẩn bị dữ liệu

Tiếp nối phân tích ở chương trước, chúng ta xem xét các cổ phiếu cấu thành VN30 làm tập hợp tài sản. Chúng ta tải và chuẩn bị dữ liệu lợi nhuận theo tháng:

Hiện mã
vn30_symbols = [
    "ACB", "BCM", "BID", "BVH", "CTG", "FPT", "GAS", "GVR", "HDB", "HPG",
    "MBB", "MSN", "MWG", "PLX", "POW", "SAB", "SHB", "SSB", "STB", "TCB",
    "TPB", "VCB", "VHM", "VIB", "VIC", "VJC", "VNM", "VPB", "VRE", "EIB"
]
Hiện mã
import os
import boto3
from botocore.client import Config
from io import BytesIO

class ConnectMinio:
    def __init__(self):
        self.MINIO_ENDPOINT = os.environ["MINIO_ENDPOINT"]
        self.MINIO_ACCESS_KEY = os.environ["MINIO_ACCESS_KEY"]
        self.MINIO_SECRET_KEY = os.environ["MINIO_SECRET_KEY"]
        self.REGION = os.getenv("MINIO_REGION", "us-east-1")

        self.s3 = boto3.client(
            "s3",
            endpoint_url=self.MINIO_ENDPOINT,
            aws_access_key_id=self.MINIO_ACCESS_KEY,
            aws_secret_access_key=self.MINIO_SECRET_KEY,
            region_name=self.REGION,
            config=Config(signature_version="s3v4"),
        )

    def test_connection(self):
        resp = self.s3.list_buckets()
        print("Connected. Buckets:")
        for b in resp.get("Buckets", []):
            print(" -", b["Name"])


conn = ConnectMinio()
s3 = conn.s3
conn.test_connection()

bucket_name = os.environ["MINIO_BUCKET"]

prices = pd.read_csv(
    BytesIO(
        s3.get_object(
            Bucket=bucket_name,
            Key="historycal_price/dataset_historical_price.csv"
        )["Body"].read()
    ),
    low_memory=False
)
Connected. Buckets:
 - dsteam-data
 - rawbctc

Chúng ta xử lý dữ liệu giá thô để tính giá đóng cửa điều chỉnh và chuẩn hóa tên cột:

Hiện mã
prices["date"] = pd.to_datetime(prices["date"])
prices["adjusted_close"] = prices["close_price"] * prices["adj_ratio"]
prices = prices.rename(columns={
    "vol_total": "volume",
    "open_price": "open",
    "low_price": "low",
    "high_price": "high",
    "close_price": "close"
})
prices = prices.sort_values(["symbol", "date"])
Hiện mã
prices_daily = prices[prices["symbol"].isin(vn30_symbols)]
prices_daily[["date", "symbol", "adjusted_close"]].head(3)
date symbol adjusted_close
18176 2010-01-04 ACB 329.408244
18177 2010-01-05 ACB 329.408244
18178 2010-01-06 ACB 320.258015

16.3.1 Tính lợi nhuận tháng

Chúng ta tổng hợp giá ngày thành tần suất tháng. Dùng lợi nhuận tháng thay vì lợi nhuận ngày có nhiều ưu điểm đối với phân tích danh mục: lợi nhuận tháng ít nhiễu hơn, xấp xỉ phân phối chuẩn tốt hơn, và giảm tác động của các hiệu ứng vi cấu trúc như hiệu ứng nảy giá mua–bán.

Hiện mã
returns_monthly = (prices_daily
    .assign(
        date=prices_daily["date"].dt.to_period("M").dt.to_timestamp("M")
    )
    .groupby(["symbol", "date"], as_index=False)
    .agg(adjusted_close=("adjusted_close", "last"))
    .sort_values(["symbol", "date"])
    .assign(
        ret=lambda x: x.groupby("symbol")["adjusted_close"].pct_change()
    )
)

returns_monthly.head(3)
symbol date adjusted_close ret
0 ACB 2010-01-31 291.975489 NaN
1 ACB 2010-02-28 303.621235 0.039886
2 ACB 2010-03-31 273.784658 -0.098269

16.4 Tài sản phi rủi ro và tập cơ hội đầu tư

16.4.1 Bổ sung tài sản phi rủi ro

Chương trước về MPT xét các danh mục gồm hoàn toàn tài sản rủi ro, đòi hỏi các trọng số danh mục có tổng bằng một. CAPM đưa vào một yếu tố mới then chốt: một tài sản phi rủi ro trả lãi suất không đổi \(r_f\) với độ biến động bằng không.

Sự bổ sung tưởng chừng đơn giản này làm thay đổi căn bản tập cơ hội đầu tư. Khi có tài sản phi rủi ro, nhà đầu tư có thể chọn gửi một phần tài sản vào tài sản an toàn và đầu tư phần còn lại vào các tài sản rủi ro. Họ cũng có thể vay ở mức lãi suất phi rủi ro để tăng đòn bẩy cho các vị thế rủi ro của mình.

Gọi \(\omega \in \mathbb{R}^N\) là các trọng số danh mục trong \(N\) tài sản rủi ro. Khác với trước đây, các trọng số này không cần có tổng bằng một. Phần còn lại, \(1 - \iota'\omega\) (trong đó \(\iota\) là vector gồm toàn số một), được đầu tư vào tài sản phi rủi ro.

16.4.2 Lợi nhuận danh mục khi có tài sản phi rủi ro

Lợi nhuận kỳ vọng của danh mục kết hợp này là:

\[ \mu_\omega = \omega'\mu + (1 - \iota'\omega)r_f = r_f + \omega'(\mu - r_f) = r_f + \omega'\tilde{\mu} \]

trong đó \(\mu\) là vector lợi nhuận kỳ vọng của các tài sản rủi ro và \(\tilde{\mu} = \mu - r_f\) ký hiệu vector lợi nhuận vượt mức (lợi nhuận cao hơn lãi suất phi rủi ro).

Biểu thức này cho thấy một sự phân rã quan trọng: lợi nhuận kỳ vọng của danh mục bằng lãi suất phi rủi ro cộng với một phần bù rủi ro được xác định bởi mức độ phơi nhiễm trước các tài sản rủi ro.

16.4.3 Phương sai danh mục

Vì tài sản phi rủi ro có độ biến động bằng không và hiệp phương sai bằng không với các tài sản rủi ro, chỉ phần rủi ro đóng góp vào phương sai danh mục:

\[ \sigma_\omega^2 = \omega'\Sigma\omega \]

trong đó \(\Sigma\) là ma trận phương sai–hiệp phương sai của lợi nhuận các tài sản rủi ro. Độ biến động (độ lệch chuẩn) của danh mục là:

\[ \sigma_\omega = \sqrt{\omega'\Sigma\omega} \]

16.4.4 Thiết lập lãi suất phi rủi ro

Để có một đại diện thực tế cho lãi suất phi rủi ro, chúng ta dùng lợi suất trái phiếu chính phủ Việt Nam. Trái phiếu chính phủ của các nền kinh tế ổn định được coi là “phi rủi ro” vì chính phủ luôn có thể in tiền để thực hiện nghĩa vụ của mình (dù điều này có thể gây ra lạm phát).

Hiện mã
all_dates = pd.date_range(
    start=returns_monthly["date"].min(), 
    end=returns_monthly["date"].max(), 
    freq="ME"
)

# Vietnam 10-Year Government Bond Yield (approximately 2.52% annualized)
rf_annual = 0.0252
rf_monthly_val = (1 + rf_annual)**(1/12) - 1

risk_free_monthly = pd.DataFrame({
    "date": all_dates,
    "risk_free": rf_monthly_val
})

risk_free_monthly["date"] = (
    pd.to_datetime(risk_free_monthly["date"])
    .dt.to_period("M")
    .dt.to_timestamp("M")
)

risk_free_monthly.head(3)
date risk_free
0 2010-01-31 0.002076
1 2010-02-28 0.002076
2 2010-03-31 0.002076

Chúng ta hợp nhất lãi suất phi rủi ro với dữ liệu lợi nhuận và tính lợi nhuận vượt mức:

Hiện mã
returns_monthly = returns_monthly.merge(
    risk_free_monthly[["date", "risk_free"]], 
    on="date", 
    how="left"
)

rf = risk_free_monthly["risk_free"].mean()

returns_monthly = (returns_monthly
    .assign(
        ret_excess=lambda x: x["ret"] - x["risk_free"]
    )
    .assign(
        ret_excess=lambda x: x["ret_excess"].clip(lower=-1)
    )
)

returns_monthly.head(3)
symbol date adjusted_close ret risk_free ret_excess
0 ACB 2010-01-31 291.975489 NaN 0.002076 NaN
1 ACB 2010-02-28 303.621235 0.039886 0.002076 0.037810
2 ACB 2010-03-31 273.784658 -0.098269 0.002076 -0.100345

16.5 Danh mục tiếp tuyến: nơi mọi người cùng đầu tư

16.5.1 Suy ra danh mục rủi ro tối ưu

Khi có tài sản phi rủi ro, nhà đầu tư nên phân bổ tài sản vào các tài sản rủi ro như thế nào? Xét một nhà đầu tư muốn đạt được lợi nhuận vượt mức kỳ vọng mục tiêu \(\bar{\mu}\) với phương sai nhỏ nhất. Bài toán tối ưu hóa trở thành:

\[ \min_\omega \omega'\Sigma\omega \quad \text{subject to} \quad \omega'\tilde{\mu} = \bar{\mu} \]

Dùng phương pháp Lagrange:

\[ \mathcal{L}(\omega, \lambda) = \omega'\Sigma\omega - \lambda(\omega'\tilde{\mu} - \bar{\mu}) \]

Điều kiện bậc nhất theo \(\omega\) là:

\[ \frac{\partial \mathcal{L}}{\partial \omega} = 2\Sigma\omega - \lambda\tilde{\mu} = 0 \]

Giải ra các trọng số tối ưu:

\[ \omega^* = \frac{\lambda}{2}\Sigma^{-1}\tilde{\mu} \]

Ràng buộc \(\omega'\tilde{\mu} = \bar{\mu}\) xác định \(\lambda\):

\[ \bar{\mu} = \tilde{\mu}'\omega^* = \frac{\lambda}{2}\tilde{\mu}'\Sigma^{-1}\tilde{\mu} \implies \lambda = \frac{2\bar{\mu}}{\tilde{\mu}'\Sigma^{-1}\tilde{\mu}} \]

Thế ngược lại:

\[ \omega^* = \frac{\bar{\mu}}{\tilde{\mu}'\Sigma^{-1}\tilde{\mu}}\Sigma^{-1}\tilde{\mu} \]

16.5.2 Danh mục tiếp tuyến

Có một điều đáng chú ý: hướng của \(\omega^*\) luôn là \(\Sigma^{-1}\tilde{\mu}\), bất kể lợi nhuận mục tiêu \(\bar{\mu}\) là bao nhiêu. Chỉ có quy mô thay đổi. Điều này có nghĩa là mọi nhà đầu tư, bất kể sở thích rủi ro của họ, đều nắm giữ cùng một danh mục tài sản rủi ro. Họ chỉ khác nhau ở mức phân bổ vào danh mục này so với tài sản phi rủi ro.

Để thu được danh mục tài sản rủi ro đầu tư toàn bộ (các trọng số có tổng bằng một), chúng ta chuẩn hóa:

\[ \omega_{\text{tan}} = \frac{\omega^*}{\iota'\omega^*} = \frac{\Sigma^{-1}(\mu - r_f)}{\iota'\Sigma^{-1}(\mu - r_f)} \]

Đây được gọi là danh mục tiếp tuyến (hay danh mục có tỷ số Sharpe lớn nhất) vì nó nằm tại điểm mà đường biên hiệu quả tiếp xúc với đường thị trường vốn.

16.5.3 Tỷ số Sharpe và đường thị trường vốn

Tỷ số Sharpe đo lợi nhuận vượt mức trên mỗi đơn vị biến động:

\[ \text{Sharpe Ratio} = \frac{\mu_p - r_f}{\sigma_p} \]

Danh mục tiếp tuyến tối đa hóa tỷ số Sharpe trong tất cả các danh mục khả thi. Mọi sự kết hợp giữa tài sản phi rủi ro và danh mục tiếp tuyến nằm trên một đường thẳng trong không gian trung bình–độ lệch chuẩn, gọi là đường thị trường vốn (Capital Market Line, CML):

\[ \mu_p = r_f + \left(\frac{\mu_{\text{tan}} - r_f}{\sigma_{\text{tan}}}\right)\sigma_p \]

Độ dốc của đường này bằng tỷ số Sharpe của danh mục tiếp tuyến (tức là tỷ số Sharpe cao nhất có thể đạt được).

16.5.4 Tính danh mục tiếp tuyến

Hãy tính danh mục tiếp tuyến cho tập hợp VN30 của chúng ta:

Hiện mã
assets = (returns_monthly
    .groupby("symbol", as_index=False)
    .agg(
        mu=("ret", "mean"),
        sigma=("ret", "std")
    )
)

sigma = (returns_monthly
    .pivot(index="date", columns="symbol", values="ret")
    .cov()
)

mu = (returns_monthly
    .groupby("symbol")["ret"]
    .mean()
    .values
)
Hiện mã
# Compute tangency portfolio weights
w_tan = np.linalg.solve(sigma, mu - rf)
w_tan = w_tan / np.sum(w_tan)

# Portfolio performance metrics
mu_w = w_tan.T @ mu
sigma_w = np.sqrt(w_tan.T @ sigma @ w_tan)

efficient_portfolios = pd.DataFrame([
    {"symbol": r"$\omega_{\mathrm{tan}}$", "mu": mu_w, "sigma": sigma_w},
    {"symbol": r"$r_f$", "mu": rf, "sigma": 0}
])

sharpe_ratio = (mu_w - rf) / sigma_w

print(f"Tangency Portfolio Sharpe Ratio: {sharpe_ratio:.4f}")
print(efficient_portfolios)
Tangency Portfolio Sharpe Ratio: -0.5552
                    symbol        mu     sigma
0  $\omega_{\mathrm{tan}}$ -0.041157  0.077866
1                    $r_f$  0.002076  0.000000

16.5.5 Trực quan hóa đường biên hiệu quả khi có tài sản phi rủi ro

Hình 16.1 thể hiện đường biên hiệu quả khi có tài sản phi rủi ro. Đường biên lúc này là một đường thẳng (đường thị trường vốn) nối tài sản phi rủi ro với danh mục tiếp tuyến và kéo dài vượt ra ngoài.

Hiện mã
efficient_portfolios_figure = (
    ggplot(efficient_portfolios, aes(x="sigma", y="mu"))
    + geom_point(data=assets)
    + geom_point(data=efficient_portfolios, color="blue", size=3)
    + geom_label(
        aes(label="symbol"), 
        adjust_text={"arrowprops": {"arrowstyle": "-"}}
    )
    + scale_x_continuous(labels=percent_format())
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="Volatility (Standard Deviation)", 
        y="Expected Return",
        title="Efficient Frontier with Risk-Free Asset (VN30)"
    )
    + geom_abline(slope=sharpe_ratio, intercept=rf, linetype="dotted")
)

efficient_portfolios_figure.show()
Tiêu đề: Đường biên hiệu quả với tài sản phi rủi ro và các cổ phiếu cấu thành chỉ số VN30. Hình là biểu đồ phân tán với độ biến động trên trục hoành và lợi nhuận kỳ vọng trên trục tung. Một đường chấm biểu diễn đường thị trường vốn.
Hình 16.1: Đường biên hiệu quả khi có tài sản phi rủi ro trở thành một đường thẳng (đường thị trường vốn) nối lãi suất phi rủi ro với danh mục tiếp tuyến. Các tài sản riêng lẻ nằm dưới đường này, cho thấy lợi ích của đa dạng hóa.

Bạn có thể nhận thấy các lợi nhuận kỳ vọng ước lượng được khá thấp, thậm chí một số âm. Đây không phải là thất bại của mô hình mà phản ánh thực tế của việc ước lượng:

  1. Giai đoạn mẫu rất quan trọng: Nếu cửa sổ ước lượng bao gồm các giai đoạn thị trường suy giảm (chẳng hạn giai đoạn 2022-2023), lợi nhuận trung bình thực hiện có thể gần bằng không hoặc âm. Tối ưu hóa trung bình–phương sai lấy trung bình mẫu theo nghĩa đen.

  2. Nhiễu ước lượng ở thị trường mới nổi: Với dữ liệu biến động mạnh của thị trường mới nổi, trung bình mẫu bị nhiễu chi phối. Vài tháng cực kỳ xấu có thể kéo mức trung bình xuống dưới lãi suất phi rủi ro ngay cả khi phần bù vốn cổ phần dài hạn là dương.

Điều này làm nổi bật một thách thức cơ bản trong tối ưu hóa danh mục: các đầu vào mà chúng ta quan sát được (lợi nhuận lịch sử) là các ước lượng nhiễu của những tham số thực mà chúng ta cần (lợi nhuận kỳ vọng trong tương lai).

16.6 Phương trình CAPM: rủi ro và lợi nhuận kỳ vọng

16.6.1 Từ tối ưu hóa cá nhân đến cân bằng thị trường

Cho đến nay, chúng ta tập trung vào bài toán tối ưu hóa của một nhà đầu tư. Sức mạnh của CAPM đến từ việc xét điều gì xảy ra khi mọi nhà đầu tư cùng tối ưu hóa đồng thời.

Nếu mọi nhà đầu tư đều tuân theo tối ưu hóa trung bình–phương sai, họ đều nắm giữ một sự kết hợp nào đó giữa tài sản phi rủi ro và danh mục tiếp tuyến. Sự khác biệt duy nhất giữa các nhà đầu tư là mức chấp nhận rủi ro của họ. Nhà đầu tư e ngại rủi ro hơn nắm giữ nhiều tài sản phi rủi ro hơn, trong khi nhà đầu tư chấp nhận rủi ro thậm chí có thể vay ở mức lãi suất phi rủi ro để tăng đòn bẩy vị thế của mình trong danh mục tiếp tuyến.

16.6.2 Danh mục thị trường

Ở trạng thái cân bằng, tổng cầu đối với mỗi tài sản rủi ro phải bằng cung của nó. Vì mọi nhà đầu tư đều nắm giữ cùng một danh mục tài sản rủi ro (danh mục tiếp tuyến), các trọng số danh mục cân bằng phải bằng các trọng số theo vốn hóa thị trường. Danh mục tiếp tuyến chính là danh mục thị trường.

Nhận định này có ý nghĩa thực tiễn rất lớn: thay vì ước lượng lợi nhuận kỳ vọng và hiệp phương sai để tính danh mục tiếp tuyến, chúng ta có thể đơn giản dùng danh mục thị trường (được xấp xỉ bằng một chỉ số thị trường rộng) làm đại diện.

16.6.3 Suy ra phương trình CAPM

Từ các điều kiện bậc nhất của bài toán tối ưu hóa, chúng ta đã suy ra rằng:

\[ \tilde{\mu} = \frac{2}{\lambda}\Sigma\omega^* \]

Vì \(\omega^*\) tỷ lệ với \(\omega_{\text{tan}}\), và ở trạng thái cân bằng \(\omega_{\text{tan}}\) bằng danh mục thị trường \(\omega_m\):

\[ \tilde{\mu} = c \cdot \Sigma\omega_m \]

với một hằng số \(c\) nào đó. Phần tử thứ \(i\) của \(\Sigma\omega_m\) là:

\[ \sum_{j=1}^N \sigma_{ij}\omega_{m,j} = \text{Cov}(r_i, r_m) \]

trong đó \(r_m = \sum_j \omega_{m,j} r_j\) là lợi nhuận của danh mục thị trường.

Đối với chính danh mục thị trường:

\[ \tilde{\mu}_m = c \cdot \text{Var}(r_m) = c \cdot \sigma_m^2 \]

Do đó \(c = \tilde{\mu}_m / \sigma_m^2\), và với mọi tài sản \(i\):

\[ \tilde{\mu}_i = \frac{\tilde{\mu}_m}{\sigma_m^2} \text{Cov}(r_i, r_m) = \beta_i \tilde{\mu}_m \]

trong đó:

\[ \beta_i = \frac{\text{Cov}(r_i, r_m)}{\text{Var}(r_m)} \]

Đây là phương trình CAPM nổi tiếng:

\[ E(r_i) - r_f = \beta_i [E(r_m) - r_f] \]

16.6.4 Diễn giải beta

Beta (\(\beta_i\)) đo rủi ro hệ thống của một tài sản (tức là độ nhạy của nó trước các biến động của thị trường). Cách diễn giải khá đơn giản:

  • \(\beta = 1\): Tài sản biến động một–một với thị trường (rủi ro hệ thống trung bình)
  • \(\beta > 1\): Tài sản khuếch đại các biến động của thị trường (mạo hiểm, rủi ro hệ thống cao)
  • \(\beta < 1\): Tài sản làm giảm các biến động của thị trường (phòng thủ, rủi ro hệ thống thấp)
  • \(\beta < 0\): Tài sản biến động ngược chiều với thị trường (đóng vai trò bảo hiểm)

CAPM nói rằng lợi nhuận vượt mức kỳ vọng tỷ lệ với beta, chứ không phải với tổng độ biến động. Điều này giải thích vì sao:

  1. Tài sản có beta bằng không chỉ kiếm được lãi suất phi rủi ro (tức là rủi ro của nó hoàn toàn là rủi ro đặc thù).
  2. Tài sản có beta bằng 1 kiếm được phần bù rủi ro thị trường
  3. Tài sản có beta âm kiếm được ít hơn lãi suất phi rủi ro (tức là nhà đầu tư trả tiền cho tính chất bảo hiểm của nó).

16.7 Đường thị trường chứng khoán

CAPM dự báo một mối quan hệ tuyến tính giữa beta và lợi nhuận kỳ vọng. Mối quan hệ này được gọi là đường thị trường chứng khoán (Security Market Line, SML):

\[ E(r_i) = r_f + \beta_i [E(r_m) - r_f] \]

Khác với đường thị trường vốn (biểu diễn lợi nhuận kỳ vọng theo tổng rủi ro), đường thị trường chứng khoán biểu diễn lợi nhuận kỳ vọng theo rủi ro hệ thống (beta).

Hiện mã
betas = (sigma @ w_tan) / (w_tan.T @ sigma @ w_tan)
assets["beta"] = betas.values

price_of_risk = float(w_tan.T @ mu - rf)

assets_figure = (
    ggplot(assets, aes(x="beta", y="mu"))
    + geom_point()
    + geom_abline(intercept=rf, slope=price_of_risk)
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="Beta (Systematic Risk)", 
        y="Expected Return",
        title="Security Market Line"
    )
    + annotate("text", x=0.05, y=rf + 0.001, label="Risk-free rate")
)

assets_figure.show()

Bạn có thể thấy SML ước lượng được có độ dốc âm, điều này dường như mâu thuẫn với dự báo của CAPM. Điều này phản ánh một phần bù rủi ro thị trường ước lượng âm trong giai đoạn mẫu của chúng ta (tức là danh mục thị trường kiếm được ít hơn lãi suất phi rủi ro).

Khi phần bù rủi ro thị trường âm, CAPM dự báo rằng các cổ phiếu beta cao nên có lợi nhuận kỳ vọng thấp hơn các cổ phiếu beta thấp. Đây không phải là thất bại của mô hình, mà mô hình đang vận hành nhất quán. Đúng hơn, nó phản ánh một giai đoạn mẫu bất thường (nhưng không phải không thể xảy ra) trong đó các tài sản rủi ro có kết quả kém hơn các tài sản an toàn.

Nhận xét này làm nổi bật một sự phân biệt quan trọng: CAPM mô tả lợi nhuận kỳ vọng ở trạng thái cân bằng, nhưng lợi nhuận thực hiện trong bất kỳ giai đoạn cụ thể nào có thể khác đáng kể so với kỳ vọng do các cú sốc và bất ngờ.

16.8 Ước lượng thực nghiệm các tham số CAPM

16.8.1 Khung hồi quy

Trong thực tế, chúng ta ước lượng các tham số CAPM bằng hồi quy chuỗi thời gian. Mô hình hàm ý:

\[ r_{i,t} - r_{f,t} = \alpha_i + \beta_i(r_{m,t} - r_{f,t}) + \varepsilon_{i,t} \]

trong đó:

  • \(r_{i,t}\): Lợi nhuận của tài sản \(i\) tại thời điểm \(t\)
  • \(r_{f,t}\): Lãi suất phi rủi ro tại thời điểm \(t\)
  • \(r_{m,t}\): Lợi nhuận thị trường tại thời điểm \(t\)
  • \(\alpha_i\): Hệ số chặn (bằng không nếu CAPM đúng)
  • \(\beta_i\): Rủi ro hệ thống (hệ số góc)
  • \(\varepsilon_{i,t}\): Cú sốc đặc thù (phần dư)

16.8.2 Alpha: hiệu quả đã điều chỉnh rủi ro

Hệ số chặn \(\alpha_i\) đo hiệu quả đã điều chỉnh rủi ro. Nếu CAPM đúng hoàn toàn, alpha phải bằng không đối với mọi tài sản (tức là mọi mức lợi nhuận vượt mức đều được bù đắp chính xác bằng rủi ro hệ thống).

  • \(\alpha > 0\): Tài sản vượt trội so với lợi nhuận dự báo theo CAPM (lợi nhuận bất thường dương)
  • \(\alpha < 0\): Tài sản kém hơn so với lợi nhuận dự báo theo CAPM (lợi nhuận bất thường âm)

Alpha dương là chén thánh của quản lý chủ động: kiếm được lợi nhuận vượt quá mức mà mức phơi nhiễm rủi ro hệ thống có thể biện minh.

16.8.3 Nạp dữ liệu nhân tố

Chúng ta dùng lợi nhuận vượt mức thị trường Fama-French làm đại diện cho danh mục thị trường. Dữ liệu này cung cấp một chuẩn so sánh được chấp nhận rộng rãi và đã được điều chỉnh theo lãi suất phi rủi ro:

Hiện mã
import sqlite3

tidy_finance = sqlite3.connect(database="data/tidy_finance_python.sqlite")

factors = pd.read_sql_query(
    sql="SELECT date, smb, hml, rmw, cma, mkt_excess FROM factors_ff5_monthly",
    con=tidy_finance,
    parse_dates={"date"}
)

factors.head(3)
date smb hml rmw cma mkt_excess
0 2011-07-31 -0.015907 -0.002812 0.060525 0.045291 -0.078748
1 2011-08-31 -0.061842 0.006189 -0.022700 -0.023177 0.029906
2 2011-09-30 0.014387 0.024301 -0.006005 0.003588 -0.002173

16.8.4 Chạy các hồi quy

Chúng ta ước lượng các hồi quy CAPM cho từng cổ phiếu trong tập hợp của mình:

Hiện mã
import statsmodels.formula.api as smf

returns_excess_monthly = (returns_monthly
    .merge(factors, on="date", how="left")
    .assign(ret_excess=lambda x: x["ret"] - x["risk_free"])
)


def estimate_capm(data):
    model = smf.ols("ret_excess ~ mkt_excess", data=data).fit()
    result = pd.DataFrame({
        "coefficient": ["alpha", "beta"],
        "estimate": model.params.values,
        "t_statistic": model.tvalues.values
    })
    return result


capm_results = (returns_excess_monthly
    .groupby("symbol", group_keys=True)
    .apply(estimate_capm)
    .reset_index()
)

capm_results.head(4)
symbol level_1 coefficient estimate t_statistic
0 ACB 0 alpha -0.000826 -0.105475
1 ACB 1 beta 0.604653 4.575750
2 BCM 0 alpha 0.035093 2.368668
3 BCM 1 beta 1.032462 4.581461

16.8.5 Trực quan hóa các ước lượng alpha

Hình 16.2 thể hiện các alpha ước lượng trên toàn mẫu VN30 của chúng ta. Ý nghĩa thống kê (ở mức 95%) được biểu thị bằng màu sắc.

Hiện mã
alphas = (capm_results
    .query("coefficient == 'alpha'")
    .assign(is_significant=lambda x: np.abs(x["t_statistic"]) >= 1.96)
)

alphas["symbol"] = pd.Categorical(
    alphas["symbol"],
    categories=alphas.sort_values("estimate")["symbol"],
    ordered=True
)

alphas_figure = (
    ggplot(alphas, aes(y="estimate", x="symbol", fill="is_significant"))
    + geom_col()
    + scale_y_continuous(labels=percent_format())
    + coord_flip()
    + labs(
        x="", 
        y="Estimated Alpha (Monthly)", 
        fill="Significant at 95%?",
        title="Estimated CAPM Alphas for VN30 Index Constituents"
    )
)

alphas_figure.show()
Tiêu đề: Các alpha CAPM ước lượng cho các cổ phiếu cấu thành chỉ số VN30. Hình là biểu đồ cột với các alpha ước lượng và cho biết mỗi ước lượng có ý nghĩa thống kê ở mức 95% hay không.
Hình 16.2: Các alpha CAPM ước lượng cho các cổ phiếu cấu thành chỉ số VN30. Màu sắc biểu thị ý nghĩa thống kê ở mức tin cậy 95%. Hầu hết các alpha không thể phân biệt về mặt thống kê với không, phù hợp với dự báo của CAPM.

Phân phối của các alpha cung cấp bằng chứng về tính hợp lệ thực nghiệm của CAPM. Nếu mô hình đúng, chúng ta kỳ vọng:

  1. Hầu hết các alpha gần bằng không
  2. Ít alpha có ý nghĩa thống kê
  3. Số alpha dương và âm xấp xỉ bằng nhau

Các quy luật có hệ thống trong alpha, chẳng hạn alpha luôn dương đối với một số loại cổ phiếu nhất định, sẽ gợi ý rằng CAPM chưa đầy đủ và có thể cần thêm các nhân tố rủi ro.

16.9 Hạn chế và mở rộng

16.9.1 Vấn đề danh mục thị trường

Một thách thức cơ bản khi kiểm định CAPM là xác định danh mục thị trường. Lý thuyết đòi hỏi một danh mục bao gồm mọi tài sản có thể đầu tư, không chỉ cổ phiếu, mà cả trái phiếu, bất động sản, doanh nghiệp tư nhân, vốn nhân lực, và thậm chí cả tài sản vô hình. Trong thực tế, chúng ta dùng các đại diện như các chỉ số thị trường rộng (VNI, S&P 500), nhưng những chỉ số này chỉ nắm bắt cổ phiếu giao dịch công khai.

Hạn chế này rất sâu sắc. Như Richard Roll đã lập luận nổi tiếng, về bản chất CAPM không thể kiểm định vì danh mục thị trường thực sự không quan sát được. Mọi kiểm định CAPM đồng thời là kiểm định xem đại diện của chúng ta có biểu diễn thị trường một cách thỏa đáng hay không.

16.9.2 Beta biến thiên theo thời gian

CAPM giả định rằng beta không đổi theo thời gian, nhưng giả định này hiếm khi đúng trong thực tế. Các công ty trải qua những thay đổi ảnh hưởng đến độ nhạy thị trường của họ:

  • Thay đổi cơ cấu vốn: Tăng đòn bẩy làm tăng beta
  • Tiến hóa mô hình kinh doanh: Đa dạng hóa sang các ngành mới có thể làm thay đổi rủi ro hệ thống
  • Điều kiện thị trường: Beta thường tăng trong giai đoạn thị trường căng thẳng

Các mô hình CAPM có điều kiện (Jagannathan và Wang 1996) giải quyết vấn đề này bằng cách cho phép phần bù rủi ro và beta biến thiên theo chu kỳ kinh doanh.

16.9.3 Các hiện tượng bất thường thực nghiệm

Nhiều thập kỷ nghiên cứu thực nghiệm đã ghi nhận những quy luật trong lợi nhuận cổ phiếu mà CAPM không giải thích được:

  1. Hiệu ứng quy mô: Cổ phiếu vốn hóa nhỏ có xu hướng vượt trội cổ phiếu vốn hóa lớn, ngay cả sau khi điều chỉnh theo beta
  2. Hiệu ứng giá trị: Cổ phiếu có tỷ số giá trị sổ sách trên giá trị thị trường cao vượt trội cổ phiếu tăng trưởng
  3. Động lượng: Cổ phiếu có kết quả tốt gần đây có xu hướng tiếp tục có kết quả tốt

Những hiện tượng bất thường này gợi ý rằng rủi ro hệ thống có nhiều chiều ngoài mức phơi nhiễm thị trường.

16.9.4 Các mô hình mở rộng đa nhân tố

Những hạn chế của CAPM đã dẫn đến các mô hình định giá tài sản ngày càng tinh vi. Mô hình ba nhân tố Fama-French (Fama và French 1992) bổ sung hai nhân tố để nắm bắt các hiệu ứng quy mô và giá trị:

  • SMB (Small Minus Big): Lợi nhuận của cổ phiếu nhỏ trừ cổ phiếu lớn
  • HML (High Minus Low): Lợi nhuận của cổ phiếu giá trị trừ cổ phiếu tăng trưởng

Mô hình năm nhân tố Fama-French (Fama và French 2015) bổ sung thêm hai chiều nữa:

  • RMW (Robust Minus Weak): Lợi nhuận của các doanh nghiệp có khả năng sinh lời cao trừ các doanh nghiệp có khả năng sinh lời yếu
  • CMA (Conservative Minus Aggressive): Lợi nhuận của các doanh nghiệp đầu tư thận trọng trừ các doanh nghiệp đầu tư mạnh tay

Mô hình bốn nhân tố Carhart (Carhart 1997) bổ sung động lượng vào khung ba nhân tố.

Các phát triển lý thuyết khác bao gồm:

  • CAPM tiêu dùng: Liên kết giá tài sản với rủi ro tiêu dùng vĩ mô
  • Mô hình nhân tố Q (Hou, Xue, và Zhang 2014): Suy ra các nhân tố từ lý thuyết định giá tài sản dựa trên đầu tư
  • Lý thuyết định giá kinh doanh chênh lệch giá (Arbitrage Pricing Theory): Cho phép nhiều nguồn rủi ro hệ thống mà không cần chỉ rõ bản chất của chúng

Bất chấp những hạn chế, CAPM vẫn có giá trị như một chuẩn tham chiếu khái niệm. Nhận định cốt lõi của nó (tức là chỉ rủi ro hệ thống, không thể đa dạng hóa, mới đòi hỏi phần bù) tiếp tục định hướng cách chúng ta suy nghĩ về rủi ro và lợi nhuận.

16.10 Những điểm chính

Chương này đã giới thiệu mô hình định giá tài sản vốn và các hàm ý của nó đối với việc hiểu mối quan hệ giữa rủi ro và lợi nhuận kỳ vọng. Các nhận định chính là:

  1. Không phải mọi rủi ro đều được bù đắp: CAPM phân biệt rủi ro hệ thống (không thể triệt tiêu bằng đa dạng hóa và đòi hỏi phần bù) với rủi ro đặc thù (có thể loại bỏ thông qua đa dạng hóa và không mang lại phần bù).

  2. Danh mục tiếp tuyến mang tính phổ quát: Khi tồn tại tài sản phi rủi ro, mọi nhà đầu tư theo trung bình–phương sai đều nắm giữ cùng một danh mục tài sản rủi ro (tức là danh mục tiếp tuyến hay danh mục có tỷ số Sharpe lớn nhất). Họ chỉ khác nhau ở mức phân bổ vào danh mục này so với tài sản phi rủi ro.

  3. Ở trạng thái cân bằng, danh mục tiếp tuyến là danh mục thị trường: Vì mọi nhà đầu tư đều nắm giữ cùng một danh mục rủi ro, và tổng cầu phải bằng cung, các trọng số danh mục cân bằng là các trọng số theo vốn hóa thị trường.

  4. Lợi nhuận kỳ vọng phụ thuộc vào beta: Phương trình CAPM khẳng định lợi nhuận vượt mức kỳ vọng bằng beta nhân với phần bù rủi ro thị trường. Beta đo hiệp phương sai với danh mục thị trường, được chuẩn hóa theo phương sai thị trường.

  5. Alpha đo hiệu quả đã điều chỉnh rủi ro: Alpha dương cho thấy lợi nhuận cao hơn mức rủi ro hệ thống có thể biện minh; alpha âm cho thấy hiệu quả kém hơn.

  6. Tồn tại các thách thức thực nghiệm: Kiểm định CAPM đòi hỏi xác định danh mục thị trường, vốn không quan sát được trong thực tế. Các hiện tượng bất thường đã được ghi nhận (quy mô, giá trị, động lượng) gợi ý có thêm các nhân tố rủi ro ngoài mức phơi nhiễm thị trường.

  7. Có nhiều mô hình mở rộng: Các mô hình đa nhân tố như Fama-French mở rộng khung CAPM bằng cách bổ sung các nhân tố nắm bắt những chiều của rủi ro hệ thống mà nhân tố thị trường bỏ sót.

Sự tao nhã của CAPM nằm ở tính đơn giản: một nhân tố duy nhất (tức là mức phơi nhiễm thị trường) nên giải thích được lợi nhuận kỳ vọng ở trạng thái cân bằng. Dù thực tế phức tạp hơn, khung này cung cấp nền tảng cho toàn bộ lý thuyết định giá tài sản hiện đại.