Theory library
How the formulas work, and what they can’t do
Drawology is a playground for testing ideas honestly. Every engine below produces a ranking of possible numbers, and every ranking is tested against a fair random baseline on draws it never saw.
Start here: the odds don’t move
Singapore Pools draws use certified random equipment. If a draw is fair, every 4D number and every TOTO combination has the same chance every time, whatever happened before. A formula can change which tickets you pick, but not the chance that a ticket wins. Our backtests exist to show this in the open, including when a formula looks lucky.
- 4D first prize, one number
- 1 in 10,000
- 4D any prize, one number
- 23 in 10,000
- TOTO Group 1, one ordinary entry
- 1 in 13,983,816
- TOTO any prize (Group 1–7)
- about 1 in 54
Skips and recurrence (Saliu-inspired)
A skip is the number of draws between two appearances of the same thing: a digit in a position, or a TOTO number. The idea, popularised by Ion Saliu, is that items whose current skip is short relative to their typical (median) skip are “in play”. Drawology’s version is coded independently from the public description of the concept. In a fair draw, skips follow a geometric distribution and the past skip tells you nothing about the next one.
Frequency, repeats and Bayesian shrinkage
Hot/cold frequency counts how often each item appeared in a recent window. The Bayesian engine treats each number’s rate as unknown with a uniform prior and updates it with the data. With enough draws, the posterior shrinks towards equal rates, which is what a fair draw predicts. It’s included as an honest reference point.
Number theory: primes, digit sums and residues
These engines match candidates to historical distributions of properties such as digit sum, count of prime digits, or residue mod 9. Those distributions mostly reflect how many numbers have each property (there are more 4D numbers with digit sum 18 than 0), not a bias in the draw.
Golden ratio, Fibonacci and chaos
Deterministic sequences (multiples of φ, Fibonacci numbers modulo 10, the logistic map) are used as exploratory generators. They are elegant, and they are speculative: there is no mechanism by which a physical draw would follow them. They are tagged as speculative everywhere and start at half weight.
Entropy and information
Shannon entropy measures how “mixed” a candidate is (1234 has more distinct digits than 1111). Set-level TOTO profiles look at sum, odd/even and low/high balance. Matching the common profile picks typical-looking tickets; it does not change the chance that any particular ticket wins.
Fourier and signal analysis
Each number’s appear/miss history is a 0/1 signal. The periodogram finds its strongest apparent cycle. With hundreds of numbers and frequencies, some cycles always look strong by chance, so we compare against shuffled histories before trusting any of them.
Graphs and co-occurrence
4D digit transitions form a small Markov chain between adjacent positions; TOTO numbers that appeared together form a co-occurrence network. These describe the past neatly. In a fair draw the edges carry no information about the future.
Ensembles
Each engine’s raw scores are converted to z-scores across the whole candidate universe (10,000 4D strings or 49 TOTO numbers), weighted by your sliders and summed. Tickets are then sampled with a seeded random generator, so the exact same inputs always reproduce the exact same tickets.
Engine reference
Engine set engines/v1. Every prediction records the version it used.
4D
- Skips (Saliu-inspired)
4d.skip@1Per position, favours digits whose current gap since the last top-three appearance is within their median gap.
- Hot digits
4d.frequency@1Favours digits that appeared most often in each position across all 23 prizes of recent draws.
- Repeats & permutations
4d.repeat@1Scores boxed digit patterns by recent appearance rate, plus a bonus for permutations of the last draw's top three and their mirror (+5) forms.
- Digit sums
4d.digitsum@1Favours numbers whose digit sum (0–36) is common in the historical record.
- Primes & residues
4d.prime@1Matches each number's count of prime digits and its remainder mod 9 to how often those occur historically.
- Digit entropy
4d.entropy@1Groups numbers by how varied their digits are (abcd, aabc, aabb, aaab, aaaa) and scores each group's historical rate per number.
- Digit transitions
4d.graph@1Learns how often digit a is followed by digit b in the next position (a Markov chain) and scores each number's likelihood.
- Golden ratio
4d.golden@1speculativePlaces points on the 0000–9999 ring by golden-ratio steps from the next draw's index and favours nearby numbers. Purely exploratory.
- Fibonacci
4d.fibonacci@1speculativeReads one Fibonacci digit (mod 10) per position at an offset set by the next draw's index; exact matches score 1, neighbours ½. Purely exploratory.
- Chaos (logistic map)
4d.chaos@1speculativeIterates the logistic map from the last first prize to produce a deterministic sequence of numbers, then favours candidates sharing digits with them. Not a claim that draws are chaotic.
TOTO
- Skips (Saliu-inspired)
toto.skip@1Favours numbers whose current gap since they were last drawn is within their median gap.
- Hot numbers
toto.frequency@1Favours numbers drawn most often in recent draws.
- Co-occurrence network
toto.pairs@1Builds a graph of which numbers are drawn together and favours numbers strongly linked to the last few draws.
- Primes & residues
toto.prime@1Scores each number by the historical draw rate of numbers sharing its primality and its remainder mod 7.
- Set profile
toto.entropy@1Scores whole six-number sets by how typical their sum, odd/even split, low/high split and decade spread are historically.
- Bayesian rates
toto.bayes@1Estimates each number's draw rate with a uniform prior; with a fair draw the estimates shrink towards 6/49 as data grows.
- Golden ratio
toto.golden@1speculativePlaces six points on the 1–49 ring by golden-ratio steps from the next draw's index and favours nearby numbers. Purely exploratory.
- Fibonacci
toto.fibonacci@1speculativeTakes six consecutive Fibonacci numbers (mod 49) starting at the next draw's index and favours numbers near them. Purely exploratory.
- Fourier cycles
toto.fourier@1speculativeFinds each number's strongest apparent cycle, keeps it only if it beats shuffled copies of the same history, and projects it one draw ahead.
How we test
- Walk-forward only. To predict draw n, an engine sees draws before n and nothing after. There is a test for this.
- Same-size random baseline. A formula with 10 tickets per draw is compared with 10 random tickets per draw, over the same draws.
- Uncertainty, not certainty. We show 95% intervals, exact p-values and a Monte Carlo null distribution. With many engines and settings, some will look good by chance, so p-values are also shown with a Bonferroni correction.
- No hiding misses. The public archive locks every official prediction before its draw and records every outcome, including all the losses.
References: Ion Saliu’s public writing on skips and lottery filtering (saliu.com) inspired the skip engine; Drawology’s code is independent and is not endorsed by or affiliated with him. Other methods are standard statistics: the hypergeometric distribution for TOTO odds, exact Poisson intervals, and Bonferroni correction.