Betting & Markets

H2H
Head-to-Head. Win/loss market — punter bets on which team wins outright with no handicap. Prices are expressed as decimal odds (e.g. 1.85 = $1.85 returned per $1 staked including stake).
Line / Spread
Handicap market. One team is given a head-start (e.g. −6.5 points). The bet wins if the favoured team wins by more than the handicap, or the underdog loses by less.
Total / Over-Under
Combined points-scored market. Punter bets whether the total points in the match will be over or under the bookmaker's line.
EV
Expected Value. Average profit per unit staked if the bet were placed many times. Positive EV = model estimates a long-run edge. Formula: EV = (model_prob × decimal_odds) − 1.
CLV
Closing-Line Value. Difference between the price you obtained (open or refresh) and the closing price just before kickoff. Positive CLV indicates you beat the sharpest market consensus — historically the strongest predictor of long-run betting profitability.
CLA
Closing-Line Agreement. Fraction of model signals where the market moved in the predicted direction by close. CLA ≥ 53% with |z| ≥ 2 suggests the model holds information the market later confirms. ~50% = signals are noise.
Kelly / Shrunk Kelly
Kelly Criterion. Stake-sizing formula that maximises long-run bankroll growth: stake = (edge) / (decimal_odds − 1). Shrunk Kelly scales the stake by a fraction (typically ¼–½) to reduce variance — used here as a conservative sizing policy in backtests.
ROI
Return on Investment. Net profit divided by total staked, expressed as a fraction. ROI = 0.05 means 5 cents profit per dollar staked on average. Reported here with season-bootstrap confidence intervals — never interpreted in isolation.
λ (lambda)
Walk-forward market-blend weight. The single number that says whether a model carries information the market lacks. Estimated by a ridge regression of model implied-probability vs. opening-market probability → margin outcome. λ ≥ 0.10 is the promotion gate for H2H models.
GO / WATCH
Signal labels on match cards. GO = model edge exceeds threshold, bet is recommended for paper-trading. WATCH = edge is borderline; monitor but don't act yet.
Open / Refresh / Close
Odds snapshot labels. Open = first price when the market opens (typically Mon/Tue). Refresh = mid-week update. Close = final price collected ≈ 60 min before kickoff. CLV is always measured open-to-close.

Models & Statistics

Elo
Elo rating system (named after Arpad Elo). Team strength estimated from win/loss history, updated after each match proportional to the surprise of the result. Used here as the baseline H2H model.
Logit
Logistic regression. Linear model that maps feature scores to a probability (0–1) via the sigmoid function. Used here to blend Elo, RAPM, and market features into a single H2H probability.
RAPM
Regularised Adjusted Plus-Minus. Ridge-regression estimate of each player's individual contribution to team scoring margin, controlling for teammates and opponents faced. Players are rated in points-per-80-minutes. Lineup delta = sum of home RAPM − sum of away RAPM for the 13 named starters each side.
xRAPM
Extended RAPM with stats prior. RAPM variant where each player's ridge prior is shifted toward a prediction from their historical box-score stats (run metres, tackles, line breaks, etc.) rather than shrunk to zero. Requires ≥ 400 career minutes of historical data.
cpois
Correlated Poisson model. Scores home and away points as correlated Poisson random variables. Generates full score-distribution forecasts for line and total markets, beyond just win probability.
MAE
Mean Absolute Error. Average absolute difference between predicted and actual margin/total across all matches. Lower is better. Used to gate line and total models (G3, G4).
RMSE
Root Mean Squared Error. Like MAE but penalises large errors more heavily. Reported alongside MAE for margin/total models.
Log-loss
Logarithmic loss. The primary accuracy metric for H2H probability models. Penalises confident wrong predictions heavily. Lower is better. Market baseline ≈ 0.626. G6 gate: model log-loss must beat the open-market log-loss.
ECE
Expected Calibration Error. Measures how well predicted probabilities match actual win rates across probability buckets. ECE = 0.02 means the model's 60% predictions win about 60% of the time (well calibrated). Lower is better.
CI
Confidence Interval. Range within which the true value falls with a stated probability (here 90%). All ROI figures are reported with season-bootstrap CIs — if the CI crosses zero, the result is not statistically distinguishable from break-even.
G1 – G7
Pre-registered gates. Objective pass/fail criteria defined before running each model phase, preventing cherry-picking of results. Key gates: G1 = ss_strength beats Elo baseline; G2 = λ ≥ 0.10 for strength model; G6 = RAPM model log-loss beats market; G7 = RAPM λ ≥ 0.10.

NRL & Competition

NRL
National Rugby League. Australia's top-tier rugby league competition, 17 clubs, 26-round regular season, followed by finals.
SOO
State of Origin. Annual representative series (NSW Blues vs QLD Maroons). Best players from each state are called up, causing significant team-list disruptions in the rounds around Origin dates.

Data & Infrastructure

DQ
Data Quality. Suite of dbt tests that validate row counts, nulls, uniqueness, and business-rule invariants across all staged tables. The DQ gate must pass before model predictions are trusted.
dbt
Data Build Tool. SQL-based transformation framework. Defines silver (cleaned) and gold (analytics-ready) models from raw staged data. Handles dependencies, incremental builds, and built-in testing.
DuckDB
DuckDB. In-process OLAP database. Reads Parquet files and runs analytical SQL locally with no server. The primary query layer for this dashboard and all model training.
Parquet
Apache Parquet. Columnar binary file format. Staged data is written as Parquet for efficient analytical queries — much faster than CSV for column-oriented workloads.
DO Spaces / Spaces
DigitalOcean Spaces. S3-compatible object storage. Raw spider outputs (NDJSON, manifests) land here as the immutable source of truth before staging.
Scrapy
Scrapy. Python web-scraping framework. Runs the NRL draw, ladder, stats, match-stats, and team-lists spiders that collect raw data from nrl.com.
NDJSON
Newline-Delimited JSON. One JSON object per line. Raw spider payloads are stored as gzip-compressed NDJSON in Spaces before staging.
UTC
Coordinated Universal Time. All timestamps in this system are stored and displayed in UTC. AEST = UTC+10, AEDT = UTC+11 (daylight saving).
API
Application Programming Interface. The /api/* routes on this dashboard expose match, prediction, and DQ data as JSON for programmatic access. See API Docs.
ETL
Extract, Transform, Load. The pipeline pattern: Scrapy extracts raw data → dbt transforms it → DuckDB loads it for queries. Here often called the scrape → stage → dbt flow.