24  Phân tích chiết khấu dòng tiền

24.1 Một doanh nghiệp đáng giá bao nhiêu?

Các chương trước đã xem xét cách thị trường định giá chứng khoán ở trạng thái cân bằng và cách báo cáo tài chính hé lộ các yếu tố cơ bản của doanh nghiệp. Nhưng những cách tiếp cận này để ngỏ một câu hỏi trung tâm: giá trị nội tại của một doanh nghiệp là bao nhiêu, độc lập với giá thị trường hiện tại?

Phân tích chiết khấu dòng tiền (DCF) trả lời câu hỏi này bằng cách định giá doanh nghiệp dựa trên khả năng tạo ra tiền cho nhà đầu tư. Ý tưởng cốt lõi rất đơn giản: một doanh nghiệp đáng giá bằng giá trị hiện tại của toàn bộ dòng tiền mà nó sẽ tạo ra trong tương lai. Nguyên lý giá trị bằng dòng tiền tương lai được chiết khấu này làm nền tảng cho hầu như toàn bộ tài chính, từ định giá trái phiếu đến định giá bất động sản.

Phân tích DCF khác biệt với các cách tiếp cận định giá khác ở ba điểm quan trọng. Thứ nhất, nó tính đến một cách tường minh giá trị thời gian của tiền (tức là nguyên lý một đồng hôm nay có giá trị hơn một đồng ngày mai). Bằng cách chiết khấu các dòng tiền tương lai ở một tỷ suất chiết khấu phù hợp, chúng ta đưa vào cả sở thích về thời gian lẫn rủi ro. Thứ hai, DCF hướng về tương lai, đặc biệt phù hợp với những công ty mà kết quả trong quá khứ có thể không phản ánh tiềm năng tương lai. Thứ ba, DCF đủ linh hoạt để phù hợp với nhiều mô hình kinh doanh và cấu trúc vốn, nên áp dụng được cho mọi ngành và quy mô công ty.

24.1.1 Tổng quan các phương pháp định giá

Các phương pháp định giá doanh nghiệp nhìn chung thuộc ba nhóm:

  • Các cách tiếp cận dựa trên thị trường so sánh các công ty bằng các chỉ số tương đối như P/E hoặc EV/EBITDA. Cách này nhanh nhưng giả định các công ty so sánh được định giá hợp lý.
  • Các phương pháp dựa trên tài sản tập trung vào giá trị ròng của tài sản hữu hình và vô hình. Cách này phù hợp với các kịch bản thanh lý nhưng bỏ sót giá trị hoạt động liên tục.
  • Các kỹ thuật dựa trên thu nhập định giá doanh nghiệp dựa trên khả năng tạo ra dòng tiền tương lai. DCF là phương pháp dựa trên thu nhập chặt chẽ nhất.

Chúng ta tập trung vào DCF vì nó buộc nhà phân tích phải nêu rõ các giả định về tăng trưởng, khả năng sinh lời và rủi ro. Những giả định này thường bị ẩn trong các phương pháp khác. Ngay cả khi DCF không phải lời cuối cùng về định giá, kỷ luật xây dựng một mô hình DCF vẫn làm sâu sắc thêm hiểu biết về điều tạo ra giá trị.

24.1.2 Ba trụ cột của DCF

Mọi phân tích DCF dựa trên ba thành phần:

  1. Dự báo dòng tiền tự do (FCF): Dòng tiền kỳ vọng trong tương lai có thể chia cho nhà đầu tư sau chi phí hoạt động, thuế và đầu tư
  2. Giá trị cuối kỳ: Giá trị của công ty vượt ngoài giai đoạn dự báo tường minh, thường chiếm phần lớn tổng giá trị định giá
  3. Tỷ suất chiết khấu: Thường là chi phí vốn bình quân gia quyền (WACC), điều chỉnh các dòng tiền tương lai về giá trị hiện tại bằng cách đưa vào rủi ro và cấu trúc vốn

Chúng ta đưa ra các giả định đơn giản hóa xuyên suốt chương này. Cụ thể, chúng ta giả định các công ty chỉ thực hiện hoạt động kinh doanh (tức là báo cáo tài chính không chứa các khoản mục phi hoạt động như tiền mặt dư thừa hay chứng khoán đầu tư). Trong thực tế, các khoản này phải được định giá riêng. Có cả những cuốn giáo trình dành riêng cho các sắc thái của định giá; mục tiêu của chúng ta là thiết lập khuôn khổ khái niệm và cách triển khai thực tế.

Hiện mã
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf

from plotnine import *
from mizani.formatters import percent_format, comma_format
from itertools import product

24.2 Hiểu về dòng tiền tự do

Trước khi đi vào tính toán, chúng ta cần hiểu dòng tiền tự do đại diện cho điều gì và vì sao nó quan trọng đối với định giá.

24.2.1 Vì sao là dòng tiền tự do chứ không phải lợi nhuận ròng?

Kế toán viên báo cáo lợi nhuận ròng, nhưng DCF dùng dòng tiền tự do. Vì sao có sự khác biệt?

Lợi nhuận ròng bao gồm các khoản không bằng tiền (như khấu hao) và bỏ qua các nhu cầu tiền mặt (như chi đầu tư và đầu tư vào vốn lưu động). Một công ty có thể báo lợi nhuận mạnh trong khi đốt tiền, hoặc tạo ra nhiều tiền trong khi báo lỗ. Dòng tiền tự do nắm bắt điều thực sự quan trọng cho định giá: lượng tiền có thể chia cho mọi bên cung cấp vốn (cả chủ nợ lẫn cổ đông) sau khi tài trợ hoạt động và đầu tư.

24.2.2 Công thức dòng tiền tự do

Chúng ta tính FCF bằng công thức sau:

\[ \text{FCF} = \text{EBIT} \times (1 - \tau) + \text{D\&A} - \Delta\text{WC} - \text{CAPEX} \]

trong đó:

  • EBIT (lợi nhuận trước lãi vay và thuế): Lợi nhuận hoạt động cốt lõi trước chi phí tài trợ và thuế
  • \(\tau\): Thuế suất thuế thu nhập doanh nghiệp áp dụng cho lợi nhuận hoạt động
  • D&A (khấu hao): Các khoản chi phí không bằng tiền làm giảm lợi nhuận báo cáo nhưng không tiêu tốn tiền
  • \(\Delta\)WC (thay đổi vốn lưu động): Tiền bị chôn vào (hoặc được giải phóng khỏi) hoạt động (tăng các khoản phải thu và hàng tồn kho tiêu tốn tiền, còn tăng các khoản phải trả mang lại tiền)
  • CAPEX (chi đầu tư): Các khoản đầu tư vào tài sản dài hạn cần thiết để duy trì và mở rộng hoạt động

Một cách biểu diễn thay thế xuất phát trực tiếp từ EBIT:

\[ \text{FCF} = \text{EBIT} + \text{D\&A} - \text{Taxes} - \Delta\text{WC} - \text{CAPEX} \]

Cả hai cách biểu diễn cho cùng kết quả khi thuế được tính nhất quán. Ý chính là FCF đại diện cho tiền do hoạt động tạo ra sau mọi nhu cầu tái đầu tư (tức là lượng tiền về lý thuyết có thể chia cho nhà đầu tư mà không làm tổn hại doanh nghiệp).

24.3 Tải dữ liệu tài chính lịch sử

Chúng ta dùng Tập đoàn FPT, một trong những công ty công nghệ lớn nhất Việt Nam, làm tình huống nghiên cứu. FPT cung cấp dịch vụ CNTT, viễn thông và giáo dục. Đây là doanh nghiệp đa ngành với nhu cầu vốn đáng kể và tiềm năng tăng trưởng.

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={"date"}
)

# Filter to FPT and examine the data structure
fpt_data = comp_vn[comp_vn["symbol"] == "FPT"].copy()
fpt_data["year"] = fpt_data["year"].astype(int)
fpt_data = fpt_data.sort_values("year").reset_index(drop=True)

print(f"Available years: {fpt_data['year'].min()} to {fpt_data['year'].max()}")
print(f"Number of observations: {len(fpt_data)}")
Available years: 2002 to 2023
Number of observations: 22

24.3.1 Tính dòng tiền tự do lịch sử

Hãy tính các thành phần cần thiết cho FCF từ dữ liệu báo cáo tài chính:

Hiện mã
# Extract and compute FCF components
historical_data = (fpt_data
    .assign(
        # Revenue for ratio calculations
        revenue=lambda x: x["is_net_revenue"],
        
        # EBIT = Earnings before interest and taxes
        # Approximate as EBT + Interest Expense
        ebit=lambda x: x["is_ebt"] + x["is_interest_expense"],
        
        # Tax payments (use actual tax expense)
        taxes=lambda x: x["is_cit_expense"],
        
        # Depreciation and amortization (non-cash add-back)
        depreciation=lambda x: x["cfo_depreciation"],
        
        # Change in working capital components
        # Positive delta_wc means cash is consumed (tied up in working capital)
        delta_working_capital=lambda x: (
            x["cfo_receive"] +      # Change in receivables
            x["cfo_inventory"] -    # Change in inventory  
            x["cfo_payale"]         # Change in payables (negative = cash source)
        ),
        
        # Capital expenditures
        capex=lambda x: x["capex"]
    )
    .loc[:, [
        "year", "revenue", "ebit", "taxes", "depreciation",
        "delta_working_capital", "capex"
    ]]
)

# Calculate Free Cash Flow
historical_data["fcf"] = (
    historical_data["ebit"] 
    - historical_data["taxes"]
    + historical_data["depreciation"]
    - historical_data["delta_working_capital"]
    - historical_data["capex"]
)

historical_data
year revenue ebit taxes depreciation delta_working_capital capex fcf
0 2002 1.514961e+12 2.698700e+10 0.000000e+00 1.261500e+10 -2.561760e+11 2.202800e+10 2.737500e+11
1 2003 4.148298e+12 5.676100e+10 0.000000e+00 1.837700e+10 -5.078740e+11 3.753300e+10 5.454790e+11
2 2004 8.734781e+12 2.145902e+11 1.795700e+10 2.947900e+10 -4.280270e+11 5.252100e+10 6.016182e+11
3 2005 1.410079e+13 3.753490e+11 4.251500e+10 5.381700e+10 -4.471110e+11 1.428320e+11 6.909300e+11
4 2006 2.139975e+13 6.672593e+11 7.368682e+10 1.068192e+11 -1.173099e+12 2.459780e+11 1.627513e+12
5 2007 1.349889e+13 1.071941e+12 1.487146e+11 1.709335e+11 -1.873794e+12 4.802762e+11 2.487677e+12
6 2008 1.638184e+13 1.320573e+12 1.890384e+11 2.395799e+11 -1.419506e+11 6.690461e+11 8.440192e+11
7 2009 1.840403e+13 1.807221e+12 2.916482e+11 3.041813e+11 -8.065011e+11 7.632280e+11 1.863027e+12
8 2010 2.001730e+13 2.261341e+12 3.314359e+11 3.294060e+11 -2.360993e+12 8.672138e+11 3.753090e+12
9 2011 2.537025e+13 2.751044e+12 4.223952e+11 3.759567e+11 -2.099380e+12 4.524081e+11 4.351578e+12
10 2012 2.459430e+13 2.635219e+12 4.210738e+11 3.995598e+11 8.043763e+11 7.083318e+11 1.100997e+12
11 2013 2.702789e+13 2.690568e+12 4.503170e+11 4.429860e+11 -1.947751e+12 9.110216e+11 3.719967e+12
12 2014 3.264466e+13 2.625389e+12 3.800994e+11 5.472736e+11 -3.078130e+12 1.417399e+12 4.453295e+12
13 2015 3.795970e+13 3.113651e+12 4.130641e+11 7.328801e+11 -1.951778e+12 1.974295e+12 3.410951e+12
14 2016 3.953147e+13 3.388085e+12 4.382078e+11 9.334397e+11 -9.242713e+11 1.428472e+12 3.379116e+12
15 2017 4.265861e+13 4.623663e+12 7.270039e+11 1.039417e+12 -4.638788e+12 1.100498e+12 8.474367e+12
16 2018 2.321354e+13 4.095947e+12 6.236054e+11 1.164692e+12 -1.033438e+12 2.452902e+12 3.217569e+12
17 2019 2.771696e+13 5.023518e+12 7.528183e+11 1.354613e+12 -5.308818e+11 3.230818e+12 2.925377e+12
18 2020 2.983040e+13 5.648794e+12 8.397114e+11 1.490607e+12 -8.040730e+11 3.014322e+12 4.089441e+12
19 2021 3.565726e+13 6.821202e+12 9.879053e+11 1.643916e+12 -2.821825e+12 2.908134e+12 7.390903e+12
20 2022 4.400953e+13 8.308009e+12 1.170940e+12 1.833064e+12 -3.746661e+12 3.209581e+12 9.507213e+12
21 2023 5.261790e+13 1.003565e+13 1.414956e+12 2.286514e+12 -2.147304e+12 3.948982e+12 9.105534e+12

24.3.2 Hiểu mô hình lịch sử

Trước khi dự báo, chúng ta nên hiểu các xu hướng lịch sử của FCF và các thành phần của nó:

Hiện mã
# Calculate key ratios relative to revenue
historical_ratios = (historical_data
    .assign(
        # Revenue growth (year-over-year)
        revenue_growth=lambda x: x["revenue"].pct_change(),
        
        # Operating margin: EBIT as % of revenue
        operating_margin=lambda x: x["ebit"] / x["revenue"],
        
        # Depreciation as % of revenue
        depreciation_margin=lambda x: x["depreciation"] / x["revenue"],
        
        # Tax rate (taxes as % of revenue, for simplicity)
        tax_margin=lambda x: x["taxes"] / x["revenue"],
        
        # Working capital intensity
        working_capital_margin=lambda x: x["delta_working_capital"] / x["revenue"],
        
        # Capital intensity
        capex_margin=lambda x: x["capex"] / x["revenue"],
        
        # FCF margin
        fcf_margin=lambda x: x["fcf"] / x["revenue"]
    )
)

# Display key metrics
display_cols = [
    "year", "revenue_growth", "operating_margin", "depreciation_margin",
    "tax_margin", "working_capital_margin", "capex_margin", "fcf_margin"
]

historical_ratios[display_cols].round(3)
year revenue_growth operating_margin depreciation_margin tax_margin working_capital_margin capex_margin fcf_margin
0 2002 NaN 0.018 0.008 0.000 -0.169 0.015 0.181
1 2003 1.738 0.014 0.004 0.000 -0.122 0.009 0.131
2 2004 1.106 0.025 0.003 0.002 -0.049 0.006 0.069
3 2005 0.614 0.027 0.004 0.003 -0.032 0.010 0.049
4 2006 0.518 0.031 0.005 0.003 -0.055 0.011 0.076
5 2007 -0.369 0.079 0.013 0.011 -0.139 0.036 0.184
6 2008 0.214 0.081 0.015 0.012 -0.009 0.041 0.052
7 2009 0.123 0.098 0.017 0.016 -0.044 0.041 0.101
8 2010 0.088 0.113 0.016 0.017 -0.118 0.043 0.187
9 2011 0.267 0.108 0.015 0.017 -0.083 0.018 0.172
10 2012 -0.031 0.107 0.016 0.017 0.033 0.029 0.045
11 2013 0.099 0.100 0.016 0.017 -0.072 0.034 0.138
12 2014 0.208 0.080 0.017 0.012 -0.094 0.043 0.136
13 2015 0.163 0.082 0.019 0.011 -0.051 0.052 0.090
14 2016 0.041 0.086 0.024 0.011 -0.023 0.036 0.085
15 2017 0.079 0.108 0.024 0.017 -0.109 0.026 0.199
16 2018 -0.456 0.176 0.050 0.027 -0.045 0.106 0.139
17 2019 0.194 0.181 0.049 0.027 -0.019 0.117 0.106
18 2020 0.076 0.189 0.050 0.028 -0.027 0.101 0.137
19 2021 0.195 0.191 0.046 0.028 -0.079 0.082 0.207
20 2022 0.234 0.189 0.042 0.027 -0.085 0.073 0.216
21 2023 0.196 0.191 0.043 0.027 -0.041 0.075 0.173

24.4 Trực quan hóa các tỷ số lịch sử

Hình 24.1 cho thấy diễn biến lịch sử của các tỷ số tài chính then chốt chi phối FCF. Hiểu các mô hình này giúp định hướng các dự báo của chúng ta.

Hiện mã
# Prepare data for plotting
ratio_columns = [
    "operating_margin", "depreciation_margin", "tax_margin",
    "working_capital_margin", "capex_margin"
]

ratios_long = (historical_ratios
    .melt(
        id_vars=["year"],
        value_vars=ratio_columns,
        var_name="ratio",
        value_name="value"
    )
    .assign(
        ratio=lambda x: x["ratio"].str.replace("_", " ").str.title()
    )
)

ratios_figure = (
    ggplot(ratios_long, aes(x="year", y="value", color="ratio"))
    + geom_line(size=1)
    + geom_point(size=2)
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="", y="Ratio (% of Revenue)", color="",
        title="Key Financial Ratios of FPT Over Time"
    )
    + theme(legend_position="right")
)

ratios_figure.show()
Tiêu đề: Các tỷ số tài chính then chốt của FPT theo thời gian. Hình là biểu đồ đường với năm trên trục hoành và các tỷ số tài chính trên trục tung.
Hình 24.1: Các tỷ số tài chính lịch sử cho thấy đặc điểm hoạt động của FPT. Các mô hình này làm cơ sở cho các giả định dự báo của chúng ta.

Một số quy luật nổi lên từ dữ liệu lịch sử. Biên lợi nhuận hoạt động cho thấy khả năng sinh lời của hoạt động cốt lõi. Biên khấu hao phản ánh mức độ thâm dụng tài sản. Biên CAPEX cho thấy nhu cầu đầu tư. Biên vốn lưu động có thể biến động mạnh, phản ánh sự thay đổi trong điều khoản tín dụng và quản lý hàng tồn kho.

24.5 Dự báo dòng tiền tự do

Khi đã xác lập các xu hướng lịch sử, chúng ta dự phóng FCF cho tương lai. Việc này đòi hỏi dự báo cả tăng trưởng doanh thu lẫn các tỷ số chuyển doanh thu thành dòng tiền.

24.5.1 Phương pháp dự báo dựa trên tỷ số

Chúng ta dùng phương pháp dựa trên tỷ số, liên kết mọi thành phần của FCF với doanh thu. Điều này khiến việc dự báo khả thi: thay vì dự phóng các con số tuyệt đối cho từng thành phần, chúng ta dự báo (1) tăng trưởng doanh thu và (2) mỗi thành phần thay đổi theo doanh thu như thế nào.

Cách tiếp cận này hàm chứa một giả định then chốt: mối quan hệ giữa doanh thu và các thành phần của FCF vẫn ổn định. Trong thực tế, đòn bẩy hoạt động, nhu cầu đầu tư và nhu cầu vốn lưu động có thể thay đổi khi công ty trưởng thành. Các mô hình định giá tinh vi mô hình hóa những động lực này một cách tường minh.

24.5.2 Thiết lập các giả định dự báo

Với dự báo năm năm, chúng ta đưa ra các giả định sau về các tỷ số tài chính của FPT. Các giả định này nên phản ánh phân tích ngành, định hướng của công ty và động lực cạnh tranh. Ở đây chúng ta dùng các ước tính mang tính minh họa:

Hiện mã
# Define the forecast horizon
last_historical_year = historical_data["year"].max()
forecast_years = list(range(last_historical_year + 1, last_historical_year + 6))
n_forecast_years = len(forecast_years)

print(f"Forecast period: {forecast_years[0]} to {forecast_years[-1]}")

# Define forecast ratios
# In practice, these would come from detailed analysis
forecast_assumptions = pd.DataFrame({
    "year": forecast_years,
    # Operating margin: slight improvement as scale increases
    "operating_margin": [0.12, 0.125, 0.13, 0.13, 0.135],
    # Depreciation: stable as % of revenue
    "depreciation_margin": [0.03, 0.03, 0.03, 0.028, 0.028],
    # Tax rate: stable
    "tax_margin": [0.02, 0.02, 0.02, 0.02, 0.02],
    # Working capital: modest cash consumption
    "working_capital_margin": [0.01, 0.01, 0.008, 0.008, 0.008],
    # CAPEX: declining as % of revenue as growth moderates
    "capex_margin": [0.05, 0.048, 0.045, 0.042, 0.04]
})

forecast_assumptions
Forecast period: 2024 to 2028
year operating_margin depreciation_margin tax_margin working_capital_margin capex_margin
0 2024 0.120 0.030 0.02 0.010 0.050
1 2025 0.125 0.030 0.02 0.010 0.048
2 2026 0.130 0.030 0.02 0.008 0.045
3 2027 0.130 0.028 0.02 0.008 0.042
4 2028 0.135 0.028 0.02 0.008 0.040

Một lưu ý về giả định thuế: các nhà phân tích thường mặc định dùng thuế suất thuế thu nhập doanh nghiệp theo luật định (20% ở Việt Nam), nhưng thuế suất thực nộp bằng tiền lệch khỏi thuế suất luật định một cách dai dẳng và có hệ thống. Gaertner, Glover, và Levine (2026) ghi nhận rằng trong khoảng thời gian mười năm, các công ty Mỹ thuộc nhóm quy mô lớn nhất (decile cao nhất) có thuế suất hiệu dụng bằng tiền thấp hơn khoảng 10 điểm phần trăm so với nhóm nhỏ nhất, phần lớn vì các công ty nhỏ có nhiều khả năng gặp thua lỗ không thể bù trừ hoàn toàn với lợi nhuận chịu thuế. Cơ chế này còn được khuếch đại ở Việt Nam, nơi lỗ tính thuế chỉ được chuyển tối đa năm năm liên tục và không được chuyển ngược về kỳ trước, nên các công ty nhỏ hoặc non trẻ với những khoản lỗ không đều có xu hướng nộp thuế bằng tiền về lâu dài nhiều hơn mức mà thuế suất luật định gợi ý. Phương pháp dựa trên tỷ số của chúng ta, vốn neo giả định thuế vào số thuế thực nộp bằng tiền trong lịch sử của chính công ty thay vì thuế suất luật định, vững hơn trước vấn đề này.

24.5.3 Dự báo tăng trưởng doanh thu

Tăng trưởng doanh thu thường là giả định quan trọng nhất và bất định nhất trong phân tích DCF. Chúng ta trình bày hai cách tiếp cận: dùng trung bình lịch sử và liên kết tăng trưởng với các dự báo vĩ mô.

Cách tiếp cận 1: Trung bình lịch sử

Cách đơn giản dùng tốc độ tăng trưởng trung bình trong lịch sử:

Hiện mã
historical_growth = historical_ratios["revenue_growth"].dropna()
avg_historical_growth = historical_growth.mean()

print(f"Average historical revenue growth: {avg_historical_growth:.1%}")
Average historical revenue growth: 25.2%

Cách tiếp cận 2: Tăng trưởng gắn với GDP

Cách tinh vi hơn liên kết tăng trưởng của công ty với các dự báo GDP từ các tổ chức như IMF. Điều này nắm bắt trực giác rằng doanh thu công ty thường biến động cùng hoạt động kinh tế rộng hơn.

Hiện mã
# Vietnam GDP growth forecasts (illustrative, based on IMF WEO style projections)
# In practice, download from IMF WEO database
gdp_forecasts = pd.DataFrame({
    "year": forecast_years,
    "gdp_growth": [0.065, 0.063, 0.060, 0.058, 0.055]  # Gradually declining to long-term
})

# Assume FPT grows at a premium to GDP (tech sector outperformance)
# This premium should reflect company-specific factors
growth_premium = 0.05  # 5 percentage points above GDP

forecast_assumptions = forecast_assumptions.merge(gdp_forecasts, on="year")
forecast_assumptions["revenue_growth"] = (
    forecast_assumptions["gdp_growth"] + growth_premium
)

forecast_assumptions[["year", "gdp_growth", "revenue_growth"]]
year gdp_growth revenue_growth
0 2024 0.065 0.115
1 2025 0.063 0.113
2 2026 0.060 0.110
3 2027 0.058 0.108
4 2028 0.055 0.105

24.5.4 Xây dựng dự báo

Bây giờ chúng ta kết hợp các giả định để dự phóng doanh thu và FCF:

Hiện mã
# Get the last historical revenue as our starting point
last_revenue = historical_data.loc[
    historical_data["year"] == last_historical_year, "revenue"
].values[0]

print(f"Last historical revenue ({last_historical_year}): {last_revenue/1e12:.2f} trillion VND")

# Project revenue forward
forecast_data = forecast_assumptions.copy()
forecast_data["revenue"] = None

# Calculate revenue for each forecast year
for i, row in forecast_data.iterrows():
    if i == 0:
        # First forecast year: grow from last historical
        forecast_data.loc[i, "revenue"] = last_revenue * (1 + row["revenue_growth"])
    else:
        # Subsequent years: grow from previous forecast
        prev_revenue = forecast_data.loc[i-1, "revenue"]
        forecast_data.loc[i, "revenue"] = prev_revenue * (1 + row["revenue_growth"])

# Convert revenue to numeric
forecast_data["revenue"] = forecast_data["revenue"].astype(float)

# Calculate FCF components from ratios
forecast_data["ebit"] = forecast_data["operating_margin"] * forecast_data["revenue"]
forecast_data["depreciation"] = forecast_data["depreciation_margin"] * forecast_data["revenue"]
forecast_data["taxes"] = forecast_data["tax_margin"] * forecast_data["revenue"]
forecast_data["delta_working_capital"] = forecast_data["working_capital_margin"] * forecast_data["revenue"]
forecast_data["capex"] = forecast_data["capex_margin"] * forecast_data["revenue"]

# Calculate FCF
forecast_data["fcf"] = (
    forecast_data["ebit"]
    - forecast_data["taxes"]
    + forecast_data["depreciation"]
    - forecast_data["delta_working_capital"]
    - forecast_data["capex"]
)

forecast_data[["year", "revenue", "ebit", "fcf"]].round(0)
Last historical revenue (2023): 52.62 trillion VND
year revenue ebit fcf
0 2024 5.866896e+13 7.040275e+12 4.106827e+12
1 2025 6.529855e+13 8.162319e+12 5.027988e+12
2 2026 7.248139e+13 9.422581e+12 6.305881e+12
3 2027 8.030938e+13 1.044022e+13 7.067226e+12
4 2028 8.874187e+13 1.198015e+13 8.430477e+12

24.6 Trực quan hóa dự báo

Hình 24.2 so sánh các tỷ số dự báo với giá trị lịch sử, cho thấy sự chuyển tiếp từ kết quả thực hiện sang kết quả dự phóng.

Hiện mã
# Prepare historical data for plotting
historical_plot = (historical_ratios
    .loc[:, ["year", "operating_margin", "depreciation_margin", 
             "tax_margin", "working_capital_margin", "capex_margin"]]
    .assign(type="Historical")
)

# Prepare forecast data for plotting
forecast_plot = (forecast_data
    .loc[:, ["year", "operating_margin", "depreciation_margin",
             "tax_margin", "working_capital_margin", "capex_margin"]]
    .assign(type="Forecast")
)

# Combine
combined_ratios = pd.concat([historical_plot, forecast_plot], ignore_index=True)

# Reshape for plotting
combined_long = combined_ratios.melt(
    id_vars=["year", "type"],
    var_name="ratio",
    value_name="value"
)

combined_long["type"] = pd.Categorical(
    combined_long["type"], 
    categories=["Historical", "Forecast"]
)

forecast_ratios_figure = (
    ggplot(combined_long, aes(x="year", y="value", color="ratio", linetype="type"))
    + geom_line(size=1)
    + geom_point(size=2)
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="", y="Ratio (% of Revenue)", color="", linetype="",
        title="Historical and Forecast Financial Ratios for FPT"
    )
    + theme(legend_position="right")
)

forecast_ratios_figure.show()
Tiêu đề: Các tỷ số tài chính lịch sử và dự báo của FPT. Hình là các biểu đồ đường so sánh tỷ số lịch sử với giả định dự báo.
Hình 24.2: Các tỷ số lịch sử (đường liền) và giả định dự báo (đường đứt nét) của các chỉ tiêu tài chính then chốt. Giai đoạn dự báo bắt đầu sau quan sát lịch sử cuối cùng.

Hình 24.3 cho thấy quỹ đạo tăng trưởng doanh thu, so sánh kết quả lịch sử với các dự báo gắn với GDP của chúng ta.

Hiện mã
# Prepare growth data
historical_growth_df = (historical_ratios
    .loc[:, ["year", "revenue_growth"]]
    .dropna()
    .assign(type="Historical")
)

forecast_growth_df = (forecast_data
    .loc[:, ["year", "revenue_growth", "gdp_growth"]]
    .assign(type="Forecast")
)

# Combine for revenue growth
growth_combined = pd.concat([
    historical_growth_df,
    forecast_growth_df[["year", "revenue_growth", "type"]]
], ignore_index=True)

growth_combined["type"] = pd.Categorical(
    growth_combined["type"],
    categories=["Historical", "Forecast"]
)

growth_figure = (
    ggplot(growth_combined, aes(x="year", y="revenue_growth", linetype="type"))
    + geom_line(size=1, color="steelblue")
    + geom_point(size=2, color="steelblue")
    + scale_y_continuous(labels=percent_format())
    + labs(
        x="", y="Revenue Growth Rate", linetype="",
        title="Historical and Forecast Revenue Growth for FPT"
    )
)

growth_figure.show()
Tiêu đề: Tốc độ tăng trưởng doanh thu của FPT. Hình cho thấy tốc độ tăng trưởng doanh thu lịch sử và dự báo.
Hình 24.3: Tốc độ tăng trưởng doanh thu: lịch sử (thực hiện) và dự báo (gắn với GDP cộng phần bù của công ty). Dự báo giả định FPT tăng trưởng cao hơn tăng trưởng GDP của Việt Nam một phần bù.

Hình 24.4 trình bày các dự phóng FCF thu được cùng với các giá trị lịch sử.

Hiện mã
# Combine historical and forecast FCF
fcf_historical = (historical_data
    .loc[:, ["year", "fcf"]]
    .assign(type="Historical")
)

fcf_forecast = (forecast_data
    .loc[:, ["year", "fcf"]]
    .assign(type="Forecast")
)

fcf_combined = pd.concat([fcf_historical, fcf_forecast], ignore_index=True)
fcf_combined["type"] = pd.Categorical(
    fcf_combined["type"],
    categories=["Historical", "Forecast"]
)

fcf_figure = (
    ggplot(fcf_combined, aes(x="year", y="fcf/1e12", fill="type"))
    + geom_col()
    + labs(
        x="", y="Free Cash Flow (Trillion VND)", fill="",
        title="Historical and Forecast Free Cash Flow for FPT"
    )
)

fcf_figure.show()
Tiêu đề: Dòng tiền tự do của FPT. Hình là biểu đồ cột với các giá trị FCF lịch sử và dự báo.
Hình 24.4: Dòng tiền tự do: lịch sử (thực hiện) và dự báo (dự phóng). Dự báo phản ánh các giả định của chúng ta về tăng trưởng doanh thu và các tỷ số hoạt động.

24.7 Giá trị cuối kỳ: nắm bắt giá trị dài hạn

Một thành phần then chốt của phân tích DCF là giá trị cuối kỳ (hay giá trị tiếp diễn), thể hiện giá trị của công ty vượt ngoài giai đoạn dự báo tường minh. Trong hầu hết các định giá, giá trị cuối kỳ chiếm 50-80% tổng giá trị doanh nghiệp, khiến việc ước tính nó đặc biệt quan trọng.

24.7.1 Mô hình tăng trưởng vĩnh viễn

Cách tiếp cận phổ biến nhất là mô hình tăng trưởng vĩnh viễn (còn gọi là mô hình tăng trưởng Gordon), giả định FCF tăng với tốc độ không đổi mãi mãi:

\[ TV_T = \frac{FCF_{T+1}}{r - g} = \frac{FCF_T \times (1 + g)}{r - g} \]

trong đó:

  • \(TV_T\): Giá trị cuối kỳ tại cuối năm \(T\)
  • \(FCF_T\): Dòng tiền tự do của năm dự báo cuối cùng
  • \(g\): Tốc độ tăng trưởng vĩnh viễn
  • \(r\): Tỷ suất chiết khấu (WACC)

24.7.2 Lựa chọn tốc độ tăng trưởng vĩnh viễn

Tốc độ tăng trưởng vĩnh viễn \(g\) nên phản ánh mức tăng trưởng bền vững dài hạn. Các cân nhắc chính:

  1. Không công ty nào có thể tăng trưởng nhanh hơn nền kinh tế mãi mãi. Nếu có, công ty cuối cùng sẽ lớn hơn GDP, điều bất khả thi. Tăng trưởng GDP dài hạn (danh nghĩa, bao gồm lạm phát) là giới hạn trên.

  2. Các công ty trưởng thành thường tăng trưởng bằng hoặc thấp hơn tăng trưởng GDP. Tốc độ tăng trưởng vĩnh viễn nên phản ánh công ty ở “trạng thái ổn định”, chứ không phải giai đoạn tăng trưởng cao hiện tại.

  3. Đối với Việt Nam, tăng trưởng GDP danh nghĩa dài hạn có thể ở mức 6-8% với giai đoạn phát triển hiện nay, nhưng sẽ giảm dần theo thời gian. Tốc độ tăng trưởng vĩnh viễn 3-5% thường là hợp lý.

Hiện mã
def compute_terminal_value(last_fcf, growth_rate, discount_rate):
    """
    Compute terminal value using the perpetuity growth model.
    
    Parameters:
    -----------
    last_fcf : float
        Free cash flow in the final forecast year
    growth_rate : float
        Perpetual growth rate (g)
    discount_rate : float
        Discount rate / WACC (r)
        
    Returns:
    --------
    float : Terminal value
    """
    if discount_rate <= growth_rate:
        raise ValueError("Discount rate must exceed growth rate for finite terminal value")
    
    return last_fcf * (1 + growth_rate) / (discount_rate - growth_rate)


# Example calculation
last_fcf = forecast_data["fcf"].iloc[-1]
perpetual_growth = 0.04  # 4% perpetual growth
discount_rate = 0.10     # 10% WACC (placeholder)

terminal_value = compute_terminal_value(last_fcf, perpetual_growth, discount_rate)

print(f"Last forecast FCF: {last_fcf/1e12:.2f} trillion VND")
print(f"Terminal value (at {perpetual_growth:.0%} growth, {discount_rate:.0%} WACC): {terminal_value/1e12:.1f} trillion VND")
Last forecast FCF: 8.43 trillion VND
Terminal value (at 4% growth, 10% WACC): 146.1 trillion VND

24.7.3 Phương án thay thế: cách tiếp cận bội số thoái vốn

Các nhà thực hành thường kiểm tra chéo giá trị cuối kỳ bằng cách tiếp cận bội số thoái vốn, giả định công ty được bán vào cuối giai đoạn dự báo với bội số của EBITDA, EBIT hoặc doanh thu tương đương các công ty tương tự hiện nay.

Ví dụ, nếu các công ty so sánh được giao dịch ở mức 10 lần EBITDA, giá trị cuối kỳ sẽ là:

\[ TV_T = \text{EBITDA}_T \times \text{Exit Multiple} \]

Cách này đơn giản hơn nhưng hàm chứa giả định rằng các bội số thị trường hiện nay sẽ duy trì (một giả định mạnh có thể không đúng).

24.8 Tỷ suất chiết khấu: chi phí vốn bình quân gia quyền

Tỷ suất chiết khấu chuyển các dòng tiền tương lai về giá trị hiện tại. Với FCF (thuộc về mọi bên cung cấp vốn), chúng ta dùng chi phí vốn bình quân gia quyền (WACC):

\[ WACC = \frac{E}{E+D} \times r_E + \frac{D}{E+D} \times r_D \times (1 - \tau) \]

trong đó:

  • \(E\): Giá trị thị trường của vốn chủ sở hữu
  • \(D\): Giá trị thị trường của nợ
  • \(r_E\): Chi phí vốn chủ sở hữu (thường được ước tính bằng CAPM)
  • \(r_D\): Chi phí nợ (trước thuế)
  • \(\tau\): Thuế suất thuế thu nhập doanh nghiệp

Thành phần \((1-\tau)\) trên nợ phản ánh lá chắn thuế. Lãi vay được khấu trừ thuế, làm giảm chi phí nợ hiệu dụng.

24.8.1 Ước tính các thành phần của WACC

Chi phí vốn chủ sở hữu thường được ước tính bằng mô hình định giá tài sản vốn. Xem chương về CAPM:

\[ r_E = r_f + \beta \times (r_m - r_f) \]

trong đó \(r_f\) là lãi suất phi rủi ro, \(\beta\) đo rủi ro hệ thống và \((r_m - r_f)\) là phần bù rủi ro thị trường.

Chi phí nợ có thể được ước tính từ:

  • Chi phí lãi vay chia cho tổng nợ (lãi suất hiệu dụng)
  • Lợi suất của các trái phiếu đang giao dịch của công ty
  • Lợi suất của các trái phiếu có xếp hạng tín nhiệm tương tự

Tỷ trọng cấu trúc vốn nên dùng giá trị thị trường khi có sẵn. Với vốn chủ sở hữu, vốn hóa thị trường rất rõ ràng. Với nợ, giá trị sổ sách thường được dùng khi không quan sát được giá trị thị trường.

24.8.2 Sử dụng dữ liệu WACC theo ngành

Giáo sư Aswath Damodaran tại NYU Stern duy trì bộ dữ liệu toàn diện về WACC theo ngành và phần bù rủi ro quốc gia. Chúng ta dùng các bộ dữ liệu này để ước tính tỷ suất chiết khấu phù hợp cho các công ty Việt Nam.

24.8.2.1 Tải dữ liệu

Đoạn mã sau tải các bộ dữ liệu cần thiết. Hãy chạy thủ công khi cần cập nhật dữ liệu (thường hằng năm), nhưng đoạn mã không được thực thi khi dựng sách để tránh phụ thuộc vào máy chủ bên ngoài.

Hiện mã
import requests
from pathlib import Path

# Create data directory if needed
data_dir = Path("data")
data_dir.mkdir(exist_ok=True)

# Download WACC data
wacc_url = "https://pages.stern.nyu.edu/~adamodar/pc/datasets/wacc.xls"
response = requests.get(wacc_url, timeout=30)
response.raise_for_status()
(data_dir / "damodaran_wacc.xls").write_bytes(response.content)
print("Downloaded: damodaran_wacc.xls")

# Download country risk premium data
crp_url = "https://pages.stern.nyu.edu/~adamodar/pc/datasets/ctryprem.xlsx"
response = requests.get(crp_url, timeout=30)
response.raise_for_status()
(data_dir / "damodaran_crp.xlsx").write_bytes(response.content)
print("Downloaded: damodaran_crp.xlsx")

24.8.2.2 WACC theo ngành

Chúng ta trích xuất chi phí vốn của ngành Computer Services, ngành gần nhất với hồ sơ kinh doanh của FPT:

Hiện mã
import pandas as pd

# Read local WACC data
wacc_data = pd.read_excel(
    "data/damodaran_wacc.xls", 
    sheet_name=1, 
    skiprows=18
)

# Find WACC for Computer Services
industry_wacc = wacc_data.loc[
    wacc_data["Industry Name"] == "Computer Services",
    "Cost of Capital"
].values[0]

print(f"Industry WACC (Computer Services): {industry_wacc:.2%}")
Industry WACC (Computer Services): 7.83%

24.8.2.3 Phần bù rủi ro quốc gia

Với các công ty Việt Nam, chúng ta phải điều chỉnh cho rủi ro đặc thù của quốc gia. Damodaran tính phần bù rủi ro quốc gia dựa trên xếp hạng tín nhiệm quốc gia và biến động tương đối của thị trường cổ phiếu:

Hiện mã
# Read local country risk premium data
crp_data = pd.read_excel(
    "data/damodaran_crp.xlsx",
    sheet_name="ERPs by country",
    skiprows=7
)

# Find Vietnam's country risk premium
vietnam_row = crp_data[
    crp_data.iloc[:, 0].str.contains("Vietnam", case=False, na=False)
]

country_risk_premium = vietnam_row.iloc[0, 8]
print(f"Vietnam Country Risk Premium: {country_risk_premium:.2%}")
Vietnam Country Risk Premium: 2.09%

24.8.2.4 WACC điều chỉnh cho Việt Nam

Kết hợp chuẩn tham chiếu ngành với phần bù rủi ro quốc gia cho ta tỷ suất chiết khấu phù hợp:

Hiện mã
wacc_vietnam = industry_wacc + country_risk_premium

print(f"Industry WACC (US):        {industry_wacc:.2%}")
print(f"Country Risk Premium:      {country_risk_premium:.2%}")
print(f"Adjusted WACC (Vietnam):   {wacc_vietnam:.2%}")

wacc = wacc_vietnam
Industry WACC (US):        7.83%
Country Risk Premium:      2.09%
Adjusted WACC (Vietnam):   9.92%

Lưu ý: Cách tiếp cận này giả định các công ty Việt Nam trong cùng ngành đối mặt rủi ro hoạt động tương tự các công ty Mỹ cùng ngành, với phần bù rủi ro quốc gia phản ánh các rủi ro vĩ mô và chính trị bổ sung. Với phân tích riêng cho từng công ty, có thể cần các điều chỉnh thêm cho khác biệt về đòn bẩy và các yếu tố rủi ro đặc thù của công ty.

24.9 Tính giá trị doanh nghiệp

Khi đã có đủ các thành phần, chúng ta có thể tính giá trị doanh nghiệp. Công thức DCF là:

\[ \text{Enterprise Value} = \sum_{t=1}^{T} \frac{FCF_t}{(1 + WACC)^t} + \frac{TV_T}{(1 + WACC)^T} \]

Số hạng thứ nhất là giá trị hiện tại của các dòng tiền trong giai đoạn dự báo; số hạng thứ hai là giá trị hiện tại của giá trị cuối kỳ.

Hiện mã
def compute_dcf_value(fcf_series, wacc, perpetual_growth):
    """
    Compute enterprise value using DCF analysis.
    
    Parameters:
    -----------
    fcf_series : array-like
        Free cash flows for forecast period
    wacc : float
        Weighted average cost of capital
    perpetual_growth : float
        Perpetual growth rate for terminal value
        
    Returns:
    --------
    dict : Components of DCF valuation
    """
    fcf = np.array(fcf_series)
    n_years = len(fcf)
    
    # Discount factors
    discount_factors = (1 + wacc) ** np.arange(1, n_years + 1)
    
    # Present value of forecast period cash flows
    pv_fcf = fcf / discount_factors
    pv_fcf_total = pv_fcf.sum()
    
    # Terminal value and its present value
    terminal_value = compute_terminal_value(fcf[-1], perpetual_growth, wacc)
    pv_terminal = terminal_value / discount_factors[-1]
    
    # Total enterprise value
    enterprise_value = pv_fcf_total + pv_terminal
    
    return {
        "pv_fcf": pv_fcf_total,
        "terminal_value": terminal_value,
        "pv_terminal": pv_terminal,
        "enterprise_value": enterprise_value,
        "terminal_pct": pv_terminal / enterprise_value
    }


# Compute DCF value
perpetual_growth = 0.04  # 4% perpetual growth

dcf_result = compute_dcf_value(
    fcf_series=forecast_data["fcf"].values,
    wacc=wacc,
    perpetual_growth=perpetual_growth
)

print("DCF Valuation Results")
print("=" * 50)
print(f"PV of Forecast Period FCF: {dcf_result['pv_fcf']/1e12:.1f} trillion VND")
print(f"Terminal Value: {dcf_result['terminal_value']/1e12:.1f} trillion VND")
print(f"PV of Terminal Value: {dcf_result['pv_terminal']/1e12:.1f} trillion VND")
print(f"Enterprise Value: {dcf_result['enterprise_value']/1e12:.1f} trillion VND")
print(f"Terminal Value as % of EV: {dcf_result['terminal_pct']:.1%}")
DCF Valuation Results
==================================================
PV of Forecast Period FCF: 22.7 trillion VND
Terminal Value: 148.1 trillion VND
PV of Terminal Value: 92.3 trillion VND
Enterprise Value: 115.1 trillion VND
Terminal Value as % of EV: 80.2%

Lưu ý rằng giá trị cuối kỳ thường chiếm 60-80% giá trị doanh nghiệp. Điều này nhấn mạnh tầm quan trọng của các giả định về giá trị cuối kỳ và sự bất định vốn có trong phân tích DCF.

24.10 Phân tích độ nhạy

Do các đầu vào của DCF có tính bất định, phân tích độ nhạy là thiết yếu. Chúng ta xem xét giá trị doanh nghiệp thay đổi ra sao với các giả định khác nhau về WACC và tăng trưởng vĩnh viễn.

Hiện mã
# Define ranges for sensitivity analysis
wacc_range = np.arange(0.08, 0.14, 0.01)  # 8% to 13%
growth_range = np.arange(0.02, 0.06, 0.01)  # 2% to 5%

# Create all combinations
sensitivity_results = []

for w in wacc_range:
    for g in growth_range:
        if w > g:  # Must have WACC > growth for valid terminal value
            result = compute_dcf_value(
                fcf_series=forecast_data["fcf"].values,
                wacc=w,
                perpetual_growth=g
            )
            sensitivity_results.append({
                "wacc": w,
                "growth_rate": g,
                "enterprise_value": result["enterprise_value"] / 1e12  # In trillions
            })

sensitivity_df = pd.DataFrame(sensitivity_results)

# Create heatmap
sensitivity_figure = (
    ggplot(sensitivity_df, aes(x="wacc", y="growth_rate", fill="enterprise_value"))
    + geom_tile()
    + geom_text(
        aes(label="enterprise_value"),
        format_string="{:.0f}",
        color="white",
        size=9
    )
    + scale_x_continuous(labels=percent_format())
    + scale_y_continuous(labels=percent_format())
    + scale_fill_gradient(low="darkblue", high="lightblue")
    + labs(
        x="WACC", y="Perpetual Growth Rate",
        fill="EV\n(Trillion VND)",
        title="DCF Sensitivity: Enterprise Value by WACC and Growth Rate"
    )
)

sensitivity_figure.show()
Tiêu đề: Phân tích độ nhạy DCF. Hình là bản đồ nhiệt của giá trị doanh nghiệp theo các tổ hợp khác nhau của WACC và tốc độ tăng trưởng.
Hình 24.5: Độ nhạy của giá trị doanh nghiệp đối với các giả định về WACC và tốc độ tăng trưởng vĩnh viễn. Những thay đổi nhỏ ở các đầu vào này có thể ảnh hưởng đáng kể đến định giá.

Phân tích độ nhạy cho thấy một số hiểu biết quan trọng:

  1. Định giá rất nhạy với các đầu vào: Thay đổi nhỏ về WACC hoặc tốc độ tăng trưởng tạo ra thay đổi lớn về giá trị doanh nghiệp. Thay đổi 1 điểm phần trăm của WACC có thể làm giá trị dịch chuyển 20% hoặc hơn.

  2. Mối quan hệ phi tuyến: Tác động của thay đổi tốc độ tăng trưởng được khuếch đại ở mức WACC thấp hơn vì công thức giá trị cuối kỳ có \((r-g)\) ở mẫu số.

  3. Những người hợp lý vẫn có thể bất đồng: Do đầu vào bất định, DCF nên được hiểu là tạo ra một khoảng giá trị, chứ không phải một con số chính xác duy nhất.

24.11 Từ giá trị doanh nghiệp đến giá trị vốn chủ sở hữu

Phân tích DCF của chúng ta cho ra giá trị doanh nghiệp (tức là tổng giá trị hoạt động của công ty đối với mọi bên cung cấp vốn). Để xác định giá trị vốn chủ sở hữu (phần cổ đông sở hữu), chúng ta phải điều chỉnh cho quyền đòi nợ của chủ nợ và mọi tài sản phi hoạt động:

\[ \text{Equity Value} = \text{Enterprise Value} + \text{Non-Operating Assets} - \text{Debt} \]

Tài sản phi hoạt động bao gồm:

  • Tiền mặt dư thừa vượt nhu cầu hoạt động
  • Chứng khoán khả mại
  • Bất động sản hoặc khoản đầu tư không thuộc hoạt động cốt lõi

Nợ bao gồm:

  • Nợ ngắn hạn
  • Nợ dài hạn
  • Nghĩa vụ thuê tài chính
  • Cổ phiếu ưu đãi (nếu được coi như nợ)
Hiện mã
# Get most recent balance sheet data for FPT
latest_year = fpt_data["year"].max()
latest_data = fpt_data[fpt_data["year"] == latest_year].iloc[0]

# Extract debt and cash (column names may vary)
total_debt = latest_data.get("total_debt", 0)
cash = latest_data.get("ca_cce", 0)

# Compute equity value
enterprise_value = dcf_result["enterprise_value"]
equity_value = enterprise_value - total_debt + cash

print("From Enterprise Value to Equity Value")
print("=" * 50)
print(f"Enterprise Value: {enterprise_value/1e12:.1f} trillion VND")
print(f"Less: Total Debt: {total_debt/1e12:.1f} trillion VND")
print(f"Plus: Cash: {cash/1e12:.1f} trillion VND")
print(f"Equity Value: {equity_value/1e12:.1f} trillion VND")
From Enterprise Value to Equity Value
==================================================
Enterprise Value: 115.1 trillion VND
Less: Total Debt: 0.0 trillion VND
Plus: Cash: 8.3 trillion VND
Equity Value: 123.3 trillion VND

24.11.1 Giá cổ phiếu ngụ ý

Nếu biết số cổ phiếu đang lưu hành, chúng ta có thể tính giá cổ phiếu ngụ ý:

Hiện mã
# Get shares outstanding (this would come from market data)
# Using placeholder - in practice, get from exchange data
shares_outstanding = latest_data.get("total_equity", equity_value) / 25000  # Rough estimate

implied_price = equity_value / shares_outstanding

print(f"\nImplied Share Price: {implied_price:,.0f} VND")

Implied Share Price: 103,008 VND

So sánh giá ngụ ý với giá thị trường hiện tại cho ta biết cổ phiếu có vẻ bị định giá thấp hay cao theo mô hình DCF của chúng ta.

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

Phân tích DCF mạnh mẽ nhưng có những hạn chế quan trọng:

24.12.1 Độ nhạy với các giả định

Như phân tích độ nhạy đã cho thấy, thay đổi nhỏ ở các đầu vào tạo ra thay đổi lớn về giá trị. Điều này đặc biệt gây vấn đề vì các đầu vào có ảnh hưởng nhất (tăng trưởng dài hạn, WACC) lại khó ước tính chính xác nhất.

24.12.2 Sự áp đảo của giá trị cuối kỳ

Giá trị cuối kỳ thường chiếm 60-80% tổng giá trị, nhưng lại dựa trên các giả định về tương lai rất xa. Điều này dồn rủi ro định giá vào thành phần bất định nhất.

24.12.3 Đầu vào rác, kết quả rác

DCF chỉ tốt bằng các đầu vào của nó. Các giả định tăng trưởng phi thực tế, biên lợi nhuận lạc quan hoặc tỷ suất chiết khấu không phù hợp tạo ra những định giá vô nghĩa. Kỷ luật của DCF nằm ở chỗ buộc nhà phân tích phải biện minh cho các giả định của mình.

24.12.4 Không phù hợp với mọi công ty

DCF hiệu quả nhất với các công ty có:

  • Dòng tiền dương và có thể dự đoán
  • Biên lợi nhuận ổn định hoặc thay đổi có thể dự đoán
  • Khả năng dự đoán hợp lý về hoạt động trong tương lai

Nó gặp khó với:

  • Các công ty giai đoạn đầu chưa có lợi nhuận
  • Các doanh nghiệp có tính chu kỳ cao
  • Các công ty đang trải qua chuyển đổi lớn
  • Các tổ chức tài chính (cần những cách tiếp cận khác)

24.12.5 Bổ sung bằng các phương pháp khác

Các nhà thực hành khôn ngoan dùng DCF cùng với các phương pháp định giá khác:

  • Phân tích công ty so sánh: Các công ty tương tự đang được giao dịch như thế nào?
  • Các giao dịch tiền lệ: Bên mua đã trả bao nhiêu cho các doanh nghiệp tương tự?
  • Cộng các bộ phận: Định giá từng bộ phận riêng rồi cộng lại

Khi các phương pháp hội tụ, độ tin cậy tăng lên. Khi chúng phân kỳ, điều đó thúc đẩy việc tìm hiểu nguyên nhân.

24.13 Những điểm chính

Chương này giới thiệu phân tích chiết khấu dòng tiền như một khuôn khổ định giá nội tại. Các nhận định chính là:

  1. Dòng tiền tự do là nền tảng: FCF là lượng tiền sẵn có cho mọi nhà đầu tư sau chi phí hoạt động, thuế và đầu tư. Nó khác lợi nhuận ròng ở chỗ loại trừ các khoản không bằng tiền và bao gồm nhu cầu đầu tư.

  2. Dự báo dựa trên tỷ số liên kết các thành phần với doanh thu: Bằng cách biểu diễn các thành phần của FCF dưới dạng phần trăm doanh thu, chúng ta có thể dự báo dòng tiền một cách có hệ thống dựa trên các giả định tăng trưởng doanh thu và dự phóng tỷ số hoạt động.

  3. Giá trị cuối kỳ nắm bắt giá trị dài hạn: Mô hình tăng trưởng vĩnh viễn giả định FCF tăng với tốc độ không đổi mãi mãi. Tốc độ tăng trưởng vĩnh viễn không nên vượt quá tăng trưởng kinh tế dài hạn.

  4. WACC là tỷ suất chiết khấu phù hợp: Chi phí vốn bình quân gia quyền phản ánh chi phí tổng hợp của tài trợ bằng nợ và vốn chủ sở hữu, đã điều chỉnh cho lá chắn thuế của lãi vay.

  5. DCF cho ra giá trị doanh nghiệp: Để suy ra giá trị vốn chủ sở hữu, trừ nợ và cộng tài sản phi hoạt động. Chia cho số cổ phiếu đang lưu hành cho ra giá cổ phiếu ngụ ý.

  6. Phân tích độ nhạy là thiết yếu: Do đầu vào bất định, trình bày một khoảng giá trị dựa trên các giả định khác nhau trung thực hơn một ước tính điểm duy nhất.

  7. DCF bổ sung cho các phương pháp khác: Không phương pháp định giá đơn lẻ nào mang tính quyết định. Kiểm tra chéo DCF với các bội số thị trường và các giao dịch so sánh cho bức tranh đầy đủ hơn.

Giá trị thực sự của phân tích DCF không nằm ở việc tạo ra một con số chính xác mà ở việc buộc người làm phải suy nghĩ chặt chẽ về điều tạo nên giá trị doanh nghiệp. Quá trình xây dựng một mô hình DCF (tức là dự báo tăng trưởng, dự phóng biên lợi nhuận, ước tính rủi ro) giúp hiểu sâu về doanh nghiệp được định giá.