Pre-registration

Before anyone had placed a single bet, we wrote down what we were trying to prove and how we would know if we were wrong. This page is that document, and the proof it has not been edited since.

Why this exists

Whoever runs a prediction market holds every lever that moves its headline number. We choose which questions get listed, which get cancelled, when they close, and which results get shown. Decide any of that after seeing the answers and the result is worthless, because picking honestly and picking the flattering one look identical from outside.

So the plan was written first and locked. Everything below was fixed before a single one of these questions had an answer.

What we are claiming

On South African contingencies that no licensed operator currently offers, closing prices produced by a small peer-to-peer market are better calibrated than the hand-set opening priors those markets began at.

We are wrong if: The Brier Skill Score of closing prices against opening priors is zero or negative at the primary trading threshold. That would mean trading moved prices away from the truth, or not at all.

How we will know

Every market opens on odds set by hand, and closes on whatever price the trading arrived at. Once the answer is known, both can be scored against it. If trading is doing anything useful, the closing price should be the closer of the two.

That comparison is a single number:

BSS = 1 - BS(close) / BS(prior)

Above 0, trading moved the odds toward the truth. 0, it made no difference. Below 0, trading made the odds worse and the claim fails.

It is measured on markets with at least 5 player trades. That floor is not there to flatter the number. Player-initiated trades only. The house market maker quotes around the prior, so an untraded market's closing price is the prior and the comparison is empty by construction.

Where it stands today

No result yet

None of the 53 markets in the sample have resolved. The table below fills in on its own as they settle, and nobody has to trust that it was filled in honestly, because the code that computes it is the same code that runs the leaderboard.

Three thresholds, all three declared in advance so that none can be picked afterwards to suit the answer. The main test is marked; the other two are shown whether they help or not.

Markets countedHow manyClosing priceOpening oddsSkill
1 trade or more0---
5 trades or more main test0---
20 trades or more0---

The two score columns are Brier scores, where lower is better. Skill is the gap between them as a percentage.

Proof it has not been edited

The plan above, together with all 53 markets and the exact opening odds each one started at, was run through SHA-256. Change any character of it and this fingerprint changes.

Intact, matches the frozen plan

e7b38f8c4b36b6a49b6e35dd4834bff6b9c79141d2c5bfe55e4f059bc3c37818

Frozen 2026-08-06 11:42 SAST. Check it yourself with python -m app.prereg, which recomputes the fingerprint from the plan rather than trusting the one printed here.

What is left out, and why

Deciding what to exclude after seeing the results is the easiest way to manufacture a good number, so the exclusions were fixed with everything else.

What this does not fix

Pre-registration removes one specific freedom: choosing the analysis after seeing the data. It does not make the study good, and pretending otherwise would be the same failure wearing a different hat.

The full detail

Everything a reader might want to check, kept out of the way of everyone else.

Everything else we will report

Published alongside the main test whatever it says, because a result is only one of these.

  • BSS against in-sample climatology, r(1-r).
  • BSS against an uninformed 0.5 forecast, BS_ref = 0.25.
  • Reliability curve in ten price bands with 95% Wilson intervals.
  • The same three, split by category.
  • Player Brier split by declared AI use.
  • Dispersion of player entry prices, as a herding diagnostic.
How the numbers are computed
  • A player's holdings in one market are netted before scoring, so each market contributes exactly one forecast per player.
  • Where a position was built across several fills, the volume-weighted average price is the forecast.
  • Scores are recomputed from the raw tables every time; none is cached.
  • Any deviation from this plan will be reported as a deviation, alongside the pre-registered result, not instead of it.
The frozen sample, all 53 markets

Every market in scope with the opening odds being tested. These are recorded here rather than read from the live database later, because a baseline you can still edit is not a baseline.

TickerCategoryOpens atCloses
G-ANC-26NOV07the vote62c2026-11-04
G-BOKSERIES-26SEP12sport30c2026-09-12
G-BOKTEST-26AUG22sport52c2026-08-22
G-BOKTEST-26AUG29sport52c2026-08-29
G-BOKTEST-26SEP05sport52c2026-09-05
G-BOKTEST-26SEP12sport52c2026-09-12
G-CPI-26AUGmoney68c2026-09-23
G-CPI-26SEPmoney68c2026-10-23
G-DERBY-26OCT31sport44c2026-10-31
G-FUEL-26OCTmoney42c2026-11-03
G-FUEL-26SEPmoney42c2026-10-03
G-HEAT-26OCTutilities30c2026-11-06
G-HEAT-26SEPutilities30c2026-10-06
G-HOUSE-26AUGmoney62c2026-11-15
G-HUNG-26NOV09the vote65c2026-11-06
G-LOADSHED-26AUGutilities12c2026-09-02
G-LOADSHED-26OCTutilities12c2026-11-02
G-LOADSHED-26SEPutilities12c2026-10-02
G-NETFLIX-26AUG11screens38c2026-08-11
G-NETFLIX-26AUG18screens38c2026-08-18
G-NETFLIX-26AUG25screens38c2026-08-25
G-NETFLIX-26NOV03screens38c2026-11-03
G-NETFLIX-26NOV10screens38c2026-11-10
G-NETFLIX-26OCT06screens38c2026-10-06
G-NETFLIX-26OCT13screens38c2026-10-13
G-NETFLIX-26OCT20screens38c2026-10-20
G-NETFLIX-26OCT27screens38c2026-10-27
G-NETFLIX-26SEP01screens38c2026-09-01
G-NETFLIX-26SEP08screens38c2026-09-08
G-NETFLIX-26SEP15screens38c2026-09-15
G-NETFLIX-26SEP22screens38c2026-09-22
G-NETFLIX-26SEP29screens38c2026-09-29
G-POWERBALL-26AUG07the draw22c2026-08-07
G-POWERBALL-26AUG11the draw22c2026-08-11
G-POWERBALL-26AUG14the draw22c2026-08-14
G-POWERBALL-26AUG18the draw22c2026-08-18
G-POWERBALL-26AUG21the draw22c2026-08-21
G-REPO-26SEP17money35c2026-09-17
G-TURNOUT-26NOV07the vote45c2026-11-04
G-VAAL-26AUG11utilities72c2026-08-11
G-VAAL-26AUG18utilities72c2026-08-18
G-VAAL-26AUG25utilities72c2026-08-25
G-VAAL-26NOV03utilities72c2026-11-03
G-VAAL-26NOV10utilities72c2026-11-10
G-VAAL-26OCT06utilities72c2026-10-06
G-VAAL-26OCT13utilities72c2026-10-13
G-VAAL-26OCT20utilities72c2026-10-20
G-VAAL-26OCT27utilities72c2026-10-27
G-VAAL-26SEP01utilities72c2026-09-01
G-VAAL-26SEP08utilities72c2026-09-08
G-VAAL-26SEP15utilities72c2026-09-15
G-VAAL-26SEP22utilities72c2026-09-22
G-VAAL-26SEP29utilities72c2026-09-29

Every formula on this page, with the trade-offs behind each one, is set out on the methodology page.