Skip to content

Company Valuation: DCF, Multiples, and Intrinsic Value

How do you determine what a company is actually worth? DCF and multiples are the two primary frameworks for estimating intrinsic value, and they underpin all equity investing.

3 of 31 ~3 min

Before you buy a stock, you want to know if the price is reasonable. Valuation is the discipline of estimating what a company is actually worth.

The core idea: a company is worth the present value of its future cash flows.

The Two Valuation Frameworks

1. Discounted Cash Flow (DCF): Estimate future cash flows, discount them back to today, sum them up.

2. Relative valuation (multiples): Compare the company’s valuation metrics to similar companies or its own historical averages.

Both have strengths and weaknesses. Sophisticated analysts use both.

DCF: The Foundation

A company is worth the cash it will generate in the future, discounted back to today:

V0=∑t=1nCFt(1+r)t+Vn(1+r)nV_0 = \sum_{t=1}^{n} \frac{CF_t}{(1+r)^t} + \frac{V_n}{(1+r)^n}

Where:

  • CFtCF_t = free cash flow in year tt
  • rr = discount rate (WACC)
  • VnV_n = terminal value at year nn

Free cash flow (FCF): Cash generated by the business after paying all operating expenses and investments needed to maintain/grow the business.

FCF=Operating Income×(1−tax rate)+Depreciation−CapEx−ΔWorking CapitalFCF = Operating\ Income \times (1 - tax\ rate) + Depreciation - CapEx - \Delta Working\ Capital

The Discount Rate: WACC

The discount rate should reflect the risk of the cash flows. For a public company, this is typically WACC (Weighted Average Cost of Capital):

WACC=we×re+wd×rd×(1−t)WACC = w_e \times r_e + w_d \times r_d \times (1 - t)

Where:

  • wew_e = proportion of equity in capital structure
  • wdw_d = proportion of debt
  • rer_e = cost of equity (required return for equity investors)
  • rdr_d = cost of debt
  • tt = corporate tax rate

Cost of equity is usually estimated using the Capital Asset Pricing Model (CAPM):

re=rf+β×(rm−rf)r_e = r_f + \beta \times (r_m - r_f)

Where β\beta measures the stock’s sensitivity to market movements.

Terminal Value

The hardest part of DCF is estimating the terminal value: the value beyond your explicit forecast period. Two common methods:

1. Gordon Growth Model (perpetuity):

TVn=FCFn+1r−g=FCFn(1+g)r−gTV_n = \frac{FCF_{n+1}}{r - g} = \frac{FCF_n(1+g)}{r - g}

Assumes free cash flow grows at a constant rate gg forever.

2. Exit multiple:

TVn=EBITDAn×EV/EBITDA multipleTV_n = EBITDA_n \times \text{EV/EBITDA multiple}

Assume the company is sold at a typical EV/EBITDA multiple for its industry (e.g., 15x EBITDA), giving an enterprise terminal value that you then discount back to today. Do not multiply FCF by an EV/EBITDA ratio, that mixes an equity-after-capex cash-flow number with an enterprise-value multiple and gives the wrong answer.

Valuation Multiples

Multiples are faster and more intuitive than DCF, but they’re shortcuts, not the full picture.

Price-to-Earnings (P/E):

P/E=Stock PriceEarnings Per ShareP/E = \frac{Stock\ Price}{Earnings\ Per\ Share}

Low P/E could mean the stock is cheap, or the market expects earnings to fall.

EV/EBITDA:

EV/EBITDA=Enterprise ValueEBITDAEV/EBITDA = \frac{Enterprise\ Value}{EBITDA}

Better than P/E for comparing companies with different capital structures (debt levels).

Price-to-Book (P/B):

P/B=Stock PriceBook Value Per ShareP/B = \frac{Stock\ Price}{Book\ Value\ Per\ Share}

Often used for banks, insurers, asset-heavy businesses.

DCF in Python

import numpy as np
import pandas as pd

def dcf_valuation(fcf_forecast, terminal_growth, discount_rate, terminal_multiple=None,
                  forecast_years=5, ebitda_forecast=None):
    """
    Discounted Cash Flow valuation.

    Parameters
    ----------
    fcf_forecast : list of floats
        Free cash flow for each forecast year
    terminal_growth : float
        Terminal growth rate (g) used by the Gordon Growth branch
    discount_rate : float
        WACC (r)
    terminal_multiple : float, optional
        Exit EV/EBITDA multiple (only used if `ebitda_forecast` is supplied)
    forecast_years : int
        Number of explicit forecast years
    ebitda_forecast : list of floats, optional
        EBITDA for each forecast year; required when `terminal_multiple` is given.
        Terminal value is then `terminal_ebitda * terminal_multiple`.

    Returns
    -------
    pv_total : float
        Enterprise value
    """
    # PV of explicit forecast period
    pv_explicit = 0
    for t, fcf in enumerate(fcf_forecast, 1):
        pv_explicit += fcf / (1 + discount_rate) ** t

    # Terminal value
    if terminal_multiple is not None:
        if ebitda_forecast is None or len(ebitda_forecast) != len(fcf_forecast):
            raise ValueError(
                "An EBITDA forecast of the same length as `fcf_forecast` is "
                "required when using an EV/EBITDA exit multiple."
            )
        terminal_ebitda = ebitda_forecast[-1] * (1 + terminal_growth)
        terminal_value = terminal_ebitda * terminal_multiple
    else:
        # Gordon Growth Model: TV = FCF_{n+1} / (r - g)
        terminal_fcf = fcf_forecast[-1] * (1 + terminal_growth)
        terminal_value = terminal_fcf / (discount_rate - terminal_growth)

    # PV of terminal value
    pv_terminal = terminal_value / (1 + discount_rate) ** forecast_years

    return pv_explicit + pv_terminal


def pe_comparable(peer_pe_ratios, earnings):
    """
    Estimate stock value using P/E of comparable companies.
    """
    median_pe = np.median(peer_pe_ratios)
    return earnings * median_pe


def ev_ebitda_comparable(peer_ev_ebitda, ebitda):
    """
    Estimate enterprise value using EV/EBITDA of comparables.
    """
    median_multiple = np.median(peer_ev_ebitda)
    return ebitda * median_multiple

PROMPT

Use numpy to build a basic DCF valuation with Gordon Growth and exit-multiple terminal values, plus helpers for comparable-based stock valuation from P/E and EV/EBITDA.

Key Assumptions Drive the Value

DCF is extremely sensitive to assumptions:

  • Discount rate: A 1% change in WACC can shift valuation by 20-30%
  • Terminal growth rate: Even 0.5% matters enormously (this is why the perpetuity formula is so sensitive to gg)
  • Forecast period length: 5 years vs. 10 years changes the result significantly

This is why two analysts can reach very different conclusions with the same publicly available information, they make different assumptions.

Key Takeaways

  • DCF: A company is worth the PV of its future cash flows
  • Free cash flow is the gold standard for measuring value generated
  • Terminal value is usually the largest component of DCF value
  • Multiples are quick estimates that depend on comparable company selection
  • Valuation is an art informed by science, all models require judgment

References

  • Penman, Financial Statement Analysis and Security Valuation. McGraw-Hill, 2019. ISBN: 978-0-07-337966-3.
  • Damodaran, Investment Valuation. Wiley, 2012. ISBN: 978-1-118-13074-1.
  • Koller, Goedhart, Wessels, Valuation: Measuring and Managing the Value of Companies. Wiley, 2020. ISBN: 978-1-119-66845-5.