The dataset
The model runs on a master table of 3,609 NRL games from 13 March 2009 to the present. Each row has scores, half-time scores, venue, round, referee, both teams' coaches, match weather (temperature, rain, wind from the nearest weather station), and market odds where available (head-to-head, line, totals from 2013 onwards).
A separate archive of 14,658 games from 1908 to 2025 provides historical context but isn't used for betting analysis; rule changes over a century make direct comparisons unreliable.
The data has been audited across 11 independent checks with zero arithmetic impossibilities, zero duplicates, and a 98.9% match between player-level points records and recorded final scores.
The Elo rating system
Every team has an Elo rating that updates after each game. Ratings rise when a team beats a strong opponent and fall when they lose to a weak one. Margin of victory matters, but big blowouts get diminishing returns (the fifth try when up 28-0 isn't as meaningful as the first).
The formula
elo_diff = team1_elo - team2_elo + (0 if neutral else HFA)
win_prob = 1 / (1 + 10^(-elo_diff/400))
margin = abs(score1 - score2)
mov_multiplier = log(margin + 1) * (2.2 / (elo_diff_winner * 0.001 + 2.2))
shift = K * mov_multiplier * (actual_result - win_prob)
That's adapted from the Elo system FiveThirtyEight used for NFL predictions. The margin-of-victory multiplier is the clever part: it's logarithmic (so 50-point wins aren't 50× more meaningful than 1-point wins) and it's dampened when favourites cruise (so Penrith's 40-4 romps don't inflate their rating indefinitely).
Parameters for NRL
Win probability and margin
The Elo gap (including 60 points of home advantage) is turned into an expected margin by a slope fitted to 2022 to 2026 results: about 0.041 points of margin per Elo point, so a 100-point gap is a 4-point favourite. The win probability is the chance that a margin drawn from a normal distribution around that expectation (standard deviation 18.2 points) is positive. Totals use the same idea with a standard deviation of 13.2 points around the projected total. This calibrated version scored better than the textbook Elo formula on every test we ran, because raw Elo is over-confident about big favourites.
Power rankings composite
The weekly power ranking is a blend of three standardised scores: 40% the long-run Elo (pedigree), 40% the 2026-only Elo, which starts every team at 1500 in March and updates faster (K = 40), and 20% points differential per game. Each is converted to a z-score across the 17 teams before blending, and the result is shown as a 0 to 100 style score. Absences are described in each team's paragraph but are not deducted from the power score.
Team lists and absences
Ratings only know results, so on their own they price a club, not the 17 who run out. From the Tuesday team lists we identify each side's regular fullback, halfback, five-eighth and hooker (the player with the most starts in that jersey over the club's last eight games; if two are tied, the slot counts as covered when either is named) and check whether he is in the 17. A backtest over 947 games from 2022 to 2026 found that a side missing a regular spine player does about 2 points worse than the Elo line says per missing player. The number holds whether the look-back is 5, 8 or 12 games and in both halves of the sample (2.8 in 2022 to 2023, 1.5 in 2024 to 2026); the per-position estimates (roughly 1 to 3 points) overlap too much to justify different weights, so we apply a flat 2 points per missing regular to the projected margin and recompute the win probability. The closing market already moves for these absences, so the adjustment brings our line closer to the market rather than creating value by itself. Other absences are listed on the preview but not priced, and nothing is applied until team lists are loaded.
Season projections
The top 8, top 4, top 2, minor premiership and premiership percentages come from 20,000 Monte Carlo simulations of the remaining regular-season fixtures, each game decided by the calibrated win probability above with ratings held at their current values. Ladder ties are broken on points differential as in the real competition. Alongside the simulation, every one of the 65,536 combinations of the 16 remaining results is enumerated exactly to produce the locked, alive and eliminated statuses on the Finals Picture page, so those are certainties rather than estimates.
Once the run home is simulated, the top eight are played through the real finals bracket in each simulation (1 v 4 and 2 v 3 qualifying finals, 5 v 8 and 6 v 7 elimination finals, then semi-finals, preliminary finals and the grand final), using the same calibrated win probabilities, so the premiership, grand final, top four and top two figures all come from the same 20,000 runs.
Value plays and stake sizing
For every market we turn the bookmaker's prices into a probability by removing the bookie's margin, then compare it with the model's probability. Head-to-head shows the gap in percentage points; lines and totals show the gap in points between our number and the book's. A bet is only recommended when our edge is at least 3% and the expected value is positive, which is why most games show no play. Totals are bet on weather only. Our own totals projection does not beat the closing total (2,226 games from 2013 to 2026: betting the model's side won 49 to 50% at every gap size, below the 52.6% needed at $1.90), so it drives the scoreline but is never a bet by itself. What does beat the market is rain: when 5 mm or more fell on match day the under won 56.9% of 304 bets since 2013 (+8.1% at $1.90, positive in both halves of the sample), because the market trims wet-day totals but not by enough. A forecast top of 30°C or more favours the over (61.9% of 63 bets, a smaller sample). So a totals play appears only when the live forecast for the kickoff day meets one of those conditions, and the probability used is the historical win rate for that condition, not the model total. Market moves are worked out in your browser: the opening price is captured when the site rebuilds each Tuesday and stored in the page, and every time you open a preview it is compared with the live price the page has just fetched. The analysis comments when the line or total has shifted a point or more, or a side's implied chance has moved 3 points or more, and says whether the money has gone the same way as our lean. No separate service is involved; it is the same hourly odds feed, with the opening remembered.
Stake is the suggested share of your betting bank. It uses the Kelly formula, which sizes a bet by how far your probability beats the price: stake = (p × (odds − 1) − (1 − p)) ÷ (odds − 1). Full Kelly assumes your probabilities are exactly right, so we use a quarter of it and cap it at 10% of the bank. Example: a line bet at $1.90 that we rate 55.7% to cover gives full Kelly 6.5%, quarter Kelly 1.6%, so about $16 on a $1,000 bank.
Betting edges
The eleven patterns on the Betting Edges page are not produced by the Elo model. They're separate patterns identified through exploratory analysis of the 3,609-game dataset, then scored against closing market prices for every game from 2013 (when odds coverage starts) to Round 25 of 2026. That audit is what sorts them: two are retired, three are weak or unstable, and six hold up, and the page says which is which.
Every edge is scored on three criteria:
- Minimum 15 games of sample size
- A defensible causal hypothesis (not pure data-mining)
- Positive ROI in walk-forward out-of-sample testing
Some edges are intuitive (extreme weather hurting skill-based favourites), others less so (specific team-and-venue interactions). All produce ROI figures that assume flat staking against closing lines. Real-world results will be marginally worse due to bookmaker margins and line movement, but the directional edges are real.
What the model doesn't do
Worth being clear about the limits. The model:
- Doesn't know about team strategy changes (e.g., adding a new spine combination mid-season)
- Doesn't track rest differential (Thursday after Sunday games, byes), a planned improvement
- Doesn't account for travel fatigue (NZ teams, Vegas games, etc.)
- Can't predict upsets driven by intangibles (grudge matches, emotional round)
- Treats the 2026-only rating with care: 22 to 23 games per team is enough to rank sides but a single blowout still moves it, which is why the long-run rating gets equal weight
All of these are fixable with more work. The goal is continuous improvement, not claiming completeness.
What the data covers
- Match results: every NRL game since 2009, reconciled to the official ladder
- Prices: closing head-to-head, line and total prices for every game from 2013 for the backtests and spread records; this week's bookmaker prices refreshed hourly from 8am to 8pm Sydney time
- Weather: measured conditions at each venue for past games; a live forecast for the kickoff hour on this week's previews
- Players and coaches: team lists, scorers and minutes for every game in the database
- Injuries and team lists: the official casualty ward, judiciary and named 17s, plus club announcements
Responsible use
Nothing on this site is financial or gambling advice. Every probability is an estimate with uncertainty. Real gambling decisions should account for your bankroll, risk tolerance, and the fact that this is supplementary information, not a standalone system. If gambling stops being fun or starts causing harm, seek help (Gambling Help Online, 1800 858 858).