Forecasting Weather Prediction Markets: Ensemble Models, Resolution Auditing, and Honest Calibration
What it actually takes to price a "highest temperature in [city] on [date]" market well: blending forecast sources correctly, figuring out what a market really settles against, and being precise about which of your Brier scores is real.
Prediction markets on daily temperature look simple: pick the bucket the high (or low) will land in. Underneath, three separate problems have to be solved before a probability is worth anything: turning several disagreeing forecast sources into one honest distribution, verifying what data source the market actually resolves against (which is not always what the title implies), and being able to tell the difference between a number that sounds good and one that's actually been earned.
Blending forecasts without just averaging them
A single forecast model gives you a point estimate with false precision. The fix isn't picking the "best" model, it's building a mixture: ensemble members (dozens of perturbed runs of the same model, which naturally express uncertainty as spread), deterministic multi-model forecasts (several independent models' single best guess), and climatology (what actually happened on this calendar day historically, at this station). Each source gets its own kernel width and its own weight, outliers get downweighted rather than trusted at face value, and the whole mixture's uncertainty grows with how many days out you're forecasting. A 6-day-out forecast should be a wider, less confident distribution than a same-day one, and the model needs to know that explicitly rather than accidentally being overconfident at every horizon.
What a market actually resolves against (and why that's not obvious)
"Highest temperature in Tokyo" sounds like it settles against some canonical government reading. In practice, different markets settle against different real-world sources: Weather Underground's station history pages, NOAA's timeseries pages for a specific ICAO station, or, for at least one major city, the Hong Kong Observatory's own Daily Extract, which isn't even an airport station. Each source has its own quirks: rounding conventions, decimal precision, and a revision policy (does a correction issued after initial publication count, or not). A forecasting model that ignores this and just predicts "the temperature" is modeling the wrong target. The right approach parses the market's actual rules text, looks up the specific station it names, and refuses to price anything it can't verify: fails closed, not "probably fine."
A concrete example of why this matters
Two "highest temperature" markets in different cities can settle against sources with different rounding precision: one to the whole degree, another to a tenth of a degree. A model that treats every market's buckets identically will misprice the one it got wrong, and the error is invisible until the market resolves. Auditing the resolution source before pricing anything catches this before it costs you, not after.
The number that's real, and the number that needs an asterisk
Score a model with a proper multiclass Brier score (the sum of squared errors between your predicted probabilities and the actual outcome, across every bucket) and two different numbers tend to get called "same-day skill":
- A backtest replay. Historical forecasts scored against markets that have already resolved. This is fast, reproducible, and honest, but by construction it has no live observation to work with, so it can't apply the constraint that matters most on the actual day of: what's already been observed. In practice this scores meaningfully better than a naive climatology-only guess, but not dramatically so.
- Live, intraday-constrained pricing. As the actual day unfolds, a live observation feed tells you the extreme temperature reached so far, which makes a huge share of the outcome space physically impossible and should collapse the distribution accordingly, with the remaining uncertainty decaying on a curve tied to time of day (an afternoon high is mostly "locked in" by 5pm local; an overnight low isn't locked in until much later). This is where real, meaningful skill shows up, but it requires an actual live data feed, and the strong result comes from accumulating scored outcomes over many real trading days, not from a single instant calculation.
Conflating these two is the easiest way to oversell a weather model. Reporting a backtest number as if it were the live number (or vice versa) isn't a rounding error, it's a different claim entirely.
What the live output actually looks like
This is real, unedited output from the engine described here, run against live markets on July 12, 2026 (pricing the July 13 Karachi daily-high market, early morning local time):
$ stormedge price
Karachi — 2026-07-13 (max, local hour 8.0, obs_extreme=30.0°C,
remaining_potential=1.00, confidence=high)
bucket model p market yes
31°C 0.055 0.001
32°C 0.236 0.090
33°C 0.299 0.345
34°C 0.269 0.560
35°C 0.116 0.047
36°C 0.013 0.002
Read the disagreement: the market had 56% of its confidence on 34°C while the model spread the same mass across 32-34°C. Neither is automatically right, and a gap is not a trade signal by itself. The point is that this comparison exists at all, per bucket, with the observed extreme and the model's own confidence tier stated alongside it, so you can score the model against reality over time instead of taking anyone's word.
Why the intraday constraint isn't just "if it's late in the day, be more confident"
The naive version of this idea (collapse confidence as the day goes on) breaks in a specific, findable way: your live observation feed is itself an approximation. Hourly-cadence observations miss true peaks and troughs that happen between reports, and auditing real resolved markets against their actual settlement value shows the miss is directional (the true extreme is consistently more extreme than what an hourly feed showed, never less). The fix is a hard floor on how much confidence any time-of-day reasoning is allowed to claim, calibrated to that measured miss rate, not tightened further than the sample size actually supports.
Skip building this from scratch
StormEdge packages the full engine above (ensemble/deterministic/climatology blending, the resolution-source auditor, walk-forward bias correction, the intraday constraint, and a backtest harness that scores all of it) with zero API keys required to run any of it. The live-pricing tool works against real markets the moment you install it.
Join the list for launch →Frequently asked questions
Do I need a Polymarket account to test this?
No. Market discovery, price data, and forecast data are all public, unauthenticated endpoints. No account, API key, or signup is required to run the backtest or the live pricing tool.
Why would two forecast sources disagree on the same city and date?
Different global weather models handle terrain, coastlines, and urban heat differently, and a grid-cell forecast can genuinely sit a degree or more away from a specific station's real microclimate. That's exactly what walk-forward, per-station bias correction is for: learning each station's typical grid-vs-reality offset from its own resolved history, never from the day being predicted.
Is a "climatology baseline" a strawman to beat?
No. Climatology (what typically happens on this calendar day, based on real prior-years data at that station) is a legitimately hard baseline to beat, especially several days out, and a model that can't clear it isn't adding value yet. It's the honest yardstick, not a strawman.
What's the single most common mistake in DIY weather-market models?
Treating every market's resolution source as interchangeable ("it's just the highest temperature") instead of verifying what specific station, source, and rounding convention it actually settles against. The error is invisible until the market resolves against you.
Education and research content. Not financial advice. Prediction markets involve substantial risk of loss.