learn-value-investing-with-phoebe / Analyst session 4 of 10
Learn Value Investing with Phoebe · Analyst session 4 of 10

A discounted cash flow, by hand

A valuation model is three choices and a lot of arithmetic. Tonight we do the arithmetic by hand, one year at a time, on one real base: Procter & Gamble's ten-year mean owner earnings, 5.00 a share, computed from its 10-K facts in Analyst session 2. Ten years growing at 5 percent, then 2.5 percent forever, everything shrunk to today at 9 percent. The answer is 95.16 a share, and by the end you will know which of those three choices built most of it. The value is a model output, not a price, and nothing here compares it to one.

🟡 Analyst Analysts, finance and data people who want to see every step of a valuation Python, standard library only 45 min
0-3 · Welcome 3-18 · Two stages, the rate, the terminal 18-40 · Build-along: the DCF function 40-45 · Q&A
Part 0

Where we start

Analyst sessions 1 to 3 gave you a base: owner earnings per share from the filings, normalised across a cycle, with a view on how much the business must reinvest to grow. A discounted cash flow turns that base into one number by answering a single question: what is a stream of future cash worth in money today? Why a dollar next year is worth less than a dollar now is the price of time, taught in Economics: money, inflation and interest ↗. Here we use it, year by year, and watch where the value comes from.

🎫 Clear all three quiz questions to stamp your passport Live = presented in the 45 minutes Self-study = the full depth, after class ★ Build-along = everyone builds

★ What you walk out with tonight. A twelve-line Python dcf() that returns the value, the part from years 1 to 10 and the part from beyond year 10; the P&G table you can check by hand on a calculator, 5.25 shrinking to 4.82 in year 1 and 8.14 shrinking to 3.44 in year 10; three values for three discount rates, 113.24, 95.16 and 81.95; and the habit of printing the terminal share, 57.0 percent here, next to every value you ever quote.

Part 1 · covers the two-stage model

Two stages

5 min live

Nobody can forecast a business year by year forever, so a two-stage model splits the future in two. Stage one is a run of years you are willing to sketch explicitly: here ten years of owner earnings growing at 5 percent from a base of 5.00. Stage two is everything after, summarised as cash growing at a slow, steady 2.5 percent for ever. Every year's cash is then divided down to today at the discount rate, 9 percent, and the pieces are added.

TEN YEARS OF CASH, AND WHAT EACH IS WORTH TODAY P&G base 5.00 a share · 5% growth · 9% discount rate 5.25 5.51 5.79 6.08 6.38 6.70 7.03 7.39 7.75 8.14 4.82 4.64 4.47 4.30 4.15 3.99 3.85 3.71 3.57 3.44 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 BEYOND YEAR 10 128.39 at year 10 54.24 today drawn at its own scale pale bar = owner earnings that year · brass = what it is worth today · the ten brass bars add to 40.93 The cash grows every year and its value today still shrinks: 9 percent of discount beats 5 percent of growth.
🔍 Click to zoom - year 10's cash is the largest and its present value the smallest; the block beyond year 10 outweighs all ten years together
LiveHow each year is discounted3 min▶

Grow the base one year at a time: 5.00 x 1.05 = 5.25 in year 1, 5.25 x 1.05 = 5.51 in year 2, and so on to 8.14 in year 10. Then ask what each year's cash is worth today. Year 1's cash arrives one year from now, so divide it by 1.09 once: 5.25 / 1.09 = 4.82. Year 2's arrives two years out, so divide by 1.09 twice: 5.51 / 1.092 = 4.64. Year 10's is divided by 1.09 ten times, which is 2.37, so 8.14 shrinks to 3.44.

★ The hand table · P&G, 5% growth, 9% discount rateyear owner earnings worth today 1 5.25 4.82 2 5.51 4.64 3 5.79 4.47 4 6.08 4.30 5 6.38 4.15 6 6.70 3.99 7 7.03 3.85 8 7.39 3.71 9 7.75 3.57 10 8.14 3.44 ------ 40.93

The right-hand column adds to 40.93: everything the explicit decade is worth today. Notice the shape. The cash column rises, the present-value column falls, because the discount rate is larger than the growth rate. A business growing faster than its discount rate for a decade would show a rising right-hand column, and that should make you suspicious of the growth rate before it makes you excited about the value.

Self-studyWhy 5 percent and 9 percent are choices, not facts3 min▶

Nothing in P&G's filings says 5 percent. Its owner earnings per share rose from a five-year mean of 3.84 at the start of its run to 5.90 at the end, about 3.1 percent a year over 14 years, in nominal dollars. So 5 percent is above P&G's own record: it is a round default the bench uses for every filer, so that the companies can be compared on the same sliders. The 9 percent is a judgment about the return you require for waiting and for risk, which is Part 2.

The honest way to write a DCF is to put the choices first, in a sentence: "base 5.00, ten-year mean owner earnings, all-capex approximation; 5 percent for ten years, then 2.5 percent; 9 percent discount rate". Anyone who disagrees with a choice can see it and change it. A value presented without its sentence is a number with its assumptions hidden.

Real world

Procter & Gamble's base, from the filings. The 5.00 is the mean of P&G's last ten fiscal years of owner earnings per share, net income plus D&A minus all capital spending, divided by diluted shares, from its 10-K facts through fiscal 2026. Over the same ten years P&G's capital spending ran at 1.19 times its D&A, and its ten-year owner earnings totalled 127.2 billion against 132.6 billion of net income: one of the four filers where the all-capex approximation sits below profit. The base inherits every label from Analyst session 1.

Part 2 · covers the discount rate

The discount rate is a judgment

5 min live

The discount rate does two jobs at once. It charges for time, because money tied up for ten years could have earned something safe in the meantime. And it charges for risk, because the cash in the table is a forecast, not a promise. No filing reports it and no formula hands it down from above. Move it one point and P&G's value moves by more than a sixth.

SAME BUSINESS, SAME CASH, THREE DISCOUNT RATES P&G value per share · 5% for 10 years, then 2.5% 113.24 95.16 81.95 the default 8% 9% 10% discount rate value per share higher rate, lower value one point down: +18.08 one point up: -13.21 The curve bends: a cut in the rate adds more than the same rise takes away. Nothing about P&G changed.
🔍 Click to zoom - a two-point disagreement about the rate, 8 versus 10 percent, is a 31.29 disagreement about the value
LiveTime, risk, and the row of the grid3 min▶

Read the rate as the return you demand for handing over money today against a stream of cash you cannot be sure of. A safer, steadier stream earns a lower rate; a cyclical, indebted or poorly understood one earns a higher rate. That is a judgment about the business and about you, and two careful people can land a point apart.

One point is not a rounding error. Holding growth at 5 percent and the terminal at 2.5 percent, P&G is worth 113.24 at 8 percent, 95.16 at 9 percent and 81.95 at 10 percent. The swing is lopsided because discounting compounds: every year's divisor changes, and the terminal value's divisor changes most of all, since it sits ten years out and also depends on the gap between the rate and terminal growth. Analyst session 6 sets this row beside the growth and terminal levers and asks which one moves the answer most.

Self-studyCAPM and betas: not covered2 min▶

Textbook finance derives a discount rate from a model of market returns, usually the capital asset pricing model, where a riskfree rate is topped up by a company's measured sensitivity to the market (its beta) times an equity risk premium. That derivation is not covered here. It needs market prices to estimate the beta, these pages use no market prices, and the derivation does not remove the judgment: it relocates it into the choice of premium and the period the beta is measured over.

If you want the full machinery, Aswath Damodaran publishes his cost-of-capital lectures, datasets and spreadsheets free at pages.stern.nyu.edu/~adamodar ↗. For every exercise here, the rate is a stated choice, the range in Analyst session 6 brackets it by a point either way, and the sentence you write with the value says which rate you used.

Real world

Two analysts, one set of P&G filings. Give two analysts the same ten years of 10-K facts, the same 5.00 base and the same growth path. One judges P&G a steady consumer business and uses 8 percent; the other wants a cushion and uses 10. They report 113.24 and 81.95 a share, and neither has made an arithmetic mistake. The disagreement is real, it is about one input, and the only way a reader can see it is if both print the rate beside the value.

Part 3 · covers the terminal value

The terminal value

5 min live

Stage two compresses forever into one number. If cash grows at a steady rate g for ever and you discount it at r, the whole stream is worth next year's cash divided by (r - g) at the point it starts. That is the Gordon growth formula, and it is standard finance. It is also where most of P&G's value lives.

WHERE THE 95.16 COMES FROM P&G, base 5.00, 5% for 10 years then 2.5%, discounted at 9% 95.16 a share years 1 to 10 40.93 43.0 percent beyond year 10 54.24 57.0 percent the sum of ten present values 4.82 + 4.64 + ... + 3.44 = 40.93 TV = year-11 cash / (r - g) = 128.39 at year 10 shrunk ten years at 9 percent: 54.24 40.93 + 54.24 = 95.17: each part is rounded to cents, the unrounded total is 95.16 More than half the value is a claim about the business after 2036, written as one division.
🔍 Click to zoom - the brass part is the one sentence of the model you can least check, and it is the larger part
LiveGordon growth, step by step3 min▶

Year 10's owner earnings are 8.14. Year 11's, the first year of stage two, are 2.5 percent higher. Divide year 11's cash by the gap between the discount rate and terminal growth, 0.09 - 0.025 = 0.065, and you get the value at the end of year 10 of everything that follows: 128.39. That value sits ten years in the future, so it is divided by 1.09 ten times, like year 10's cash, giving 54.24 today.

Add the two stages: 40.93 + 54.24. On a calculator that is 95.17; the model prints 95.16. Neither is wrong. Each part is rounded to cents before you add them; the model adds the unrounded parts and rounds once. Say so whenever you show the split, because a reader who adds your parts and gets a different total stops trusting the rest.

The terminal share, 54.24 of 95.16, is 57.0 percent, and at these defaults it is the same for every base, because the base scales both parts equally. Print it beside every value. A DCF where most of the answer comes from beyond the forecast is a statement about the long run more than about the next decade.

Self-studyWhat happens as g approaches r3 min▶

The divisor in the Gordon formula is r - g. At 9 and 2.5 percent it is 0.065. Raise terminal growth to 3.5 percent and P&G's value rises to 105.65; lower it to 1.5 percent and it falls to 87.47. Keep raising it and the divisor heads toward zero while the terminal value heads toward infinity. At g equal to r the formula divides by zero, and above it the sum of the stream does not converge at all: each later year is worth as much or more today than the one before.

The intrinsic value bench in Analyst session 10 has a break button that sets terminal growth equal to the discount rate. It does not print an enormous number; it prints no value, and the reason. A model that returned a figure there would be lying.

Damodaran's terminal value lecture gives the economic reason for the cap, not just the arithmetic one: a stable growth rate cannot exceed the growth rate of the economy, though it can be lower, because a company growing faster than its economy for ever would eventually become the economy. He uses the riskfree rate as a simple proxy for nominal economic growth, which keeps terminal growth below the discount rate whenever the discount rate carries any premium for risk.

Real world

Vaguely right. In the 1986 letter's appendix on owner earnings, Buffett admits his maintenance-capex term must be a guess and still prefers it to a false precision: "I would rather be vaguely right than precisely wrong." A terminal value is the same kind of figure. Printing P&G at 95.16 with two decimals and no terminal share is precise; printing 95.16 with "57.0 percent of it from beyond year 10, at 2.5 percent terminal growth" is closer to right.

Build-along

Build the DCF function

★ 22 min · everyone builds

Python 3, standard library only, no data fetch tonight: the base is one number. We use P&G's ten-year mean owner earnings per share unrounded, 4.998525, which displays as 5.00 everywhere else on the page. Using the rounded 5.00 would print 95.19 instead of 95.16, which is itself a small lesson in carrying full precision until the last step. The outputs printed below are what this code printed when run.

FOUR STEPS INSIDE dcf(), AND THE CHECK AFTER EACH 1 · grow cash x (1 + g), each year 2 · discount divide by (1 + r) ** year 3 · terminal next cash / (r - gt) 4 · add stage + terminal PV check: y1 worth 4.82 matches the hand table check: stage 40.93 ten values added check: r above gt otherwise, no value check: 95.16 and the 57.0% share Return the two parts, not only the total. The split is the first thing a careful reader asks for.
🔍 Click to zoom - step 3's guard is the line that keeps the function from printing a number where none exists

Step 1 · Write the function. It returns three things: the value, what years 1 to n are worth today, and what everything beyond year n is worth today. The guard comes first, because a terminal growth at or above the discount rate has no value to return.

★ Step 1 · dcf()def dcf(base, r, n, g, gt): """Two stages: n years growing at g, then gt forever. Returns (value, stage-one PV, terminal PV), all per share.""" if r <= gt: raise ValueError("terminal growth must sit below the discount rate") cash, stage = base, 0.0 for year in range(1, n + 1): cash = cash * (1 + g) stage += cash / (1 + r) ** year tv = cash * (1 + gt) / (r - gt) terminal = tv / (1 + r) ** n return stage + terminal, stage, terminal

Step 2 · Print the hand table. Before trusting the function, reproduce Part 1's table outside it and compare line by line with your calculator.

★ Step 2 · the table, and what it printedBASE = 4.998525 # P&G ten-year mean owner earnings per share; displays as 5.00 cash = BASE for year in range(1, 11): cash = cash * 1.05 print(f"y{year:<2} owner earnings {cash:5.2f} worth today {cash / 1.09 ** year:5.2f}") y1 owner earnings 5.25 worth today 4.82 y2 owner earnings 5.51 worth today 4.64 y3 owner earnings 5.79 worth today 4.47 y4 owner earnings 6.08 worth today 4.30 y5 owner earnings 6.38 worth today 4.15 y6 owner earnings 6.70 worth today 3.99 y7 owner earnings 7.03 worth today 3.85 y8 owner earnings 7.39 worth today 3.71 y9 owner earnings 7.75 worth today 3.57 y10 owner earnings 8.14 worth today 3.44

Step 3 · Run it on P&G at the defaults. Print the value, the split, and the terminal share together, always.

★ Step 3 · run, and what it printedvalue, stage, terminal = dcf(BASE, r=0.09, n=10, g=0.05, gt=0.025) print(f"value {value:.2f} = years 1-10 {stage:.2f} + beyond year 10 {terminal:.2f}") print(f"terminal share {terminal / value:.1%}") value 95.16 = years 1-10 40.93 + beyond year 10 54.24 terminal share 57.0%

Step 4 · Loop over the discount rate. One point either side of the default. This is the row of the grid in Part 2, and the seed of the sensitivity grid in Analyst session 6.

★ Step 4 · three rates, and what it printedfor r in (0.08, 0.09, 0.10): value, _, _ = dcf(BASE, r=r, n=10, g=0.05, gt=0.025) print(f"r {r:.0%} value {value:7.2f}") r 8% value 113.24 r 9% value 95.16 r 10% value 81.95

Step 5 · Break it on purpose. Set terminal growth equal to the discount rate and confirm the function refuses, rather than returning a huge number. Then write one sentence on why refusing is the correct behaviour.

★ Step 5 · the guard, and what it printedtry: dcf(BASE, r=0.09, n=10, g=0.05, gt=0.09) except ValueError as e: print("no value:", e) no value: terminal growth must sit below the discount rate # your sentence: ______________________________________________

Keep the sentence with the value. Wherever 95.16 travels, it travels as "P&G, base 5.00 ten-year mean owner earnings (all-capex approximation), 5 percent for 10 years then 2.5 percent, at 9 percent; 57.0 percent from beyond year 10". Strip the sentence off and it becomes a price target in somebody else's deck, which it is not.

Homework

Before Analyst session 5

30 min
  1. Do years 1 to 3 on paper for P&G, without the code, and check them against the table. Then do year 10 and explain to someone else why its present value is the smallest of the ten.
  2. Run dcf() on another base from your Analyst session 2 work, for any of the four filers, at the defaults. Confirm the terminal share is still 57.0 percent, and write one line on why it does not depend on the base.
  3. Change the growth years from 10 to 5 and to 15 for P&G. You should get 87.76 and 101.31. Write which way the terminal share moves and why.
  4. Write the sentence for your own valuation: base and its label, growth path, discount rate and why you chose it, terminal growth and why it sits below economic growth, and the terminal share.
Check yourself

Three questions

Clear all three and Analyst session 4 gets stamped in your passport.

1 · P&G's year 3 owner earnings are 5.79 a share. At a 9 percent discount rate, what are they worth today?

Each year of waiting divides by 1.09 again: 5.79 / 1.093 = 4.47. Dividing once treats year 3's cash as if it arrived next year; subtracting a flat 9 percent each year is not how compounding works.

2 · At P&G's defaults, the discount rate one point either side gives 81.95 to 113.24; growth two points either side gives 81.84 to 110.71; terminal growth one point either side gives 87.47 to 105.65. What does that say?

The rate's one-point range is 31.29 wide; growth's two-point range is 28.87; terminal growth's one-point range is 18.18. The rate touches every year's divisor and the terminal divisor at once. Analyst session 6 runs the full grid.

3 · Why must terminal growth stay below the discount rate, and in practice well below it?

The arithmetic cap is r - g greater than zero. The economic cap is tighter: a company cannot outgrow its economy for ever. Both are why the bench's break button prints no value rather than a large one.

Sources covered

What this session teaches, and where it came from

✓Stable growth cannot exceed the growth rate of the economy, though it can be lower; the riskfree rate as a simple proxy for nominal economic growthDamodaran, A., valuation class slides, terminal value session, NYU Stern, 2023 (read at source)
✓P&G base 5.00 (ten-year mean owner earnings per share), the year-by-year table, 40.93 / 54.24 / 95.16, terminal value 128.39, the rate row 113.24 / 95.16 / 81.95 and the one-input sensitivitiesSEC EDGAR XBRL company facts, read from a public mirror; base computed, values modelled on it at the stated assumptions
✓Two-stage discounting and the Gordon growth terminal valueStandard DCF mechanics, taught as standard finance; reproduced by the Python above
✓"Vaguely right than precisely wrong"Buffett, W., Berkshire Hathaway shareholder letter, 1986, appendix (read at source)
◐Cost of capital from CAPM and betasNot covered; named and pointed to Damodaran's published pages
◐Interest as the price of timeTaught in Economics: money, inflation and interest; linked, not re-taught

Every fact on this page, and its verification tier, is recorded in the course's source map.

Analyst session 4 cheat sheet · pin this

Discount a yearCash in year t, divided by (1 + r) to the power t.
Two stagesn explicit years at g, then a terminal value at gt, both shrunk to today.
Gordon growthTV = next year's cash / (r - g). Requires r above g.
The rate is a judgmentP&G: 113.24 at 8%, 95.16 at 9%, 81.95 at 10%.
Print the terminal share57.0 percent at the defaults. Show the split; say why the parts add to 95.17.
Cap the terminalNo faster than the economy; no value at all when g reaches r.