One Dot, or the Whole Cloud

This post uses public documents and public data only: a mid-Columbia public utility district’s board packets, Bonneville Power Administration rate-case studies, Northwest Power and Conservation Council planning documents, USGS river gauges and EIA price history. The utility is referred to as “the PUD”; it has not reviewed this post. Every chart below carries a tag — PUBLISHED, PUBLIC FEED, MIXED or SIMULATED — and every assumption is listed in the register near the end. What is said here about how the forecast and the forward book are built today is SignalPop’s best understanding, discerned from public documents through a quantitative and probabilistic modelling lens; where a rule is inferred rather than stated, the post says so. The interactive version of every chart can be found at One Dot or the Whole Cloud Demo.

A Monte Carlo simulation [1] is the practice of answering a question about an uncertain system by drawing many plausible versions of its inputs, running the same calculation on each, and reading the answer off the distribution of results. In finance it is the standard way to value anything whose payoff depends on a path — swing options, storage, an American put [2]. In the hydro business it is also, quietly, how the region’s largest power marketer prices its rates: Bonneville runs every historical water year through its hydro simulator as equally likely — a distribution upstream — and then passes only the mean of the resulting secondary sales into the rate model [3] [4]. What the region’s public utilities do with that idea in their own budgets is simpler, and it is the subject of this post: they take the average water year, multiply by the current forward price curve, and write down one number.

This post does three things with that number. It keeps it exactly where it is. It draws the ten thousand plausible years around it. And it shows what a utility can decide once it can see them — how much energy to lock into multi-year contracts, how much of this year’s runoff to sell forward month by month, and how much to hold back — using two tools that add to the baseline rather than replace it: a correlated simulation, and a Temporal Fusion Transformer [5] that narrows the band as the year unfolds.

How a Hydro Utility Forecasts Wholesale Revenue Today

Public power utilities that own hydro typically produce a multi-year financial forecast, and the one used here is unusually well presented. Its quarterly financial review lists the wholesale revenue lines to the decimal, and its budget kickoff presentations state the method in one line, two years running: “Average water, current forward energy and carbon price curves” [6] [7]. This is not a local habit. Tacoma Power’s long-range financial plan defines its “average” case as “inflows similar to the average of all previously recorded historical water flow years” [8]. Seattle City Light’s financial forecasts “are based on average water years in the future” [9]; Idaho Power states its annual generation “under median water conditions” [10]; and a rating agency’s 2013 base case for the PUD was built “assuming average water flows”, noting in the same paragraph that regional hydrology had ranged from about 60% to 130% of average since 2000 [11].

The method has a pedigree. The 90-year regional streamflow record — water years 1929 to 2018, adjusted to today’s irrigation depletions — is maintained jointly by BPA, the Corps and Reclamation [12], the Council’s GENESYS model samples the same kind of record (its 2016 documentation draws on the 80 years from 1929 to 2008) [13], and “average energy” is defined by the Council as “the amount of energy that can be expected from the hydropower system in a typical year” [14]. What follows is not a claim that any of this is wrong. It is a claim that it produces one number, and that the number is the median our model has to reproduce before it is allowed to say anything else. The current forecast method is the control.

Here is what it produces for the PUD, in millions of dollars, copied from the five-year outlook in the Q2 2026 quarterly financial review [15]:

$M 2026 2027 2028 2029 2030
Service (retail) 95.8 101.3 102.4 98.0 94.9
Long-term hydro contracts 218.4 213.4 202.8 194.4 189.4
Net market-based 109.9 137.8 177.5 174.9 185.0
Other 41.5 28.9 26.3 28.0 30.9
Total 465.6 481.4 509.0 495.3 500.2
Market share of wholesale 33% 39% 47% 47% 49%

 

The published five-year forecast, untouched (PUBLISHED). The market-based line grows by two-thirds in four years while the contract line shrinks; by 2030 nearly half of wholesale revenue rides on the market. Two things stand out. The exposure to the market is growing, and the same review attributes the 2026 shortfall against budget to the forward price curve coming in lower than forecast. So the exposure is growing, and the method that measures it produces one number per year.

Building the Cloud

Everything that follows comes from five numbers. From the water record we measure an average (call it 1.00, a normal year) and a spread — how far a typical year lands from it. From the price record we measure the same two. The fifth number is how water and price move together across the same years: the correlation. In the Northwest it is negative — low water means the whole region is short and prices run high; high water means everyone is spilling and prices collapse. BPA’s own price study calls Northwest hydro generation “a primary driver of Mid-C electricity prices” [16], and the Council’s price forecast names hydro runoff as “a major component of price variability in the Pacific Northwest” [17]. Once the five numbers are fitted, the historical years are set aside and never drawn from again. Everything comes from the five numbers, which is worth knowing: it says exactly how much of the output is assumption.

How one dot is drawn

You do not pick a point inside an ellipse; the ellipse is what emerges after ten thousand draws. Each dot is built like this. Draw two independent standard-normal numbers, A and B. Water uses A directly. Price uses a mix: −0.45·A + 0.89·B, where −0.45 is the correlation and 0.89 is the square root of (1 − 0.45²), the leftover that keeps price’s total spread honest [18]. Then scale by each spread and exponentiate, so that water is 1.00 × exp(0.22·A) and price is $39 × exp(0.35·mixed).

How one dot is drawn (SIMULATED). a. Two independent draws, a round blob with no relationship. b. Mix a controlled amount of the water draw into the price draw — the blob tilts. c. Scale by each spread and exponentiate. The correlation is baked into the draw, not applied afterwards.

The exponentiation matters. A bell curve is symmetric and goes negative; water cannot. Working in logs makes the distribution squashed at the low end and stretched at the high end in real space, which is physically right: a drought is severe but bounded, a flood year has no natural ceiling.

Two limits of the recipe are worth stating before the code. A lognormal is strictly positive. That is right for an annual average, which has never been negative at Mid-C, but hourly and daily prices do go negative in spring runoff, so the forward-book and day-ahead valuation in the pilot uses a price process that allows negative prices and spikes. And the published dot is placed at the median of each draw. A log normal’s arithmetic mean sits σ²/2 above its median — about 2.4% for water at σ = 0.22 and 6.3% for price at σ = 0.35 — so if the utility’s published figures are means rather than medians, the whole cloud shifts down by that much. The pilot fits the shape from the record and settles which it is; the acceptance test is the same either way.

In code, the whole draw is short:

import numpy as np

n, sig_w, sig_p, rho = 10_000, 0.22, 0.35, -0.45
P0 = 109.9 / 2.8                     # $/MWh implied by the published 2026 market line
A, B = np.random.standard_normal((2, n))
water = np.exp(sig_w * A)                                # fraction of normal, median 1.00
price = P0 * np.exp(sig_p * (rho * A + np.sqrt(1 - rho**2) * B))

The price center, $39.25/MWh, is not an opinion. It is the price the published 2026 market line implies once the volume is reconstructed: $109.9M divided by 2.8 million MWh. EIA’s Mid-Columbia history averages closer to $43 over 2010–2025 [19]; the forward curve the PUD used is lower, and we take the PUD’s number, because the current forecast method is the control.

The cloud
Ten thousand simulated water–price years (SIMULATED), amber where the year is worth more than the median on the market line and teal where it is worth less; brighter means further from the median. Upper-left is dry and expensive; lower-right is wet and cheap. The current forecast method — average water times the forward curve — is the single ring. The tilt is the correlation, and it is the single most important thing a one-dot forecast throws away.

Read the tilt as physics rather than statistics. Low water means less hydro on the regional market, supply is short, price runs high. High water means everyone is spilling, the region is swimming in cheap power. A flat cloud would claim that water tells you nothing about price — a strange claim for a river that is a large share of regional supply. The consequence for the utility is that keeping energy uncommitted is a hedge, not a gamble: in the years when there is less to sell, each unit sells for more. A fixed-price contract signed at the forward curve gives that hedge away, and a single forward curve cannot represent it, because a single curve has one price regardless of what the water did.

One dot becomes one revenue number

Each dot is turned into a revenue number with the utility’s own spreadsheet arithmetic, unchanged. The dot’s water value is a bare ratio, say 0.91. Multiply by average annual generation — 9.0 million MWh, the PUD’s own published figure — and this simulated year produced 8.19 million MWh. Retail load (about 2.6 million MWh) is served first at fixed rates; it is demand, not a destination for surplus. The cost-based contracts are served next, and they are slices: the buyer takes a percentage of actual output, so contract volume scales with the river (3.6 million MWh in a normal year). Whatever is left — roughly 2.3 million MWh in this dot — is the merchant slice, the only part valued at the dot’s price. Add back the revenue that is the same in every dot — retail rates, the contract price of $60.7/MWh implied by $218.4M over 3.6 million MWh, and “other” — and that is one revenue outcome.

One dot becomes one revenue number — the utility’s own arithmetic, run ten thousand times. All the width in the distribution comes from the merchant slice; everything else is ballast.
GEN, RETAIL, LT = 9.0, 2.6, 3.6           # million MWh; 3.6 and 2.8 are reconstructed volumes
merchant = np.maximum(GEN * water - RETAIL - LT * water, 0)
market_rev = merchant * price               # $M, the only line exposed to price
total_rev = 95.8 + 41.5 + 218.4 * water + market_rev

Two honesties are owed here. The two volumes (3.6 and 2.8 million MWh) are reconstructed so that the arithmetic reproduces the published $218.4M and $109.9M lines; they are the first thing to ask staff for. And the merchant slice is leveraged: retail does not shrink in a dry year, so a 10% water miss lands almost entirely on the uncommitted energy, which is why the size of the committed book is itself the decision worth the most money.

Sort the list. The sorted list is the product.
The stack ranking (MIXED): ten thousand annual revenues, sorted worst to best. Count five hundred in from the bottom for the dry-year floor; the middle is the median year; five hundred from the top is the good case. The published 2026 total sits at rank 4,831 of 10,000.

Ten thousand revenues, sorted. Count five hundred in from the bottom and that is the P5 dry-year floor, $344M. The middle is the median year, $469M — half the years are better, half worse. Five hundred from the top is the good case, $637M. And the published 2026 total of $465.6M lands at rank 4,831 — the 48th percentile. That is the single best first slide in any conversation about this method, because it says two things at once: the model reproduces the current forecast method almost exactly, and there is a range $293M wide around it that nobody has been able to see. If the published number had landed at the 60th percentile it would mean the planning number is mildly optimistic, beaten in four years out of ten. Either result is useful, and neither is “your number is wrong.”

How today’s haircut splits the same years

The sorted list also shows something the forward book does every month without drawing it. The desk does not sell the whole expected surplus forward; it applies a haircut, committing only the volume that would exist under a conservative water case, and lets the rest ride to the day-ahead and real-time market. The convention is documented across the region. Bonneville commits only “firm” generation, defined as the monthly tenth percentile of the record, and treats “generation from water in excess of critical water conditions” as secondary energy “valued at expected wholesale market prices … at the Mid-Columbia (Mid-C) trading hub” [27] [28]. Tacoma Power’s rate policy plans surplus sales on water “exceeded 75 percent of the time” [29]. Seattle City Light “maintains strict limits on the portion of its surplus position made available for forward sales to avoid potentially high replacement power costs in low-water years” [30]. And the PUD’s own 2011 resolution caps net forward sales within the year at “the annual surplus energy at the 50th percentile level as determined from the District’s probabilistic simulation model” [31] — which is worth pausing on: the desk already has a water distribution. What that cap does not carry is price drawn jointly with water, or a stated tolerance for being short. (Its medium-term hedges are also slices, which pass volume risk to the buyer [32]; the fixed block below is the forward-book analogue, not the slice book.)

The same ten thousand years sorted by water (MIXED). Below the dashed line is the block sold forward at a fixed price — the merchant volume at P25 water, the same megawatt-hours every year. Above it is what the river adds and the desk sells in real time. To the left of the P25 mark the block is short and is bought back at spot — at exactly the prices a dry year brings.

At a P25 haircut the block is about 2.1 million MWh, worth about $78M a year at the forward price; the remainder averages $36M of real-time sales, a third of merchant revenue, most of it earned in wet years when prices are low; and in the driest quarter of years the shortfall is bought back at an average cost of $7.7M a year. The haircut is a fixed percentile. It does not move with what is known about the year, and it is not tied to any stated tolerance for being short. Both of those are things a distribution can fix, and the second of them is where the forecasting model earns its place.

What a better-conditioned dot is worth

Suppose that at the time of commitment a forecaster had already resolved part of this year’s water uncertainty — from snowpack, soil moisture, the river forecast center’s outlook — and the block were sized from that distribution instead of the climatological one. To isolate what the forecaster adds, hold the shortfall frequency fixed: the forecaster sizes its block at the conditioned P25, so both rules are short in about one year in four and every dollar of difference is the forecaster’s. At zero skill the two rules are, by construction, the same rule.

Left: merchant revenue sorted worst to best under today’s haircut and under a forecaster-sized block at 50% skill (SIMULATED). Right: the gain in mean revenue and in the P5 floor as a function of forecaster skill, at the same one-in-four shortfall frequency.

With half of the year’s water uncertainty resolved at commitment, average merchant revenue rises by about $2.5M a year and the dry-year floor by about $8.7M, from $29M to $38M; at 90% skill the figures are $4.1M and $14M. The gain is not from being right about the year. It comes from committing more in the years the forecaster can already see are wet, where the alternative was dumping energy into a cheap spot market, and less in the years it can see are dry, where the alternative was buying it back in a dear one. Choosing the tolerance itself — one short year in twenty rather than one in four — is a second and separate gain, sized later in this post. Skill is the placeholder in this chart, and it is the one thing a simulation cannot supply: it comes from a model built on the real drivers and proven in a walk-forward backtest.

Reading the Sorted List

Every question after this is answered by changing something, re-running, and watching the two numbers that matter — the floor and the median — move. Because the whole model rests on five numbers, the most important thing to do with it is stress the fifth one. Here is the same sorted list under four correlations, everything else unchanged:

Correlation ρ Total P5 Total P50 Total P95 Market line P10–P90
0.00 (no lean) $332M $469M $692M $50M – $218M
−0.20 $337M $469M $668M $54M – $202M
−0.45 (base) $344M $469M $637M $60M – $180M
−0.70 $354M $468M $606M $68M – $158M

The median does not move; the correlation is not a knob for the headline. What it does is narrow the band from both ends — the river hedges itself a little, and the stronger the lean the more it hedges. That reframes the correlation slider on the interactive page from “look what I can make the answer do” to “here is how much the answer depends on the thing I have already stress-tested.” A trillion draws would map the ellipse beautifully but could never produce something the recipe does not contain: if the real world has fatter tails than lognormal — droughts deeper than the record, a 2021-style price spike — the model will not invent them — and the peer-reviewed literature makes the same point about the region’s own expected-value hydro planning [26]. Hence the companion exhibit nobody can argue with: replay all ninety historical years against today’s book. No simulation, no shape assumption, just what actually happened.

Where the Temporal Fusion Transformer Adds to the Baseline

Everything so far works with any reasonable distribution, and none of it uses machine learning. The cloud is drawn from ninety years of climatology, so it says the same thing every October regardless of what the mountain looks like. That is where a forecasting model earns its place, and it is worth being precise about what it adds and what it does not.

Additive, not a replacement. The baseline — the current forecast method, average water times the forward curve — stays exactly where it is. Each layer is added on top and scored against it; nothing is subtracted.

The baseline is the current forecast method, and it is the control. The cloud adds width: the same number as the median, plus the range and the water–price lean, which is what gives the board a dry-year floor to own. The forecaster adds this year: it moves the center and narrows the water band with what the mountain shows now. The decision layer adds a split, a monthly haircut and a reserve chosen against that floor. The value of the forecaster is measured the only honest way — the same forecast made from 1 January of each past year using only what was knowable then, scored against what happened, side by side with the ninety-year average as the naive baseline [20]. The gain is the difference. If the backtest shows none, the baseline stands and the cloud alone still carries the decision. Nobody is asked to concede that their point forecast is inaccurate, because that is not the claim: the claim is that it is conditioned on long-run averages, and a walk-forward test shows whether conditioning on current information helped historically.

A Temporal Fusion Transformer [5] suits this problem unusually well. It is built for multi-horizon forecasting with a mix of known-future inputs (calendar, scheduled outages, contract step-dates), observed inputs (snowpack, gas price, recent inflow) and static ones (plant, unit); it emits quantiles at every horizon rather than a point; and its variable-selection weights give an interpretable account of which inputs the forecast leaned on — an interpretability aid, not a causal explanation. It is trained on the real record only — snowpack, weather, flows, gas and power prices, and what happened next — and never on the simulated dots, which would be circular. Its output feeds into the simulation as conditioning: instead of drawing from ninety-year climatology, draw from “given what the mountain looks like today.”

It is worth being plain about why this is the part that matters, and the part that is hard. The cloud is honest, but anyone with a statistics package can draw it, and the PUD’s own resolution shows a probabilistic surplus model already exists on the desk [31]. What no one on the river has is the conditioned dot: a forecast of this year’s water and price, at every horizon from a week to eighteen months, that carries its own calibrated width and can report which inputs it leaned on. That is a different kind of object. It has to learn from many related series at once — snowpack at a dozen SNOTEL sites, soil moisture, temperature outlooks, gas, the river forecast center’s own numbers — while respecting inputs that are known in advance; it has to emit quantiles so it can be scored; it has to be tested walk-forward with no leakage from revised datasets; and it has to attribute its forecast to inputs a commissioner can repeat. The Temporal Fusion Transformer was designed for exactly that combination [5], and SignalPop implemented it natively in its own deep-learning framework, MyCaffe, in 2023 [33] and runs transformer-based probabilistic forecasters in production on live financial data, where a mis-stated width costs money the same afternoon. The skill chart above puts a dollar figure on whatever skill the backtest proves; building the thing that earns the skill is the work.

Two widths stacked (SIMULATED). Conditioning narrows the water band through spring as the runoff becomes knowable; the price band (dashed) never closes, because price uncertainty does not resolve with snowpack. In a normal year the conditioned center and the climatological average nearly coincide; in a heavy-snowpack year, shown here, they diverge by spring.

Two things to notice. The band in October is about 90 points wide (P10 to P90, as a multiple of a normal revenue year); by July it is still nearly 80, because water uncertainty is only part of it and price uncertainty is the part that stays. And the center moves: in an unusual year, by spring, the conditioned forecast and the climatological dot are materially different, and that is where the near-horizon money is. Over a twenty-year contract this year’s snowpack barely matters — the cloud sells the long-horizon decision; the forecaster sells the near-horizon one.

Left: model attribution (variable-selection weights) for a spring inflow forecast (illustrative). Right: does an 80% band contain 80% of outcomes? A point forecast has no test like this to fail.

The two panels are what make a probabilistic forecast defensible in front of a board. The attribution weights say which inputs the forecast leaned on, in terms a commissioner can repeat — snowpack, the river forecast center’s outlook [21], recent inflow, gas. And the calibration curve is the test a point forecast cannot fail: if the model claims an 80% band, do 80% of outcomes land inside it, year by year, walking forward? Calibration and sharpness together are the proper score for a probabilistic forecast [20]; a forecast that is calibrated but no sharper than climatology has added nothing, and the backtest says so. The transformer is the right tool out to about eighteen months; beyond that it is extrapolating, and a calibrated stochastic process with a long hydrology bootstrap [22] takes over for contract-term horizons.

Deciding What to Sell Forward and What to Keep

Three decisions change once the forecast has width, and all three depend on the same two things: how wide the band is right now, and whether water and price still lean against each other.

Is the lean stable?
Water–price correlation on a moving 15-year window across the ninety-year record (SIMULATED). On these settings it ranges from −0.59 to +0.22 around a full-record value of −0.32, and 19 of 76 windows fall into the zone where the natural hedge fades.

The correlation is the number the decision leans on most, so it should be fitted on rolling windows and shown drifting, not asserted. Time-varying correlation has its own estimators [23]; the moving window is the version a room can read. If the lean is stable, it is a quantified natural hedge you can put a dollar figure on. If it drifts, the split is chosen so that it survives every regime in the window — robustness rather than prediction. Either answer helps, and the stress test is the strongest room answer.

How much of this year’s runoff to sell forward

The desk logic on the forward book, as documented across the region and inferred for the PUD [27][31], is to start with expected volume for the month, take a haircut so you are not selling water you might not have — against a conservative water case, by convention rather than calculation — compare the forward price to budget, and sell if it looks decent. That rule has a weakness that is easy to state: it is not tied to any tolerance. Nobody has said what probability of being short is acceptable, and the same haircut is applied in October, when nothing is known about the year, and in May, when most of it is.

How much of this year’s runoff to sell forward, month by month (SIMULATED). With a tolerance of one short year in twenty, the calibrated line sells against P5 in October — the rule of thumb’s P25 carries a 25% chance of being short when nothing is yet known — and against P47 by July. The year-one bound caps the recommendation at the rule, so the downside is only foregone revenue.

The product in one sentence: the board sets the tolerance once (“short in no more than one year in twenty”); each month the model works out what volume satisfies it given how far the forecaster has narrowed the band — less than the old haircut in a murky month, more in a clear one. The governance shape is the same as everywhere else in this post: staff own the tolerance, the model finds the number, and the rule stops being a fixed percentage inherited from whoever set it. And the year-one clause is what makes it safe to adopt: the model may recommend selling less than the current rule, never more, so the worst case is never worse than today’s practice.

How much to lock in

The PUD’s hedging policy has historically targeted a fixed share of sales under cost-based contracts. A share is a reasonable rule of thumb, and it was chosen without a curve to choose from. Take the energy that has actually come free to re-allocate — about 0.9 million MWh a year by 2029 as contracts roll off — and value every split between a multi-year fixed-price commitment and energy kept flexible for forward and day-ahead sale, on the same ten thousand years.

The frontier (SIMULATED): expected value against the P5 dry-year floor for every split of the freed energy. At a board floor of $24.5M, the highest expected value that clears it is $38.0M with 70% kept flexible. The floor itself peaks at 30–40% flexible.

Two features of the curve are worth a commissioner’s attention. Expected value rises with flexibility, as it should — the flexible side sells at the dot’s price with a modest shaping premium, the committed side at a discount to the forward. But the dry-year floor rises too, up to about 30–40% flexible, before price risk takes over. That shape is a property of the correlation, not an opinion: keeping some energy uncommitted raises the worst-year outcome because dry years sell dear. Set the correlation to zero on the interactive page and the bulge disappears. Set the floor the board is willing to own and the split falls out; on these placeholders, at a floor of $24.5M the answer is to keep more flexible than a fixed-share rule would — and to be able to say why.

The third decision — the reserve — uses the same machine with one extra check per dot. The Western Resource Adequacy Program becomes binding for every participant from the winter 2027–28 season, which begins 1 November 2027; summer 2027 is an optional early binding season [24]. Its obligation is a forward showing of qualifying capacity, in megawatts, for the season’s critical hours — not a subtraction of annual energy — and what counts toward it depends on qualifying resources, qualifying contracts and transmission rights, so a fixed-volume forward block can constrain what the utility is able to show. “Hold enough” is a rule of thumb; “hold enough that the probability of being short in any binding hour is below the tolerance” is a number, read off the distribution, and it is usually a smaller one. That question needs the monthly and hourly version of the model — twelve means, twelve spreads and a month-to-month correlation table so that a bone-dry April is never followed by a record May — which is the natural scope of a pilot rather than a public page.

Assumptions and Data

Four kinds of number appear in this post, and it should be possible to tell which is which at a glance.

Quantity Value used Kind Source / how it is replaced
Revenue lines 2026–2030 as tabulated Published PUD Q2 2026 quarterly financial review, five-year outlook [15]
Forecast method wording quoted Published PUD 2025 and 2026 budget kickoff decks [6] [7]
Average annual generation 9.0M MWh Published PUD fast facts; EIA-923 for the plant-level series (plant IDs 3883, 6200 and 6424)[19]
Retail load 2.6M MWh, held constant Reconstructed Clean-energy compliance-period forecast ÷ 4; pilot models it as a third correlated variable
Cost-based contract volume 3.6M MWh, scaling as a slice Reconstructed Chosen so $218.4M ÷ 3.6M = $60.7/MWh; first item on the data request
Market volume; implied price 2.8M MWh; $39.3/MWh Reconstructed 9.0 − 2.6 − 3.6; $109.9M ÷ 2.8M MWh; cross-check EIA Mid-C mean ≈ $43
Water spread σw 0.22 Placeholder Fit on USGS 12462600 water-year discharge [25] and EIA-923
Price spread σp 0.35 Placeholder Fit on EIA/ICE Mid-C annual averages; flat average, no on-peak weighting (a floor)
Correlation ρ −0.45 Placeholder Fit on the deseasonalised monthly record with a confidence interval; direction supported by [16] [17]
Distribution shape lognormal, Cholesky mix; published dot at the median Method [18]; fat tails and negative prices not generated; mean sits σ²/2 above the median (2.4% water, 6.3% price) — the pilot fits mean-corrected or empirical marginals and a price process with negative prices; the historical replay against today’s book is the companion exhibit
The ninety water years seeded synthetic Placeholder USGS 12462600 daily discharge (June 1961 on) aggregated to water years — 12453690 has no discharge record (stage and reservoir elevation only); the 2020 Level Modified Streamflow record [12]
Knowledge schedule (band narrowing Oct→Jul) 0% → 96% resolved Placeholder The forecaster’s own walk-forward quantiles; SNOTEL and NWRFC inputs [21]
Year types, attribution weights, calibration curve illustrative Placeholder Produced by the trained model and its backtest
Forward-book rule of thumb (haircut) sell forward the merchant volume at P25 water Assumption Regional convention documented at P10 (BPA firm), P25 (Tacoma) and the PUD’s P50 cap from its own probabilistic surplus model [27][31]; replaced by what the desk actually uses
Forecaster skill at commitment 0–90% of water variance resolved Placeholder Produced by the walk-forward backtest against the ninety-year average; the chart shows the value of whatever skill is proven
Freed energy 0.9M MWh/yr by 2029 Reconstructed Roll-off of contracts expiring end-2026 and end-2028; pilot uses actual terms
Fixed-price discount; shaping premium 5%; 6% Placeholder Measured against captured price vs flat average; applied only to flexibility actually controlled after fish, flow and coordination constraints
Fleet; resolution one machine; annual Simplification Unit-level history and outage log; monthly correlated draw for the reserve and forward-book questions

The rule for every number: it is either the PUD’s, public, or labelled as a placeholder that the pilot replaces. Nothing is presented as a result that has not been computed, and nothing is presented as a result at all — the distributions are placeholders and the levers are illustrative. What is real is the arithmetic, the published lines it reproduces, and the shape of the decision.

Summary

A hydro utility’s revenue forecast is built the way the whole region builds them: average water, current forward curve, one number per year, and there are good public documents saying so. Keeping that number as the median and drawing the ten thousand plausible years around it — with the water–price lean preserved, using the utility’s own arithmetic — reproduces the published forecast almost exactly and reveals a range nearly $300M wide that nobody had been able to see. Sorting the list gives the board a dry-year floor to own; stressing the correlation shows how much the floor depends on the river hedging itself. A Temporal Fusion Transformer [5] [33] adds to that baseline rather than replacing it: it moves the center and narrows the water band with this year’s conditions, emits quantiles that can be scored for calibration, and reports which inputs it leaned on through its variable-selection weights — and it earns its place only by beating the ninety-year average in a walk-forward backtest. With the width and the lean in hand, three rules of thumb become three numbers: the share to lock in, the monthly haircut on the forward book, and the reserve to hold. In every case the board keeps the tolerance, and the model finds the number.

The interactive version — the cloud, the stack ranking, the haircut split and the forecaster slider, the published forecast, the fan, the moving-window correlation and the frontier, with every slider labelled as a stress test — is at One Dot or the Whole Cloud Demo. To discuss how this could benefit your site, request a 90-minute walkthrough: Contact Us.

Happy simulating on the river!


[1] Monte Carlo Methods in Financial Engineering, by Paul Glasserman, 2003, Springer (Stochastic Modelling and Applied Probability 53)

[2] Valuing American Options by Simulation: A Simple Least-Squares Approach, by Francis A. Longstaff and Eduardo S. Schwartz, 2001, The Review of Financial Studies 14(1):113–147

[3] BP-22 Power Market Price Study and Documentation (BP-22-FS-BPA-04), by Bonneville Power Administration, July 2021 — “HYDSIM produces 80 year-long records of PNW monthly hydroelectric generation, based on actual water conditions in the region from 1929 through 2008”; each iteration samples one of the 80 water years “from a discrete uniform probability distribution.”

[4] BP-26 Power Rates Study (BP-26-FS-BPA-01), by Bonneville Power Administration, July 2025, §2.1.6.8 — “Mean prices and quantities of these secondary sales, as well as mean market prices, are passed to RAM2026 for the purposes of the secondary revenue credit.”

[5] Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting, by Bryan Lim, Sercan Ö. Arık, Nicolas Loeff and Tomas Pfister, 2021, International Journal of Forecasting 37(4):1748–1764; arXiv:1912.09363

[6] 2025 Budget Kickoff, the utility’s public board packet, October 2024, “Key 2025 Budget Assumptions — Wholesale Revenue”: “Average water, current forward energy and carbon price curves; hedge program fully implemented and continuing.”

[7] 2026 Budget Kickoff — Timeline and Key Assumptions, the utility’s public board packet, October 2025, under Net Market-Based Energy Revenue: “Average water, current forward energy and carbon price curves.”

[8] Long-Range Financial Plan 2024, by Tacoma Power, pp. 23–24 — “Average: Inflows similar to the average of all previously recorded historical water flow years”; Tacoma budgets on its “Adverse” case, “inflows similar to the lowest 25% of recorded historical years.”

[9] River Conditions Improve, Lift City Light’s Financial Forecasts, by Seattle City Light (Powerlines), 21 July 2014 — “Those forecasts are based on average water years in the future.” See also Strategic Plan Financial Forecast Assumptions 2022–2026, p. 12, net wholesale revenue “based on expected prices and normal hydro conditions.”

[10] Form 10-K for the fiscal year ended December 31, 2016, by IDACORP, Inc. / Idaho Power Company, 2017, Item 1 — “annual generation of approximately 8.5 million Megawatt-hours (MWh) under median water conditions.”

[11] Rating-agency credit report on the PUD, February 2013 (public on the utility’s site) — “Assuming average water flows, the all-in weighted average production costs are expected to be around $17/MWh by 2016”; regional hydrology “reaching a low of around 60% of average and a high of around 130% of average since 2000.”

[12] 2020 Level Modified Streamflow, 1928–2018 (DOE/BP-4985), by Bonneville Power Administration with the U.S. Army Corps of Engineers and the Bureau of Reclamation, October 2020 — 90 years of flows adjusted to 2018 irrigation depletions

[13] GENESYS Technical Documentation, by Northwest Power and Conservation Council, 11 October 2016, §3.2 — “An 80-year historical record of streamflows from 1929 to 2008 is sampled.”

[14] Draft Fourth Northwest Power Plan, Appendix A, by Northwest Power and Conservation Council, p. A-3 — “average energy” is “the amount of energy that can be expected from the hydropower system in a typical year.”

[15] Quarterly Financial Review, six months ended 30 June 2026, presented to the commission 3 August 2026, five-year outlook and “key modeling assumptions” appendix (“past water history and current forward price curve”). The utility’s published quarterly financial report for the same period is public; the review slides are in the 3 August board packet.

[16] BP-26 Power Market Price Study (BP-26-FS-BPA-04), by Bonneville Power Administration, July 2025 — “PNW hydro generation is a primary driver of Mid-C electricity prices”; 2,700 iterations each sampling one of 30 water years (1989–2018) uniformly

[17] 2021 Northwest Power Plan: Wholesale Electricity Price Forecast, by Northwest Power and Conservation Council, 2022 — hydro runoff conditions “continue to be a major component of price variability in the Pacific Northwest due to the regional reliance on hydropower generation.”

[18] Monte Carlo Methods in Financial Engineering, by Paul Glasserman, 2003, Springer, §2.3 — generating correlated normals by Cholesky factorization

[19] Wholesale Electricity and Natural Gas Market Data (ICE-sourced daily Mid-Columbia index from 2001), Form EIA-923 (plant-level generation; the three projects are plant IDs 3883, 6200 and 6424) and Short-Term Energy Outlook Table 7a (“Northwest index, Mid-Columbia”), by U.S. Energy Information Administration

[20] Probabilistic forecasts, calibration and sharpness, by Tilmann Gneiting, Fadoua Balabdaoui and Adrian E. Raftery, 2007, Journal of the Royal Statistical Society Series B 69(2):243–268. See also Strictly Proper Scoring Rules, Prediction, and Estimation, by Tilmann Gneiting and Adrian E. Raftery, 2007, JASA 102(477):359–378

[21] Water Supply Forecasts, by NOAA Northwest River Forecast Center; SNOTEL snow and water data, by USDA NRCS National Water and Climate Center

[22] Bootstrap Methods: Another Look at the Jackknife, by Bradley Efron, 1979, The Annals of Statistics 7(1):1–26

[23] Dynamic Conditional Correlation: A Simple Class of Multivariate GARCH Models, by Robert Engle, 2002, Journal of Business & Economic Statistics 20(3):339–350

[24] WRAP Business Practice Manual 109 — Transition Plan (revised 2024), by Western Power Pool — “the Binding Season beginning November 1, 2027, will be the default first Binding Season for all Participants”; a participant may elect Summer 2027 as an early binding season; “From Winter 2027-2028 all Participants will be Binding.” The obligation is a forward showing of qualifying capacity (QCC) for the season’s critical hours

[25] USGS National Water Information System, monitoring location 12462600 (Columbia River below Rock Island Dam, WA): daily mean discharge, June 1961 to present. Location 12453690 (Rocky Reach Dam tailwater, Unit 10, near Wenatchee, WA) has no discharge record at all — daily stage and reservoir elevation only — and is not used as a flow source

[26] Assessing the Bonneville Power Administration’s Financial Vulnerability to Hydrologic Variability, by Simona Denaro, Rosa Cuppari, Jordan Kern, Yufei Su and Gregory Characklis, 2022, Journal of Water Resources Planning and Management 148(10) — the peer-reviewed critique that expected-value, short-horizon hydro planning under-represents dry-year revenue risk

[27] BP-26 Power Loads and Resources Study (BP-26-FS-BPA-03), by Bonneville Power Administration, July 2025, §3.1.2.1.3 — “BPA bases its resource planning on firm generation conditions. Firm generation is defined as the monthly 10th percentile (P10) generation of the federal system”; and 2024 Annual Report, p. 22 — “Power produced in excess of BPA’s firm load obligations, if available, is considered by BPA to be surplus power and is sold in the Western Interconnection wholesale power markets.”

[28] BP-24 Power Rates Study (BP-24-FS-BPA-01), by Bonneville Power Administration, July 2023, §2.1.6.9 — “Generation from water in excess of critical water conditions is called secondary energy … The quantity of secondary sales are valued at expected wholesale market prices in the Northwest at the Mid-Columbia (Mid-C) trading hub.”

[29] Electric Rate and Financial Policy (Public Utility Board Resolution U-11414, effective 25 October 2023), by Tacoma Power, §IV.A.5 — “Water supply planning for surplus power available during the rate adjustment period will be based on water conditions that have historically been exceeded 75 percent of the time”; and Long-Range Financial Plan 2024, p. 23 — “Adverse: Inflows similar to the lowest 25% of recorded historical years.”

[30] Summary: Seattle, Washington; Retail Electric, by S&P Global Ratings, 2 August 2018 — “A portion of wholesale net revenues comes from forward sales of typically nine months or less, and SCL maintains strict limits on the portion of its surplus position made available for forward sales to avoid potentially high replacement power costs in low-water years.”

[31] The utility’s 2011 commission resolution authorizing the General Manager to enter into forward transactions within defined criteria (public board record) — within the current year “the net maximum amount to be sold should not exceed the amount of the annual surplus energy at the 50th percentile level as determined from the District’s probabilistic simulation model informed with the most current water supply and load forecasts”; for future years staff “will not sell more than the expected surplus on a net basis annually using the District’s probabilistic simulation model informed with average water and projected load.” A 2014 resolution amends it; the amendment is a scanned record that has not yet been read, so the percentile may have changed.

[32] Rating-agency research update on the PUD, April 2025 (public on the utility’s site) — the district hedges “by periodically selling slices of its system by auction or negotiation to various counterparties for up to 10 years (typically five years) on a rolling basis”; medium-term slice sales represent “15%-25% of the district’s power portfolio.” See also Selective hedging in hydro-based electricity companies, by E. Sanda, T. Olsen and S.-E. Fleten, 2013, Energy Economics 40:326–338.

[33] MyCaffe now supports Temporal Fusion Transformer Models!, by SignalPop, 9 June 2023 — the native TFT implementation in the MyCaffe AI Platform (v1.12.1.82), with the model of Lim et al. [5] (arXiv:1912.09363)

SignalPop LLC builds probabilistic forecasting and portfolio-valuation systems for organizations that make decisions under uncertainty: a quantitative investment firm, and now the river we live on. White Salmon, Washington.