Chapter 4 — Advanced risk and ethics
Lesson map
Lesson 04 published. Map, example, EX016.
flowchart TD
N0["Learning outcomes"]
N1["4.1 Distributions over point estimates"]
N2["4.2 Reading the tail"]
N3["4.3 Who bears the risk"]
N4["4.4 Transparency versus exposure"]
N5["Synthesis"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Worked example"]
EX --> Q["Exercise EX016"]
Logical drawing
flowchart LR
N0["Learning outcomes"]
N1["4.1 Distributions over point estimates"]
N2["4.2 Reading the tail"]
N3["4.3 Who bears the risk"]
N4["4.4 Transparency versus exposure"]
N5["Synthesis"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX016"]
[Learning outcomes]
|
v
[4.1 Distributions over point estimates]
|
v
[4.2 Reading the tail]
|
v
[4.3 Who bears the risk]
|
v
[4.4 Transparency versus exposure]
|
v
[Synthesis]
|
v
[Worked example] --> [Exercise EX016]
Learning outcomes
You will (1) model loss distributions rather than single numbers; (2) read mean, 95th and 99th percentile losses from a seeded simulation; (3) decide who bears residual risk and whether they consented; and (4) handle ethical tension between transparency and security in a public utility.
4.1 Distributions over point estimates
Annual OT outage loss is mostly zero and occasionally large. A Monte Carlo simulation draws whether an incident happens and how long it lasts, many thousands of times, producing a distribution whose tail is what boards and insurers care about.
"""Lab 04: Monte Carlo of annual outage loss for BWRP with and without a control (seeded, synthetic)."""
import random, statistics
def year(rnd, p_incident, hours_lo, hours_hi, cost_per_hour=12_000):
if rnd.random() >= p_incident: return 0.0
return rnd.uniform(hours_lo, hours_hi) * cost_per_hour
for label, p, lo, hi in [("baseline", 0.15, 4, 72), ("with segmentation", 0.06, 4, 48)]:
rnd = random.Random(2026)
losses = sorted(year(rnd, p, lo, hi) for _ in range(20_000))
print(f"{label:18} mean={statistics.mean(losses):>8,.0f} p95={losses[int(0.95*len(losses))]:>9,.0f} p99={losses[int(0.99*len(losses))]:>9,.0f} P(loss>0)={sum(l>0 for l in losses)/len(losses):.3f}")
Run with python3 lab_mc.py. Verified output:
baseline mean= 68,613 p95= 592,662 p99= 814,425 P(loss>0)=0.151
with segmentation mean= 18,590 p95= 129,339 p99= 493,624 P(loss>0)=0.059
The simulation needs only a few inputs: how likely an incident is in a year, how long it lasts, and what each hour costs. Each should come with its source and a plausible range. Lab 4 uses a fixed seed so that the board can see the same numbers when the run is repeated, and so that a change in result can be traced to a change in assumptions.
4.2 Reading the tail
Segmentation cuts the mean loss from about 68,600 to 18,600 and the probability of any loss from 15.1 % to 5.9 %. The 99th percentile drops less sharply (814,000 to 494,000) because when an incident does happen it can still last two days. If the board's tolerance is "no more than a 1 % chance of losing over 600,000 a year", only the segmented design meets it under these assumptions.
These figures depend on assumptions that deserve their own line on the slide: the incident probabilities, the duration ranges and a single cost per hour. Changing the segmented design's maximum duration from 48 to 72 hours would raise its tail. The board should see which assumption drives the tolerance result before treating the 600,000 threshold as met.
4.3 Who bears the risk
Residual risk at a reclamation plant is not borne only by the utility. Residents near outfalls and the bay ecosystem bear discharge-quality risk; ratepayers bear cost risk. Ethically, a leader should identify these parties, ask whether the regulator or elected body has accepted the risk on their behalf, and avoid accepting on others' behalf what the organisation has no mandate to accept.
At BWRP the board minutes made this explicit by noting that discharge-quality risk to residents falls under the regulator's permit conditions. Daniel's role is to make the affected parties visible in the risk record and to state who has accepted risk on their behalf. Where nobody has that mandate, the risk is escalated rather than quietly accepted.
4.4 Transparency versus exposure
Publishing a detailed security assessment builds public trust but may give attackers a map. A defensible practice is layered disclosure: publish the governance, the risk-acceptance decisions and progress metrics; share technical detail with regulators and sector information-sharing bodies under confidentiality; disclose incidents according to legal duty and promptly to affected people.
For BWRP that could mean publishing the decision to adopt brokered vendor sessions and segmentation progress figures, while sharing the lift-station network design only with the regulator and the sector sharing group. The choice of what goes where should be recorded and reviewed, so that later requests from journalists or residents meet a consistent answer.
Worked example (synthetic BWRP)
Daniel presents the simulation with its assumptions on one slide: 15 % baseline annual incident probability (from sector peers, range 8–25 %), duration uniform 4–72 hours, cost 12,000 per hour, seed 2026. The board accepts segmentation and minutes that discharge-quality risk to residents is covered by the regulator's permit conditions, not by the board's risk appetite alone.
Synthetic case — Bayside Water Reclamation Plant. Every parameter in the simulation is invented.
Errors and limits
Uniform durations are a simplification; heavy-tailed distributions would raise the 99th percentile. A seeded simulation is reproducible, not correct.
Exercises
- EX016 — Interpreting the p99 change. Explain why p99 falls proportionally less than the mean with segmentation. Rubric: 3 = segmentation mainly lowers incident probability; conditional duration tail still long; 2 = partial; 1 = vague; 0 = none.
- EX017 — Checking a tolerance. Does the baseline meet "P(loss > 600,000) ≤ 1 %"? Use the output. Rubric: 3 = no, p99 = 814,425 > 600,000 so more than 1 % exceed; 2 = conclusion only; 1 = yes; 0 = none.
- EX018 — Naming affected parties. List three parties who bear BWRP's residual OT risk besides the utility. Rubric: 3 = three relevant parties; 2 = two; 1 = one; 0 = none.
- EX019 — A layered disclosure plan. Assign each item to public, regulator-only or internal: (a) risk appetite statement, (b) firewall rule base, (c) annual count of OT incidents. Rubric: 3 = public, internal (or regulator), public; 2 = two; 1 = one; 0 = none.
- EX020 — Sensitivity to the duration model. Predict how replacing the uniform 4–72 h duration with a heavier-tailed distribution changes mean and p99. Rubric: 3 = p99 rises more than mean; tail driven; 2 = direction only; 1 = no change; 0 = none.
Synthesis
Advanced risk work reports distributions and tails, names who bears the residual risk, and balances transparency with exposure deliberately.
Continue studying — chapter 04 of 12
← Chapter 03 (draft) · Course chapter index · Chapter 05 (draft) →