Skip to main content

Valuation

Methodology: Reverse DCF and Value Scores

Two complementary tools: a reverse DCF that solves for the growth assumptions embedded in today's market price, and seven academic quality scores that test whether the business behind that price is financially sound. Neither tool produces a buy signal in isolation. Together they define a bounded question: does the market's implied growth story fit a business that can actually execute it?

Part I — Reverse DCF

The conventional discounted cash flow model runs forward: forecast revenue and margins, discount back at WACC, arrive at a price target. The reverse DCF runs the calculation in the opposite direction. Today's market price is the known variable. The growth story implied by that price is the unknown. The question changes from “what should this be worth?” to “what would the company have to deliver for today's price to be rational?”

This framing follows Michael Mauboussin's Expectations Investing framework. Its practical advantage is that it shifts the debate away from point estimates — which are unreliable — and toward the believability of the implied assumptions themselves. A growth rate is either plausible given industry history and company position, or it is not. That judgment is sharper and more durable than an argument about which discount rate to use.

The Growth Decay Model

Revenue growth is modelled as a decaying series rather than a flat rate. The formula is:

g₁ = g₀ × d¹

g₂ = g₀ × d²

gₖ = g₀ × dⁿ

where g₀ is the current year-over-year revenue growth rate and d is the annual decay factor (0 < d ≤ 1)

A decay factor of d = 1.0 means growth is held flat forever — the assumption most DCF spreadsheets make implicitly. A decay of d = 0.83 (the S&P 500 median) means each year's growth rate is 83% of the prior year's. A company entering the forecast period at 25% revenue growth with d = 0.83 would see that rate fall to roughly 3% by year ten. The decay model is the mechanism that forces mean reversion into the forecast; it is also the variable the solver targets.

Free cash flow in each forecast year is computed as:

FCFₖ = Revenueₖ × Terminal_FCF_Margin

Terminal FCF margin is interpolated linearly from current margin to terminal margin over the 10-year explicit period. FCF margin is the normalized median across available fiscal years, not the most-recent single year.

Three Solve Modes

The solver can target three different free variables. The choice depends on which assumption is most uncertain for a given company.

1. Solve for growth decay rate (default)

Given current price, WACC, and terminal margin, find the decay rate d where the present value of projected free cash flows plus terminal value equals today's enterprise value. This is the most common mode. It answers: at what rate does growth have to fade for this price to make sense? The result is then compared against historical base-rate cohorts — S&P 500 median (d = 0.83), top-quartile compounders (d = 0.90), high-growth SaaS (d = 0.92), and consumer staples (d = 0.78). A company whose implied decay rate sits above the Cisco-2000 peak cohort (d = 0.98) is priced for growth persistence that has no precedent in the historical record.

2. Solve for terminal FCF margin

Given current price, WACC, and a fixed decay rate, find the terminal free cash flow margin that justifies today's price. Use this mode when the key uncertainty is not the growth trajectory but the ultimate margin destination — for example, a business with high current revenue growth and near-zero current margins where the question is whether the profitability story is real. A company whose implied terminal margin exceeds what any public comparable has sustained at scale is embedding an assumption worth examining explicitly.

3. Solve for discount rate (implied WACC)

Given current price, a fixed decay rate, and terminal margin, find the WACC that equates PV with today's price. Use this mode to test the interest-rate sensitivity of the implied story. At a WACC of 8%, the price is rational; at 12%, it requires further examination. The direction of this sensitivity is predictable — longer-duration growth stocks reprice more sharply as discount rates rise — but the magnitude varies by how much of total value sits in the terminal year.

Discount Rate via CAPM

When WACC is not supplied manually, the engine computes it via the Capital Asset Pricing Model:

Cost of Equity = Rṥ + β × ERP

Rṥ = 10-year Treasury yield (FRED DGS10, fetched live)
ERP = 5.5% (Damodaran long-run default; override via --erp)
β = Schwab Market Data fundamentals (falls back to 1.0 if unavailable)

When net debt is material, the engine computes a debt-weighted blended WACC: cost of equity times equity weight plus after-tax cost of debt times debt weight, where cost of debt is derived from the most recent year's interest expense divided by total debt. For asset-light or low-leverage businesses the all-equity approximation and the blended WACC are close; for leveraged businesses with meaningful debt loads the difference matters.

Beta is backward-looking and unstable for small-cap or recently public names. When beta is suspect — zero, negative, or absent from the data source — the solver accepts a manual override via the --beta flag rather than silently using 1.0 on a name where that assumption is not defensible.

Terminal Value

Two terminal value methods are available.

The default is an exit multiple: terminal value equals the year-ten free cash flow multiplied by a fixed multiple (default 15x). This method has one known weakness — the multiple assumption is arbitrary — and one underappreciated strength: it does not blow up when WACC and terminal growth rate converge. The Gordon Growth perpetuity formula TV = FCFₙ × (1 + g) / (WACC − g) is extremely sensitive to the spread between those two inputs. A 0.5 percentage-point change in either parameter can move the terminal value by 20-30% on a slow-growth company. The exit multiple sidesteps this instability at the cost of anchoring on an assumed selling price.

The perpetuity method is available via --terminal-method perpetuity --terminal-growth 0.03. It is most appropriate when the goal is theoretical consistency or when comparing against a published DCF that used perpetuity convention. For primary analysis on consumer-facing businesses, the exit multiple is the more robust choice.

Binary Search Solver

The solver uses binary search on the free variable. For the growth decay mode: present value is monotonically increasing in d (a higher decay rate means slower mean reversion, which means higher cash flows in later years). The solver bisects the interval [0, 1] until PV converges to within 0.0001% of enterprise value, typically in 40-60 iterations. No scipy dependency; the algorithm runs in pure Python.

Two degenerate cases are reported explicitly rather than silently suppressed. If even d = 1.0 (permanent flat growth) cannot reach the current enterprise value, the solver returns -1 — the stock is priced for growth that exceeds perpetual maintenance of current rates, which is not a physically achievable outcome for a large company. If d = 0 (growth collapses immediately to zero) already exceeds enterprise value, the solver returns 0 — the stock is priced below what its existing cash flows alone justify without any growth credit at all. Both are useful signals; neither is a black box.

Base Rate Comparison

The solved decay rate is compared against six historical cohorts calibrated from Bessembinder (2018) long-horizon stock returns and McKinsey Corporate Performance studies:

CohortDecay (d)Description
Consumer staples0.78Mature, slow-growth businesses
S&P 500 median0.83Typical large-cap company
Mature tech0.85Established tech (MSFT, ORCL type)
S&P 500 top quartile0.90Strong sustained growers
High-growth SaaS0.92Best-in-class recurring revenue
Cisco 2000 peak0.98Extreme bubble expectations

A solved decay rate is not a forecast. It is the assumption the market has already made. The base-rate table answers: how unusual is this assumption relative to what companies in comparable situations have historically achieved? A managed-care company priced at d = 0.88 is being asked to sustain growth persistence above the S&P 500 top quartile but below best-in-class SaaS — a question about whether the sector's tailwinds justify top-quartile treatment, not a question about price per se.

Sensitivity Grid

The sensitivity table maps a grid of WACC assumptions against decay rate assumptions and reports the implied price at each cell. This inverts the standard presentation: rather than showing how price changes as assumptions move, it shows the price that would be fair under each combination. Reading the table against the current market price reveals which WACC-decay combinations are already embedded and which would imply materially different valuations.

The most useful way to read the grid is to find the row and column nearest the base-case WACC and solved decay rate, then examine the surrounding cells. A tightly clustered region — where nearby assumptions produce similar prices — indicates valuation robustness. A region where the implied price changes sharply across adjacent cells indicates a valuation that is highly sensitive to its key assumptions and therefore requires higher conviction in those specific inputs before acting.

Data Sources and Pipeline

Revenue and FCF data from SEC EDGAR (XBRL structured financials). Price and beta from Schwab Market Data API. Risk-free rate from FRED DGS10 (10-year Treasury yield, fetched live at run time). Results stored in the reverse_dcf_results table in market.db alongside the full sensitivity grid. All computation in reverse_dcf.py — pure Python binary search, no scipy or numerical optimization library dependency.

Part II — Value Scores

The reverse DCF answers the price question: what growth story is the market embedding? The value scores answer a different question: is the business strong enough to execute that story? Seven academic and practitioner formulas test financial strength, bankruptcy risk, earnings quality, capital efficiency, and earnings manipulation. They are not forecasts. They are filters — conditions a business must satisfy before its market-implied growth assumptions deserve serious consideration.

All seven scoring functions are pure: given a FinancialSnapshot built from EDGAR XBRL data, each function returns a typed result dataclass with no I/O, no network calls, and no database interaction. The score_company() orchestrator runs all seven in sequence and returns a ValueScoreCard.

Graham Number

Benjamin Graham introduced a simple intrinsic value floor in The Intelligent Investor (1949). The formula encodes a ceiling on the combined P/E and P/B multiples that a conservative investor should pay:

Graham Number = √(22.5 × EPS × BVPS)

22.5 = 15 (max acceptable P/E) × 1.5 (max acceptable P/B)
Returns undefined when EPS ≤ 0 or BVPS ≤ 0

A stock trading below its Graham Number satisfies both Graham's P/E and P/B criteria simultaneously. Margin of safety is reported as (Graham Number − Price) / Graham Number: positive means the stock trades below the floor, negative means it trades above. The Graham Number is most meaningful for traditional industrial and financial businesses with stable earnings. It is undefined for negative-earnings companies and systematically too low for asset-light businesses with high return on equity, where BVPS bears little relationship to economic value.

Piotroski F-Score

Joseph Piotroski's 2000 paper “Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers” introduced a nine-point scoring system for identifying financially improving businesses within a value screen. The paper demonstrated that buying high-F-Score value stocks and shorting low-F-Score value stocks generated a mean annual return of 23% over 1976-1996.

The nine signals span three categories. Profitability: (F1) ROA positive, (F2) operating cash flow positive, (F3) ROA improving year-over-year, (F4) cash flow exceeds net income (accrual quality). Leverage and liquidity: (F5) long-term debt ratio decreasing, (F6) current ratio improving, (F7) no new equity issuance. Operating efficiency: (F8) gross margin improving, (F9) asset turnover improving. Each signal scores one point if satisfied, zero if not; missing data scores zero. The composite F-Score is the sum of all nine.

F-Score 7–9: strong financial position
F-Score 4–6: neutral
F-Score 0–3: distressed

The F-Score is best read alongside the price context. A score of 7 on a company trading at 5x earnings is a different signal than a score of 7 on a company trading at 30x earnings. The score tests whether recent financial history is pointing in the right direction; it does not assess whether the starting valuation provides a margin of safety.

Altman Z-Score

Edward Altman's 1968 paper “Financial Ratios, Discriminant Analysis and the Prediction of Corporate Bankruptcy” developed a five-factor discriminant model trained on a matched sample of bankrupt and non-bankrupt manufacturing firms. The original Z-Score formula is:

Z = 1.2A + 1.4B + 3.3C + 0.6D + 1.0E

A = Working Capital / Total Assets
B = Retained Earnings / Total Assets
C = EBIT / Total Assets
D = Market Cap / Total Liabilities
E = Revenue / Total Assets

Z > 2.99: safe zone  |  1.81–2.99: grey zone  |  Z < 1.81: distress zone

The manufacturing model is applied to SIC codes 2000-3999. For all other industries, the engine uses Altman's 1995 Z′′-Score (non-manufacturing model), which drops the Revenue/Assets term to avoid industry bias and substitutes book equity for market cap in factor D, making it applicable to private and non-manufacturing firms:

Z′′ = 6.56A + 3.26B + 6.72C + 1.05D

D = Book Equity / Total Liabilities (not market cap)

Z′′ > 2.60: safe  |  1.10–2.60: grey  |  Z′′ < 1.10: distress

The Z-Score is a bankruptcy screen, not a valuation tool. A score in the safe zone does not mean the stock is cheap; it means the company is not showing the financial deterioration pattern that preceded historical bankruptcies. The grey zone is where meaningful attention is warranted — not a trigger to sell, but a signal to understand why the score is where it is.

Total Shareholder Yield

Total Shareholder Yield, developed in Mebane Faber's “Shareholder Yield: A Better Approach to Dividend Investing,” extends the conventional dividend yield to capture all three channels through which a company returns capital to shareholders:

TSY = Buyback Yield + Dividend Yield + Debt Paydown Yield

Buyback Yield = Dollars Repurchased / Market Cap
Dividend Yield = Dividends Paid / Market Cap
Debt Paydown Yield = (Prior Debt − Current Debt) / Market Cap

Relying on dividend yield alone misses the majority of capital return activity for most large-cap US companies, which tend to favor buybacks over dividends due to their tax flexibility. A company with a 0.5% dividend yield but 8% buyback yield and meaningful debt paydown is returning far more capital than its dividend yield suggests. TSY makes this comprehensive return visible in a single number. Debt paydown yield is only computed when both current and prior year debt figures are available; it is not defaulted to zero when prior-year debt is missing, since that would produce spurious negative yields.

Incremental ROIC

Return on invested capital measures how much profit a business generates relative to the capital deployed to generate it. The incremental version measures this ratio on the new capital deployed between two adjacent years, not on the full asset base:

Incremental ROIC = ΔNOPAT / ΔInvested Capital

NOPAT = Operating Income × (1 − effective tax rate)
Invested Capital = Total Assets − Current Liabilities − Cash − Goodwill

Incremental ROIC matters because it reveals the quality of the reinvestment engine. A company can show high historic ROIC from legacy assets while deploying new capital at poor rates — a pattern that foreshadows earnings deterioration before it appears in aggregate return figures. Incremental ROIC above the company's WACC is the condition that justifies paying for growth; below WACC it implies growth is destroying economic value. The three-year average smooths single-year noise from timing of large capital expenditures.

Greenwald EPV

Bruce Greenwald's Earnings Power Value, developed in “Value Investing: From Graham to Buffett and Beyond,” separates the value of what a business is earning today from any credit for future growth. EPV is the value of current operations sustained indefinitely at normalized profitability — a no-growth scenario used as a conservative floor:

Owner Earnings = Normalized EBIT × (1 − tax rate) + D&A − Maintenance CapEx − SBC

Enterprise EPV = Owner Earnings / WACC

Equity EPV per Share = (Enterprise EPV − Net Debt) / Shares

EBIT is normalized using a multi-year average to remove one-time items. Maintenance CapEx is proxied by D&A following Greenwald's convention. SBC is deducted to align with owners' economics.

The asset reproduction value (ARV = Total Assets − Goodwill − Intangibles) provides a secondary reference point. When enterprise EPV exceeds ARV, the business earns above the cost of reproducing its asset base — evidence of a competitive advantage. When EPV falls below ARV, a rational acquirer would prefer to buy the assets individually rather than pay the market price for the going concern. The EPV per share figure is the equity value of the current business with no growth embedded. A stock trading below its EPV per share is, in Greenwald's framework, being priced as if the business will shrink — a claim that deserves specific scrutiny.

Beneish M-Score

Messod Beneish's 1999 paper “The Detection of Earnings Manipulation” developed an eight-variable probit model that distinguishes companies that have materially misstated financial statements from those that have not. The model was trained on SEC enforcement actions and restatements. The eight indices are:

M = −4.84 + 0.920·DSRI + 0.528·GMI + 0.404·AQI + 0.892·SGI

    + 0.115·DEPI − 0.172·SGAI + 4.679·TATA − 0.327·LVGI

DSRI = Days Sales in Receivables Index (receivables growing faster than revenue)
GMI = Gross Margin Index (margin deterioration)
AQI = Asset Quality Index (non-current assets relative to total)
SGI = Sales Growth Index (high growth raises manipulation incentive)
DEPI = Depreciation Index (slowing depreciation rate)
SGAI = SG&A Index (overhead growing relative to revenue)
TATA = Total Accruals to Total Assets (earnings quality)
LVGI = Leverage Index (increasing leverage)

M > −1.78: likely manipulator  |  M ≤ −2.22: unlikely manipulator

The M-Score does not identify which line item is being manipulated; it flags whether the composite pattern of financial ratios resembles historical manipulation cases. The most heavily weighted term is TATA — total accruals to total assets — reflecting the empirical finding that aggressive accrual accounting is the most common manipulation mechanism. A score above −1.78 warrants scrutiny of the receivables aging schedule, the recognition policy for deferred revenue, and management commentary on non-recurring items in the most recent 10-K.

Limitations

Both tools share a common boundary: they work from audited financial history. They cannot detect problems that have not yet appeared in the numbers.

  • The reverse DCF produces an implied growth assumption, not a forecast. It does not answer whether the implied assumption is achievable — that requires qualitative industry analysis, competitive position assessment, and management judgment. The framework surfaces the assumption; the investor must judge its plausibility.
  • Value scores are backward-looking. A company can pass all seven filters and still face a structural disruption that has not yet shown up in trailing financial statements. The Altman Z-Score was calibrated on manufacturing companies and is less predictive for capital-light services businesses or companies with large off-balance-sheet obligations.
  • Industry-specific capital intensity distorts several scores. A capital-intensive utility with high depreciation and low current ratio will score poorly on Piotroski signals designed around industrial norms. Context is required.
  • Accounting regime differences matter for cross-border comparisons. IFRS and US GAAP treat leases, revenue recognition, and goodwill amortization differently. The scores are calibrated for US GAAP reporters. IFRS filers may produce systematically different results on the leverage and asset-quality indices.
  • Graham Number and EPV per share are undefined or unreliable for negative-earnings companies. Neither metric is appropriate for pre-profitability businesses regardless of how compelling the growth story is.
  • Idiosyncratic catalysts — litigation risk, regulatory change, management succession, supply chain concentration — are not captured by any of these formulas. No quantitative screen substitutes for reading the Risk Factors section of the 10-K.