Five historical signals are normalized to 0–1, combined with weights that depend on how much history exists, then mapped onto a 0–100 score relative to the rest of the pool. Every number below is read straight fromlib/scoring-config.ts, so the page cannot drift from the code.
Historical score, not prediction. If draws are fair, every valid combination keeps the same official probability. Past frequency does not guarantee the next result.
The site follows Megapot's official API-versus-RPC guidance.
Weights are interpolated between the sparse and mature vectors by sample-size confidence,n / (n + 60). With little history the score leans on the smoothed rate; as rounds accumulate the observed counts take over.
| Signal | What it measures | Thin history | Mature history |
|---|---|---|---|
| Frequency z-score | How far the observed count sits from the count a fair draw would produce. | 10% | 30% |
| Bayesian rate | Hit rate shrunk toward the official baseline with a 18-draw prior. | 55% | 22% |
| Volume-weighted decay | Recent rounds count more, and rounds that sold more tickets count more again. | 15% | 24% |
| Trend derivative | Latest 30 draws against the 30 before them. | 5% | 14% |
| Gap pressure | How unlikely the current dry spell would be under a fair draw. | 15% | 10% |
Three things the previous weighting got wrong.
1 − the other, so together they only ever added a constant. There is now a single gap-pressure term.Recency in two dimensions: when a round happened, and how big it was.
weight = e^(−ln2 · age / halfLife) × volumeHalf-life is 30 draws for main numbers and 24 for the bonus ball, measured in rounds rather than days because Megapot settles one round per day. The volume term compares a round's ticket count with the median round and moves its weight by up to 35% either way, so a heavily played jackpot event counts for more than a quiet day in the same week.
Prior raised from 12 to 18 pseudo-draws.
p = (hits + baseline × 18) / (draws + 18)A stronger prior means a short streak on a young dataset no longer produces a confident-looking rate.
Replaces the old recency and gap pair.
gap = 1 − e^(−drawsSinceSeen × baseline)This is the probability a fair draw would have produced at least one hit across the observed dry spell. It is 0 immediately after a hit and approaches 1 as a number falls well past its expected interval. It describes how unusual the gap is; it does not make the number more likely next round.
Standardized inside its own pool, then squashed.
composite = Σ weight_i × signal_i
chance = 100 × sigmoid(1.6 × (composite − poolMean) / poolStdDev)An average number scores about 50 by construction. The generator turns the score into a softmax weight, exp((score − 50) / temperature); pure random mode gives every number weight 1.
It cannot detect the next winning number from independent fair draws. A past streak, long gap, or high frequency does not change the official probability. Better weighting makes the description of history more honest, not the future more knowable.
Open model backtest