Reference · Valuation
Valuation Models
Load when **Valuation**.
Part of the Financial Modeling skill · loaded on demand from SKILL.md
Six recipes: DCF, trading comps, precedent transactions, dividend discount model, sum-of-the-parts, football field. All share the build engine in references/build-engine.md (cell colours, named ranges, recalc-and-verify) — only the distinctive structure, formulas, checks, inputs, and example are given here.
DCF Model (dcf-model)
Intrinsic value: project unlevered free cash flow, discount at WACC, dual terminal value.
When: "DCF", "intrinsic value", "WACC", "terminal value", "free cash flow projection".
Tabs: Cover · Assumptions · Model (revenue → uFCF) · DCF (discounting, TV, bridge) · Sensitivity (WACC × terminal growth Data Table) · Checks.
Assumptions (per scenario, live column via CHOOSE): revenue y0, revenue growth %/yr, EBIT margin %, tax rate, D&A %rev, capex %rev, NWC %rev, risk-free, ERP, levered beta, pretax Kd, debt/equity weights, terminal growth g, exit EV/EBITDA, mid-year toggle (0/1), net debt, minority interest, investments, diluted shares.
Model (per forecast year):
- Revenue
=PriorRevenue*(1+GrowthPct); EBIT=Revenue*EBITMarginPct; Taxes=-EBIT*TaxRate; NOPAT=EBIT+Taxes. - D&A
=Revenue*DAPct(add-back); Capex=-Revenue*CapexPct; NWC level=Revenue*NWCPct, ΔNWC=-(NWC_t-NWC_{t-1}). - uFCF
=NOPAT+DA+Capex+ChangeNWC(capex and NWC already signed negative).
DCF:
- Cost of equity (CAPM)
=RiskFree+Beta*ERP; after-tax Kd=PretaxKd*(1-TaxRate);WACC =EquityWeight*CostEquity+DebtWeight*AfterTaxKd. - Period t
=t-0.5*MidYearToggle; discount factor=1/(1+WACC)^PeriodT; PV=FCF_t*DF_t; sum=SUM(PVrow). - TV Gordon
=FCF_N*(1+g)/(WACC-g); TV exit=EBITDA_N*ExitMultiple(EBITDA_N=EBIT_N+DA_N); PV of TV=TV*DF_N. - EV
=SumPV_FCF+PV_TV; equity=EV-NetDebt-MinorityInterest+Investments; per share=Equity/DilutedShares.
Sensitivity: two-variable Data Table, row input = TermGrowth, column input = WACC, corner = per-share.
Checks: implied g from exit multiple vs assumed g; PV-of-TV / EV share (flag if dominant); WACC>g (Gordon breaks otherwise); equity bridge ties; the two TV methods give EVs within a sane band.
Inputs: valuation date, horizon, latest revenue, growth/margin paths, tax, D&A & capex %rev, NWC %rev, risk-free, ERP, beta, pretax Kd, weights, terminal g, exit multiple, net debt, minorities, investments, diluted shares, mid-year preference.
Example: revenue 1,000 growing 8%→3% over 5y, EBIT margin 20%, tax 25%, D&A 5% / capex 6% of revenue, NWC 10%, risk-free 4%, ERP 5%, beta 1.10, pretax Kd 6%, 70/30 weights, g 2.5%, exit 9.0x → WACC ≈ 9.4%; EV from ΣPV(FCF)+PV(TV), less net debt 200 over 100 shares → per-share. Illustrative.
Trading Comps (trading-comps)
Relative value off public peer multiples.
When: "comps", "comparable companies", "peer multiples", "EV/EBITDA", "trading multiples".
Tabs: Cover · Comps Input (one row/peer, blue) · Calcs (per peer) · Output (stats + implied range) · Checks. Uses openpyxl+pandas.
Calcs (per peer):
- TSM dilution
=MAX(0,(SharePrice-Strike)/SharePrice)*Options; diluted shares=Basic+TSM; market cap=SharePrice*Diluted. - Net debt
=TotalDebt-Cash; EV=MarketCap+NetDebt+Minority+Preferred. EV/Revenue =EV/LTMRevenue,EV/EBITDA =EV/LTMEBITDA,EV/EBIT =EV/LTMEBIT,P/E =MarketCap/LTMNetIncome; forward multiples on forward figures.- Clean flag
=IF(OR(EV<=0,EVEBITDA>Upper,EVEBITDA<Lower),0,1)(bounds are inputs) to exclude outliers.
Output (over clean set, per multiple): median =MEDIAN(IF(CleanFlag=1,Multiple)) (array) or via a helper clean column; mean =AVERAGEIF(CleanFlag,1,Multiple); PERCENTILE.INC(...,0.25) / 0.75. Apply to subject: implied EV =ChosenMultiple*SubjectMetric; equity =EV-SubjNetDebt-Minority-Preferred; per share =Equity/SubjDiluted. Let the user pick which statistic/percentile anchors low and high.
Checks: EV>0 every peer; multiples within bounds (auto-exclude); market cap reconciles on a hand spot-check; subject low ≤ high; show count of clean peers. Watch P/E with zero/negative net income.
Inputs: pricing date; per peer share price, shares & options, debt, cash, minorities, preferred, revenue/EBITDA/EBIT/NI + forwards; subject same metrics + which multiple/percentile to anchor.
Example: five peers EV/EBITDA 7.5/8.2/9.0/9.8/12.5x; exclude 12.5x → clean median ≈ 8.6x; apply 8.0–9.5x to subject LTM EBITDA 250 → EV range, less net debt 300 over 80 shares → per-share range. Illustrative.
Precedent Transactions (precedent-transactions)
Relative value off prices paid in past deals — captures the control premium comps miss.
When: "precedent transactions", "deal comps", "transaction multiples", "control premium", "M&A comps".
Tabs: Cover · Deals Input (one row/deal, blue; generic acquirer/target labels only) · Calcs · Output · Checks. openpyxl+pandas.
Calcs (per deal): offer equity =OfferPrice*TargetDilutedShares; net debt =TargetDebt-TargetCash; transaction EV =OfferEquity+NetDebt+Minority+Preferred; EV/Revenue, EV/EBITDA; implied premium =OfferPrice/UnaffectedPrice-1; clean flag =IF(OR(EV<=0,EVEBITDA>Upper,EVEBITDA<Lower,Premium>PremiumCap),0,1).
Output: median/mean of each multiple and the premium over the clean set. Apply to subject two ways: multiple-based EV → equity → per share; and premium-based offer =SubjectUnaffectedPrice*(1+ChosenPremium) for low/high. Show both so the control-premium effect is visible.
Checks: premium not negative / not above cap; EV>0; EV/EBITDA in bounds; precedent median ≥ trading-comps median (control premium sanity); subject low ≤ high both methods. Watch EBITDA and unaffected-price divisors.
Inputs: analysis date; per deal announced date, generic labels, offer price, target shares/debt/cash/minorities/preferred, unaffected price, target LTM revenue & EBITDA; subject same + multiple and premium range.
Example: four deals EV/EBITDA 9.0/10.5/11.0/13.5x, premia 25/30/35/45% → median ≈ 10.8x, ≈ 32.5%; apply 10–12x to subject EBITDA 250 and 25–35% premium on a 40 unaffected price. Illustrative.
Dividend Discount Model (dividend-discount-model)
Value equity directly off the dividend stream — banks, insurers, utilities, stable payers.
When: "DDM", "dividend discount", "Gordon growth", "cost-of-equity valuation".
Tabs: Cover · Assumptions · DDM (explicit forecast + single-stage Gordon block) · Sensitivity (Ke × terminal growth) · Checks.
DDM:
Ke =RiskFree+Beta*ERP(CAPM).- Explicit DPS
=PriorDPS*(1+DivGrowth)or=EPS_t*Payout(EPS grown). - DF
=1/(1+Ke)^t; PV=DPS_t*DF_t; sum=SUM(PVrow). - TV (Gordon on year-N dividend)
=DPS_N*(1+g)/(Ke-g); PV of TV=TV*DF_N. - Value per share (multi-stage)
=SumPV_Dividends+PV_TV. - Single-stage Gordon cross-check
=DPS_0*(1+g)/(Ke-g).
Sensitivity: Data Table, row input = TermGrowth, column input = Ke, corner = multi-stage per-share.
Checks: Ke>g; payout within 0–100% each year; dividend growth < Ke in the explicit window; single- vs multi-stage within a sane band; terminal share of value flagged if dominant. Watch the Ke-g denominator.
Inputs: valuation date, latest DPS or EPS+payout, dividend growth path, explicit horizon, risk-free, ERP, beta, terminal g, scenario values if running cases.
Example: DPS 2.00 growing 8% for 5y then 3% perpetual; risk-free 4%, ERP 5%, beta 0.90 → Ke ≈ 8.5%; explicit PVs + PV(Gordon TV) → per-share; single-stage Gordon as a cross-check. Illustrative.
Sum-of-the-Parts (sum-of-the-parts)
Value a diversified business segment-by-segment on each segment's own method, then bridge to equity.
When: "sum of the parts", "SOTP", "segment valuation", "conglomerate value", "break-up value".
Tabs: Cover · Segments (per-segment financials + chosen method, blue) · SOTP (per-segment EV + % of total) · Bridge (EV → equity → per share) · Checks.
Segments: per segment revenue, EBITDA, EBIT, method selector (1 = EV/EBITDA, 2 = EV/Revenue, 3 = mini-DCF), chosen multiple, and for mini-DCF the FCF path/WACC/g. Plus unallocated corporate cost, its cap multiple, net debt, minority interest, stakes/investments, diluted shares.
SOTP:
- Segment EV
=CHOOSE(Method, SegEBITDA*Multiple, SegRevenue*Multiple, MiniDCF_EV). - Mini-DCF EV =
Σ FCF_t/(1+WACC)^t + FCF_N*(1+g)/(WACC-g)/(1+WACC)^N. - Corporate drag
=-UnallocatedCost*CorporateCapMultiple(negative EV item). - Total EV
=SUM(SegmentEVs)+CorporateDrag; % of total=SegmentEV/TotalEV.
Bridge: equity =EV-NetDebt-MinorityInterest+StakesAndInvestments; per share =Equity/DilutedShares; optional implied blended =EV/SUM(SegmentEBITDA).
Checks: segment EVs + drag tie to TotalEV exactly; % of total reconciles to 100%; each multiple in a sane industry band; blended EV/EBITDA reasonable vs standalone; bridge ties. Watch any mini-DCF WACC-g and the %-of-total divisions.
Inputs: valuation date, segment list, per-segment revenue/EBITDA/EBIT + method & multiple, mini-DCF assumptions, corporate cost + cap multiple, net debt, minorities, stakes, shares.
Example: Seg A EBITDA 300 @ 9.0x, Seg B EBITDA 150 @ 7.0x, Seg C mini-DCF, corporate drag 20 @ 8.0x; ΣEV − drag → total EV; less net debt 500 + stake 100 over 120 shares → per-share. Illustrative.
Football Field (football-field)
The summary exhibit: each valuation method's low–high range as a floating horizontal bar with a current-price reference.
When: "football field", "valuation summary chart", "valuation range chart".
Tabs: Cover · Methods (low/high per method, blue inputs or green links from the DCF/comps/precedent/LBO outputs) · Chart Data (floating-bar helper) · Chart · Checks.
Chart Data (per method): Base (invisible) =MethodLow; Range (visible) =MethodHigh-MethodLow; Midpoint =(Low+High)/2; a CurrentPrice column repeating the single input.
Chart: BarChart, type="bar" (horizontal), grouping="stacked", overlap=100. Add Base series first (no fill, no border → invisible), then Range. Categories = method labels. Add current price as a distinct thin marker/reference series. Value-axis format #,##0.00, title "Valuation Summary".
Checks: each low ≤ high; every method labelled (no blank bars); current price inside the union of ranges (or noted if outside); Base+Range=High every row (proves the float); flag any zero-width range.
Inputs: valuation date, current price (or EV), and per method the low/high implied value (or the link to the source model). Confirm ordering and per-share vs EV.
Example: per-share ranges DCF 38–52, Comps 36–48, Precedent 42–58, 52-Week 34–50, LBO 35–45, Analyst 40–55, current price 44 → six floating bars with the price marked. Illustrative.