A master's-level walkthrough of the Four Corners financial-planning case in R, in 43 slides. It builds the deterministic compounding engine, treats Goal Seek as root-finding, sets up the two input distributions (uniform salary growth and normal portfolio growth), builds the Monte Carlo engine, and reads out the risk with P(success), expected shortfall, and VaR and CVaR, before extending to the 25-year horizon and a reusable template. Every decision is justified: why the half-year earnings convention is used, why the simulation mean lands below the deterministic $772,722, and why running more iterations does not raise the 1% success rate. The deck includes four traps, four checks, and five figures rendered from the actual model.
Subject: Business Analytics · 75 slides · applied lesson
Open the interactive version of this deck · Homework for this lesson
Title
Business Analytics · Monte Carlo Case Study
A deterministic projection says $772,722. A simulation says Tom's odds of hitting $1M are about 1%. Today we build both engines in R and learn exactly why those two numbers disagree.
Objectives
This case is the gap between a single forecast and a distribution of futures. By the end you can:
uniroot, Excel's Goal Seek) to solve for the contribution rate that hits a goal.Concept
Four Corners' HR asked Tom to build a financial-planning model — and to test it on himself first. Every number in this deck traces back to this one profile.
| Quantity | Symbol | Value | Why it matters |
|---|---|---|---|
| Current age | age₀ | 40 | Sets the clock; Tom plans 20 more working years |
| Current salary | S₀ | $85,000 | Contributions are a % of salary, so this scales everything |
| Current portfolio | P₀ | $50,000 | The seed the compounding acts on |
| Contribution rate | inv | 6% | Fraction of salary invested each year |
| Salary growth | g_sal | 5% / yr | Raises future contributions |
| Portfolio growth | g_port | 10% / yr | The return the market is assumed to deliver |
| Goal | — | $1,000,000 | The target at age 60 |
Comparison
Comparison matrix
From Who is Tom Gifford?: refill the Symbol column from what you know. The rest of the table is as it appeared.
| Quantity | Symbol | Value | Why it matters |
|---|---|---|---|
| Current age | age₀ | 40 | Sets the clock; Tom plans 20 more working years |
| Current salary | S₀ | $85,000 | Contributions are a % of salary, so this scales everything |
| Current portfolio | P₀ | $50,000 | The seed the compounding acts on |
| Contribution rate | inv | 6% | Fraction of salary invested each year |
| Salary growth | g_sal | 5% / yr | Raises future contributions |
| Portfolio growth | g_port | 10% / yr | The return the market is assumed to deliver |
| Goal | — | $1,000,000 | The target at age 60 |
Concept
The managerial report asks five questions, but they collapse into three analytical moves you'll build in order:
Matching
Match the pairs
From The five tasks, three ideas — match each one to what it actually does. The descriptions have been shuffled.
Why: Project, Randomize, Decide are easy to tell apart while they are sitting next to their descriptions and much harder afterwards, which is what this checks.
Section
Tasks 1a
Concept
Start concrete. Tom's Excel sheet projects five years and lands on $116,321 at age 45. These exact numbers are our ground truth — the R model must reproduce them before we trust it on year 20.
| Year | Beginning | Salary | New invest. | Earnings | Ending |
|---|---|---|---|---|---|
| 1 | $50,000 | $85,000 | $5,100 | $5,255 | $60,355 |
| 2 | $60,355 | $89,250 | $5,355 | $6,303 | $72,013 |
| 3 | $72,013 | $93,713 | $5,623 | $7,482 | $85,118 |
| 4 | $85,118 | $98,398 | $5,904 | $8,807 | $99,829 |
| 5 | $99,829 | $103,318 | $6,199 | $10,293 | $116,321 |
Notice salary stays at $85,000 in year 1 and only grows afterward — a small convention that we must copy exactly, or every later row drifts.
Pattern
Step through it
Step through Tom's worksheet: five known rows one row at a time. What is driving the change, and what would the row after the last one be?
Intuition
Each year the portfolio does three things in sequence: it takes in a new contribution, it earns a return on what it holds, and it carries the new total into next year. The salary creeps up, so next year's contribution is a little bigger.
Because money grows on money, the early years feel slow and the late years explode. That curvature is the entire reason a $50,000 seed can become hundreds of thousands — and the reason the last five years matter far more than the first.
Concept
Every row of the worksheet is the same four formulas. Subscript t is the year; Pₜ is the ending balance.
\[ I_t = \text{inv} \times S_t \]
\[ E_t = \left(P_{t-1} + \tfrac{1}{2} I_t\right)\times g_{\text{port}} \]
\[ P_t = P_{t-1} + I_t + E_t \]
\[ S_{t+1} = S_t \times (1 + g_{\text{sal}}) \]
The only subtle line is earnings: the contribution is multiplied by ½ before it earns. That 0.5 is the heart of the next two slides.
Counterexample
Discussion prompt
Every row of the worksheet is the same four formulas. Subscript t is the year; Pₜ is the ending balance.
That is stated as though it always holds. Do one of two things: produce a case where it fails, or say precisely what rules such a case out. "It just does" is not on the menu.
Hint: Hunt at the extremes first — zero, one, negative, empty, equal. If every extreme survives, the reason they survive is the proof.
Answer:
The only subtle line is earnings: the contribution is multiplied by ½ before it earns. That 0.5 is the heart of the next two slides.
Ranking
Put in order
Put the moves of Year 1 by hand — and the ½ convention into the order they have to happen.
Why: These are the moves of the worked example in the order it makes them, and each one is set up by the one before it. Contribution is the rate times this year's salary; salary is still $85,000 in year 1.
Worked example
Tom assumes contributions arrive evenly through the year, not in one lump on January 1. So on average each dollar is invested for only half the year and earns half the return.
New investment: 6% × $85,000 = $5,100
Why: Contribution is the rate times this year's salary; salary is still $85,000 in year 1.
Earnings: ($50,000 + ½ × $5,100) × 10% = $52,550 × 10% = $5,255
Why: The full starting balance earns all year, but only half the new $5,100 is exposed — hence the ½.
Ending balance: $50,000 + $5,100 + $5,255 = $60,355
Why: Carry in the principal, the contribution, and the earnings. This matches Tom's row 1 to the dollar.
| Piece | Formula | Value |
|---|---|---|
| New investment | 0.06 × 85,000 | $5,100 |
| Earnings | (50,000 + 2,550) × 0.10 | $5,255 |
| Ending balance | 50,000 + 5,100 + 5,255 | $60,355 |
Trade off
Comparison matrix
From Year 1 by hand — and the ½ convention: every row here is a choice with a cost. Fill the Value column, then say which row you would actually pick and what you give up for it.
| Piece | Formula | Value |
|---|---|---|
| New investment | 0.06 × 85,000 | $5,100 |
| Earnings | (50,000 + 2,550) × 0.10 | $5,255 |
| Ending balance | 50,000 + 5,100 + 5,255 | $60,355 |
Worked example
One loop carries bal and sal forward. The if (t < years) guard is what keeps salary flat in year 1 — it grows after the row is recorded.
project_path <- function(inv, g_sal, g_port, years,
P0 = 50000, S0 = 85000) {
bal <- P0; sal <- S0
out <- numeric(years)
for (t in seq_len(years)) {
new_inv <- inv * sal
earnings <- (bal + 0.5 * new_inv) * g_port
bal <- bal + new_inv + earnings
out[t] <- bal
if (t < years) sal <- sal * (1 + g_sal)
}
out
}Line 6 is the ½ convention; line 9 is the year-1 salary freeze. Read them as the two formulas you just did by hand.
Running it on Tom's inputs reproduces the worksheet, then keeps going to year 20:
| Year | Ending balance (R) | Source |
|---|---|---|
| 5 | $116,321 | matches Excel row 5 |
| 10 | $235,090 | model |
| 15 | $432,700 | model |
| 20 | $772,722 | matches the case checkpoint |
Anomaly
Predict first
A student writes this, and it looks reasonable:
Treat the whole new $5,100 as if it sat in the market all year.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: Assumes every contributed dollar earns a full 12 months — but Tom said they trickle in evenly.
Expose only half the new contribution to this year's return.
Why: Assumes every contributed dollar earns a full 12 months — but Tom said they trickle in evenly.
Trap
Treat the whole new $5,100 as if it sat in the market all year.
Earnings = ($50,000 + $5,100) × 10% = $5,510
Why: Assumes every contributed dollar earns a full 12 months — but Tom said they trickle in evenly.
Ending = $50,000 + $5,100 + $5,510 = $60,610
Why: Off by $255 in year 1 — and that error compounds every year, missing the $772,722 checkpoint.
Expose only half the new contribution to this year's return.
Earnings = ($50,000 + ½ × $5,100) × 10% = $5,255
Why: Even arrivals ⇒ average dollar invested half the year ⇒ the ½ on the new money only.
Ending = $50,000 + $5,100 + $5,255 = $60,355
Why: Matches the worksheet, so the model stays calibrated all the way to year 20.
Ranking
Put in order
These are the steps of The deterministic recipe, scrambled. Put them back in order before the next slide shows you.
bal = P0, sal = S0.inv × sal.(bal + ½ × contribution) × g_port.bal + contribution + earnings; record it.g_sal only if another year follows; repeat.Why: This is the order the recipe itself gives. Recalling the sequence without the slide in front of you is the difference between recognising the method and being able to run it — most of what goes wrong in practice is a step done out of turn.
Pattern
Any single projection — Tom's or any employee's — is the same five steps:
bal = P0, sal = S0.inv × sal.(bal + ½ × contribution) × g_port.bal + contribution + earnings; record it.g_sal only if another year follows; repeat.Section
Task 1b
Concept
At 6% Tom lands on $772,722 — short of $1M. Task 1b: what contribution rate hits exactly $1,000,000 in 20 years? In Excel this is Goal Seek; in R it's uniroot. Both solve the same equation.
\[ f(r) = \text{final\_balance}(r,\, 20) - 1{,}000{,}000 = 0 \]
We can't isolate r with algebra — it's buried inside a 20-step loop. So we search for the r that drives f(r) to zero.
Analogy
Discussion prompt
Explain The question Goal Seek answers by analogy to something with no Business Analytics in it at all — a queue, a recipe, a map, a bank balance, whatever fits. Then say where your analogy breaks.
Hint: An analogy that never breaks is not an analogy, it is the same idea wearing a hat. Find the seam — that is the part that is actually new.
Answer:
At 6% Tom lands on $772,722 — short of $1M. Task 1b: what contribution rate hits exactly $1,000,000 in 20 years? In Excel this is Goal Seek; in R it's uniroot. Both solve the same equation.
Intuition
Think of r as a dial. Turn it up and the final balance rises smoothly and monotonically — more contribution always means more money at the end. That smoothness is exactly what a root-finder needs.
The solver tries a low rate (too little) and a high rate (too much), then keeps halving the gap until the final balance sits on $1M. No calculus, just disciplined trial and error — which is all Goal Seek is, too.
Worked example
Wrap the engine in a function of r only, subtract the goal, and hand it to uniroot with a bracketing interval [0, 1].
final_value <- function(r, years)
tail(project_path(r, 0.05, 0.10, years), 1)
solve_rate <- function(years, goal = 1e6) {
f <- function(r) final_value(r, years) - goal
uniroot(f, interval = c(0, 1))$root
}
solve_rate(20) #> 0.0912517 (9.13%)uniroot requires f to have opposite signs at the two ends — f(0) is negative (no contributions ⇒ far under $1M) and f(1) is hugely positive — guaranteeing a root between them.
| Contribution rate | 20-yr balance | Verdict |
|---|---|---|
| 6.00% (Tom's plan) | $772,722 | short of goal |
| 9.13% (solved) | $1,000,000 | exactly the goal |
| 12.00% | $1,123,000 | over the goal |
Elimination
Eliminate the wrong options
Year 1 ended at $60,355. Year-2 salary grows to $89,250 (= 85,000 × 1.05). Using the ½-year earnings convention at 10% growth and a 6% contribution, what is the year-2 ENDING balance?
3 of these 4 are wrong. Strike them one at a time, and say what rules each one out before you strike the next. The survivor is the answer.
Survives elimination: A
Why: Contribution = 6% × 89,250 = $5,355. Earnings = (60,355 + ½ × 5,355) × 10% = 63,032.5 × 10% = $6,303. Ending = 60,355 + 5,355 + 6,303 = $72,013 — matching Tom's row 2.
Check
Use the recursion from the worked example. Compute year 2's ending balance by hand before you tap.
Check your understanding
Year 1 ended at $60,355. Year-2 salary grows to $89,250 (= 85,000 × 1.05). Using the ½-year earnings convention at 10% growth and a 6% contribution, what is the year-2 ENDING balance?
Answer: A
Why: Contribution = 6% × 89,250 = $5,355. Earnings = (60,355 + ½ × 5,355) × 10% = 63,032.5 × 10% = $6,303. Ending = 60,355 + 5,355 + 6,303 = $72,013 — matching Tom's row 2.
Section
From point estimate to distribution
Concept
Tom's boss, Kate, accepted the math but rejected the assumptions: nobody gets a flat 5% raise every year, and no portfolio returns exactly 10% every year. Real life varies.
So the team replaced the two constants with probability distributions. That single change is what turns a spreadsheet into a simulation — and what makes the $772,722 a fiction nobody will actually live.
Explain it
Discussion prompt
Explain Kate's two criticisms to a student a year behind you. No notation, no jargon they have not met — and it still has to be true.
Hint: If your explanation needs a symbol they have never seen, you are describing the notation rather than the idea.
Answer:
Tom's boss, Kate, accepted the math but rejected the assumptions: nobody gets a flat 5% raise every year, and no portfolio returns exactly 10% every year. Real life varies.
Picture it
Figure (svg): A flat rectangle from 0% to 5% on a horizontal axis, marking the mean at 2.5%, illustrating a uniform distribution
Discussion prompt
Read the picture before the words. What is this showing, and what is the one thing it is built to make obvious? Commit to an answer, then read on.
Hint: Name the parts, then say what changes between them — and if nothing changes, say what is being held still.
Answer:
Each year's raise is drawn from a Uniform distribution between 0% and 5% — every value in that band equally likely. Some years a raise, some years a freeze.
Concept
Each year's raise is drawn from a Uniform distribution between 0% and 5% — every value in that band equally likely. Some years a raise, some years a freeze.
Figure (svg): A flat rectangle from 0% to 5% on a horizontal axis, marking the mean at 2.5%, illustrating a uniform distribution
Read the mean off the picture: the center of 0–5% is 2.5%. The simulation's typical raise is half the deterministic 5% — a fact that quietly lowers every future contribution.
Concept

The accountants modeled annual return as Normal with mean 10% and standard deviation 5%. Unlike salary growth, the mean here really is 10% — the simulation keeps the deterministic center.
But the bell has tails. About 2% of years are negative (below 0%), and roughly 1 year in 6 is below 5%. Good years and bad years both happen — and the order they happen in changes the ending balance.
Sorting
Sort into buckets
These are the pieces of Monte Carlo Simulation — Four Corners Case, out of order. Put each one back under the part of the lesson it belongs to.
Anomaly
Predict first
A student writes this, and it looks reasonable:
Carry the deterministic 5% raise straight into the random model.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: Confuses the deterministic assumption with the random one — and silently inflates every contribution.
Draw from the stated distribution: Uniform(0%, 5%).
Why: Confuses the deterministic assumption with the random one — and silently inflates every contribution.
Trap
Carry the deterministic 5% raise straight into the random model.
Draw salary growth at a constant 5% (or center the Uniform at 5%)
Why: Confuses the deterministic assumption with the random one — and silently inflates every contribution.
Simulated mean wealth comes out near the deterministic $772k
Why: The model now disagrees with its own stated assumption (Uniform 0–5%) and overstates Tom's odds.
Draw from the stated distribution: Uniform(0%, 5%).
Each year's raise ~ Uniform(0, 0.05), averaging 2.5%
Why: Matches Kate and Tom's agreed assumption; contributions grow at half the deterministic pace.
Simulated mean wealth drops to ≈ $700k
Why: Lower average raises ⇒ smaller contributions ⇒ a center below the deterministic path. This is honest.
Break the constraint
Discussion prompt
The rule this trap just fixed:
Matches Kate and Tom's agreed assumption; contributions grow at half the deterministic pace.
Now break it on purpose. Build a case that violates it and follow the consequences until something visibly fails. Where does the failure first show up — and would you have noticed it if you had not been looking?
Hint: The dangerous rules are the ones whose violation still produces an answer. If yours fails loudly, try to find one that fails quietly.
Answer:
Confuses the deterministic assumption with the random one — and silently inflates every contribution.
Intuition
Here is the conceptual spine of the whole case. Plugging the average rates into one run gives $772,722. But averaging the results of thousands of random runs gives something lower — about $700k, with a median near $690k.
Two forces push it down. First, the random salary growth averages 2.5%, not 5%, so contributions are smaller. Second, multiplicative random returns suffer volatility drag: a +10% then −10% leaves you below where you started. A single best-guess path can't see either effect.
So the deterministic number isn't wrong — it's the answer to a different, easier question. The simulation answers the real one: what range of futures should Tom actually plan for?
Section
Task 2
Concept
We can't compute Tom's distribution with a formula, so we act it out: run his 20-year plan thousands of times, each run drawing fresh random raises and returns, and collect all the ending balances.
Monte Carlo simulation — Estimating the distribution of an uncertain outcome by generating many random scenarios from the input distributions and tabulating the results. Answers come as histograms and probabilities, not single values.
10,000 simulated Toms walk into the future. Counting how many reach $1M is the probability of success.
Worked example
It's the deterministic loop with two changes: the rates are now random draws, and we run n Toms at once as vectors (fast, and idiomatic R).
simulate_mc <- function(n = 10000, years = 20, inv = 0.06) {
g_sal <- matrix(runif(n*years, 0, 0.05), nrow = n)
g_port <- matrix(rnorm(n*years, 0.10, 0.05), nrow = n)
bal <- rep(50000, n); sal <- rep(85000, n)
for (t in seq_len(years)) {
new_inv <- inv * sal
earnings <- (bal + 0.5*new_inv) * g_port[, t]
bal <- bal + new_inv + earnings
if (t < years) sal <- sal * (1 + g_sal[, t])
}
bal
}Lines 2–3 pre-draw every random rate up front; line 7 applies that year's column of returns to all 10,000 Toms simultaneously.
One simulated Tom's path might look like this — notice year 8's negative return:
| Year | Raise drawn | Return drawn | Ending balance |
|---|---|---|---|
| 1 | 1.8% | +12.4% | $61,180 |
| 5 | 3.1% | +7.0% | $112,900 |
| 8 | 0.4% | −2.6% | $150,200 |
| 20 | 2.9% | +9.1% | $681,400 |
Comparison
Comparison matrix
From The simulation engine, line by line: refill the Ending balance column from what you know. The rest of the table is as it appeared.
| Year | Raise drawn | Return drawn | Ending balance |
|---|---|---|---|
| 1 | 1.8% | +12.4% | $61,180 |
| 5 | 3.1% | +7.0% | $112,900 |
| 8 | 0.4% | −2.6% | $150,200 |
| 20 | 2.9% | +9.1% | $681,400 |
Concept
A simulated probability is itself an estimate, and its noise shrinks like 1 / √n. More runs buy a steadier number — with diminishing returns.
| Iterations n | Std. error of a ~50% probability | Practical read |
|---|---|---|
| 100 | ≈ 5.0% | too jittery to trust a decision |
| 1,000 | ≈ 1.6% | rough shape visible |
| 10,000 | ≈ 0.5% | stable to a half-point — the sweet spot |
| 1,000,000 | ≈ 0.05% | more precision than the assumptions deserve |
10,000 pins the success rate to within about half a percentage point — finer than our 5%-standard-deviation guess about the market could ever justify. That's why the case uses it.
Anomaly
Predict first
A student writes this, and it looks reasonable:
Treat a disappointing probability as a sample-size problem.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: Assumes more runs change the answer, as if 1% were just bad luck in the draw.
Separate the estimate's precision from the underlying probability.
Why: Assumes more runs change the answer, as if 1% were just bad luck in the draw.
Trap
Treat a disappointing probability as a sample-size problem.
Re-run with 1,000,000 iterations expecting the success rate to climb
Why: Assumes more runs change the answer, as if 1% were just bad luck in the draw.
Still ≈ 1%, now with tighter error bars
Why: More iterations reduce the noise in the estimate; they cannot move the truth the assumptions imply.
Separate the estimate's precision from the underlying probability.
Use enough iterations (10k) to make the estimate stable, then trust it
Why: The 1% is what Tom's assumptions actually imply — the model is telling the truth.
To raise the probability, change an INPUT — contribution, horizon, or risk
Why: Only the levers in the model move the outcome. That insight drives every Part-4 recommendation.
Ranking
Put in order
These are the steps of The simulation recipe, scrambled. Put them back in order before the next slide shows you.
Why: This is the order the recipe itself gives. Recalling the sequence without the slide in front of you is the difference between recognising the method and being able to run it — most of what goes wrong in practice is a step done out of turn.
Pattern
Every Monte Carlo model in this course follows the same five moves:
Edge cases
Discussion prompt
The simulation recipe works on the cases you have just seen. Push it to the edge: what is the most degenerate input it still handles — empty, zero, one item, everything equal — and what is the first case where it stops being true? Name the case, not just "it breaks".
Hint: Try the smallest legal input, then the largest, then the one where two things collide. Methods are specified at their edges; the middle takes care of itself.
Answer:
Every Monte Carlo model in this course follows the same five moves:
Section
Risk metrics & figures
Concept

This is the payoff of the whole build: not one number, but the shape of Tom's possible futures. Most outcomes cluster between $500k and $900k.
Three reference lines tell the story: the median ≈ $690k, the deterministic $773k (already higher than the median), and the $1M goal way out in the thin right tail. Only about 1% of simulated Toms get there.
Prediction
Predict first
The deterministic worksheet says $772,722, and the simulation uses the SAME 10% average portfolio growth. Why does the simulation give Tom only about a 1% chance of reaching $1M, with a median (~$690k) BELOW the deterministic figure?
Answer it in your own words, now, with nothing to choose from. The options are on the next slide — and picking the right one off a list is an easier skill than producing it.
Correct: Random raises average 2.5% (Uniform 0–5%), not 5%, so contributions are smaller; multiplicative random returns drag the median below the average-rate path; and the $773k path was already under $1M anyway.
Why: Two forces lower the center — the average raise is 2.5% not 5% (smaller contributions), and volatility drag pulls the median of multiplicative growth below the mean-rate path. And the deterministic $773k was always short of $1M, so reaching the goal is a tail event, not the norm.
Check
This is the question the whole case is built to answer. Reason it through before tapping.
Check your understanding
The deterministic worksheet says $772,722, and the simulation uses the SAME 10% average portfolio growth. Why does the simulation give Tom only about a 1% chance of reaching $1M, with a median (~$690k) BELOW the deterministic figure?
Answer: A
Why: Two forces lower the center — the average raise is 2.5% not 5% (smaller contributions), and volatility drag pulls the median of multiplicative growth below the mean-rate path. And the deterministic $773k was always short of $1M, so reaching the goal is a tail event, not the norm.
Concept

An empirical CDF answers "what fraction of outcomes fall below any value?" Find $1M on the x-axis, read straight up to the curve: about 99% of simulated futures are below it.
The CDF is often easier for a boss than a histogram: every "P(at least X)" question is one glance. P(reach $1M) ≈ 1%; P(at least $500k) ≈ 97%.
Explain it
Discussion prompt
Explain The same story as a cumulative curve to a student a year behind you. No notation, no jargon they have not met — and it still has to be true.
Hint: If your explanation needs a symbol they have never seen, you are describing the notation rather than the idea.
Answer:
The CDF is often easier for a boss than a histogram: every "P(at least X)" question is one glance. P(reach $1M) ≈ 1%; P(at least $500k) ≈ 97%.
Concept

The fan chart plots percentile bands year by year. Early on, all paths agree; the band is a thread. By year 20 it's a wide cone — each random year compounds onto the last.
Two things to notice: the median path runs just under the deterministic line all the way, and the $1M goal sits above even the 95th percentile at year 20. Tom doesn't have a small shortfall — the goal is outside almost the entire fan.
Analogy
Discussion prompt
Explain Uncertainty grows with the horizon by analogy to something with no Business Analytics in it at all — a queue, a recipe, a map, a bank balance, whatever fits. Then say where your analogy breaks.
Hint: An analogy that never breaks is not an analogy, it is the same idea wearing a hat. Find the seam — that is the part that is actually new.
Answer:
The fan chart plots percentile bands year by year. Early on, all paths agree; the band is a thread. By year 20 it's a wide cone — each random year compounds onto the last.
Concept
A histogram is persuasive, but Kate wants scalars she can compare across employees. Four standard risk read-outs, computed straight from the 10,000 ending balances:
| Metric | What it answers | Tom, 20-yr |
|---|---|---|
| P(success) | Share of paths ≥ $1M | ≈ 1% |
| Expected shortfall | Average gap below $1M when short | ≈ $305,000 |
| VaR (5%) | The 5th-percentile wealth — a bad-case floor | ≈ $526,000 |
| CVaR (5%) | Average wealth across the worst 5% of paths | ≈ $492,000 |
VaR marks the edge of the bad tail; CVaR looks past the edge and averages how bad the worst cases actually are. CVaR ≤ VaR for a wealth distribution — it's the more conservative, more informative number.
Trade off
Comparison matrix
From Four numbers a manager actually wants: every row here is a choice with a cost. Fill the What it answers column, then say which row you would actually pick and what you give up for it.
| Metric | What it answers | Tom, 20-yr |
|---|---|---|
| P(success) | Share of paths ≥ $1M | ≈ 1% |
| Expected shortfall | Average gap below $1M when short | ≈ $305,000 |
| VaR (5%) | The 5th-percentile wealth — a bad-case floor | ≈ $526,000 |
| CVaR (5%) | Average wealth across the worst 5% of paths | ≈ $492,000 |
Anomaly
Predict first
A student writes this, and it looks reasonable:
Read CVaR as a probability, or as a guaranteed floor.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: That conflates CVaR with VaR. The 5% cutoff is the VaR ($526k); CVaR is a dollar average of the tail, not a probability.
Keep the two roles distinct: VaR is a cutoff, CVaR is a tail average.
Why: That conflates CVaR with VaR. The 5% cutoff is the VaR ($526k); CVaR is a dollar average of the tail, not a probability.
Trap
Read CVaR as a probability, or as a guaranteed floor.
"CVaR 5% = $492k means a 5% chance of ending below $492k"
Why: That conflates CVaR with VaR. The 5% cutoff is the VaR ($526k); CVaR is a dollar average of the tail, not a probability.
"…so Tom is guaranteed at least $492k"
Why: CVaR is the average of the worst 5% — individual disaster paths finish well below it. It guarantees nothing.
Keep the two roles distinct: VaR is a cutoff, CVaR is a tail average.
VaR 5% = $526k: 5% of paths end at or below this
Why: VaR answers the probability/threshold question — the edge of the bad 5%.
CVaR 5% = $492k: the mean of those worst 5% of paths
Why: CVaR answers "if it goes bad, how bad on average?" — lower than VaR, and below it lie even worse cases.
Two truths and a lie
Sort into buckets
Some of these hold up and some are the exact mistakes this lesson is built to prevent. Sort them.
Prediction
Predict first
Which statement correctly describes the 5% CVaR of $492,000?
Answer it in your own words, now, with nothing to choose from. The options are on the next slide — and picking the right one off a list is an easier skill than producing it.
Correct: It is the average ending wealth across the worst 5% of simulated paths — a measure of how bad the tail is on average, beyond just its edge.
Why: CVaR (expected shortfall) averages the outcomes in the worst 5% tail. VaR only marks the tail's edge ($526k at the 5th percentile); CVaR summarizes the severity of everything beyond that edge, which is why it's $492k < $526k.
Check
20-year sim: VaR(5%) ≈ $526k, CVaR(5%) ≈ $492k. What does CVaR tell Tom that VaR does not?
Check your understanding
Which statement correctly describes the 5% CVaR of $492,000?
Answer: A
Why: CVaR (expected shortfall) averages the outcomes in the worst 5% tail. VaR only marks the tail's edge ($526k at the 5th percentile); CVaR summarizes the severity of everything beyond that edge, which is why it's $492k < $526k.
Section
Tasks 3–5
Concept
At 6% for 20 years, $1M is a ~1% event. The model also shows the levers — so the advice is concrete, not "save more, good luck":
Counterexample
Discussion prompt
At 6% for 20 years, $1M is a ~1% event. The model also shows the levers — so the advice is concrete, not "save more, good luck":
That is stated as though it always holds. Do one of two things: produce a case where it fails, or say precisely what rules such a case out. "It just does" is not on the menu.
Hint: Hunt at the extremes first — zero, one, negative, empty, equal. If every extreme survives, the reason they survive is the proof.
Ranking
Put in order
Put the moves of Task 4 — what 25 years buys into the order they have to happen.
Why: These are the moves of the worked example in the order it makes them, and each one is set up by the one before it. Compounding is exponential: the last five years act on the largest balance, so they add the most dollars of the whole plan.
Worked example

Your turn first: before reading the numbers, predict — does five more years (25% more time at 6%) raise the success rate by roughly 25%, or by a lot more?
Deterministic 25-yr balance jumps to ≈ $1,339,000
Why: Compounding is exponential: the last five years act on the largest balance, so they add the most dollars of the whole plan.
Simulated P(success) climbs from ≈ 1% to ≈ 79%
Why: The center crosses $1M and late years let bad early draws recover — far more than a linear 25% bump.
Required contribution rate falls from 9.13% to ≈ 3.45%
Why: With 25 years, even a modest 3.45% deterministically hits $1M — time substitutes for contribution.
Reverse engineer
Discussion prompt
Work backwards. The example finished here:
Required contribution rate falls from 9.13% to ≈ 3.45%
What was it asked to do, and what must it have been given? Reconstruct the problem from its answer.
Hint: Every quantity in the result had to enter somewhere. Account for each one.
Answer:
Your turn first: before reading the numbers, predict — does five more years (25% more time at 6%) raise the success rate by roughly 25%, or by a lot more?
Elimination
Eliminate the wrong options
Working 25 years instead of 20 (still 6%) raises simulated P($1M) from ~1% to ~79% and the deterministic value to ~$1.34M. What best explains why five extra years is so disproportionately powerful?
3 of these 4 are wrong. Strike them one at a time, and say what rules each one out before you strike the next. The survivor is the answer.
Survives elimination: A
Why: Compounding is exponential: the last years operate on the biggest balance and contribute the most dollars, and more years give the portfolio time to recover from poor early returns. So the whole distribution slides past $1M — far beyond a linear 25% gain.
Check
Same 6% contribution, 20 → 25 years sends P(success) from ~1% to ~79%. Why is that so much more than "25% more time"?
Check your understanding
Working 25 years instead of 20 (still 6%) raises simulated P($1M) from ~1% to ~79% and the deterministic value to ~$1.34M. What best explains why five extra years is so disproportionately powerful?
Answer: A
Why: Compounding is exponential: the last years operate on the biggest balance and contribute the most dollars, and more years give the portfolio time to recover from poor early returns. So the whole distribution slides past $1M — far beyond a linear 25% gain.
Concept
Nothing in the engine is specific to Tom. Swap the inputs and the same code plans for anyone — that's the deliverable HR actually wanted.
| Per-employee input | Tom's value | Becomes a function argument |
|---|---|---|
| Age / horizon | 40 / 20 yrs | years |
| Salary | $85,000 | S0 |
| Current portfolio | $50,000 | P0 |
| Contribution rate | 6% | inv |
| Risk profile (return mean/sd) | 10% / 5% | g_port mean, sd |
| Goal | $1,000,000 | goal |
Because project_path and simulate_mc already take these as arguments, the template is done — feed a new row of HR data and re-run. A conservative employee just gets a lower return mean and smaller sd; the recommendations follow automatically.
Comparison
Comparison matrix
From Task 5 — one model, every employee: refill the Tom's value column from what you know. The rest of the table is as it appeared.
| Per-employee input | Tom's value | Becomes a function argument |
|---|---|---|
| Age / horizon | 40 / 20 yrs | years |
| Salary | $85,000 | S0 |
| Current portfolio | $50,000 | P0 |
| Contribution rate | 6% | inv |
| Risk profile (return mean/sd) | 10% / 5% | g_port mean, sd |
| Goal | $1,000,000 | goal |
Connect it up
Draw it
One page, no notation unless you need it: draw how these connect — Part 1 — The Deterministic Engine · Goal Seek as Root-Finding · Part 2 — Why One Number Lies · Part 3 — The Monte Carlo Engine · Part 4 — Reading the Output · Part 5 — Decisions & Generalization. Put an arrow wherever one of them is what makes another possible, and label the arrow with why.
Recap
| Idea | The one-line takeaway |
|---|---|
| Deterministic vs. simulation | A point estimate hides the distribution you'll actually live |
| ½-year earnings | Even contributions earn half a year — calibrates the model |
| Goal Seek = uniroot | Search for the rate; no closed form needed |
| Uniform 0–5% | Mean raise is 2.5%, not 5% — quietly lowers the center |
| Volatility drag | Median of random multiplicative growth < mean-rate path |
| VaR vs CVaR | Edge of the tail vs. average severity beyond the edge |
| Horizon | Five more years is the strongest lever — exponential, not linear |
Bring this to a session and we'll run your own R script live — wire in your numbers, add the escalation glide-path, and turn the figures into a clean managerial report.
Want this taught 1-on-1? Alexander tutors Business Analytics — $55/session, free consultation.