Edge values: what moves them and what doesn't

Every dynasty value in SharperSunday comes from real trades, not projections or opinion. Here is how the Edge model turns 7.9 million trades into a price, what moves it, and what cannot.

Every dynasty number in SharperSunday is an Edge value. Managers ask two questions about them more than any other: why did this player move, and why did that one not move after a big game?

Both have the same answer. Edge values come from trades. Nothing else feeds them. This post explains where the number comes from, what moves it, what cannot, and the guardrails that keep a bad number off the board.

Where the number comes from

The corpus behind Edge is 1,513,193 Sleeper leagues. The model trains on the deduplicated, format-tagged subset of their trades, which was 7,853,765 trades in the table published September 8.

A trade is a price. When one manager gives a player for two others and both sides accept, that is a statement that, in that league’s format, the one is worth about the two. The model solves for the set of player values that makes millions of those statements come out as close to balanced as possible. Nobody types a value in.

It runs in two stages. Draft picks are priced first, from trades where picks change hands, so a pick can be used as currency when pricing players. Then players are priced.

Each player ends up with a base price and five format slopes: team count, superflex, points per reception, tight end premium and points per passing touchdown. Your league’s value for him is the base plus each slope times your setting. That is why the app asks for your league before it shows a number, and why a player does not have one value. He has a value in your league. The superflex post shows how large that repricing is.

What moves a value

Trades, weighted by age. A trade from yesterday counts more than a trade from March. The weight halves every 60 days:

Trade ageWeight in the fit
1 week92%
1 month71%
2 months50%
3 months35%
6 months12.5%
1 year1.5%

A shorter memory (21 days) overreacted to noise in testing; the 60 to 90 day range predicted fresh trades best on a held-out test, and 60 is the production setting.

A recent-price check. The weighted fit has a lag: an aging veteran whose price fell in March can be held near his old price for weeks. So a second pass looks at each player’s implied prices over the last 45 days, needs at least three of them, and nudges the base toward that recent median at 60% strength, capped at a 40% move. Before this pass shipped in June, the board over-priced veterans over 30 and under-priced players 23 and younger. In testing it cut that age tilt roughly in half and improved the median gap on fresh held-out trades from about 30% to about 26%.

Your format. Change the league settings and every value re-computes from its slopes. No new fit, just the same table read for your settings. A trade evaluated in a 10-team 1QB league and the same trade in a 14-team superflex league are priced from the same table and land in different places.

Time. The model retrains once a day, overnight, and the app carries a 7-day change on every value so you can see drift without a spreadsheet.

What does not move a value

A box score. One game does not produce trades. It produces offers, and offers are not prices until someone accepts. When a player has a huge Sunday and his value does not move on Monday, that is the model working: the market has not paid yet. The Week 1 trade-market post covers what one week can and cannot do.

Projections, stats, news or age. None of them are inputs. The model is market-only by design; it carries no projection, no production score and no age term. Age still shows up in values, because managers pay less for older players, but it arrives through trades rather than a formula. A projection tells you what someone thinks a player will do. A trade tells you what someone paid.

Your league by itself. Your league is one of 1.5 million. Its trades count, but they do not set the price. If your league overpays for a player every year, Edge will keep telling you that, and it is right to.

Settings outside the five slopes. IDP scoring, yardage bonuses, kicker-heavy scoring and the rest are out of scope for the value model on purpose. The five slopes cover the settings the market prices consistently. When your league has something exotic, the co-manager is told to say so rather than pretend a number accounts for it.

Thin data. A player needs at least 10 trade observations before he is fit at all. In the September 8 table, 2,124 players cleared that bar, 1,029 were then held back as stale because fewer than three of their observations carried real weight after aging, and once inactive players are dropped, 1,050 are served. The board is deep where it matters: among served quarterbacks, running backs, receivers and tight ends, the median player is priced on 11,952 observations, about half are priced on 10,000 or more, and four in five on at least 1,000.

The guardrails

Two things stop a bad table from reaching you.

The first is a drift detector. If any player valued 4,000 or more moves more than 20% in a single night, the trainer refuses to publish and the previous table stays live. A model retraining on millions of trades should not move a real asset by a fifth overnight, and when it tries to, the cause is almost always a data problem rather than a market one.

The second is a validation gate on the file itself: enough players, a coefficient for every slope, no infinite or missing values, and coverage above 90%. A table that fails does not ship.

Three honest limits are printed in the table itself:

Corpus factShare of trades
12-team leagues80.6%
6 points per passing touchdown67.7%
4 points per passing touchdown26.1%
Tight end premium of 0.538%
Tight end premium of 1.022%
No tight end premium22%

Four of five trades come from 12-team leagues, so a player’s own team-count slope is only fit when he has enough trades outside that setting. Otherwise he inherits a position-level fallback. For an 8-team or 16-team league, most values lean on that fallback.

Two slopes are pinned to zero by rule rather than fit: passing-touchdown points for anyone who is not a quarterback, and tight end premium for anyone who is not a tight end. Before that rule, a thin-data running back could pick up a spurious passing-touchdown slope and swing thousands of points between formats. In the September 8 table, 110 quarterbacks carry their own passing-touchdown slope and 103 tight ends carry their own premium slope; nobody else does.

Reading a move

If a player moved 8% this week, managers paid a new price for him in enough leagues, recently enough, to shift the fit. Open the Dynasty Trade Database and you can usually find the deals that did it.

If he did not move after a big game, nobody has paid yet. The offer in your inbox that prices him as if he had is asking you to pay for a move the market has not made.

If his value differs from what a friend’s league sees, check the format first. Superflex, team count and tight end premium account for most of the gap, and the Dynasty Rankings board reprices live when you toggle them.

Then ask the co-manager. Once your Sleeper league is connected, it already knows your format, your roster and where each of your players sits on the board. Ask it why a player moved and it answers about your league, not a generic one.

Start free and see your roster’s Edge values


Data note: league and trade counts, the feature schema, the fit counts (2,124 fitted, 1,029 stale, 1,050 served), the per-slope fit counts (110 QB passing-touchdown slopes, 103 TE premium slopes) and the corpus-share caveats are read from the published Edge table values/value_tables.json on sharpersunday-data@val-160 (schema 160-continuous-v1, generated 2026-09-08T04:52Z): its corpus, featureSchema, fit, fitVsFallbackCounts and coverageCaveats blocks plus per-player fitDims. The observation-depth figures for served QB/RB/WR/TE players (median 11,952; 52% at 10,000 or more; 80% at 1,000 or more) are computed from the same table’s per-player observations field with positions from the Sleeper player database. The 60-day half-life and its 21-day predecessor, the weight table, the 10-observation floor, the stale threshold, the drift detector (top 200, 4,000 floor, 20%), the 45-day / 3-price / 40%-cap recency pass and the pinned non-QB and non-TE slopes are documented in scripts/trainValueModel.mjs; the once-daily 04:00 UTC retrain and the validation gate (scripts/validateTrainedModel.mjs) in .claude/skills/value-model-validation/SKILL.md. The 60% blend strength is the shipped configuration recorded in issues/323-value-model-thin-data-overfit-guard.md; the age-tilt evidence (median fresh-trade gap 30.0% to 26.3%, tilt roughly halved) is Evidence D in that file, measured 2026-06-06. The out-of-scope ruling for exotic formats is in .claude/skills/prior-decisions/SKILL.md (2026-07-04). The 7-day change is delta7d in api/values.js. All numbers describe the model’s behavior, not a guarantee about any player.