Technical documentation

How the PunterScore Prediction Model Is Built

This page is the technical companion to our How It Works guide. It covers the statistical models, data sources, weighting logic, and validation methods that underpin every tip on the site — written for readers who want the full picture, not just the summary.

Data Sources & xG Collection

PunterScore's prediction model is built on Expected Goals (xG) as its primary data input. xG assigns each shot in a football match a probability of scoring based on: the shot's location on the pitch, the angle to goal, whether it was headed or with the foot, whether it followed an assist or was taken under pressure, and the match situation at the time of the attempt. These factors are combined using a logistic regression model trained on tens of thousands of historical shots to produce a single probability value per attempt — 0.04 for a speculative long-range effort, 0.76 for an unmarked header from six yards.

The model collects xG figures from the current season for all tracked clubs, updated after each completed fixture. xG is stored and processed in four separate buckets: home xG created, home xG conceded, away xG created, and away xG conceded. This separation is critical — a team's home and away profiles can differ enormously, and predictions must always apply the contextually correct figure for the specific fixture.

Why xG beats goals scored as a predictor

Internal validation shows xG has a predictive correlation with future match outcomes of r² = 0.74 versus r² = 0.51 for goals scored. xG stabilises to a meaningful signal after approximately 8 games; raw goals require ~15 games for comparable stability. The gap occurs because finishing quality — whether a player converts a 0.3 xG chance — is highly variable and regresses strongly toward average over time. Shot quality and volume, which drive xG, are far more persistent team attributes.

A minimum sample of 6 games in the specific context (home or away) is required before the model generates tips for that team in that context. Below this threshold, variance in the xG data is too high to produce reliable estimates. Tips for newly promoted clubs or fixture types where a team has played fewer than 6 games are withheld until the sample is sufficient.

4xG buckets per team
6+Games min. per context
15 minUpdate cycle
r²=0.74xG predictive power

Statistical Models by Market Type

Different betting markets require different statistical approaches. A single model cannot optimally serve both a goals total prediction and an exact scoreline prediction — the former needs a distribution over total counts, the latter needs a joint distribution over two independent counts. PunterScore uses four distinct model types depending on the market.

Goals markets (Over/Under, BTTS, Correct Score): The Poisson distribution is applied to each team's home or away xG average to generate a probability mass function — the probability of each team scoring exactly 0, 1, 2, 3, or more goals independently. These two distributions are then combined to produce a joint probability table for every possible scoreline. From this table, any aggregated outcome can be computed: Over 2.5 goals is the sum of all scoreline probabilities where the total goals column equals 3 or more.

P(X = k) = (λk · e−λ) / k!
Where λ = team's season-average xG in relevant home/away context
And k = the number of goals being estimated (0, 1, 2, 3…)

Dixon-Coles refinement: The basic Poisson model is known to systematically underestimate the frequency of 0-0 and 1-0 results in football — outcomes where total goals are 0 or 1. Dixon & Coles (1997) proposed a correction factor ρ applied to these low-scoring outcomes that adjusts their probability upward to better match real-world frequency. PunterScore applies this refinement to all result market predictions (1X2, Draw No Bet, Double Chance, Handicap) where scoreline distribution directly affects the output.

Player markets (Anytime Goalscorer): Individual player scoring probability is estimated by multiplying each player's shots per 90 minutes by their xG per shot (shot quality). This yields a personal xG figure per game. The probability of the player scoring at least once is then derived as 1 minus the Poisson probability of zero goals: P(score) = 1 − e−xG_player. This estimate is further adjusted for the opponent's defensive xG conceded rating in the specific position the player occupies.

Half-time and period markets (HT Result, HT/FT, Win Either Half): For these markets, the team's overall xG is split into first-half and second-half components using each team's historical goal-timing distribution — the percentage of their goals scored before and after the 45-minute mark. A team that scores 62% of their goals before half-time will have a much higher first-half xG estimate than their overall average implies, generating stronger HT Home Win signals than their full-game xG alone would suggest.

Over/Under Goals
Poisson distribution
Combined home + away xG → total goal count probabilities
Correct Score
Bivariate Poisson
Joint distribution over independent home & away goal counts
1X2 / DNB / Handicap
Dixon-Coles Poisson
Low-score correction applied; draw probability explicitly modelled
BTTS
Independent Poisson
P(home scores ≥1) × P(away scores ≥1)
Anytime Goalscorer
xG per shot model
Shots/90 × xG/shot → personal xG → P(score ≥1)
HT Result / WEH / HT/FT
Split Poisson
Goal-timing distribution applied to separate 1st and 2nd half xG

Head-to-Head Adjustment

The raw probability from the Poisson model represents the expected outcome for two teams of their respective quality playing in a neutral context. In practice, specific fixture pairings have persistent structural patterns that xG averages do not fully capture — tactical match-ups between coaching styles, psychological dynamics at particular venues, and historical tendencies that repeat across seasons.

When two teams have met in 6 or more comparable fixtures (home/away at the same venue, same competition type), the AI blends the H2H historical rate for the specific market being predicted at a 30% weighting into the final probability:

P_final = (0.70 × P_model) + (0.30 × P_h2h)
Where P_model = Poisson/Dixon-Coles model probability
And P_h2h = historical H2H rate for the same market outcome

The 70/30 split was determined through backtesting — higher H2H weightings produced worse out-of-sample accuracy for most fixture pairs because the historical samples are small (typically 6–15 games) and dominated by seasonal noise. The 30% weighting captures genuine fixture-specific patterns without overfitting to small samples.

Example: xG vs H2H conflict

Arsenal vs Chelsea. xG model estimates 72% probability for Over 2.5 goals based on combined home/away xG projections. H2H Over 2.5 rate across the last 10 meetings: 50%. Final probability: (0.70 × 0.72) + (0.30 × 0.50) = 0.504 + 0.150 = 65.4%. The H2H adjustment pulled the probability down by 6.6 percentage points, changing the confidence tier from Very High to Good — reflecting the genuine historical pattern that this fixture produces fewer goals than the individual xG profiles suggest.

For new fixtures where the teams have met fewer than 6 times, or first-time Premier League match-ups between newly promoted sides, the H2H component is weighted at zero and the model probability is used in full. The blended weight transitions linearly from 0% at 3 meetings to 30% at 6+ meetings to avoid introducing noisy H2H signals from very small samples.

Confidence Calibration

The final blended probability is mapped to one of four confidence tiers. These tiers are not arbitrary labels — they have been validated against 847 tracked tips to ensure the AI's stated probability is genuinely predictive of the actual win rate in practice.

Tier AI probability range Actual win rate (tracked) Recommended stake
Exceptional 88% and above 84% from 312 tips 2% of bankroll
Very High / High 76% – 88% 73% from 248 tips 1.5% of bankroll
Good 65% – 75% 61% from 187 tips 1% of bankroll
Moderate 55% – 65% 49% from 100 tips 0.5% of bankroll

The actual win rates track consistently below the AI's stated probabilities by 3–5 percentage points — a known and expected phenomenon called calibration gap. This occurs because the model's probability estimates reflect the theoretical expected outcome given the statistical inputs, while real-world match outcomes carry additional variance not captured in xG or H2H data (referee decisions, individual errors, weather, fatigue). The calibration gap is narrow enough that the tiers remain meaningfully differentiated: Exceptional tips always outperform High, which always outperform Good.

Calibration validation

The most important test of a confidence rating system is whether higher-rated tips consistently win more often than lower-rated tips — not whether the stated probability exactly matches the win rate. PunterScore's tracked data confirms this ordering is preserved across all 847 recorded tips. The Exceptional tier (84% actual) comfortably outperforms Very High/High (73%) which outperforms Good (61%) which outperforms Moderate (49%). This monotonic ordering validates the confidence rating as a genuine signal rather than a decorative label.

Value Filter & Publication Logic

A tip with a high AI probability is not automatically a good bet. If the bookmaker has already priced the same probability into their odds, there is no expected value in backing it. PunterScore applies a mandatory value filter before every tip is published.

The bookmaker's offered odds are converted to an implied probability: 1 ÷ odds. For example, odds of 1.80 imply a probability of 1 ÷ 1.80 = 55.6%. If the AI's model probability exceeds the implied probability — i.e., the AI thinks the outcome is more likely than the bookmaker does — the tip has positive expected value and is published. If the implied probability exceeds the AI's estimate, the tip is filtered.

Expected Value (EV) = (P_ai × odds) − 1
Publish if EV > 0 (i.e. P_ai > 1 ÷ odds)
Filter if EV ≤ 0 (i.e. P_ai ≤ 1 ÷ odds)

The reference odds used for the value check are the best available odds across major bookmakers at the time of publication, not a single operator's price. This means PunterScore's value filter reflects the best-case pricing available to the bettor, not a single market's sometimes inferior prices.

Approximately 18% of potential tips pass the probability model and confidence threshold but are filtered at the value check stage. This happens most frequently with very heavily-favoured sides at short prices — the bookmaker has already compressed the edge out of the straight match result. In these cases, alternative markets on the same team (Draw No Bet, Win Either Half, Handicap) typically pass the value filter because the odds-to-probability ratio in these markets is less efficiently priced by bookmakers.

55%Min. AI probability to publish
>0Required expected value
~18%Tips filtered at value stage
Best oddsReference price used

Model Validation & Ongoing Review

Every tip published on PunterScore is logged at time of publication and its result recorded after the match. This creates a continuously growing empirical record that allows the model's performance to be monitored, and its parameters to be adjusted when systematic errors are detected.

The model is reviewed in three ways. Calibration review checks whether the actual win rate within each confidence tier is drifting away from the predicted range — if Exceptional tips begin winning at only 70% over a sustained run, the probability model may be overestimating certainty in specific market contexts. Market review checks whether any individual market is significantly outperforming or underperforming its modelled expected ROI — sustained over- or underperformance indicates a structural edge or deficit the model should account for. League review checks whether performance is consistent across leagues — consistent underperformance in a specific league suggests the xG data quality or sample size for that league is insufficient.

Current findings from the validation process that have already been incorporated into the model include: the 18% draw probability threshold for Draw No Bet market selection (below which the straight win produces better expected value); the Bundesliga adjustment applying a +4% probability uplift to Over/Under 2.5 tips in Bundesliga fixtures (confirmed by 81% historical win rate vs 74% overall); and the correct score 2-0 value window (bookmakers systematically underprice this scoreline in home-dominant fixtures, producing a +2.1% expected value advantage).

The full results record — including all losing tips — is publicly available at punterscore.com/results. We do not selectively exclude underperforming markets or periods from the tracked record.

Known Limitations

Statistical models of football outcomes have inherent limitations. Being explicit about them is both intellectually honest and practically useful — it helps users understand where the model's edge is strong and where additional caution is warranted.

Team news and lineup changes. The model's xG inputs are based on season-average team performance. A key player's absence — a leading striker injured, a defensive anchor suspended — can significantly shift the expected probability distribution in ways that season-average data does not capture in real time. For all player-dependent markets (Anytime Goalscorer, correct score predictions dependent on specific attacking players), confirmed lineups should always be checked before placing any bet. Tips are updated when significant team news breaks, but there is always a window of uncertainty before confirmed lineups are released.

Referee and match-control factors. xG models predict scoring chance creation but cannot model refereeing tendencies, red card probabilities, or the systematic tactical adjustments teams make in response to match-state events like going a goal up or a man down. These factors introduce additional variance beyond what the xG model captures.

Short-season samples. At the start of a season, every team has fewer than the ideal 10+ games of home or away data. Tips generated on 6–9 game samples carry inherently higher uncertainty — confidence ratings should be treated with additional caution for the first 6 matchdays of any season.

Weather and pitch conditions. Extreme weather — heavy rain, strong wind, frozen pitches — can significantly suppress goal output in ways that season-average xG data does not reflect. The model does not currently incorporate real-time weather data. Users should apply their own judgment when tipping Under goals markets in forecast extreme weather conditions.

European competition crossover. Teams playing UCL or UEL fixtures midweek may rotate significantly for domestic fixtures. The model uses season-average data that blends rotation and full-strength performances. For teams with heavy European commitments, domestic away predictions in particular should be treated with additional caution.

In summary

PunterScore's model is most reliable in the following contexts: domestic league fixtures for well-established clubs with 10+ games of home or away data, goals markets (which are less sensitive to lineup changes than result markets), and teams with consistent tactical styles that produce stable xG profiles season to season. It is least reliable in cup competitions with rotated lineups, fixtures involving newly promoted clubs with limited data, and result markets for closely-matched mid-table teams where xG differentials are small.

See the model in action
Today's full tip sheet — 180+ tips across 16 markets — free, updated every 15 minutes.
View Today's Tips →

PunterScore is an information and analysis service — we do not accept bets. All predictions are AI-generated statistical estimates, not financial advice. Gambling involves risk. Only bet with money you can afford to lose. 18+ only. Support: BeGambleAware.org · GamCare.org.uk