z-scores: Giving meaning to the numbers
A raw stat on its own only tells part of any story. Knowing that a striker in Eredivisie scored 40 league goals in a season is all well and good, but what does that mean when tyring to meaningfully understand how that player stacks up to others? Without knowing what other players scored that same season, in that same league, it's impossible to say.
A z-score solves this by measuring how far a value sits from the average, expressed in units of standard deviation.
This means that a z-score transforms raw numbers into context-aware performance signals, making it possible to compare stats across different leagues, different seasons, and different playing styles on a level playing field.
How Football Apptitude uses z-scores
Every stat Football Apptitude carries a z-score calculated against a relevant reference population (e.g.: The league average for that season, or the team average for midfielders… among others).
These are pre-computed and stored directly alongside each team's and player's raw stats in the database, so they're always available instantly.
Excellent: (z ≥ 1.5) — Green
Above Average: (0.5 ≤ z < 1.5) — Light Green
Average: (-0.5 ≤ z < 0.5) — Yellow
Below Average: (-1.5 ≤ z < -0.5) — Orange
Very Poor: (z < -1.5) — Red
This colour language is universal throughout the app — whether you're reading a stat table, scanning a radar chart, or looking at a diverging bar chart, green always means strong and red always means weak, relative to the comparison context in use. this includes Reverse Scored stats as a higher number in a given stat does not always indicate a better performance (e.g.: Goals Conceded, Fouls conceded, yellow cards). For these, lower is better. The app flags these stats and flips the z-score sign before categorizing, so the colour coding remains intuitive: a team that commits very few fouls still shows green, not red.
The Power of z-scores in Action
The power of z-scores in Football Apptitude is the ability to change what you're measuring against:
Own league: how does a team rank within its natural competitive context?
A foreign league: how would this team's numbers look if they played in a different competition?
Directly against another team: treating one team's raw value as the baseline (z = 0) and measuring the other relative to it.
This flexibility means z-scores wont only answer a question such as "is this stat good?", they will go further and answer "is this stat good compared to another related stat?", which is the question that actually matters in analysis.
This is particularly useful when analysing data for prospective club signings from foreign leagues...

