CHAPTER 13/ 45
Valuation for Quants
Start by aligning statement cash flows, common equity market capitalization, and capital claims before calculating valuation ratios or discounted values. Prerequisites: Chapters 4, 11, and 12. After this chapter, you can bridge enterprise value (EV) to common equity value, explain common valuation ratios, construct discounted cash flow (DCF) valuations with matched cash flows and discount rates, and turn them into candidate fundamental signals without look-ahead.
1. Learning Objectives
After completing this chapter, you should be able to:
- Recalculate enterprise value from common market capitalization and explicitly defined cash, interest-bearing debt, preferred equity, noncontrolling interest (NCI), and nonoperating assets (NOA) at the same valuation date, then bridge back to common equity value.
- Specify the numerators, denominators, units, periods, shareholder scopes, and comparability conditions of price-to-earnings (P/E), price-to-book (P/B), EV/EBITDA, EV/EBIT, earnings yield, and free cash flow (FCF) yield.
- Identify cash-flow claims: pair free cash flow to firm (FCFF) with the weighted average cost of capital (WACC) and EV, and free cash flow to equity (FCFE) with the cost of equity and common equity value. Understand that CFO−CapEx is often a useful proxy without automatically equaling FCFF or FCFE.
- Derive finite-horizon DCF, WACC, and Gordon growth terminal value (TV), explain their assumptions, and use sensitivity and terminal-value share to identify what drives the result.
- Construct candidate cross-sectional signals using point-in-time (PIT) statement availability, actual ingestion, market-valuation times, and share classes, with rules for zero, negative, and missing denominators.
Completion requires individually reproducible hand calculations, same-chapter answers covering every question ID, core Python functions importable from a clean project environment, and explicit separation of constructed inputs from company disclosures in every example.
2. Why Quants Need This
Value research involves more than ranking ratios. Statements first describe accounting profit or cash flow for a period. Researchers then determine whose cash it is, which items are operating, and which version was available at signal time. Market data price different claims at a particular instant. Only then can a numerator and denominator support cross-company comparison. A scope error anywhere can mislabel financing differences, accounting differences, or future information as cheapness.
The chain is statement lines and periods → FCFF or FCFE → matched discount rate → EV or common value → comparable ratios → PIT cross-sectional signal → industry neutrality and out-of-sample tests. Each stage inherits earlier limits. For example, dividing consolidated EBITDA by only parent common market capitalization omits creditors, preferred holders, and noncontrolling shareholders from the value denominator. A portfolio ranking built from that mismatch has no coherent economic interpretation.
This chapter teaches measurement, valuation relationships, and research design. A low multiple does not imply low risk or future excess returns; DCF is not observable truth. Without historical market quotes, we can verify disclosed statement arithmetic and demonstrate formulas with constructed prices. The latter are not actual market capitalization, actual valuation, or measured strategy performance.
3. Intuition
Imagine two software companies in the same industry. Each market capitalization prices common-equity claims. Company A has little debt and substantial cash; Company B has more debt, preferred shares, and NCI. To ask what common holders pay per unit of their earnings, P/E pairing common market capitalization with common earnings is a reasonable start. To ask what all operating-capital providers pay per unit of operating earnings before interest, tax, and depreciation, add debt, preferred equity, and NCI to common value, deduct cash and other nonoperating assets, and divide by EBITDA over the same consolidation scope. The multiples answer different questions.
Now consider cash flow. A factory's cash must fund working capital and CapEx before distribution to creditors and shareholders. FCFF is operating cash available to all capital providers before debt service; FCFE belongs to common equity after interest, taxes, and net borrowing adjustments. Discounting the first gives operating enterprise value; discounting the second directly gives common equity value. Discounting shareholder cash at an all-capital rate, or operating cash at an equity rate, mixes distinct claims.
Begin with three questions: whose value is in the numerator, whose cash flow or profit is in the denominator, which period/version does it cover, and at what instant is the market price observed? These connect accounting, capital structure, and information timing.
4. Mathematical Foundations
Represent an amount as the signed-value, currency, and unit triple Amount. For example, x and yields by decimals or percentages.
Distinguish three time objects: income/cash-flow statement flows cover period available_at, ingested_at, and accession. At research cutoff signal_time, both the public source and local data must be ready. Order time trade_time follows signal formation; returns start only once holdings actually take effect.
Amounts cannot be paired merely because both have dollar dimensions. FY2024 flows and market capitalization cover different time objects, but trailing P/E can pair FY2024 or TTM earnings already public at signal time with signal-time market value. Explicitly identify the trailing convention and verify version availability. Balance-sheet cash, debt, and common book equity use the same known closing date and disclosure version.
5. Formal Definitions
5.1 Market Capitalization, Enterprise Value, and Common Equity Value
Equity market capitalization sums each relevant common share class's price times its corresponding shares outstanding at the specified date, after currency and unit alignment. With one class,
5.2 Equity Ratios and Earnings Yield
Price-to-earnings (P/E) divides common market capitalization by net income attributable to common shareholders,
Price-to-book (P/B) divides common capitalization by common book equity,
Earnings yield is
5.3 Enterprise Multiples and Cash-Flow Yields
EV/EBITDA divides EV by EBITDA for the same period and consolidation scope; EV/EBIT uses EBIT. EBITDA is generally not a uniquely standardized statement line: record original lines, adjustments, and company/research definitions. These operating denominators require EV to cover corresponding debt, preferred, and NCI claims. Conventional multiples with nonpositive EBIT or EBITDA are excluded from cross-sectional ranking.
The term free cash flow (FCF) has many definitions. Distinguish three here:
- Free cash flow to firm (FCFF): convert EBIT into after-tax operating profit using operating tax rate
: . Depreciation and amortization (D&A) are noncash expenses; CapEx is positive expenditure; an increase in net operating working capital (NWC) consumes cash; contains explicit other operating cash adjustments. All amounts share currency, unit, and forecast period. - Free cash flow to equity (FCFE): initially restrict the simplified formula to common equity and debt only, with all items covering the same common-equity operating scope.
. is common-attributable net income. Net borrowing equals new debt less repayments; a positive amount supplies cash to equity. - CFO minus CapEx:
is a common cash-flow proxy. Label its precise research definition or proxy status; do not automatically rename it FCFF.
All these cash flows have currency/period units. Signs matter: PP&E purchases usually appear as negative statement cash flows; formula
FCF yield must identify its claim:
5.4 DCF, WACC, and Terminal Value
Discounted cash flow (DCF) converts expected future cash flows to present value at the valuation date. With annual year-end flows:
The simplified common-equity/debt weighted average cost of capital (WACC) is:
Weights use market values because the rate should reflect relative claim values at the valuation date. Historical book equity cannot directly replace market weights. If cash flows cover all consolidated subsidiary operations, parent common capitalization alone omits NCI. A broader form is:
Amounts are valuation-time market values:
See Damodaran, DCF Inputs for market weights, preferred costs, and matching rates to cash-flow risk, and Damodaran, What Is Debt? for gross/net debt and cash conventions. Gross-debt and net-debt routes handle cash risk and weights differently. Apply the selected route consistently to EV, weights, capital costs, and operating cash flows; deducting cash in EV alone does not align costs. These materials provide frameworks, not a unique issuer-level treatment of cash, NOA, NCI, or leases. Actual valuation must match operating risk, costs, and value-bridge scope.
Discount FCFF at WACC to obtain operating enterprise value, then apply the claim bridge. Discount FCFE at the equity cost to obtain common equity value. An explicitly assumed capital asset pricing model (CAPM) can specify equity cost, for example
6. Derivations
6.1 From Market Capitalization to Comparable Multiples
If the market pays
Next, match each multiple's numerator and denominator at the same claim level:
- Common market capitalization pairs with common earnings or common book equity for P/E or P/B.
- EV pairs with consolidated operating income or pre-depreciation operating income for EV/EBIT or EV/EBITDA.
- Common FCFE pairs with market capitalization, and firm FCFF with EV, for the corresponding FCF yields.
This is more than memorizing categories. The EV bridge reveals omitted capital providers; identifying the cash-flow claim determines the discount rate and valuation object.
6.2 From Accounting Cash Flow to FCFF and FCFE
Define net operating profit after tax,
This starting point precedes interest and principal payments and belongs to all financing providers. Common-attributable net income already reflects interest and tax. Add noncash D&A, deduct capital investment and working-capital growth, and add net borrowing to obtain common-equity cash:
This simplified FCFE formula and the bridge below assume only common equity and debt, the same operating scope, a realizable interest tax shield, and consistent other accounting adjustments. With preferred equity or NCI, combining parent common net income with whole-group D&A and CapEx mixes claims. Either build all-equity cash over a consistent scope and deduct preferred/NCI entitlements, or construct parent common cash item by item. Deducting NCI only in the ending EV bridge does not correct period FCFE. Under the simple debt-tax-shield assumption,
However,
6.3 From Cash Flows to Discounting and Terminal Value
Move a cash flow at the end of year
A geometric series converges when its ratio has absolute value below 1. Here
7. Financial Interpretation
7.1 What Multiples Compare
P/E and P/B price common equity per unit of attributable earnings or book net assets. They retain leverage and nonoperating-asset effects in common value. P/E also reflects growth, earnings volatility, repurchases, unusual charges, taxes, and accounting policies. P/B may better relate to financial firms' asset/capital constraints, but book value can diverge greatly from operating capital for businesses with substantial uncapitalized R&D or brands.
EV/EBITDA aligns an additional layer of capital-structure claims beyond net debt and uses operating results before depreciation. Companies with different capital intensity can therefore show similar EV/EBITDA yet different sustainable FCF. EV/EBIT includes D&A in operating costs and exposes asset-consumption differences, but still deducts neither CapEx nor working capital. No multiple replaces checks of cash, reinvestment, and risk.
7.2 Align Taxes, Interest, Leases, and Periods
Construct FCFF from operating profit with operating cash-tax assumptions. Do not mix interest-inclusive net income with an incorrect after-tax-interest add-back to FCFE. FCFE begins with common earnings after financing costs. Multiplying WACC debt cost by
Leases readily introduce accounting differences into EV/EBITDA or FCF ratios. Adding lease liabilities as EV debt requires checking rent, right-of-use depreciation, and lease principal/interest classifications in EBIT/EBITDA and cash flow. If rent remains an ongoing operating expense, do not add the same commitment again as EV debt. Teaching code does not automatically add lease liabilities: this is an explicit definition choice, not automatic precision.
7.3 Limits of TV and Quantitative Signals
Post-forecast TV often accounts for much of DCF. A high terminal share indicates sensitivity to stable-period assumptions, not correctness or cheapness. At minimum, check a grid of
Quantitative research usually compresses fundamentals into rankable indicators rather than certifying intrinsic value for one firm. Similar industry business/accounting models can improve comparability. Industry-neutral ranking still requires checks of size, leverage, earnings quality, liquidity, estimation risk, and factor exposures. Freeze factor definitions, availability, and execution lag before backtesting; test against out-of-sample data, delistings, revisions, and transaction costs. Every ranking remains a hypothesis.
8. Numerical Example
A hand-calculable WACC example also uses constructed amounts and assumes common/debt market weights and costs match the simplified operating risk:
9. Python Implementation
Default Entry Point for This Reader Edition
From the accepted I3 reader package root, set up its environment, then run:
.venv/bin/python run_notebook.py notebooks/ch13_valuation.ipynb
The Notebook calls the packaged shared implementation. Orion/Lyra, forecasts, capital costs, PIT clocks, and market values are constructed; the Apple section only checks statement lines. By default it displays two existing packaged figures without redrawing them. The runner writes new kernel execution records to a unique runs/execution_* directory; the Notebook separately creates a unique UUID chapter-method directory and prints its location. These directories have distinct purposes; existing figures are not new batch outputs. Unbundled French data are neither read by default nor downloaded. The CLI and old production tests below refer to the working-course root. Readers use the Notebook assertions above and need not restore missing production tests. English Notebook Markdown remains pending BIL23 integration. No Notebook or old numerical suite was executed in this batch.
Historical Working-Course Root and Original Implementation
Core functions are in valuation.py, entry points and plots in ch13_valuation.py, tests in test_ch13_valuation.py, and the teaching Notebook in ch13_valuation.ipynb. The module downloads no data. Amounts require explicit currency/unit; multiple functions return None for nonpositive denominators; FCF yield preserves cash-flow signs and checks claims; PIT selection checks both available_at and ingested_at.
The same core interfaces calculate the constructed cases, from price and million-share counts through market capitalization, EV, and multiples. From the project directory, run:
from pathlib import Path
import sys
sys.path.insert(0, str(Path.cwd() / "src"))
from quant_course.valuation import Amount, enterprise_value, price_to_earnings
market_cap = Amount(600.0, "USD", "USD millions")
debt = Amount(100.0, "USD", "USD millions")
cash = Amount(50.0, "USD", "USD millions")
net_income = Amount(30.0, "USD", "USD millions")
ev = enterprise_value(market_cap, debt, cash)
print(
f"EV={ev.value:.0f} USD millions; "
f"P/E={price_to_earnings(market_cap, net_income):.2f}x"
)
Examples combine annual statement flows with market amounts at one constructed signal instant. PIT demonstrations use constructed UTC times marked Z. A later revision cannot change an earlier signal even when it covers the same fiscal period. Market snapshots cannot exceed signal_time. Example trade_time follows signal_time; real execution additionally requires trading calendars, matching delays, and order conventions. No actual return interval is calculated here.
10. Visualization

The EV claim-bridge figure uses USD millions horizontally and constructed companies/bridge items vertically. Each bar adds to or deducts from the preceding cumulative value; dashed lines mark final EV. Lyra's preferred equity/NCI raise EV, while cash/NOA reduce it. Orion shows only market capitalization, debt, and cash.

The terminal-share sensitivity figure places annual FCFF WACC horizontally and annual perpetual growth
The CLI generates both figures from the listed constructed numbers, without market observations or random sampling; no random seed is needed. Axes and captions identify units and assumptions.
11. Real Market Example
The real-source example verifies statement facts, not actual valuation or market performance. Apple FY2024 Form 10-K reports operating income 123,216 and net income 93,736 USD millions, diluted EPS USD 6.08, and weighted-average diluted shares of 15,408,095 thousand shares. FY2024 ends 2024-09-28; accession is 0000320193-24-000123. These explain the EPS numerator/denominator without a verified matched price, security-class mapping, or historical capitalization snapshot. No actual Apple P/E, P/B, or FCF yield is calculated. Apple FY2024 Form 10-K
Issued and outstanding shares in Apple's filing differ from weighted-average diluted EPS shares. Balance-sheet shares are a closing-date stock; EPS shares are a fiscal-year weighted average. Market capitalization needs shares outstanding for the corresponding class at the valuation date. Price/EPS additionally requires the EPS period, basic/diluted choice, and share basis. Actual capitalization requires verified prices, all relevant common classes, ADR conversions, and trading times. These data were not downloaded, so there is no quote sample period, frequency, or file hash.
12. Common Mistakes
12.1 Dividing FCFE by EV
Dividing Orion FCFE cash_flow_basis="FCFE" with claim_basis="EV" call.
fcfe = 28.0
equity_value = 600.0
enterprise_value_amount = 650.0
wrong_yield = fcfe / enterprise_value_amount
correct_yield = fcfe / equity_value
assert round(wrong_yield * 100, 2) == 4.31
assert round(correct_yield * 100, 2) == 4.67
12.2 Ranking Negative P/E as Cheapest
Arithmetic P/E for loss-makers is negative; a ranking algorithm may put the smallest negative number first among low valuations. The denominator sign changes interpretation. Mark P/E noncomparable and preserve a loss flag. Negative earnings yield can remain a separate feature with explicitly designed ranking and missingness rules.
pe = {"LossCo": 480.0 / -20.0, "ProfitCo": 600.0 / 30.0}
wrong_order = sorted(pe, key=pe.get)
def comparable_pe(market_cap: float, net_income: float) -> float | None:
return market_cap / net_income if market_cap > 0 and net_income > 0 else None
safe = {
name: comparable_pe(480.0, -20.0)
if name == "LossCo"
else comparable_pe(600.0, 30.0)
for name in pe
}
assert wrong_order[0] == "LossCo"
assert safe["LossCo"] is None and safe["ProfitCo"] == 20.0
12.3 Automatically Calling (CFO-CapEx) FCFF
CFO often includes interest paid, cash taxes, and working-capital adjustments, while accounting standards may classify interest differently. FCFF uses after-tax operating profit less operating reinvestment. Check interest, taxes, and working capital for omissions or duplication. This code compares an accounting cash-flow proxy with operating-profit-based FCFF:
cfo = 44.0
capex = 15.0
reported_cfo_less_capex = cfo - capex
ebit, tax, da, change_nwc = 50.0, 0.25, 10.0, 5.0
fcff = ebit * (1 - tax) + da - capex - change_nwc
assert reported_cfo_less_capex == 29.0
assert fcff == 27.5
Different results alone do not establish a statement error. Trace interest, tax, noncash adjustments, working-capital definitions, capitalization, and versions.
12.4 Mismatching EV and the Operating Denominator
12.5 Pairing Current Capitalization with Future Statements or Wrong Periods
Period-end is not market availability. Backfilling an earlier signal with a later-restated FY2024 value displayed today inserts unavailable information into rankings. The code deliberately miscalculates early yield using the latest version, then uses PIT selection for the version public and ingested at signal_time: the wrong yield is 4.17%, the then-reproducible yield 4.67%. Market amounts likewise need snapshots no later than the signal, with matched share class and valuation date.
from datetime import date, datetime, timezone
from pathlib import Path
import sys
sys.path.insert(0, str(Path.cwd() / "src"))
from quant_course.valuation import FinancialVintage, select_pit_vintage
utc = timezone.utc
def vintage(available, ingested, accession, fcfe):
return FinancialVintage(
issuer_id="SYNTHETIC-1", security_id="SYNTHETIC-A", fiscal_period="FY2024",
period_end=date(2024, 12, 31),
available_at=datetime.fromisoformat(available).replace(tzinfo=utc),
ingested_at=datetime.fromisoformat(ingested).replace(tzinfo=utc),
accession=accession,
currency="USD", unit="USD millions", net_income_common=30.0,
common_book_equity=180.0, ebit=50.0, ebitda=75.0, free_cash_flow=fcfe,
cash_flow_basis="FCFE", industry="Software",
)
versions = [
vintage("2025-02-15T12:00:00", "2025-02-16T09:00:00", "SIM-ORIGINAL", 28.0),
vintage("2025-04-02T12:00:00", "2025-04-02T14:00:00", "SIM-RESTATED", 25.0),
]
signal_time = datetime(2025, 3, 31, 16, 1, tzinfo=utc)
market_cap_at_signal = 600.0 # Constructed March 31 market cap, USD millions
wrong_latest = max(versions, key=lambda row: row.available_at)
wrong_yield = wrong_latest.free_cash_flow / market_cap_at_signal
selected = select_pit_vintage(
versions, security_id="SYNTHETIC-A", fiscal_period="FY2024", signal_time=signal_time
)
correct_yield = selected.free_cash_flow / market_cap_at_signal
assert wrong_latest.accession == "SIM-RESTATED"
assert selected.accession == "SIM-ORIGINAL"
assert round(wrong_yield * 100, 2) == 4.17
assert round(correct_yield * 100, 2) == 4.67
print(f"Incorrect future-restated yield={wrong_yield:.2%}; PIT yield={correct_yield:.2%}")
Real research must also preserve period_start/end, accession, available_at, ingested_at, signal_time, market-snapshot as_of, and share-class validity periods.
Every three-argument MarketCapSnapshot example explicitly assumes that at as_of quotes were already public and ingested, the multiplied shares were then-known historical shares, and all EV components used statement versions known at that signal instant. These are constructed demonstration assumptions. Real data need separate market-data available_at and ingested_at constrained with as_of by signal_time. Quote time differs from researcher receipt time; current shares cannot multiply historical prices retrospectively. The selector also lacks Chapter 12's non-reliance state machine; production must exclude known invalid versions.
A restatement ingested only after the signal remains unusable even if available_at qualifies. Reject version conflicts or route them for review; do not silently zero-fill missing values.
12.6 Confusing Shares, Units, or Lease Policies
Price has currency/share units; multiplying shares in millions yields currency millions. Earnings must also be in millions for units to cancel. Dividing total USD capitalization by USD-millions profit creates a million-fold error. Constructed price USD 60 and 10 million shares give capitalization 600 USD millions and P/E 20x. Correct units alone do not fix multiplying one A-class price by A+B shares: with class prices 60 and 30, total capitalization should be 540, not 600 USD millions.
from pathlib import Path
import sys
sys.path.insert(0, str(Path.cwd() / "src"))
from quant_course.valuation import market_cap_from_price
price_usd_per_share = 60.0
shares_millions = 10.0
net_income_usd_millions = 30.0
market_cap = market_cap_from_price(price_usd_per_share, shares_millions)
wrong_pe_mixed_units = (price_usd_per_share * 10_000_000) / net_income_usd_millions
correct_pe = market_cap.value / net_income_usd_millions
assert market_cap.value == 600.0
assert wrong_pe_mixed_units == 20_000_000.0 and correct_pe == 20.0
class_a_price, class_a_shares_m = 60.0, 8.0
class_b_price, class_b_shares_m = 30.0, 2.0
wrong_single_class_cap = class_a_price * (class_a_shares_m + class_b_shares_m)
correct_all_class_cap = (
class_a_price * class_a_shares_m + class_b_price * class_b_shares_m
)
assert wrong_single_class_cap == 600.0 and correct_all_class_cap == 540.0
print(
f"Mixing USD and USD millions: incorrect P/E={wrong_pe_mixed_units:.0f}, "
f"correct P/E={correct_pe:.0f}x"
)
print(
f"Omitting class B price: incorrect market cap={wrong_single_class_cap:.0f}, "
f"correct market cap={correct_all_class_cap:.0f} USD millions"
)
See Section 7.2 for lease consistency. Also check ADR ratios, split adjustments, basic/diluted EPS shares, restricted cash, and nonoperating investments to avoid repeated additions or deductions.
13. Quant Research Application
To use valuation measures as candidate fundamental signals, follow this workflow.
- Declare assumptions and universe. Freeze permanent security IDs, tradable share classes, industries, delisting treatment, fiscal periods, and company classification. Common-stock studies use common earnings, market values, and book values. Consolidated operating profit requires matched NCI scope in EV.
- Freeze statement features. Specify trailing net income/EPS for P/E, parent common book equity for P/B, and original lines/adjustments for EV/EBITDA and EV/EBIT. Choose FCFE/market cap, FCFF/EV, or a separately named (CFO-CapEx) proxy. Preserve versions of tax, interest, lease, cash, debt, share, currency, and unit treatments.
- Filter and price at the cutoff. Candidate versions require external
available_at≤signal_timeand localingested_at≤signal_time. Report dates, acceptance strings, and ingestion cannot substitute for one another. Market value uses prices and shares at or before the signal. All-class aggregation, corporate actions, ADRs, FX, and exchange calendars need independent sources. With closing prices, signal calculation and orders follow the close,trade_timeis the next executable instant, and holding returns begin when positions actually take effect. - Set numerical boundaries. Nonpositive market value/EV invalidates the measure. Nonpositive P/E, P/B, EV/EBIT, or EV/EBITDA denominators retain loss/zero/negative-equity reasons and stay out of monotonic rankings. Preserve source/mapping/unit/version failure states. Negative earnings or FCF yield can retain its sign without entering an undesigned cheapness ranking alongside positives.
- Compare within industries before testing factors. At each signal date, use preregistered directions for industry percentiles or robust standard scores, then form portfolios. Report exclusion shares for loss-makers/negative-equity firms and sensitivity to alternative rules. Use industry equal weights or medians as baselines, rather than explaining performance only against a broad index.
- Test counterevidence and net-of-cost results. Use rolling training/validation/out-of-sample intervals with fixed rebalance, execution lag, suspension/delisting, and version rules. Compare industry, size, leverage, and distress exposures. Measure turnover, spreads, impact, commissions, stock borrowing, and liquidity constraints. Changing a late version must not change earlier signals. Tests must catch future capitalization, statements, constituents, or revisions. Report new results alongside industry baselines, simple book/earnings ranks, and before/after-cost outcomes.
No historical security panel, market prices, industry classifications, or execution costs are assembled here; no factor returns, significance, capacity, or investment conclusions are reported. Future empirical work should first freeze the schema and eligibility rules, then use verifiable actual version chains.
14. Chapter Summary
Valuation begins by identifying claims. Common market value pairs with common earnings/equity; EV with operations covering all capital providers. FCFE and equity cost give common value; FCFF and WACC give operating enterprise value. Cash flows, taxes, interest, leases, and NCI scope must remain consistent. EV bridges and multiples create comparable market measures; DCF discounts explicit forecasts. TV compresses long-run assumptions and often dominates. Quantitative workflows also require denominator signs, units, periods, versions, share classes, and signal/trade timing. Meeting these constraints does not establish profitable signals: industry benchmarks, out-of-sample tests, and costs remain necessary.
15. Exercises
Answers to conceptual, calculation, and interpretation questions are in Section 18.
13-E01 (Claims) Consolidated EBITDA includes all EBITDA of a non-wholly-owned subsidiary. Why does EV/EBITDA require NCI consideration? How should common capitalization be used when studying only parent shareholders?
13-E02 (EV bridge) Calculate Lyra's EV and reverse common equity value using Section 8. Explain the signs of preferred equity, NCI, cash, and NOA.
13-E03 (Multiples) For both Section 8 companies, calculate P/E, P/B, EV/EBITDA, EV/EBIT, earnings yield, FCFE/equity yield, and FCFF/EV yield. Identify each claim pairing.
13-E04 (Nonpositive denominators) A company has capitalization 500 USD millions and net loss −25; another has common book equity −60. State P/E/P/B treatment, calculate the loss-maker's earnings yield, and explain how rankings preserve the information.
13-E05 (Cash flows) With EBIT=80, tax rate 25%, D&A=12, CapEx=20, and
13-E06 (WACC)
13-E07 (DCF and TV) Year-end FCFF is 30, 35, and 40 USD millions, WACC=10%, and perpetual growth
13-E08 (PIT) A FY2024 10-K is public on 2025-02-15 and ingested February 16; a restatement is public/ingested on 2025-04-02. Signals are 2025-03-31 and 2025-04-03. Capitalization snapshots are 600 on March 31 and 620 on April 2, in USD millions. Original/restated FCFE is 28/25. Select each version, calculate FCF yield, and identify the market-value date used.
13-E09 (Real-source boundaries) Apple FY2024 10-K lists net income, diluted EPS, and weighted-average diluted shares. Do these alone establish actual historical P/E? Identify at least three additional data or definition checks.
16. Programming Exercises
Programming exercises run in the project .venv and import Section 9's core module. Each requires outputs verified by assertions.
13-P01 (Claim-safe ratios) Use Amount, the EV bridge, P/E, EV/EBITDA, and FCFE yield to reproduce Orion and Lyra. Assert EV 650/750, P/E 20/24, and EV/EBITDA approximately 8.67/10. Pairing FCFE with EV must be rejected.
13-P02 (Discount matching and TV sensitivity) For annual FCFF [40,45,50,55,60] USD millions, calculate TV and EV with WACC=9% and
13-P03 (Cross-section and PIT counterevidence) Use industry_percentile_ranks for three profitable firms and one loss-maker missing P/E at the same signal date, including tied ranks. Move a restatement's ingested_at beyond signal_time and assert the early signal retains the original. Verify exclusion of market values later than signal_time.
17. Challenge Problems
Open questions allow multiple reasonable answers but require explicit scope, timing, and counterevidence. Reference arguments and scoring appear in the answers.
13-C01 (Consolidated EBITDA, NCI, and leases; prerequisite: Chapter 12) X and Y have equal operating profit. Y has substantial unconsolidated investments or consolidated non-wholly-owned subsidiaries and is lease-intensive; first identify the actual accounting scope of each category. Propose consistent EV/EBITDA paths, identify at least two seemingly conservative bridges that double-count, and list required note fields.
13-C02 (Value-signal research design; prerequisites: Chapters 3 and 12) Design a cross-company PIT FCF-yield test. Justify FCFF/EV, FCFE/market cap, or a CFO−CapEx proxy. Define versions, market prices, share classes, capitalization, industry groups, negative-denominator and missingness rules; specify signal_time, trade_time, and return interval. Include at least two counterevidence tests and an out-of-sample, benchmark, and transaction-cost comparison. Do not present unexecuted research as results.
18. Solutions / Solution Hints
Conceptual and Hand-Calculation Answers
13-E01 Consolidated EBITDA includes all subsidiary operations, while common capitalization prices only parent common-share claims. EV adds debt, preferred equity, NCI, and other non-common claims to cover that operating scope. For parent holders, use common capitalization with common-attributable earnings/book value or FCFE. From enterprise value, deduct non-common claims and add back excluded cash/NOA.
13-E02
13-E03 Orion: P/E
13-E04 Arithmetic P/E
13-E05
13-E06
13-E07
13-E08 On March 31, select only the original because the restatement is not yet public/ingested; use March 31 capitalization for FCFE yield
13-E09 No. At minimum, verify common-stock price and matched valuation time; all common classes/ADR conversions and share basis; and available statement version with trailing EPS period/shareholder scope. Also check trading time zone, dividends/splits, valuation date, and ending shares versus weighted-average EPS shares. Net income and EPS alone explain only statement earnings definitions.
Programming Answers
13-P01 Run the complete program below from the project root. It directly calls the chapter module; both assert checks cover EV bridges and claim restrictions.
from pathlib import Path
import sys
sys.path.insert(0, str(Path.cwd() / "src"))
from quant_course.valuation import (
Amount,
enterprise_value,
enterprise_multiple,
fcf_yield,
price_to_earnings,
)
def a(value: float) -> Amount:
return Amount(value, "USD", "USD millions")
orion_ev = enterprise_value(a(600), a(100), a(50))
lyra_ev = enterprise_value(a(480), a(260), a(30), noncontrolling_interest=a(40),
preferred_equity=a(20), nonoperating_assets=a(20))
assert orion_ev.value == 650 and lyra_ev.value == 750
assert price_to_earnings(a(600), a(30)) == 20
assert price_to_earnings(a(480), a(20)) == 24
assert enterprise_multiple(orion_ev, a(75)) == 650 / 75
assert enterprise_multiple(lyra_ev, a(75)) == 10
assert fcf_yield(a(40), orion_ev, cash_flow_basis="FCFF", claim_basis="EV") == 40 / 650
try:
fcf_yield(a(28), orion_ev, cash_flow_basis="FCFE", claim_basis="EV")
except ValueError:
pass
else:
raise AssertionError("FCFE must be paired with equity value")
print("Orion EV=650; Lyra EV=750; claim matching passed")
13-P02 The complete reference implementation follows. Change only (r,g), recalculating TV and DCF for each valid pair.
from pathlib import Path
import sys
sys.path.insert(0, str(Path.cwd() / "src"))
from quant_course.valuation import (
Amount,
discounted_cash_flow_value,
gordon_terminal_value,
)
flows = [Amount(value, "USD", "USD millions") for value in (40, 45, 50, 55, 60)]
rate, growth = 0.09, 0.03
tv = gordon_terminal_value(flows[-1], rate, growth)
value = discounted_cash_flow_value(
flows, rate, cash_flow_basis="FCFF", discount_rate_basis="WACC", terminal_value=tv
)
pv_tv = tv.value / (1 + rate) ** len(flows)
assert round(tv.value, 2) == 1030.00
assert round(value.value, 2) == 860.57
assert round(100 * pv_tv / value.value, 2) == 77.79
valid = []
for test_rate in (0.08, 0.09, 0.10):
for test_growth in (0.02, 0.03, 0.04):
if test_growth < test_rate:
test_tv = gordon_terminal_value(flows[-1], test_rate, test_growth)
valid.append((test_rate, test_growth, test_tv.value))
assert len(valid) == 9
print(f"TV={tv.value:.2f}; EV={value.value:.2f}; PV(TV)/EV={pv_tv/value.value:.2%}")
13-P03 Section 9's core module supplies all PIT types and industry-percentile functions. This complete code checks ranks, late-ingested restatements, and future-market-value exclusion. Companies and UTC clocks are explicitly constructed, not actual corporate histories.
from pathlib import Path
import sys
sys.path.insert(0, str(Path.cwd() / "src"))
from quant_course.valuation import industry_percentile_ranks
values = {"A": 0.05, "B": 0.03, "C": 0.03, "LOSS": None}
industries = {"A": "Software", "B": "Software", "C": "Software", "LOSS": "Software"}
ranks = industry_percentile_ranks(values, industries)
assert ranks == {"A": 1.0, "B": 0.25, "C": 0.25, "LOSS": None}
print(ranks)
from datetime import date, datetime, timezone
from quant_course.valuation import (
Amount, FinancialVintage, MarketCapSnapshot,
select_pit_vintage, select_pit_market_cap,
)
signal = datetime(2025, 3, 31, 20, tzinfo=timezone.utc)
original = FinancialVintage(
issuer_id="SIM-ISSUER", security_id="SIM-COMMON", fiscal_period="FY2024",
period_end=date(2024, 12, 31),
available_at=datetime(2025, 2, 15, 8, tzinfo=timezone.utc),
ingested_at=datetime(2025, 2, 16, 8, tzinfo=timezone.utc),
accession="SIM-V1", currency="USD", unit="USD millions",
net_income_common=30, common_book_equity=180, ebit=50, ebitda=75,
free_cash_flow=28, cash_flow_basis="FCFE", industry="Software",
)
from dataclasses import replace
restated = replace(
original, accession="SIM-V2", free_cash_flow=25,
available_at=datetime(2025, 3, 1, 8, tzinfo=timezone.utc),
ingested_at=datetime(2025, 4, 2, 8, tzinfo=timezone.utc),
)
assert select_pit_vintage(
[original, restated], security_id="SIM-COMMON",
fiscal_period="FY2024", signal_time=signal,
) == original
# Constructed assumption: prices and historical shares were public and ingested by as_of.
old_cap = MarketCapSnapshot("SIM-COMMON", signal, Amount(600, "USD", "USD millions"))
future_cap = MarketCapSnapshot(
"SIM-COMMON", datetime(2025, 4, 2, 20, tzinfo=timezone.utc),
Amount(620, "USD", "USD millions"),
)
assert select_pit_market_cap(
[old_cap, future_cap], security_id="SIM-COMMON", signal_time=signal,
) == old_cap
print("late ingestion and future market cap excluded")
Challenge Answers
13-C01 First distinguish consolidated non-wholly-owned subsidiaries from investments not consolidated line by line, then fix the activities covered by the operating denominator. Partial ownership or a percentage alone does not determine an NCI addition.
Consolidated path. If consolidated EBITDA includes 100% of subsidiary operations, operating EV must cover debt, preferred equity, and external NCI over the same scope. NCI value adds to parent common capitalization in constructing EV; it does not add to P/E earnings or common capitalization itself. Retaining all subsidiary EBITDA while omitting NCI omits claims and mismatches scope, rather than double-counting. A proportionately attributable operating scope requires rebuilding debt, cash, NOA, and operating amounts consistently, with headquarters allocations and intragroup transactions explained. Multiplying consolidated EBITDA by ownership percentage and pairing it directly with common capitalization is insufficient.
Unconsolidated-investment path. Assume the investment is separately valued as a nonoperating asset. Let
Here NCI belongs only to the consolidated operating scope above; do not add outside holders of the unconsolidated investee again. The operating denominator must also exclude this investment's contribution. If reported EBITDA already excludes equity-method income, deduct nothing further. If the chosen EBITDA definition actually includes investment earnings, check their item, period, and attribution, then remove exactly the included part. Investment earnings are not the investee's full EBITDA and cannot casually represent a full operating contribution via ownership scaling. Conversely, after valuing core operating FCFF excluding investment earnings to obtain
Do not retain the same investment in core cash flows/TV and add its full separately estimated value again. Do not deduct its value twice or remove investment earnings from a denominator that already excludes them. A valuation route including the investment as a whole must jointly define its cash flows, risk/discount rate, and value scope; a one-sided multiple adjustment is insufficient.
Two lease paths. Under financing treatment, EV includes corresponding lease liabilities, the operating denominator uses a consistent capitalization convention, and FCF/WACC jointly address lease principal, interest, and debt cost. Alternatively, retain all cash rent as an ongoing operating expense and exclude the same lease commitment from EV; profit, cash flow, and capital costs follow that expense treatment. These are mutually exclusive internally consistent conventions.
Double-counting examples include valuing core operations from cash flows after full rent deduction and then deducting the same lease liability again in the EV-to-common bridge; or retaining an investment in core cash flows/TV and separately adding back its full value. Omitting NCI is an omission and should be labeled separately. Check ownership/control evidence, actual consolidation/equity-method scope, book NCI and valuation basis, parent-held unconsolidated investment value and income location, subsidiary EBIT/EBITDA, intragroup transactions and headquarters costs, lease maturities/rates, right-of-use depreciation, cash rent, and lease principal/interest cash-flow classification. Disclose book-value proxies for NCI or investment market values. One balance-sheet figure cannot settle the appropriate convention.
Reference scoring (10 points): consistent claims/operating scope, 3; at least two mutually exclusive internally consistent lease paths, 3; at least two double-counting/omission examples, 2; verifiable notes and fields, 2.
13-C02 The reference design chooses FCFE/common capitalization, conditional on reliable common-attributable earnings, interest, net borrowing, and reinvestment. Major leverage changes or difficult borrowing forecasts favor FCFF/EV with explicit WACC and EV bridge. If only CFO−CapEx is available, name it a cash-flow proxy and describe accounting differences without claiming FCFF. Rows preserve permanent issuer/security IDs, share class and validity, fiscal period, currency/unit, original line, accession, available_at, ingested_at, revision status, and transformation-code version. Market snapshots preserve price/share sources, as_of, currency, ADR ratios, corporate actions, and all-common-class aggregation. Industry classifications retain same-date versions. Signals select only statements satisfying both clocks. Constructed orders execute at the next tradable instant; the return interval begins after actual position execution and ends at the next holding interval's valuation endpoint. Same-close execution of a closing signal is not the default.
Counterevidence includes injecting future restatements or prices without changing early factors; moving ingestion after a signal must force fallback or missingness; removing constituents announced only later must not alter historical universes. Out-of-sample reporting includes industry equal-weight and median baselines, predefined rebalance/ranking rules, negative-denominator/missing shares, turnover, capacity, delistings, and results before/after commissions, spreads, impact, borrowing, and financing costs. Conclusions apply only to samples, times, and definitions actually run.
Reference scoring (10 points): matched cash-flow claims and discount rates, 2; PIT and share-class/market-value versions, 3; signal/trade/return timing, 2; two executable counterevidence tests, 2; benchmark and net-of-cost out-of-sample comparison, 1.
19. Further Reading
- Must Know — MIT OpenCourseWare, Finance Theory I, “Present Value Relations”: read Lectures I–II and slides on asset cash flows, present values, perpetuities, and compounding to reinforce discount timing. These materials are not a unique EV-bridge standard. Slides and videos
- Should Know — Aswath Damodaran, “An Introduction to Valuation”: read DCF, equity-versus-firm valuation, and relative-valuation sections on claims, discount rates, reinvestment, and comparability. Public notes
- Should Know — Damodaran, “Valuation” lecture notes: read FCFE, FCFF, and model selection to compare valuation paths under changing leverage. Historical amounts and valuations are not current quotes. Notes
- Should Know — SEC, Non-GAAP Financial Measures C&DI 102.07: examine limits of common CFO-minus-CapEx FCF. This is US SEC staff guidance, not a global accounting-standard definition. SEC page
- Advanced — Damodaran, “Terminal Value”: read stable growth, currency, and real/nominal constraints, especially sensitivity to (r-g). Public chapter
20. References
- MIT OpenCourseWare, Finance Theory I — Present Value Relations: present values, perpetuities, and compounding, Sections 4, 6, and 8. Also Equities slides: dividend discounting, EPS, and P/E examples, Sections 5 and 7.
- Aswath Damodaran, NYU Stern, Valuation: FCFE/FCFF, equity/firm valuation, WACC, and matched cash flows/rates, Sections 5–7; An Introduction to Valuation: DCF and relative valuation, Sections 5–7 and 13.
- Aswath Damodaran, Terminal Value: stable cash flows, discount rates, growth, and TV sensitivity, Sections 5–8 and 10.
- SEC, Non-GAAP Financial Measures C&DIs, Question 102.07: common CFO-minus-CapEx FCF is nonuniform, requires explanation, and is not freely discretionary cash, Sections 5–7 and 12.
- Apple Inc., FY2024 Form 10-K, accession 0000320193-24-000123: period, operating income, net income, diluted EPS, EPS weighted-average shares, ending shares, and balance-sheet lines, Section 11. This supports original filing facts only, not actual capitalization, P/E, signals, or returns.
This chapter uses no secondary-market valuations or historical quotes. Source locations, reading scope, and verification limits are in source_notes.md.