rxG Models
TECHNICAL NOTE · v1.3 · REV. 2026

Rolling Expected Goals · Sports Modeling

The rxG model, explained

A working note on rxG, In Play Radar's proprietary rolling expected goals metric: how a time-decayed shot quality estimate captures a team's present scoring strength better than a flat season average, and how it feeds advanced statistical football models.

Input
Per-shot xG
Window
Exponential
Half-life
≈ 6 matches
Output
Form-aware rate
00

Abstract

Expected goals (xG) scores the quality of every shot a team takes, but the way most tables aggregate it - a flat average over a season - quietly assumes a team is the same in August as it is in April. It is not. Squads change, tactics shift, and injuries land. rxG is the proprietary rolling expected goals metric developed by In Play Radar: it replaces the flat average with an exponentially weighted window that leans on recent matches and lets old ones fade. The result is a single, continuously updating estimate of how good a team is at creating and conceding chances right now.

This note walks through the math behind the metric, from the per-shot model up to the rolling estimator, shows where it diverges from season xG, and explains how In Play Radar's rxG modelleme turns that output into a live match model.

01

From shots to expected goals

A single shot's xG is the probability it becomes a goal, estimated from features known at the moment of the strike: distance, angle, body part, assist type, and the phase of play. A shot from the penalty spot might carry xG = 0.76; a speculative effort from thirty yards, xG = 0.03.

A team's expected goals for a single match is just the sum across its shots:

xGmatch = Σ p(shoti)
Match xG

Aggregating that across a season gives a stable, descriptive number. The problem is purely one of weighting: a flat season average treats a match from nine months ago as exactly as informative as last weekend's. For prediction, that is the wrong assumption.

02

The rolling decay window

The fix is to weight each past match by its recency. Instead of a hard cutoff (“last 6 games”), rxG uses an exponential decay: every match further back contributes a little less than the one after it, with weights tapering smoothly toward zero. A match k games ago gets weight:

wk = λk,  0 < λ < 1
Decay weight

Here λ (lambda) is the decay factor. A value near 1 forgets slowly and behaves almost like a season average; a smaller value forgets fast and tracks short-term form. The chart in section 04 shows the shape of these weights.

Match weight by recencyλ ≈ 0.79
last match8 games ago
03

Defining rxG formally

Put the per-match xG and the decay weights together and rxG is a weighted mean of a team's recent match xG values. With x_k the xG from the match k games ago:

rxG = Σ λk xkΣ λk
Rolling expected goals

The denominator normalises the weights so the output stays on the same scale as raw xG - it reads as “goals per match,” not an arbitrary index. Two teams with identical season totals can carry very different rxG values if one is trending up and the other is fading.

In practice the proprietary estimator runs twice per team: rxG-for (attack) and rxG-against (defence, built from chances conceded). The pair is the team's current attacking and defensive strength, and it is the backbone of In Play Radar's expected goals analysis.

04

Season xG vs. rxG

The difference is easiest to see over a run of matches. Season xG is a flat line - it only moves a little as the denominator grows. rxG breathes with results: it climbs through a hot streak and drops through a cold one, because recent matches dominate the weighted mean.

Same team, two estimates · 13 matches
rxGseason
0.51.01.52.02.5
match 1match 13

Over the stretch above, the two series agree on the team's average level but disagree sharply on its current level. A model that has to predict the next match cares about the second.

05

A worked example

Take six recent matches and a decay factor λ = 0.794 (a six-match half-life - see section 06). Each match's xG is weighted, summed, and divided by the total weight.

Weighted contribution of each recent match to rxG
kMatchxGWeightxG × w
0Last match2.401.0002.400
12 games ago1.850.7941.469
23 games ago0.950.6300.598
34 games ago1.600.5000.800
45 games ago1.100.3970.437
56 games ago0.700.3150.220
Totals3.6365.498

Dividing the weighted xG by the total weight gives 5.498 / 3.636 = 1.51 rxG. The flat six-match average is 1.43. The two strong recent games pull the rolling estimate above the plain mean - the team is rated as creating about 1.51 quality goals per match at this moment.

06

Calibration & half-life

The only real tuning knob is λ, and it is more intuitive to think in terms of half-life: the number of matches after which a result's weight has halved. The two are linked by:

λ = 2−1 / h|h = 6 ⇒ λ ≈ 0.891
Half-life

A short half-life (2 - 3 matches) makes rxG twitchy and reactive - good for spotting a sudden tactical change, bad for noise. A long half-life (10+) is stable but slow. In football, a half-life of roughly five to eight matches tends to maximise out-of-sample predictive power; it is short enough to register a change of manager, long enough to ride out one freak scoreline.

The factor is fit by optimising predictive accuracy: pick the λ whose rxG values minimise log-loss against actual results on held-out matches, not by hand.

07

Application in match modeling

rxG is rarely the final product - it is the clean, proprietary input the rest of In Play Radar's statistical football model is built on. A few of the places it lands:

01

Match outcome odds

rxG-for and rxG-against feed a bivariate Poisson model that turns two strength numbers into win / draw / loss probabilities and a full scoreline grid.

02

Form detection

The gap between rxG and season xG is itself a signal - a widening positive gap flags a team improving faster than the league table has caught up to.

03

Live in-play shifts

Because rxG updates after every match, pre-game strengths can be carried straight into in-play models and nudged as chances accumulate.

04

Mispricing checks

Comparing a model's rxG-derived probabilities against the market surfaces matches where the price disagrees with the underlying chance quality.

See it live

rxG, running on real matches

In Play Radar applies its proprietary rolling expected goals metric to live and upcoming fixtures - turning the math on this page into form-aware ratings and probabilities you can read at a glance. The full rxG modelleme breakdown shows how the metric drives each strategy.