23  Phân tích báo cáo tài chính

23.1 Từ giá thị trường đến giá trị cơ bản

Các chương trước tập trung vào cách thị trường tài chính định giá tài sản ở trạng thái cân bằng. Mô hình định giá tài sản vốn (CAPM) cho thấy lợi nhuận kỳ vọng phụ thuộc vào mức độ phơi nhiễm với rủi ro hệ thống, còn lý thuyết danh mục đầu tư hiện đại chỉ ra cách xây dựng các danh mục hiệu quả. Tuy nhiên, các khuôn khổ này coi lợi nhuận kỳ vọng và rủi ro là đã cho, chúng không giải thích những kỳ vọng ấy đến từ đâu.

Phân tích báo cáo tài chính lấp đầy khoảng trống này. Bằng cách xem xét sổ sách kế toán của doanh nghiệp, nhà đầu tư có thể hình thành đánh giá độc lập về giá trị doanh nghiệp, nhận diện các chứng khoán bị định giá sai và hiểu các động lực kinh tế thúc đẩy kết quả kinh doanh. Báo cáo tài chính là nguồn thông tin chuẩn hóa chính về hoạt động, tình hình tài chính và khả năng tạo ra tiền của doanh nghiệp. Các yêu cầu pháp lý và định dạng chuẩn hóa khiến chúng đặc biệt có giá trị. Mọi công ty niêm yết đều phải lập báo cáo tài chính, tạo ra một sân chơi bình đẳng cho phân tích.

Chương này giới thiệu ba báo cáo tài chính chính: bảng cân đối kế toán, báo cáo kết quả kinh doanh và báo cáo lưu chuyển tiền tệ. Sau đó, chúng ta trình bày cách chuyển dữ liệu kế toán thô thành các tỷ số tài chính có ý nghĩa, giúp so sánh giữa các công ty và theo thời gian. Các tỷ số này phục vụ nhiều mục đích: giúp nhà đầu tư so sánh công ty với các doanh nghiệp cùng ngành, giúp chủ nợ đánh giá rủi ro vỡ nợ, và cung cấp đầu vào cho các mô hình định giá tài sản như các nhân tố Fama-French mà chúng ta sẽ gặp trong các chương sau.

Phân tích của chúng ta kết hợp các khuôn khổ lý thuyết với việc triển khai thực tế bằng dữ liệu thị trường Việt Nam. Kết thúc chương này, bạn sẽ biết cách truy cập báo cáo tài chính, tính các tỷ số then chốt thuộc nhiều nhóm và diễn giải các chỉ số này trong bối cảnh cụ thể.

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

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

23.2 Ba báo cáo tài chính

Trước khi đi vào các tỷ số và phân tích, chúng ta cần hiểu ba báo cáo liên kết với nhau, đóng vai trò nền tảng của việc lập báo cáo tài chính. Mỗi báo cáo trả lời một câu hỏi khác nhau về doanh nghiệp, và cùng nhau chúng cho một bức tranh toàn diện về sức khỏe tài chính.

23.2.1 Bảng cân đối kế toán: bức ảnh chụp nhanh về tình hình tài chính

Bảng cân đối kế toán ghi lại tình hình tài chính của doanh nghiệp tại một thời điểm cụ thể, hãy coi nó như một bức ảnh chứ không phải một thước phim. Bảng này liệt kê mọi thứ doanh nghiệp sở hữu (tài sản), mọi thứ doanh nghiệp nợ (nợ phải trả) và phần quyền đòi còn lại thuộc về cổ đông (vốn chủ sở hữu). Ba thành phần này được liên kết bởi phương trình kế toán cơ bản:

\[ \text{Assets} = \text{Liabilities} + \text{Equity} \]

Phương trình này không chỉ là một định nghĩa, nó phản ánh một nguyên lý kinh tế cốt lõi. Nguồn lực của doanh nghiệp (tài sản) phải được tài trợ từ đâu đó: hoặc vay từ chủ nợ (nợ phải trả), hoặc do chủ sở hữu đóng góp (vốn chủ sở hữu). Mỗi giao dịch tác động đều lên cả hai vế, giữ cho phương trình cân bằng.

Tài sản là các nguồn lực doanh nghiệp kiểm soát và được kỳ vọng sẽ mang lại lợi ích kinh tế trong tương lai:

  • Tài sản ngắn hạn có thể chuyển thành tiền trong vòng một năm: tiền và các khoản tương đương tiền, đầu tư ngắn hạn, các khoản phải thu (tiền khách hàng còn nợ) và hàng tồn kho (nguyên vật liệu, sản phẩm dở dang và thành phẩm)
  • Tài sản dài hạn phục vụ hoạt động quá một năm: bất động sản, nhà xưởng và thiết bị (PP&E), đầu tư dài hạn và tài sản vô hình như bằng sáng chế, nhãn hiệu và lợi thế thương mại

Nợ phải trả bao gồm các nghĩa vụ đối với bên ngoài:

  • Nợ ngắn hạn đến hạn trong vòng một năm: các khoản phải trả (tiền nợ nhà cung cấp), nợ vay ngắn hạn, chi phí phải trả và phần nợ dài hạn đến hạn trả
  • Nợ dài hạn kéo dài quá một năm: nợ vay dài hạn, trái phiếu phải trả, nghĩa vụ lương hưu và thuế thu nhập hoãn lại phải trả

Vốn chủ sở hữu thể hiện phần quyền đòi còn lại của chủ sở hữu:

  • Cổ phiếu phổ thông và thặng dư vốn cổ phần từ việc phát hành cổ phiếu
  • Lợi nhuận giữ lại (tức là lợi nhuận tích lũy được tái đầu tư thay vì chia dưới dạng cổ tức)
  • Cổ phiếu quỹ: cổ phiếu do công ty mua lại

Hiểu các nhóm khoản mục này là điều thiết yếu cho phân tích tỷ số. Tài sản ngắn hạn và nợ ngắn hạn quyết định thanh khoản ngắn hạn, trong khi cơ cấu nợ và vốn chủ sở hữu cho thấy các lựa chọn về cấu trúc vốn.

23.2.2 Báo cáo kết quả kinh doanh: kết quả hoạt động theo thời gian

Trong khi bảng cân đối kế toán là bức ảnh chụp nhanh, báo cáo kết quả kinh doanh (còn gọi là báo cáo lãi lỗ, hay P&L) đo lường kết quả tài chính trong một kỳ (ví dụ một quý hoặc một năm). Báo cáo này có cấu trúc phân cấp, lần lượt ghi nhận các mức lợi nhuận khác nhau:

\[ \text{Revenue} - \text{COGS} = \text{Gross Profit} \]

\[ \text{Gross Profit} - \text{Operating Expenses} = \text{Operating Income (EBIT)} \]

\[ \text{EBIT} - \text{Interest} - \text{Taxes} = \text{Net Income} \]

Mỗi dòng cho thấy một khía cạnh khác nhau của hoạt động kinh doanh:

  • Doanh thu (Revenue/Sales): Tổng thu nhập từ hàng hóa hoặc dịch vụ đã bán (tức là “dòng trên cùng”)
  • Giá vốn hàng bán (COGS): Chi phí trực tiếp để sản xuất những gì đã bán (nguyên vật liệu, nhân công trực tiếp, chi phí sản xuất chung)
  • Lợi nhuận gộp: Doanh thu trừ COGS, đo lường khả năng sinh lời cơ bản từ hoạt động cốt lõi
  • Chi phí hoạt động: Chi phí vận hành doanh nghiệp ngoài sản xuất (chi phí bán hàng, quản lý doanh nghiệp, nghiên cứu và phát triển)
  • Lợi nhuận hoạt động (EBIT): Lợi nhuận trước lãi vay và thuế, đo lường khả năng sinh lời từ hoạt động trước các quyết định tài trợ và thuế
  • Chi phí lãi vay: Chi phí của việc tài trợ bằng nợ
  • Lợi nhuận ròng: “Dòng dưới cùng” (tức là tổng lợi nhuận sau mọi chi phí)

Cấu trúc phân cấp của báo cáo kết quả kinh doanh cho phép nhà phân tích xác định vấn đề về lợi nhuận bắt nguồn từ đâu. Một công ty có biên lợi nhuận gộp cao nhưng lợi nhuận ròng thấp có thể đang chịu chi phí quản lý cồng kềnh. Công ty có biên lợi nhuận gộp thấp thì gặp thách thức cơ bản về giá bán hoặc sản xuất.

23.2.3 Báo cáo lưu chuyển tiền tệ: lần theo dòng tiền

Báo cáo lưu chuyển tiền tệ lấp một khoảng trống quan trọng: các công ty có lãi vẫn có thể cạn tiền, và các công ty thua lỗ vẫn có thể tạo ra dòng tiền dương. Điều này xảy ra vì kế toán dồn tích (dùng trong báo cáo kết quả kinh doanh) ghi nhận doanh thu khi đã thực hiện (kiếm được) và chi phí khi phát sinh, chứ không phải khi tiền đổi chủ.

Báo cáo lưu chuyển tiền tệ theo dõi các luồng tiền thực tế, chia thành ba nhóm:

  • Hoạt động kinh doanh: Tiền do hoạt động kinh doanh cốt lõi tạo ra. Bắt đầu từ lợi nhuận ròng, sau đó điều chỉnh các khoản không bằng tiền (khấu hao, thay đổi vốn lưu động)
  • Hoạt động đầu tư: Tiền chi ra hoặc thu về từ các khoản đầu tư dài hạn (ví dụ mua thiết bị, mua lại doanh nghiệp, bán tài sản)
  • Hoạt động tài chính: Các luồng tiền từ quyết định về cấu trúc vốn (ví dụ phát hành cổ phiếu, đi vay, trả nợ, trả cổ tức, mua lại cổ phiếu)

Một công ty có thể báo cáo lợi nhuận ròng cao nhưng vẫn đốt tiền nếu đang tích trữ hàng tồn kho, cho khách hàng nợ với điều kiện tín dụng dễ dãi hoặc chi đầu tư lớn. Ngược lại, một công ty báo lỗ vẫn có thể tạo dòng tiền hoạt động dương nhờ thu hồi các khoản phải thu nhanh hơn tốc độ trả tiền cho nhà cung cấp.

23.2.4 Minh họa bằng báo cáo tài chính của FPT

Để thấy các khái niệm này trong thực tế, chúng ta hãy xem xét báo cáo tài chính năm 2023 của Tập đoàn FPT. FPT là một trong những công ty công nghệ lớn nhất Việt Nam, cung cấp dịch vụ CNTT, viễn thông và giáo dục.

Hiện mã
# Placeholder for FPT balance sheet visualization
# In practice, this would display the actual PDF or cleaned data
# from DataCore's acquisition pipeline

# Example structure of what the balance sheet data looks like:
# Assets: Current assets (cash, receivables, inventory) + Non-current assets (PP&E, intangibles)
# Liabilities: Current liabilities (payables, short-term debt) + Non-current liabilities (long-term debt)
# Equity: Common stock + Retained earnings

Bảng cân đối kế toán cho thấy phương trình kế toán cơ bản vận hành trong thực tế. Tài sản của FPT (ví dụ gồm tiền, các khoản phải thu, hạ tầng công nghệ và tài sản vô hình như phần mềm) đúng bằng tổng nợ phải trả và vốn chủ sở hữu.

Hiện mã
# Placeholder for FPT income statement visualization
# Shows the progression from revenue through various profit measures to net income

Báo cáo kết quả kinh doanh của FPT cho thấy công ty biến doanh thu thành lợi nhuận như thế nào. Diễn tiến từ lợi nhuận gộp qua lợi nhuận hoạt động đến lợi nhuận ròng thể hiện tác động của chi phí hoạt động, chi phí lãi vay và thuế.

Hiện mã
# Placeholder for FPT cash flow statement visualization
# Reconciles net income with actual cash generation

Báo cáo lưu chuyển tiền tệ cho thấy lợi nhuận báo cáo của FPT chuyển thành tiền thực tế ra sao. Chênh lệch giữa lợi nhuận ròng và dòng tiền hoạt động phản ánh tác động của việc quản lý vốn lưu động và các chi phí không bằng tiền.

23.3 Tải dữ liệu báo cáo tài chính

Bây giờ chúng ta chuyển sang phân tích có hệ thống trên nhiều công ty. Chúng ta tải dữ liệu báo cáo tài chính của các cổ phiếu thành phần chỉ số VN30 (tức là 30 cổ phiếu lớn nhất và có thanh khoản cao nhất trên Sở Giao dịch Chứng khoán Thành phố Hồ Chí Minh).

Hiện mã
import sqlite3

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

comp_vn = pd.read_sql_query(
    sql="SELECT * FROM comp_vn",
    con=tidy_finance,
    parse_dates={"datadate"}
)

comp_vn.head(3)
symbol year total_current_asset ca_fin ca_cce ca_cash ca_cash_inbank ca_cash_attransit ca_cash_equivalent ca_fin_invest ... xint ni oibdp oancf capx be op at_lag inv total_debt
0 AGF 1998 8.845141e+10 None 5.469709e+09 0.000000e+00 None None 0.0 1.110705e+10 ... 0.0 9.809218e+09 1.523680e+10 NaN NaN 2.656020e+10 0.711195 NaN NaN 0.000000e+00
1 BBC 1999 5.672574e+10 None 5.354939e+09 5.354939e+09 None None 0.0 0.000000e+00 ... 0.0 8.763745e+09 8.088393e+09 2.687635e+10 1.097031e+10 3.211410e+10 0.728193 NaN NaN 1.505529e+09
2 AGF 1999 9.558392e+10 None 2.609276e+09 0.000000e+00 None None 0.0 1.008298e+10 ... 0.0 1.426227e+10 1.766353e+10 1.675607e+10 3.970966e+09 3.576596e+10 0.816972 1.068410e+11 0.090477 0.000000e+00

3 rows × 334 columns

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"
]

comp_vn30 = comp_vn[comp_vn["symbol"].isin(vn30_symbols)]
comp_vn30.head(3)
symbol year total_current_asset ca_fin ca_cce ca_cash ca_cash_inbank ca_cash_attransit ca_cash_equivalent ca_fin_invest ... xint ni oibdp oancf capx be op at_lag inv total_debt
11 FPT 2002 5.098910e+11 None 1.027470e+11 0.000000e+00 None None 0.0 0.0 ... 9.008000e+09 1.797900e+10 1.794200e+10 3.203600e+10 2.202800e+10 3.125400e+10 1.425576 NaN NaN 0.0
17 VNM 2003 2.101406e+12 None 6.925924e+11 6.925924e+11 None None 0.0 0.0 ... 1.698909e+10 5.124662e+11 7.136218e+11 NaN NaN 1.560789e+12 0.663257 NaN NaN 0.0
21 FPT 2003 9.171390e+11 None 7.995600e+10 0.000000e+00 None None 0.0 0.0 ... 1.286700e+10 4.389400e+10 4.381900e+10 -2.905420e+11 3.753300e+10 1.697000e+11 0.940218 5.504080e+11 0.779104 0.0

3 rows × 334 columns

Bộ dữ liệu này là nền tảng để tính các tỷ số tài chính và thực hiện so sánh chéo giữa các công ty. Mỗi dòng chứa các khoản mục của bảng cân đối kế toán, báo cáo kết quả kinh doanh và báo cáo lưu chuyển tiền tệ cho một quan sát công ty-năm.

23.4 Các tỷ số thanh khoản: công ty có trả được các khoản nợ không?

Các tỷ số thanh khoản đánh giá khả năng đáp ứng các nghĩa vụ ngắn hạn của doanh nghiệp. Các chỉ số này quan trọng nhất đối với chủ nợ, nhà cung cấp và người lao động, những người cần được đảm bảo rằng công ty có thể thanh toán các khoản nợ. Chúng được tính từ các khoản mục của bảng cân đối kế toán, so sánh tài sản có tính thanh khoản cao với các khoản nợ sắp đến hạn.

23.4.1 Tỷ số thanh toán hiện hành

Thước đo thanh khoản cơ bản nhất so sánh toàn bộ tài sản ngắn hạn với nợ ngắn hạn:

\[ \text{Current Ratio} = \frac{\text{Current Assets}}{\text{Current Liabilities}} \]

Tỷ số lớn hơn một cho thấy công ty có đủ tài sản ngắn hạn để trang trải các nghĩa vụ đến hạn trong vòng một năm. Tuy nhiên, cách diễn giải phụ thuộc nhiều vào cơ cấu của tài sản ngắn hạn. Một công ty có tài sản ngắn hạn bị chôn trong hàng tồn kho quay vòng chậm thì kém thanh khoản hơn công ty nắm giữ tiền mặt.

23.4.2 Tỷ số thanh toán nhanh

Tỷ số thanh toán nhanh (hay “acid test”) là thước đo chặt chẽ hơn do loại trừ hàng tồn kho:

\[ \text{Quick Ratio} = \frac{\text{Current Assets} - \text{Inventory}}{\text{Current Liabilities}} \]

Tại sao loại trừ hàng tồn kho? Hàng tồn kho thường là tài sản ngắn hạn kém thanh khoản nhất. Nó phải được bán (có thể với giá chiết khấu) trước khi tạo ra tiền. Một công ty đang gặp khủng hoảng thanh khoản không thể dễ dàng chuyển nguyên vật liệu hoặc thành phẩm thành tiền ngay lập tức. Tỷ số thanh toán nhanh trả lời câu hỏi: “Chúng ta có thể trả các khoản nợ mà không phải dựa vào việc bán hàng tồn kho không?”

23.4.3 Tỷ số tiền mặt

Thước đo thanh khoản thận trọng nhất chỉ tập trung vào những tài sản có tính thanh khoản cao nhất:

\[ \text{Cash Ratio} = \frac{\text{Cash and Cash Equivalents}}{\text{Current Liabilities}} \]

Mặc dù tỷ số bằng một cho thấy thanh khoản vững chắc, hầu hết các công ty duy trì tỷ số tiền mặt thấp hơn để tránh nắm giữ quá nhiều tài sản không sinh lời. Tiền nằm trong tài khoản ngân hàng có thể được dùng để đầu tư vào các cơ hội tăng trưởng, hoàn trả cho cổ đông hoặc trả bớt các khoản nợ có chi phí cao.

23.4.4 Tính các tỷ số thanh khoản

Hãy tính các tỷ số này cho mẫu VN30 của chúng ta:

Hiện mã
balance_sheet_statements = (comp_vn30
    .assign(
        fiscal_year=lambda x: x["year"].astype(int),
        
        # Current Ratio: Current Assets / Current Liabilities
        current_ratio=lambda x: x["act"] / x["lct"],
        
        # Quick Ratio: (Current Assets - Inventory) / Current Liabilities
        quick_ratio=lambda x: (x["act"] - x["inv"]) / x["lct"],
        
        # Cash Ratio: Cash and Equivalents / Current Liabilities
        cash_ratio=lambda x: x["ca_cce"] / x["lct"],
        
        label=lambda x: np.where(
            x["symbol"].isin(vn30_symbols), x["symbol"], np.nan
        )
    )
)

balance_sheet_statements.head(3)
symbol year total_current_asset ca_fin ca_cce ca_cash ca_cash_inbank ca_cash_attransit ca_cash_equivalent ca_fin_invest ... be op at_lag inv total_debt fiscal_year current_ratio quick_ratio cash_ratio label
11 FPT 2002 5.098910e+11 None 1.027470e+11 0.000000e+00 None None 0.0 0.0 ... 3.125400e+10 1.425576 NaN NaN 0.0 2002 1.211413 NaN 0.244109 FPT
17 VNM 2003 2.101406e+12 None 6.925924e+11 6.925924e+11 None None 0.0 0.0 ... 1.560789e+12 0.663257 NaN NaN 0.0 2003 2.195772 NaN 0.723694 VNM
21 FPT 2003 9.171390e+11 None 7.995600e+10 0.000000e+00 None None 0.0 0.0 ... 1.697000e+11 0.940218 5.504080e+11 0.779104 0.0 2003 1.274633 1.274633 0.111122 FPT

3 rows × 339 columns

23.4.5 So sánh chéo về thanh khoản

Hình 23.1 so sánh các tỷ số thanh khoản giữa các công ty trong năm tài chính gần nhất. Góc nhìn chéo này cho thấy các mô hình kinh doanh và ngành khác nhau duy trì các hồ sơ thanh khoản khác nhau.

Hiện mã
liquidity_ratios = (balance_sheet_statements
    .query("year == 2023 & label.notna()")
    .get(["symbol", "current_ratio", "quick_ratio", "cash_ratio"])
    .melt(id_vars=["symbol"], var_name="name", value_name="value")
    .assign(
        name=lambda x: x["name"].str.replace("_", " ").str.title()
    )
)

liquidity_ratios_figure = (
    ggplot(liquidity_ratios, aes(y="value", x="name", fill="symbol"))
    + geom_col(position="dodge")
    + coord_flip()
    + labs(
        x="", y="Ratio Value", fill="",
        title="Liquidity Ratios for VN30 Stocks (2023)"
    )
)

liquidity_ratios_figure.show()
Tiêu đề: Các tỷ số thanh khoản của cổ phiếu VN30. Hình là biểu đồ cột nhóm so sánh tỷ số thanh toán hiện hành, thanh toán nhanh và tiền mặt giữa các công ty.
Hình 23.1: Các tỷ số thanh khoản đo lường khả năng đáp ứng các nghĩa vụ ngắn hạn của doanh nghiệp. Giá trị cao hơn cho thấy thanh khoản lớn hơn, dù các tỷ số quá cao có thể gợi ý việc sử dụng tài sản kém hiệu quả.

Một số quy luật nổi lên từ phép so sánh này. Các ngân hàng và tổ chức tài chính thường có hồ sơ thanh khoản khác với các công ty công nghiệp do mô hình kinh doanh đặc thù. Các công ty có hàng tồn kho lớn (bán lẻ, sản xuất) thường có khoảng cách lớn hơn giữa tỷ số thanh toán hiện hành và tỷ số thanh toán nhanh.

23.5 Các tỷ số đòn bẩy: công ty được tài trợ như thế nào?

Các tỷ số đòn bẩy xem xét cấu trúc vốn của doanh nghiệp (tức là cơ cấu tài trợ bằng nợ và vốn chủ sở hữu). Các chỉ số này cho thấy rủi ro tài chính và khả năng thanh toán dài hạn, giúp nhà đầu tư hiểu hoạt động của công ty được tài trợ bằng vốn vay ở mức nào.

23.5.1 Vì sao cấu trúc vốn quan trọng

Lựa chọn tài trợ của doanh nghiệp bao hàm những đánh đổi cơ bản:

  • Nợ mang lại lợi thế về thuế (lãi vay được khấu trừ) và không làm loãng quyền sở hữu, nhưng tạo ra các nghĩa vụ cố định phải thực hiện bất kể kết quả kinh doanh
  • Vốn chủ sở hữu mang lại sự linh hoạt (không có khoản thanh toán bắt buộc) nhưng làm loãng cổ đông hiện hữu và có thể đắt hơn nợ

Các công ty có đòn bẩy cao khuếch đại cả lãi lẫn lỗ. Khi thuận lợi, cổ đông hưởng nhiều phần tăng thêm hơn vì lợi nhuận không phải chia cho các cổ đông bổ sung. Khi khó khăn, các khoản lãi vay cố định có thể đẩy công ty vào tình trạng kiệt quệ tài chính. Đây là lý do beta (rủi ro hệ thống) có xu hướng tăng theo đòn bẩy.

23.5.2 Tỷ số nợ trên vốn chủ sở hữu

Tỷ số này cho biết công ty sử dụng bao nhiêu nợ so với vốn đầu tư của cổ đông:

\[ \text{Debt-to-Equity} = \frac{\text{Total Debt}}{\text{Total Equity}} \]

Tỷ số bằng 1,0 nghĩa là nợ và vốn chủ sở hữu tài trợ ngang nhau. Tỷ số cao hơn cho thấy việc sử dụng đòn bẩy mạnh tay hơn, có thể nâng lợi nhuận khi thuận lợi nhưng làm tăng rủi ro phá sản.

23.5.3 Tỷ số nợ trên tài sản

Tỷ số này cho biết bao nhiêu phần trăm tài sản được tài trợ bằng nợ:

\[ \text{Debt-to-Asset} = \frac{\text{Total Debt}}{\text{Total Assets}} \]

Tỷ số 0,5 nghĩa là một nửa tài sản của công ty được tài trợ bằng nợ. Chỉ số này bị chặn trong khoảng từ 0 đến 1 (giả định vốn chủ sở hữu dương), nên dễ so sánh giữa các công ty hơn tỷ số nợ trên vốn chủ sở hữu.

23.5.4 Tỷ số khả năng thanh toán lãi vay

Trong khi các tỷ số trên đo mức đòn bẩy, khả năng thanh toán lãi vay đánh giá năng lực phục vụ khoản nợ đó:

\[ \text{Interest Coverage} = \frac{\text{EBIT}}{\text{Interest Expense}} \]

Tỷ số này trả lời câu hỏi: “Lợi nhuận hoạt động hiện tại có thể trang trải nghĩa vụ lãi vay bao nhiêu lần?” Tỷ số dưới 1,0 nghĩa là lợi nhuận hoạt động không đủ trả lãi vay, một tình thế nguy hiểm. Tỷ số trên 3-5 nhìn chung cho thấy mức trang trải thoải mái.

23.5.5 Tính các tỷ số đòn bẩy

Hiện mã
balance_sheet_statements = balance_sheet_statements.assign(
    debt_to_equity=lambda x: x["total_debt"] / x["total_equity"],
    debt_to_asset=lambda x: x["total_debt"] / x["at"]
)

income_statements = (comp_vn30
    .assign(
        year=lambda x: x["year"].astype(int),
        # Handle zero interest expense to avoid infinity
        interest_coverage=lambda x: np.where(
            x["cfo_interest_expense"] > 0,
            x["is_net_business_profit"] / x["cfo_interest_expense"],
            np.nan
        ),
        label=lambda x: np.where(
            x["symbol"].isin(vn30_symbols), x["symbol"], np.nan
        )
    )
)

23.5.6 Xu hướng đòn bẩy theo thời gian

Hình 23.2 theo dõi diễn biến của tỷ số nợ trên tài sản theo thời gian. Phân tích chuỗi thời gian cho thấy các công ty đang sử dụng đòn bẩy nhiều hơn hay ít hơn.

Hiện mã
debt_to_asset = balance_sheet_statements.query("symbol in @vn30_symbols")

debt_to_asset_figure = (
    ggplot(debt_to_asset, aes(x="year", y="debt_to_asset", color="symbol"))
    + geom_line(size=1)
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="", y="Debt-to-Asset Ratio", color="",
        title="Debt-to-Asset Ratios of VN30 Stocks Over Time"
    )
)

debt_to_asset_figure.show()
Tiêu đề: Tỷ số nợ trên tài sản của cổ phiếu VN30 theo thời gian. Hình là biểu đồ đường với năm trên trục hoành và tỷ số nợ trên tài sản trên trục tung.
Hình 23.2: Tỷ số nợ trên tài sản cho biết tỷ lệ tài sản được tài trợ bằng nợ. Những thay đổi theo thời gian phản ánh các chiến lược cấu trúc vốn và điều kiện thị trường đang thay đổi.

23.5.7 So sánh chéo về đòn bẩy

Hình 23.3 cho một bức ảnh chụp nhanh về đòn bẩy của tất cả các cổ phiếu thành phần VN30 trong năm gần nhất.

Hiện mã
debt_to_asset_comparison = balance_sheet_statements.query("year == 2023")

debt_to_asset_comparison["symbol"] = pd.Categorical(
    debt_to_asset_comparison["symbol"],
    categories=debt_to_asset_comparison.sort_values("debt_to_asset")["symbol"],
    ordered=True
)

debt_to_asset_comparison_figure = (
    ggplot(
        debt_to_asset_comparison,
        aes(y="debt_to_asset", x="symbol", fill="label")
    )
    + geom_col()
    + coord_flip()
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="", y="Debt-to-Asset Ratio", fill="",
        title="Debt-to-Asset Ratios of VN30 Stocks (2023)"
    )
    + theme(legend_position="none")
)

debt_to_asset_comparison_figure.show()
Tiêu đề: Tỷ số nợ trên tài sản của cổ phiếu VN30 năm 2023. Hình là biểu đồ cột ngang với các công ty được sắp xếp theo tỷ số nợ trên tài sản.
Hình 23.3: So sánh chéo tỷ số nợ trên tài sản cho thấy các mô hình theo ngành và chiến lược tài trợ riêng của từng công ty.

23.5.8 Đánh đổi giữa đòn bẩy và khả năng thanh toán lãi vay

Hình 23.4 xem xét mối quan hệ giữa mức đòn bẩy và khả năng trả nợ. Các công ty có gánh nặng nợ cao hơn lý tưởng nên có khả năng thanh toán lãi vay mạnh hơn để duy trì sự ổn định tài chính.

Hiện mã
interest_coverage = (income_statements
    .query("year == 2023")
    .get(["symbol", "year", "interest_coverage"])
    .merge(balance_sheet_statements, on=["symbol", "year"], how="left")
)

interest_coverage_figure = (
    ggplot(
        interest_coverage,
        aes(x="debt_to_asset", y="interest_coverage", color="label")
    )
    + geom_point(size=2)
    + geom_label(
        aes(label="label"),
        adjust_text={"arrowprops": {"arrowstyle": "-"}}
    )
    + scale_x_continuous(labels=percent_format())
    + labs(
        x="Debt-to-Asset Ratio", y="Interest Coverage Ratio",
        title="Leverage versus Interest Coverage for VN30 Stocks (2023)"
    )
    + theme(legend_position="none")
)

interest_coverage_figure.show()
Tiêu đề: Tỷ số nợ trên tài sản so với khả năng thanh toán lãi vay. Hình là biểu đồ phân tán với tỷ số nợ trên tài sản trên trục hoành và khả năng thanh toán lãi vay trên trục tung.
Hình 23.4: Mối quan hệ giữa đòn bẩy và khả năng thanh toán lãi vay cho thấy các công ty có thể trả nợ thoải mái hay không. Đòn bẩy cao đi kèm khả năng thanh toán lãi vay thấp cho thấy rủi ro tài chính cao.

Biểu đồ phân tán cho thấy những quy luật quan trọng. Các công ty ở góc phần tư trên bên trái (đòn bẩy thấp, khả năng thanh toán lãi vay cao) có cách tài trợ thận trọng với dư địa vay nợ lớn. Những công ty ở góc dưới bên phải (đòn bẩy cao, khả năng thanh toán lãi vay thấp) đối mặt rủi ro tài chính cao.

23.6 Các tỷ số hiệu quả: tài sản được quản lý tốt đến đâu?

Các tỷ số hiệu quả đo mức độ doanh nghiệp sử dụng tài sản và quản lý hoạt động một cách hiệu quả. Các chỉ số này giúp xác định liệu ban quản lý có đang khai thác tối đa giá trị từ nguồn lực của công ty hay không.

23.6.1 Vòng quay tài sản

Tỷ số này đo mức độ hiệu quả của công ty khi dùng tổng tài sản để tạo doanh thu:

\[ \text{Asset Turnover} = \frac{\text{Revenue}}{\text{Total Assets}} \]

Tỷ số cao hơn cho thấy việc sử dụng tài sản hiệu quả hơn: công ty tạo ra nhiều doanh thu hơn trên mỗi đồng tài sản. Tuy nhiên, mức tối ưu khác nhau rất nhiều giữa các ngành. Các nhà bán lẻ có ít tài sản cố định có thể đạt vòng quay trên 2,0, trong khi các nhà sản xuất thâm dụng vốn có thể chỉ ở mức dưới 0,5.

23.6.2 Vòng quay hàng tồn kho

Với các công ty có hàng tồn kho, tỷ số này cho thấy hàng hóa luân chuyển qua doanh nghiệp nhanh đến đâu:

\[ \text{Inventory Turnover} = \frac{\text{Cost of Goods Sold}}{\text{Inventory}} \]

Vòng quay cao hơn gợi ý việc quản lý hàng tồn kho hiệu quả (tức là hàng hóa không nằm trên kệ phủ bụi). Tuy nhiên, vòng quay quá cao có thể báo hiệu rủi ro thiếu hàng, trong khi vòng quay rất thấp có thể cho thấy hàng tồn kho lỗi thời hoặc đầu tư quá mức vào vốn lưu động.

Chúng ta dùng COGS thay vì doanh thu ở tử số vì hàng tồn kho được ghi nhận theo giá vốn, không phải giá bán. Dùng doanh thu sẽ làm vòng quay bị thổi phồng đối với các doanh nghiệp có biên lợi nhuận cao.

23.6.3 Vòng quay các khoản phải thu

Tỷ số này đo mức độ hiệu quả của công ty trong việc thu tiền từ khách hàng:

\[ \text{Receivables Turnover} = \frac{\text{Revenue}}{\text{Accounts Receivable}} \]

Vòng quay cao hơn cho thấy thu tiền nhanh hơn (tức là khách hàng thanh toán đúng hạn). Quy đổi tỷ số này thành “số ngày thu tiền bình quân” (365 / vòng quay) cho ra kỳ thu tiền trung bình tính bằng ngày. Các công ty phải cân bằng giữa hiệu quả thu tiền và tác động lên doanh số của các chính sách tín dụng chặt chẽ.

23.6.4 Tính các tỷ số hiệu quả

Hiện mã
combined_statements = (balance_sheet_statements
    .get([
        "symbol", "year", "label", "current_ratio", "quick_ratio",
        "cash_ratio", "debt_to_equity", "debt_to_asset", "total_asset",
        "total_equity"
    ])
    .merge(
        (income_statements
            .get([
                "symbol", "year", "interest_coverage", "is_revenue",
                "is_cogs", 
                # "selling_general_and_administrative_expenses",
                "is_interest_expense", "is_gross_profit", "is_eat"
            ])
        ),
        on=["symbol", "year"],
        how="left"
    )
    .merge(
        (comp_vn30
            .assign(year=lambda x: x["year"].astype(int))
            .get(["symbol", "year", "ca_total_inventory", "ca_acc_receiv"])
        ),
        on=["symbol", "year"],
        how="left"
    )
)

combined_statements = combined_statements.assign(
    asset_turnover=lambda x: x["is_revenue"] / x["total_asset"],
    inventory_turnover=lambda x: x["is_cogs"] / x["ca_total_inventory"],
    receivables_turnover=lambda x: x["is_revenue"] / x["ca_acc_receiv"]
)

Các tỷ số hiệu quả khác nhau rất nhiều giữa các ngành, khiến việc so sánh với doanh nghiệp cùng ngành là thiết yếu. Một cửa hàng tạp hóa và một nhà máy đóng tàu sẽ có động lực tài sản và hàng tồn kho khác nhau về cơ bản.

23.7 Các tỷ số sinh lời: công ty có kiếm được tiền không?

Các tỷ số sinh lời đánh giá mức độ hiệu quả của công ty khi chuyển hoạt động thành lợi nhuận. Các chỉ số này đo trực tiếp thành công tài chính và nằm trong số những chỉ báo được nhà đầu tư theo dõi sát nhất.

23.7.1 Biên lợi nhuận gộp

Biên lợi nhuận gộp cho biết phần trăm doanh thu còn lại sau chi phí sản xuất trực tiếp:

\[ \text{Gross Margin} = \frac{\text{Gross Profit}}{\text{Revenue}} = \frac{\text{Revenue} - \text{COGS}}{\text{Revenue}} \]

Biên lợi nhuận gộp cao hơn cho thấy sức mạnh định giá lớn hơn, sản xuất hiệu quả hơn hoặc cơ cấu sản phẩm thuận lợi. Chỉ số này đặc biệt hữu ích khi so sánh các công ty trong cùng ngành, vì nó cho thấy hiệu quả tương đối của hoạt động cốt lõi trước chi phí quản lý chung.

23.7.2 Biên lợi nhuận ròng

Biên lợi nhuận ròng cho biết phần trăm doanh thu cuối cùng trở thành lợi nhuận ròng:

\[ \text{Profit Margin} = \frac{\text{Net Income}}{\text{Revenue}} \]

Thước đo toàn diện này tính đến mọi chi phí (ví dụ sản xuất, hoạt động, lãi vay và thuế). Biên lợi nhuận ròng cao hơn cho thấy việc quản lý chi phí tổng thể hiệu quả. Tuy nhiên, mức biên tối ưu khác nhau theo ngành: các công ty phần mềm thường đạt biên trên 20%, trong khi các cửa hàng tạp hóa hoạt động với biên mỏng như lưỡi dao, chỉ 2-3%.

23.7.3 Tỷ suất lợi nhuận trên vốn chủ sở hữu (ROE)

ROE đo mức độ hiệu quả của công ty khi dùng vốn đầu tư của cổ đông để tạo lợi nhuận:

\[ \text{Return on Equity} = \frac{\text{Net Income}}{\text{Total Equity}} \]

Chỉ số này trực tiếp trả lời điều cổ đông quan tâm: lợi nhuận trên vốn họ đã đầu tư. ROE cao hơn cho thấy việc sử dụng vốn chủ sở hữu hiệu quả hơn, dù việc diễn giải cần thận trọng. Đòn bẩy cao có thể thổi phồng ROE một cách giả tạo do thu hẹp nền vốn chủ sở hữu (ví dụ một công ty được tài trợ 90% bằng nợ sẽ có ROE ấn tượng chỉ với lợi nhuận khiêm tốn).

23.7.4 Phân rã DuPont

Khuôn khổ DuPont phân rã ROE thành ba thành phần, cho thấy các khía cạnh khác nhau của kết quả hoạt động:

\[ \text{ROE} = \underbrace{\frac{\text{Net Income}}{\text{Revenue}}}_{\text{Profit Margin}} \times \underbrace{\frac{\text{Revenue}}{\text{Assets}}}_{\text{Asset Turnover}} \times \underbrace{\frac{\text{Assets}}{\text{Equity}}}_{\text{Leverage}} \]

Phép phân rã này cho thấy ROE cao có thể đến từ các nguồn khác nhau: biên lợi nhuận mạnh (sức mạnh định giá, kiểm soát chi phí), sử dụng tài sản hiệu quả (vòng quay cao) hoặc đòn bẩy mạnh tay. Hiểu động lực nào chiếm ưu thế giúp đánh giá tính bền vững. ROE do biên lợi nhuận tạo ra nhìn chung bền vững hơn ROE do đòn bẩy tạo ra.

23.7.5 Tính các tỷ số sinh lời

Hiện mã
combined_statements = combined_statements.assign(
    gross_margin=lambda x: x["is_gross_profit"] / x["is_revenue"],
    profit_margin=lambda x: x["is_eat"] / x["is_revenue"],
    after_tax_roe=lambda x: x["is_eat"] / x["total_equity"]
)

23.7.6 Xu hướng biên lợi nhuận gộp

Hình 23.5 theo dõi diễn biến biên lợi nhuận gộp theo thời gian, cho thấy các công ty có duy trì được sức mạnh định giá và hiệu quả sản xuất hay không.

Hiện mã
gross_margins = combined_statements.query("symbol in @vn30_symbols")

gross_margins_figure = (
    ggplot(gross_margins, aes(x="year", y="gross_margin", color="symbol"))
    + geom_line()
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="", y="Gross Margin", color="",
        title="Gross Margins for VN30 Stocks (2019-2023)"
    )
)

gross_margins_figure.show()
Tiêu đề: Biên lợi nhuận gộp của cổ phiếu VN30 theo thời gian. Hình là biểu đồ đường với năm trên trục hoành và biên lợi nhuận gộp trên trục tung.
Hình 23.5: Xu hướng biên lợi nhuận gộp cho thấy những thay đổi về sức mạnh định giá và hiệu quả sản xuất. Biên giảm có thể báo hiệu cạnh tranh gia tăng hoặc chi phí đầu vào tăng.

23.7.7 Từ lợi nhuận gộp đến lợi nhuận ròng: lợi nhuận đi đâu?

Hình 23.6 xem xét mối quan hệ giữa biên lợi nhuận gộp và biên lợi nhuận ròng. Khoảng cách giữa hai biên này cho thấy tác động của chi phí hoạt động, lãi vay và thuế.

Hiện mã
profit_margins = combined_statements.query("year == 2023")

profit_margins_figure = (
    ggplot(
        profit_margins,
        aes(x="gross_margin", y="profit_margin", color="label")
    )
    + geom_point(size=2)
    + geom_label(
        aes(label="label"),
        adjust_text={"arrowprops": {"arrowstyle": "-"}}
    )
    + scale_x_continuous(labels=percent_format())
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="Gross Margin", y="Profit Margin",
        title="Gross versus Profit Margins for VN30 Stocks (2023)"
    )
    + theme(legend_position="none")
)

profit_margins_figure.show()
Tiêu đề: Biên lợi nhuận gộp so với biên lợi nhuận ròng của cổ phiếu VN30. Hình là biểu đồ phân tán với biên lợi nhuận gộp trên trục hoành và biên lợi nhuận ròng trên trục tung.
Hình 23.6: So sánh biên lợi nhuận gộp và biên lợi nhuận ròng cho thấy bao nhiêu phần lợi nhuận gộp còn lại sau chi phí hoạt động, lãi vay và thuế. Các công ty nằm xa dưới đường chéo có chi phí quản lý chung cao so với lợi nhuận gộp.

Các công ty nằm dọc đường chéo chuyển lợi nhuận gộp thành lợi nhuận ròng một cách hiệu quả. Những công ty nằm thấp hơn hẳn đường chéo phải chịu chi phí hoạt động cao, gánh nặng lãi vay hoặc thuế suất cao làm xói mòn khả năng sinh lời.

23.8 Kết hợp các tỷ số tài chính: góc nhìn toàn diện

Từng tỷ số riêng lẻ cho những hiểu biết cụ thể, nhưng kết hợp chúng sẽ cho bức tranh đầy đủ hơn. Một công ty có thể xuất sắc về khả năng sinh lời nhưng gặp khó về thanh khoản, hoặc duy trì đòn bẩy thận trọng nhưng kém về hiệu quả.

23.8.1 Xếp hạng các công ty qua các nhóm tỷ số

Hình 23.7 so sánh thứ hạng của các công ty qua bốn nhóm tỷ số. Thứ hạng càng gần 1 cho thấy kết quả càng tốt trong từng nhóm, giúp nhanh chóng nhận diện điểm mạnh và điểm yếu tương đối.

Hiện mã
financial_ratios = (combined_statements
    .query("year == 2023")
    .filter(
        items=["symbol"] + [
            col for col in combined_statements.columns
            if any(x in col for x in [
                "ratio", "margin", "roe", "_to_", "turnover", "interest_coverage"
            ])
        ]
    )
    .melt(id_vars=["symbol"], var_name="name", value_name="value")
    .assign(
        type=lambda x: np.select(
            [
                x["name"].isin(["current_ratio", "quick_ratio", "cash_ratio"]),
                x["name"].isin(["debt_to_equity", "debt_to_asset", "interest_coverage"]),
                x["name"].isin(["asset_turnover", "inventory_turnover", "receivables_turnover"]),
                x["name"].isin(["gross_margin", "profit_margin", "after_tax_roe"]),
            ],
            [
                "Liquidity Ratios",
                "Leverage Ratios",
                "Efficiency Ratios",
                "Profitability Ratios"
            ],
            default="Other"
        )
    )
)

financial_ratios["rank"] = (financial_ratios
    .sort_values(["type", "name", "value"], ascending=[True, True, False])
    .groupby(["type", "name"])
    .cumcount() + 1
)

final_ranks = (financial_ratios
    .groupby(["symbol", "type"], as_index=False)
    .agg(rank=("rank", "mean"))
    .query("symbol in @vn30_symbols")
)

final_ranks_figure = (
    ggplot(final_ranks, aes(x="rank", y="type", color="symbol"))
    + geom_point(shape="^", size=4)
    + labs(
        x="Average Rank (Lower is Better)", y="", color="",
        title="Average Rank Across Financial Ratio Categories"
    )
    + coord_cartesian(xlim=[1, 30])
)

final_ranks_figure.show()
Tiêu đề: Thứ hạng trung bình theo các nhóm tỷ số tài chính. Hình là biểu đồ phân tán với thứ hạng của các công ty ở các nhóm thanh khoản, đòn bẩy, hiệu quả và sinh lời.
Hình 23.7: Xếp hạng các công ty qua nhiều nhóm tỷ số cho thấy hồ sơ tài chính tổng thể. Các công ty luôn có thứ hạng thấp (tốt) ở mọi nhóm thể hiện sức mạnh tài chính trên diện rộng.

Góc nhìn kết hợp cho thấy các chiến lược kinh doanh khác nhau thể hiện ra sao trong hồ sơ tài chính. Một công ty có thể chủ động chấp nhận thứ hạng sinh lời thấp hơn để đổi lấy thanh khoản mạnh hơn, hoặc dùng đòn bẩy mạnh tay để nâng lợi nhuận với cái giá là mất đi sự linh hoạt tài chính.

23.9 Các tỷ số tài chính trong định giá tài sản

Ngoài việc đánh giá từng công ty, các tỷ số tài chính còn là đầu vào quan trọng cho các mô hình định giá tài sản. Mô hình năm nhân tố Fama-French, được trình bày chi tiết trong chương Các nhân tố Fama-French, dùng một số thước đo dựa trên kế toán để giải thích sự biến thiên chéo của lợi nhuận cổ phiếu.

23.9.1 Các nhân tố Fama-French

Mô hình sử dụng bốn đặc điểm của doanh nghiệp được tính từ báo cáo tài chính:

Quy mô được đo bằng logarit của vốn hóa thị trường: \[ \text{Size} = \ln(\text{Market Cap}) \]

Điều này nắm bắt phát hiện thực nghiệm rằng các công ty nhỏ có xu hướng vượt trội hơn các công ty lớn sau khi điều chỉnh rủi ro (tức là “phần bù quy mô”).

Tỷ số giá trị sổ sách trên giá trị thị trường liên hệ giá trị kế toán với giá trị thị trường: \[ \text{Book-to-Market} = \frac{\text{Book Equity}}{\text{Market Cap}} \]

Các cổ phiếu có tỷ số B/M cao (cổ phiếu “giá trị”) trong lịch sử đã vượt trội hơn các cổ phiếu có tỷ số B/M thấp (cổ phiếu “tăng trưởng”) (tức là “phần bù giá trị”).

Khả năng sinh lời hoạt động đo mức tạo lợi nhuận so với vốn chủ sở hữu: \[ \text{Profitability} = \frac{\text{Revenue} - \text{COGS} - \text{SG\&A} - \text{Interest}}{\text{Book Equity}} \]

Các công ty sinh lời tốt hơn có xu hướng đạt lợi nhuận cao hơn (tức là “phần bù sinh lời”).

Đầu tư phản ánh tăng trưởng tài sản: \[ \text{Investment} = \frac{\text{Total Assets}_t}{\text{Total Assets}_{t-1}} - 1 \] Các công ty đầu tư mạnh tay có xu hướng đạt lợi nhuận kém hơn các công ty đầu tư thận trọng (tức là “phần bù đầu tư”).

23.9.2 Tính các biến Fama-French

Hiện mã
prices_monthly = pd.read_sql_query(
    sql="SELECT * FROM prices_monthly",
    con=tidy_finance,
    parse_dates={"datadate"}
)

# Use December prices for annual calculations
prices_december = (prices_monthly
    .assign(date=lambda x: pd.to_datetime(x["date"]))
    .query("date.dt.month == 12")
)
Hiện mã
combined_statements_ff = (combined_statements
    .query("year == 2023")
    .merge(prices_december, on=["symbol", "year"], how="left")
    .merge(
        (balance_sheet_statements
            .query("year == 2022")
            .get(["symbol", "total_asset"])
            .rename(columns={"total_asset": "total_assets_lag"})
        ),
        on="symbol",
        how="left"
    )
    .assign(
        size=lambda x: np.log(x["mktcap"]),
        book_to_market=lambda x: x["total_equity"] / x["mktcap"],
        operating_profitability=lambda x: (
            (x["is_revenue"] - x["is_cogs"] -
            #  x["selling_general_and_administrative_expenses"] -
             x["is_interest_expense"]) / x["total_equity"]
        ),
        investment=lambda x: x["total_asset"] / x["total_assets_lag"] - 1
    )
)

combined_statements_ff.head(3)
symbol year label current_ratio quick_ratio cash_ratio debt_to_equity debt_to_asset total_asset total_equity ... month ret risk_free ret_excess mktcap_lag total_assets_lag size book_to_market operating_profitability investment
0 POW 2023 POW 1.084255 1.084255 0.315089 0.0 0.0 7.036209e+13 3.411943e+13 ... 12.0 0.000000 0.003333 -0.003333 26346.055367 5.684324e+13 10.179074 1.295049e+09 0.062706 0.237827
1 HPG 2023 HPG 1.156655 1.156655 0.171324 0.0 0.0 1.877826e+14 1.028364e+14 ... 12.0 0.052731 0.003333 0.049397 154382.560242 1.703355e+14 11.998576 6.327489e+08 0.104583 0.102428
2 MWG 2023 MWG 1.688604 1.688604 0.174408 0.0 0.0 6.011124e+13 2.335956e+13 ... 12.0 0.111688 0.003333 0.108355 56323.247628 5.583410e+13 11.044743 3.730731e+08 0.942967 0.076604

3 rows × 43 columns

23.9.3 Xếp hạng theo các nhân tố Fama-French

Hình 23.8 cho thấy các công ty VN30 được xếp hạng ra sao trên từng biến Fama-French, kết nối phân tích cơ bản với định giá tài sản.

Hiện mã
factors_ranks = (combined_statements_ff
    .get(["symbol", "size", "book_to_market", "operating_profitability", "investment"])
    .rename(columns={
        "size": "Size",
        "book_to_market": "Book-to-Market",
        "operating_profitability": "Profitability",
        "investment": "Investment"
    })
    .melt(id_vars=["symbol"], var_name="name", value_name="value")
    .assign(
        rank=lambda x: (
            x.sort_values(["name", "value"], ascending=[True, False])
            .groupby("name")
            .cumcount() + 1
        )
    )
    .query("symbol in @vn30_symbols")
)

factors_ranks_figure = (
    ggplot(factors_ranks, aes(x="rank", y="name", color="symbol"))
    + geom_point(shape="^", size=4)
    + labs(
        x="Rank", y="", color="",
        title="Rank in Fama-French Variables for VN30 Stocks"
    )
    + coord_cartesian(xlim=[1, 30])
)

factors_ranks_figure.show()
Tiêu đề: Thứ hạng theo các biến Fama-French của cổ phiếu VN30. Hình là biểu đồ phân tán với thứ hạng của các công ty theo các nhân tố quy mô, B/M, sinh lời và đầu tư.
Hình 23.8: Xếp hạng theo các biến Fama-French kết nối phân tích báo cáo tài chính với định giá tài sản. Theo các mô hình nhân tố, các công ty nhỏ hơn, có B/M cao hơn, sinh lời tốt hơn và đầu tư thấp hơn nên đạt lợi nhuận kỳ vọng cao hơn.

Các xếp hạng này có hàm ý đối với lợi nhuận kỳ vọng theo các mô hình nhân tố. Về lý thuyết, một công ty nhỏ, có B/M cao, sinh lời cao và đầu tư thận trọng nên đạt lợi nhuận điều chỉnh rủi ro cao hơn công ty có đặc điểm ngược lại.

23.10 Hạn chế và các lưu ý thực tiễn

Dù các tỷ số tài chính là công cụ phân tích mạnh mẽ, vẫn có một số hạn chế cần chú ý:

23.10.1 Quyền tự quyết trong kế toán

Các công ty có quyền tự quyết đáng kể trong cách áp dụng chuẩn mực kế toán. Thời điểm ghi nhận doanh thu, phương pháp khấu hao, định giá hàng tồn kho (FIFO so với LIFO) và các quyết định vốn hóa so với ghi nhận chi phí đều ảnh hưởng đến các con số báo cáo. Phân tích tinh vi đòi hỏi phải hiểu các lựa chọn này và tác động của chúng.

23.10.2 Khả năng so sánh giữa các ngành

Các tỷ số khác nhau rất nhiều giữa các ngành. So sánh đòn bẩy của một ngân hàng với một nhà bán lẻ là vô nghĩa (ví dụ ngân hàng vốn hoạt động với đòn bẩy cao hơn nhiều do mô hình kinh doanh). Hãy luôn so sánh với các doanh nghiệp cùng ngành thay vì các chuẩn tuyệt đối.

23.10.3 Hạn chế của dữ liệu tại một thời điểm

Các tỷ số từ bảng cân đối kế toán chỉ ghi lại một thời điểm duy nhất, có thể không đại diện cho điều kiện thông thường. Các công ty thường “tô vẽ” (window dress) bằng cách cải thiện tạm thời các chỉ số vào ngày báo cáo. Phân tích xu hướng và so sánh quý này với quý trước có thể phát hiện những thực tiễn như vậy.

23.10.4 Tính chất nhìn về quá khứ

Báo cáo tài chính phản ánh kết quả trong quá khứ. Khả năng sinh lời trong quá khứ không bảo đảm kết quả tương lai, đặc biệt với các công ty trong ngành thay đổi nhanh hoặc đối mặt với sự gián đoạn.

23.10.5 Chất lượng lợi nhuận

Không phải mọi khoản lợi nhuận đều như nhau. Lợi nhuận do các khoản lãi một lần, điều chỉnh kế toán hoặc ghi nhận doanh thu mạnh tay có thể không lặp lại. Phân tích dòng tiền giúp đánh giá chất lượng lợi nhuận. Những khoản lợi nhuận không chuyển thành tiền đáng bị nghi ngờ.

23.11 Những điểm chính

Chương này giới thiệu phân tích báo cáo tài chính như một công cụ để hiểu các yếu tố cơ bản của doanh nghiệp. Các nhận định chính là:

  1. Ba báo cáo, ba góc nhìn: Bảng cân đối kế toán cho thấy tình hình tài chính tại một thời điểm, báo cáo kết quả kinh doanh đo kết quả hoạt động trong một kỳ, và báo cáo lưu chuyển tiền tệ theo dõi các luồng tiền thực tế. Cùng nhau, chúng cho bức tranh đầy đủ về sức khỏe tài chính.

  2. Các tỷ số thanh khoản đánh giá khả năng tồn tại ngắn hạn: Tỷ số thanh toán hiện hành, thanh toán nhanh và tiền mặt đo khả năng đáp ứng các nghĩa vụ sắp đến hạn. Tỷ số cao hơn cho thấy thanh khoản lớn hơn nhưng có thể gợi ý việc sử dụng tài sản kém hiệu quả.

  3. Các tỷ số đòn bẩy phản ánh rủi ro cấu trúc vốn: Các tỷ số nợ trên vốn chủ sở hữu, nợ trên tài sản và khả năng thanh toán lãi vay cho thấy công ty tài trợ hoạt động ra sao và có thể trả nợ hay không. Đòn bẩy cao hơn khuếch đại cả lợi nhuận lẫn rủi ro.

  4. Các tỷ số hiệu quả đo lường năng lực quản lý: Vòng quay tài sản, vòng quay hàng tồn kho và vòng quay các khoản phải thu cho thấy công ty chuyển nguồn lực thành doanh thu tốt đến đâu. Bối cảnh ngành là thiết yếu cho việc diễn giải.

  5. Các tỷ số sinh lời định lượng thành công tài chính: Biên lợi nhuận gộp, biên lợi nhuận ròng và ROE đo khả năng tạo lợi nhuận. Phân rã DuPont cho thấy ROE đến từ biên lợi nhuận, vòng quay hay đòn bẩy.

  6. Các tỷ số kết nối với định giá tài sản: Các biến báo cáo tài chính như tỷ số B/M, khả năng sinh lời và đầu tư là cơ sở của các mô hình nhân tố giải thích sự khác biệt chéo về lợi nhuận.

  7. Bối cảnh quyết định cách diễn giải: Các tỷ số phải được so sánh với doanh nghiệp cùng ngành, theo dõi theo thời gian và xem xét cùng các yếu tố định tính. Không có tỷ số đơn lẻ nào kể được toàn bộ câu chuyện.

Nhìn về phía trước, các chương tiếp theo sẽ khám phá cách các biến cơ bản này tương tác với giá thị trường trong các mô hình định giá tài sản, và cách xây dựng các danh mục nhân tố dựa trên đặc điểm của báo cáo tài chính.