> libero
Last Season's Age Premium Fixes the Veterans and Breaks the Under-21s
Trained on four seasons and scored on the fifth, a fair value model prices under-21s 19% below market and 31 to 33 year olds 16% above; shuffled folds showed every band within 1.5%. Carrying last season's age premium into the offset fixes the veterans and takes the under-21s to 33% below. That extra error is how the premium was read: a median of about 200 regulars whose prices sit on some 55 round numbers. Read as a mean over every player the model is scored on, the lag stops hurting the youngest, though it still cannot help them.
The model behind Libero estimates a player's market value from a season of league-adjusted output, minutes, age, position and team strength. It predicts relative to a market level, the median value of a regular in that league that season, which carries inflation. Folds group by player so no one appears on both sides of a split. Seasons are mixed across folds.
Under that scheme the residual by age band is flat. Restricting the same out-of-fold predictions to the latest season already tilts it. Training on 21-22 to 24-25 and scoring 25-26 tilts it further.
The age tilt appears only when the test season is unseen
Mean error of predicted against actual value by age band, as a percentage of market value. Below zero, the model prices the band under market.
Why the Folds Hid It
The feature set includes a season index and age. With seasons mixed, every test row has same-season neighbours in training, and the trees learn each season's age price as an interaction: season 5 and age 20 sits in a leaf fitted on other 20 year olds from season 5. Grouping by player removes the player and leaves the season in. Out of time, no split can isolate a season the trees never saw, so the new one is priced on an age curve pooled over the seasons trained on.
Walk-forward bears that out. Take a band's age price as the mean log value of its players over the 28 to 30 band, in the same league and season, over the players the model is scored on. Across five bands and four test seasons, the bias follows the gap between the test season's age price and its average over the training seasons (R² 0.76, about 0.7 of the gap passed through), more closely than it follows the step from the season before (R² 0.62). That only produces an age bias if the age price moves. It does, and how much it seems to move depends on how it is read.
How far the price of youth swings depends on how it is read
Under-21 value relative to 28 to 30 year olds in the same league and season, three ways. The first is the premium Libero ships.
Read the same way, the 31 to 33 discount holds at 30% to 32% for three seasons and then deepens to 39% and 45%. Walk-forward, that band's bias reads +1.9%, +4.3%, +4.7%, +16.4% on test seasons 22-23 to 25-26: it grows as the latest seasons pull away from the average the trees were fitted on. The under-21 bias reads +2.3%, −8.5%, −1.4%, −19.3%. Its two large errors fall on the two seasons the youth premium stepped up.
One Repair, Read Two Ways
The direct fix is to move the age price out of the trees and into the offset: predict relative to the market level plus the band's premium, and add both back. Last season's premium is the only one available without peeking. The open choice is the statistic.
Last season's premium fixes the veterans; read as a median, it breaks the youngest
Bias by age band on 25-26, model trained to 24-25, with 24-25's age premium in the offset.
The median imports last season's sampling error at full weight; the mean removes it and leaves the step. Across test seasons the lagged mean puts under-21s at −9.3%, +12.3% and −18.2%. A lag reads each step a season late: it underprices the youngest in the season the premium rises and overprices them in the season after, when it carries the new high into a flat year. Where the age price trends, as it does past 30, the lag removes most of the bias. Where it steps, the lag only moves the error from one season to the next.
Libero uses the same-season premium, which puts every band but 34+ within 6% on 25-26. It works partly by construction: the premium is computed from the other valuations of that season, so the model is told where the market sits for each age before it is asked to place a player against it. For pricing a player relative to their own market that is the right question. As a forecast of where an age band will be priced next season it is not available, and the out-of-time numbers in Figure 1 are the honest estimate of that error.
None of this is specific to football. A grouped split that controls for the entity leaves every time-varying context feature shared across folds. If the target's relationship to one of those features drifts, shuffled folds report the in-sample interpolation, and the error appears only out of time, in whichever subgroup the drift touches.
What is still open
Whether the price of youth really moves in steps, or two jumps in five seasons are chance. If it steps, no lag can anticipate it, and a premium smoothed over two seasons would halve each step's error and spread it across both. Five seasons cannot tell a step pattern from noise.