We use cookies to measure how the site is used so we can improve it. Change your choice anytime via “Manage cookies” in the footer. See our Privacy Policy.
How our player-value model works: 87 signals, one honest number
Every eligible player on Oddsivio carries an estimated value in euros. Here's exactly how the model produces it — the 87 signals, the benchmarks it learns from, the confidence rules, and the numbers we refuse to publish.
By the Oddsivio team·9 min read
There's a number on almost every player page on Oddsivio: Lamine Yamal — €204m. This post explains where that number comes from — all of it. What goes into the model, what it's calibrated against, how often it recomputes, what it deliberately ignores, and the two situations where we refuse to show you a number at all.
We publish this for the same reason our prediction engine's methodology is public: a number you can't interrogate is marketing. A number you can check is analysis.
What the number is — and what it is not
An Oddsivio estimated value is our model's estimate of what a player would be worth on the transfer market today, in euros. It is a statistical estimate: a prediction produced by a fitted model reading performance data, recomputed weekly for every eligible player.
It is not a market price, an asking price, a release clause, or a fee we expect any club to pay. Transfer fees are negotiated by humans under deadline pressure, distorted by contract situations, selling-club leverage and buying-club panic. No model knows those in advance — ours doesn't try. What it tries to answer is narrower and more useful: given everything this player has done on the pitch recently, what does that level of production usually cost?
One number, by the way — never a range. If we're going to be wrong, we'd rather be checkably wrong than hide inside a wide interval.
The number in its natural habitat: the value chip on a player page, with its one-line definition.
The 87 signals, in plain English
Before producing a value, the model reads 87 signals per player. Listing all 87 would be a spreadsheet, not a blog post, but they group into six families:
1. Output. Goals, assists, key passes, shots and shot accuracy, dribbles attempted and completed, duels won, tackles and interceptions — all normalised per 90 minutes, so a starter and a super-sub are measured on the same scale. Goalkeepers bring their own block: saves, goals conceded, penalties saved. Because our data provider doesn't supply expected-goals numbers, chance creation is built from what it does supply — assists plus key passes — and we'd rather tell you that plainly than imply an xG model that isn't there.
2. Minutes and role. Total minutes, matches started, and a squad-status reading — is this player a star, a regular starter, rotation, or a backup? Availability is informative: managers pick their most valuable players, week after week, in a way no single statistic captures.
3. Age — with bends in the curve. Age doesn't enter as one number. The model is allowed to bend the age curve at 21, 27 and 31 — so the cost of a year is different for a teenager, a peak-years player and a veteran. This is exactly what lets it rank a 19-year-old above a 27-year-old at similar output: the 19-year-old's production is rarer, and the market has historically paid for that rarity.
4. Where the production happened. A goal in the Champions League is not a goal in a domestic cup. Every performance is weighted by competition — continental football counts most, domestic leagues next, domestic cups least — and by the strength of the league and the player's club, measured by Elo-family ratings. Club stature enters too, via club revenue: the shirt a player wears carries real information about the level he was signed to play at.
5. International pedigree. Senior caps and the strength of the national team. A regular for a top-ten footballing nation carries a signal that club stats alone miss.
6. Trajectory. The model looks at up to three years of club football, with recent seasons weighted heaviest, and reads the slope: is this player's output rising or fading? Two players with identical last-season numbers are not identical if one is 12 months into a climb and the other 12 months into a decline.
International friendlies and national-team minutes are deliberately excluded from the performance window — international pedigree enters only through the caps count above, not by mixing qualifier minutes into club form.
How it learns: benchmarks, not vibes
The signals need a currency. The model is calibrated against several hundred hand-verified transfer-market benchmarks — real, current market valuations of players across the leagues we cover, checked one by one — so that a given level of production maps onto what the market has actually paid for it.
The machinery is deliberately boring: a regularised linear model, fitted in logarithmic euro space. We evaluated fancier things — gradient boosting, model stacking. They scored better on players from leagues they'd seen and worse on leagues they hadn't, which is the statistical signature of memorisation, not understanding. The linear model generalises; the clever ones gossip. We shipped the boring one.
Two properties of that choice are worth knowing:
The model can say "irrelevant." The fitting process is allowed to zero out signals entirely — and it did: 20 of the 87 got exactly zero weight. What survives earns its place.
It's testable. We validate two ways: on randomly held-out players, and — harder — by hiding an entire league during training and asking the model to price its players cold. Our yardstick is being within a factor of two of the benchmark. In covered leagues, more than four players in five land inside it; on leagues the model has never seen, roughly three in four. We'd rather publish that honest number than imply decimal-point precision.
There's one more guard at the top: a soft ceiling. Above roughly €200m — the most expensive benchmark the model has ever been shown — it keeps only half of any further increase. Extrapolating beyond your evidence is how models embarrass themselves.
A worked example: Yamal, Mbappé, Haaland
As of this week's run, the top of the whole model — 7,397 players across 16 competitions — reads:
Lamine Yamal (19, Barcelona) — €204m
Kylian Mbappé (27, Real Madrid) — €187m
Erling Haaland (26, Manchester City) — €166m
The top of the Player values table, as of the 10 August run. A 19-year-old above everyone.
Mbappé and Haaland out-produce almost everyone on raw output, and the model prices them accordingly. What separates Yamal is the age curve doing exactly what it was fitted to do: elite output at 19, in an elite league, for an elite club, with three seasons of rising trajectory, is the rarest commodity in football — and the benchmarks the model learned from say the market prices it that way. Note that €204m sits above the soft ceiling: past €200m the model only credits half of every additional signal, so a number up there means the inputs are screaming.
The same logic, run down the age curve, produced our five U21 league rankings — Premier League, La Liga, Bundesliga, Serie A and Ligue 1 — every entry priced by this model, no editorial thumb on the scale.
Confidence: three tiers, two of them visible by their absence
Every estimate carries an internal confidence tier — high, medium or low — set by three plain rules:
1,800+ minutes in the performance window, in a league the model was trained on → high.
Fewer minutes than that → medium. The signals are real but the sample is thin.
A league outside the model's training set, or any goalkeeper → low.
Goalkeepers are the model's honest weakness. Keeper value lives in things our signals barely see — command, distribution under press, one-in-a-season saves — and the model systematically under-prices them. When our Ligue 1 U21 ranking listed keeper Robin Risser at €24m on low confidence, the right reading was "at least this much," not "exactly this much." We say so wherever a keeper value appears.
And there's a rule that removes numbers entirely: when confidence is low and the figure would be extreme — €50m or more — we withhold it rather than publish a number we don't trust. That rule has a scar behind it: an early version of the model once priced an 18-year-old on a thin sample of loan minutes at €99m. The number was defensible arithmetic and obvious nonsense. Now it's the kind of number you'll never see on the site — which means every value you do see has cleared that bar.
What the model deliberately ignores
As important as what goes in is what stays out. The model reads no wages, no contract lengths, no agent talk, no transfer rumours, no fees paid, no media hype. Not because those don't move real-world fees — they clearly do — but because a performance model that ingests market noise stops being a check on market noise. When a rumoured fee looks wild against our estimate, that gap is the story; a model fed on rumours could never see it.
(The relationship runs the other way instead: our transfer-rumour cards sanity-check rumoured fees against the model's estimate.)
Two more honest gaps. Our provider supplies no expected-goals or progressive-passing data, so those aren't in the model — see family 1 above for what stands in. And market-moving news between weekly runs — an injury on Tuesday, a contract signed on Thursday — enters only through what it eventually does to the on-pitch signals. The value is a dated snapshot, recomputed every Monday morning, and each estimate carries its as-of date in the data.
Where you'll see it
On every eligible player page, as the value chip in the header — our player-page guide walks the whole page.
On Player values, the full ranked table — searchable, filterable by competition, club, position and U21 status.
On competition and club pages, as most-valuable-player cards and squad-value lists.
In our editorial rankings, like the U21 series linked above.
A player with no value hasn't been forgotten: they either lack the 450 recent minutes the model requires before it will rate anyone, or their number was withheld by the low-confidence rule. Silence is a form of honesty too.
The fine print
For the technically minded, the compressed spec: 87 features per player across output, minutes/role, age (piecewise-linear hinges at 21/27/31), competition and club context, international pedigree and trajectory; a three-year performance window with recency decay and competition weighting; a regularised linear model fitted in log-euro space against hand-verified market benchmarks; validation by random hold-out and leave-one-league-out, scored on within-2× accuracy; a soft cap above the most expensive benchmark; weekly recomputation with an as-of stamp on every figure.
Treat every value as a well-informed reference point — a disciplined answer to "what does this level of production usually cost?" — and never as a prophecy about any specific negotiation. The market will keep doing irrational things. That's precisely why a boring, transparent, weekly-recomputed number is worth having open in the other tab.
Browse the full rankings on Player values — or pick any player you have an opinion about and see whether the model agrees with you.