players
16–26
all
What does each column mean, and how is it calculated?
Scout

A ranking, not a grade. It blends 60% the α forecast y 40% the z quality, each part measured in standard deviations within their position — a +2.0 is two deviations above the average player in their position.

It only scores players performing above their league and position average (z ≥ 0.5). Without that floor, the ranking fills up with cheap kids who don't play well yet.

It used to be half quality and half bargain, and the result was 28-year-olds in fourth divisions: genuinely cheap, genuinely useless.

α 12 meses

How much we expect their market value to change in one year, as a percentage. It comes from a model trained on 89,983 player-seasons with their performance, league difficulty, age, starting price, club strength, and international cup matches.

Validated out of sample the way it should be: trained through 2023 and tested on 2024 onwards, with players the model never saw. Rank correlation 0.72 sobre 43.800 casos.

It's an estimate, and in new leagues it's less accurate (0.66 versus 0.77 in the usual ones).

And it's calibrated by data coverage. Measured out of sample, the model raw promised too much precisely where data is scarcest: in leagues with coverage <60% forecast +29% where the outcome was +16%, and in the top decile — where the ranking lives scout-style — promised +33pp too much, while shortchanging the well-covered leagues. That is why the scout top filled up with weak leagues. Each coverage band is recalibrates now against what that band actually delivered: the promise of a league a medio cubrir vale ×0.74, that of a fully covered one ×1.08. After the adjustment, the excess sits at ~0 across all four bands.

★ Player of the match

How many times they were the highest-rated of the 22 on the pitch this season. SofaScore doesn't publish that award as a data point: it goes to the highest rating of the match, and we already had the match-by-match ratings, so this is arithmetic on our own data, not a new source.

It measures something different from z: they correlate 0.57. The z is consistency, this is peaks. Over 89,983 player-seasons it's worth t=+22.6 on top of quality, age, price and year — from 0 awards to 9 or more, value went from +14% to +45%.

It doesn't improve the forecast: adding it to the model moved the IC from 0.7232 to 0.7234. The model already extracted that signal from other variables. It's here because you get it at a glance, not because it adds precision.

Profile by area

Each axis is the average of the percentiles we have for that area, measured within their position family and against all 147 leagues. The problem is that not all leagues publish the same metrics: the Primera Federación provides one of the three Finishing metrics, the Premier all three.

And averaging one metric is not the same as averaging three. With one, a single good number is enough to reach 99; with three, you need three. Without correcting it, the 9,7% of players with a single metric reached 90 or more in Finishing, versus the 0,2% of those with three — not because they were better, but because their average wasn't diluted. The complete ones came out penalized.

Now each player is ranked against the others measured with the same metrics, within their position family. That way a 90 means the same thing everywhere: the top 10% among those measured the same way.

We didn't pick it by eye. In leagues that publish everything we know the answer, so we masked two out of every three metrics precisely in the weakest leagues — which is how coverage actually fails — and checked which rule recovers the number we would have given with complete information. Across five categories and 106,000 players, ranking within the group was the only thing that kept the tails even in all five (10,0% contra 10,0%), and in Defense it was also the best at reproducing the real order between leagues (error 0.022 versus 0.294 for no correction at all).

The cost: within a category, level differences between coverage groups get flattened — in Defense the blinded group sits 5.2 points below its truth. Calibrating the shift instead of ranking recovers that (bias +0.5) and is more accurate player by player, but leaves the poor-league player with a 0,7% chance of reaching 90 versus the 17,2% of everyone else: it gives the ceiling back, which is the bug we came from. For a number that gets compared across profiles, we'd rather it mean the same thing in all of them.

✚ Days out

Days lost to injury over the last two years, from Transfermarkt's history, with the type of the longest injury. It covers all 15,167 players on the platform.

What an injury costs we measure over 45,538 player-seasons, and the honest comparison is lesionado contra lesionado: someone with zero days out may be healthy or may just not be playing, and mixing them makes a short knock look like it suma. Among those who did get injured, doubling the days out costs −3,6% of the following year's value (t=−12,4). Versus an absence of a month or less: 1-3 months −6,3%, 3-6 meses −12,7%, more than half a year −15,9%.

It doesn't enter the model either: the IC goes from 0.7581 to 0.7590. Minutes are already in, and not playing is the injury's channel — with minutes in the regression, the effect of 6+ months collapses from −7.9% to −0.1%. And it doesn't explain our fights with the market: the median is 0 days across all gap bands, and among the 300 largest gaps there's 13.0% with four months lost versus 10.5% of the rest. It's a data point to read, not a discount on the price.

z · calidad

Their average SofaScore rating, converted to standard deviations within their own league, season and position. A 7.2 doesn't mean the same in the Premier as in the Peruvian second tier; this puts it on the same scale.

Before standardizing we subtract their club's quality, because otherwise a good keeper on a relegation side got punished for the goals conceded and a mediocre one at the champions got rewarded.

Fair value and gap

El fair value is what their profile justifies charging today: quality, league difficulty, age (smooth curve, not brackets), minutes, goals and assists, club strength, contract years remaining, being a foreigner in their league, an exporter-country passport, and height where the market pays for it (keepers and center-backs). R² sobre players today.

La brecha is the difference with the Transfermarkt price. +50% means the market pays 50% below what the profile justifies. It's re-centered against the best-paid position they can play: a winger who also plays as a playmaker is compared with playmakers.

Validated where it matters: on the historical panel, players in the most undervalued decile went up the following year and those in the most overvalued went down, across all ten deciles without jumps. But it doesn't predict a club overpaying above the list price — we tested that against real transfers and it doesn't hold up.

One single model, and why. Every new data point that arrived — height, versatility, fine-grained position, player of the match, injuries, and FotMob's advanced metrics (recoveries, pressing, blocks) — went through the same test: does it improve the gap's ability to anticipate what the market does afterwards, out of sample? All of them improve the fit to today's price; none improved the prediction, FotMob included (IC 0.359 without, 0.352 with, over 7,783 historical player-seasons). So they're shown as data on the profile and don't enter the model. Only contract and passport made it in, and only because the market pays for them.

The €60M cap — who we do NOT value. There is no valuation for players above €60M, and they're not in the Explorer: above that price, market value is marketing, scarcity and clauses — things this model doesn't measure. And there isn't enough history to calibrate: in 98,000 player-seasons there isn't a single case of a ≥€30M player the model called 40% overvalued where you can check what happened, and buy signals in €60–100M hit 13% — worse than a coin flip. Rather than invent a number for Bellingham, we stay quiet. Our turf is the market where a real club buys: from €0 to €60M. Between €15M and €60M the player is shown, but a negative gap gets explained rather than asserted (the star premium isn't in the regression).

A gap of +200% doesn't mean the same at 19 as at 31, and the probability that comes with it knows that: the certainty model takes the gap along with age and price, and returns what a gap like that, in that profile, did afterwards. For a cheap under-22 P(rises) usually tops 80%; past 30, with the same gap, it drops below 20%. No caps, no lookup tables: the same probability for everyone, calibrated.

PlayerPosClub · LeagueAge Scoutα 12m zP(corrige)ContratoValue JustoBrecha
Top 5 by position · model gap
Pick a club: squad (who's performing and who isn't), holes, signings that fit what that club actually pays, by position, and free agents.
How players adapt when changing leagues · 6,800 moves
Pick your club's league to see where it pays to sign from.

How much certainty we have, and in whom

Cargando…

League index · money versus quality

Two independent measures of the same league. Plantilla mediana is money: the Transfermarkt value of the median squad, today. Calidad is football: how hard it is to rate highly there, measured with players who changed leagues, in rating points equivalent to the Premier. They correlate — the difference is the interesting part: a league with more quality than it pays for is a league where the market lags behind the game.

What each number measures

z — how much they perform above their league and position average, after subtracting their club's quality. A +2.0 is a player clearly above their context.

Fair value — what the profile justifies charging: performance, league difficulty, age, minutes, attacking output. Adjusted for the age×quality interaction (the same quality is worth 2.5× more at 17 than at 30).

Brecha — difference with the Transfermarkt price. Green: the market pays less than the profile justifies.

The €60M cap — we don't value players above €60M, and they don't appear in the Explorer. Above that price, value is marketing, scarcity and clauses — things the model doesn't measure — and there isn't enough history to calibrate: buy signals in €60–100M hit 13%, worse than a coin flip. Rather than invent a number for Bellingham, we stay quiet. Our turf is the market where a real club buys: from €0 to €60M. Between €15M and €60M the player is shown, but a negative gap gets explained rather than asserted.

α 12m — how much the model expects their value to change in one year. It's the prediction, not the valuation.

Scout — 60% 12-month prediction, 40% quality, and only among those performing above their league average (z ≥ 0.5). Sorting by gap alone surfaces players who are cheap because they're bad; by quality alone, unaffordable stars.

How good they are

Loading the validation…

Where NOT to trust it

Where the gap is uninformative the player card says so in those words: in their age-and-price profile, knowing the gap did not improve the prediction over the base rate. In practice: the very expensive and the over-30s. The market sees potential, pedigree and contract there that a performance model does not observe. The probability is still correct —it is calibrated— but it comes from the profile, not from the gap. There is no more «not estimable» by decree: an 8% is a number, not a wall.

Ligas marcadas «extrap.» — the model has almost no training data there (Kosovo 2%, Egypt 1%). The performance side is comparable; the price is extrapolation.

Over 30 — we observe neither contract nor resale value, so they show up cheap without being cheap.

And in my league? the same backtest, league by league, with names

"The top 10% got signed 1.8x more often" is measured across 155 leagues, Premier included. This is the same thing, but in the league you pick: how many young players the model flagged as undervalued, how many actually rose, who they were — and the one that turned out worst, because without the worst case it is not an argument, it is a brochure.

Theories put to the test

Against transfers that actually happened