← Betting stats

How the numbers are calculated

Every percentage and prediction on Back The Stats comes from a deterministic formula applied to the raw match data in our database. No machine learning, no manual tweaking. This page explains exactly what each number means and how it is derived so you can decide whether to trust it before placing a bet.

Season scoping

All per-team betting stats (BTTS %, Over 2.5 %, clean sheet rate, home/away splits) are scoped to the current football season only. Squads, managers and tactics change between seasons; including last season's results would make Arsenal's August clean sheet rate meaningless by March.

Season start date

The season boundary is July 1 00:00 UTC. Matches in January–June belong to the season that started the previous calendar year — so a match on 15 February 2026 belongs to the 2025/26 season (which started 1 July 2025).

Historical data before the current season cutoff is retained in the database for head-to-head records but is excluded from the team and league betting statistics shown throughout the site.

seasonStart = July 1 UTC of the current season year

Per-team betting metrics

Each metric below is calculated from the team's finished, scored matches in the current season. All calculations are available split by venue — home, away, or combined — using only the relevant subset of matches.

BTTS % — Both Teams to Score

A match counts as BTTS Yes if both the home side and the away side scored at least one goal. The percentage is the proportion of the team's matches (at the selected venue) that ended BTTS Yes.

A team with a home BTTS % of 70% has seen both teams score in 7 out of every 10 of their home games this season.

BTTS % = (matches where homeScore > 0 AND awayScore > 0) ÷ total matches × 100

Over 2.5 % — Three or More Goals

Counts the share of matches involving this team (at the selected venue) that produced three or more total goals. Strictly greater than 2 — a 1-1 draw (2 goals) counts as Under 2.5.

Over 2.5 % = (matches where homeScore + awayScore > 2) ÷ total matches × 100

Clean Sheet Rate

The proportion of matches where the team kept a clean sheet — i.e. the opponent scored zero goals. At home this measures defensive solidity on home turf; away it reflects the team's ability to shut out opponents on the road.

CS % = (matches where goals conceded = 0) ÷ total matches × 100

Win %, Draw %, Loss %, Goals/Game

Standard counts divided by games played. Win/draw/loss are determined from the team's perspective: if the team scored more than it conceded it is a win, equal is a draw, less is a loss. Average goals scored and conceded are simple arithmetic means across the match sample.

Sample guard: Stats are hidden (shown as —) when a team has fewer than 3 finished matches in the current window. Below that threshold the percentages carry too much variance to be useful. The Bet of the Day scorer uses a stricter 5-game minimum — see below.

Signal labels

Percentages are mapped to a qualitative label so you can read the strength of a trend at a glance without having to interpret a raw number.

STRONG
≥ 70%
LIKELY
≥ 55%
50/50
≥ 45%
UNLIKELY
< 45%

Thresholds are the same for BTTS %, Over 2.5 %, and clean sheet rate. A 70% BTTS rate over a full season is a strong historical signal; whether it holds in any given match is not guaranteed.

Fixture predictions — combined stats & expected goals

The fixture view shows a prediction for each upcoming match using the two teams' stats. These are historical-rate averages, not a probabilistic model — they tell you what has happened in similar situations this season, not what will happen next Saturday.

Combined BTTS %

Averages the home team's BTTS rate in their home games with the away team's BTTS rate in their away games. Venue-specific rates are used because teams behave differently at home and away — blending season-wide rates would wash out that difference.

Returns 0 if either team has fewer than one finished match in the relevant venue sample.

combinedBTTS = (homeTeam.home_bttsPct + awayTeam.away_bttsPct) ÷ 2

Combined Over 2.5 %

Same averaging logic as Combined BTTS, applied to Over 2.5 rates. A 70% combined O2.5 means the home team produces 3+ goals in 70% of their home games and the away team sees 3+ goals in 70% of their away games on average.

combinedO25 = (homeTeam.home_over25Pct + awayTeam.away_over25Pct) ÷ 2

Expected Goals (xG) model

A simplified Dixon-Coles-style blend: expected home goals is the average of how many the home team typically scores at home and how many the away team typically concedes away. Expected away goals mirrors this from the away side.

This is not a shot-quality xG model — it uses goals rather than shot locations. It is useful for ballpark goal-count expectations but should not be treated as a precise predictive model. A shot-quality model would require event-level data not currently in our feed.

xHome = (homeTeam.avgScored_home + awayTeam.avgConceded_away) ÷ 2 xAway = (awayTeam.avgScored_away + homeTeam.avgConceded_home) ÷ 2 xTotal = xHome + xAway

Bet of the Day ranking — Wilson Score lower bound

The Bet of the Day picks the single strongest statistical angle across all upcoming fixtures: BTTS Yes, Over 2.5 Goals, or Clean Sheet for a specific team at a specific venue. Raw hit rate alone is not a fair ranking criterion because a team with 4 home games and 100% BTTS looks better than a team with 25 home games and 80% BTTS — but the latter is the more reliable bet.

Wilson Score lower bound

The Wilson Score lower bound is a conservative estimate of the true underlying rate, accounting for sample size. A small sample with a high observed rate gets pulled down toward 50%; a large sample stays close to the observed rate.

90% BTTS over 3 games → score ≈ 0.48(too small — penalised)
80% BTTS over 5 games → score ≈ 0.49(marginal)
70% BTTS over 20 games → score ≈ 0.53(preferred — solid evidence)
65% BTTS over 38 games → score ≈ 0.55(strongest — full-season)
score = (p + z²/2n − z·√((p(1−p) + z²/4n) / n)) / (1 + z²/n) where: p = hit rate (0–1), n = sample size, z = 1.645 (90% CI)

Qualifying thresholds

Before the Wilson Score is computed, two thresholds are applied:

  • Minimum 5 games at the relevant venue in the current season. Fewer than 5 is too noisy regardless of hit rate.
  • Minimum 60% hit rate. Below 60% the angle is not compelling enough to surface as a bet, even with a large sample.

Qualifying candidates across all three angle types (BTTS, Over 2.5, Clean Sheet) and all upcoming fixtures are ranked by Wilson Score. The highest-scoring candidate becomes the Bet of the Day. Ties are broken by sample size.

Data sources

All data is fetched from official, licensed APIs and stored in our database. Nothing is scraped. The sync runs daily and timestamps every competition record so you can see when data was last refreshed.

Match results, standings, scorers and fixtures across 9 leagues. Free tier; licensed for non-commercial and research use.

PGA Tour and DP World Tour leaderboards, round scores and season stats via the ESPN public data feed.

PDC tournament schedule, match results, player 3-dart averages, checkout % and 180s.

Horse RacingThe Racing API

UK and Irish racecards, runners, jockey and trainer records, going conditions and historical race results.

All calculation logic lives in lib/betting-stats.ts and lib/bet-of-day.ts. The formulas on this page are pulled directly from those functions — if the code changes, this page should be updated to match.