How to Track Player Form Trends Using Rolling xG and xA
You’re watching a forward score three goals in two matches and think he’s “on fire.” But is he actually creating high-quality chances, or just riding a hot streak? That’s where rolling expected goals (xG) and expected assists (xA) come in. These metrics smooth out the noise of individual match results and reveal whether a player’s performance is sustainable or just variance. In this guide, you’ll learn how to calculate, interpret, and use rolling xG and xA to spot real form trends—without falling for small-sample mirages.
Why Rolling Averages Beat Raw Match Data
A single match can distort your view. A striker might score from a half-chance (low xG) or miss a sitter (high xG). Raw totals don’t tell you if the player is consistently getting into dangerous positions. Rolling averages—typically over 5 or 10 matches—smooth out those spikes and dips, giving you a clearer picture of underlying performance.
Think of it like a moving average in stock trading: you’re filtering out daily noise to see the trend. For player analysis, a 5-match rolling window is common for detecting short-term form, while 10-match windows reveal longer-term trends. The key is consistency. If a player’s rolling xG per 90 stays above 0.5 for several windows, that’s a genuine hot streak. If it bounces between 0.2 and 0.4, that’s average finishing luck.
Step 1: Collect Match-by-Match xG and xA Data
You need individual match data, not season totals. Public sources like FBref, Understat, and Opta-powered sites provide per-game xG and xA for most leagues. Export or note down each player’s xG and xA for every match in your chosen window.
For example, take a Premier League winger over his last 10 appearances:
| Match | xG | xA |
|---|---|---|
| 1 | 0.15 | 0.10 |
| 2 | 0.45 | 0.30 |
| 3 | 0.05 | 0.20 |
| 4 | 0.60 | 0.05 |
| 5 | 0.10 | 0.40 |
| 6 | 0.35 | 0.15 |
| 7 | 0.50 | 0.25 |
| 8 | 0.20 | 0.10 |
| 9 | 0.40 | 0.35 |
| 10 | 0.30 | 0.20 |
This raw data is your foundation. Without it, rolling calculations are impossible.
Step 2: Calculate the Rolling Average
For a 5-match rolling xG, sum the xG from matches 1–5, divide by 5, then shift one match forward for the next window. Do the same for xA.
Using the table above:
- Window 1 (matches 1–5): (0.15+0.45+0.05+0.60+0.10) / 5 = 0.27 xG
- Window 2 (matches 2–6): (0.45+0.05+0.60+0.10+0.35) / 5 = 0.31 xG
- Window 3 (matches 3–7): (0.05+0.60+0.10+0.35+0.50) / 5 = 0.32 xG
- Window 4 (matches 4–8): (0.60+0.10+0.35+0.50+0.20) / 5 = 0.35 xG
- Window 5 (matches 5–9): (0.10+0.35+0.50+0.20+0.40) / 5 = 0.31 xG
- Window 6 (matches 6–10): (0.35+0.50+0.20+0.40+0.30) / 5 = 0.35 xG
Step 3: Compare Rolling xG to Actual Goals
Now the interesting part. Compare the player’s actual goals per match to their rolling xG. If actual goals consistently exceed rolling xG by a wide margin, the player is overperforming—likely due to finishing luck or a hot streak. If actual goals fall below rolling xG, they’re underperforming and due for regression.
For example, if our winger scored 4 goals in 10 matches but his rolling xG averaged 0.32 per match (3.2 total), he outperformed by 0.8 goals. That’s a small margin, but if it were 2+ goals over 10 matches, you’d expect a cooling-off period.
This comparison is especially useful for identifying players whose form is unsustainable. A striker with a rolling xG of 0.4 but 0.8 actual goals per 90 is likely to slow down. Conversely, a midfielder with low actual assists but a rising rolling xA might be due for an assist spike.
Step 4: Look for Trend Direction, Not Just Level
A single rolling average value tells you the player’s current level. But the direction of the trend matters more for predicting future form. Plot the rolling xG and xA over time—even a simple line in a spreadsheet works.
Ask yourself:
- Is the rolling xG rising over the last 3–4 windows? That suggests improving shot quality or volume.
- Is it flat? The player is consistent, but not breaking out.
- Is it falling? Form is declining, and a dip in actual output may follow.
Step 5: Account for Minutes Played
Rolling xG and xA should always be per 90 minutes, not raw totals. A player who comes off the bench for 20-minute cameos will have lower raw numbers but might have excellent per-90 rates. Normalize by dividing each match’s xG by minutes played, then multiply by 90.
For instance, if a substitute plays 25 minutes with 0.20 xG, their per-90 xG is (0.20 / 25) 90 = 0.72. That’s a high rate, even if the raw total looks small.
When building your rolling average, use per-90 values for each match. This ensures you’re comparing apples to apples, especially for players with irregular playing time.
Step 6: Combine with Shot Maps and Passing Data
Rolling xG and xA are powerful, but they’re not the whole story. Use them alongside shot maps (shot location and body part) and passing networks to understand how* a player is generating those numbers.
A winger with high rolling xG might be taking most shots from inside the box (good) or from long range (less sustainable). A midfielder with high rolling xA might be delivering crosses from wide areas or threading through balls centrally. Combining metrics gives you context.
For deeper analysis, check out our guides on player body position and shot angle metrics and pressing triggers and counter-press success rate. Both complement form trends by showing how a player’s movement and defensive work affect their output.
Step 7: Use Rolling Trends for Tactical and Transfer Decisions
Rolling xG and xA aren’t just for post-match analysis. They can inform lineup decisions, tactical adjustments, and even transfer market evaluations.
If a striker’s rolling xG has been declining for 5–6 matches, a coach might consider dropping them or adjusting the service they receive. A scout looking at a target with rising rolling xA over 15 matches sees a player whose chance creation is improving, not just a lucky assist streak.
For transfer market context, compare rolling xG/xA to Transfermarkt value and contract expiry. A player with rising form trends but a low market value might be undervalued—but remember, no metric guarantees future performance.
Common Pitfalls to Avoid
- Using too small a window: A 2- or 3-match rolling average is still noisy. Stick to 5 or 10 matches.
- Ignoring opposition quality: A player facing weak defenses might inflate their xG. Consider adjusting for opponent strength.
- Confusing correlation with causation: High rolling xG doesn’t mean the player will score. It means they’re getting good chances—finishing is still variable.
- Overinterpreting small sample sizes: A 5-match window is useful, but don’t draw firm conclusions from one trend. Look for consistency across multiple windows.
Final Checklist for Tracking Rolling xG and xA
- Collect match-by-match xG and xA from public sources (FBref, Understat, Opta)
- Normalize all values to per 90 minutes
- Calculate 5-match and 10-match rolling averages
- Compare rolling xG to actual goals to spot over/underperformance
- Plot trend direction over 3–5 windows
- Combine with shot maps and passing data for context
- Use trends for lineup, tactical, or transfer decisions—but never as guarantees
For more on player performance metrics, explore our hub on player-team statistics and related guides like pressing triggers and counter-press success rate.
