Rankings tuned to the signal, not the noise.

Need help? Sign in

About SignalTuned

A math-grounded fantasy football engine, built by one person.

The big idea

Most fantasy ranking tools play the same trick. They poll a panel of experts, average the guesses, and call the result objective. It isn't. You're inheriting whichever biases that panel happened to share, and “consensus” lags real signal by months. SignalTuned doesn't do that. It looks at what NFL players actually did on the field (yards, targets, snaps), runs the math your league actually uses (your PPR setting, your TE premium, your SuperFlex), and adjusts for age because a 22-year-old WR and a 30-year-old WR putting up the same numbers are very different bets. That's the whole engine. No vibes, no expert panels, no “feels like” rankings.

Goes in
NFL production data
Age curves & archetypes
Your league scoring
The engine
continuously self-improving
Comes out
League-based rankings
Tiers
Confidence band

Four things SignalTuned does differently

01. Math, not consensus

The math is the engine

Most fantasy tools poll experts and average the results. The good ones do that transparently. The rest hide behind black-box “AI.” Either way you inherit whichever biases the panel happened to share, and consensus lags real signal by months. SignalTuned derives every ranking from production data and your league's exact scoring. No experts polled. No consensus consulted.

02. Tuned to your league

Your scoring, your tiers

The engine reads your Sleeper league's exact settings and reruns the math against them. Half-PPR, full PPR, TE premium, big-play bonuses, SuperFlex, custom reception values. A WR ranked 15th in standard scoring can be 8th in a TE-premium SuperFlex league. The numbers actually move when your scoring changes, instead of pretending one set of rankings fits every league.

03. Learns every off-season

What actually happened wins

After every NFL season, the engine compares its projections to what really happened on the field. Age curves, archetype thresholds, and signal weights re-fit against the new data. Between seasons, an autonomous research agent runs every other day and tests recurring fantasy claims against historical data. Results go on The Lab, including the hypotheses the engine rejects.

04. Every number is auditable

You can trace any ranking back

Every ranking carries a manifest hash that fingerprints the engine version, config, and input data that produced it. Past seasons stay frozen. If you can't trace a number back to its inputs, that's a bug, not a feature. Check accuracy for the receipts and model card for the full version history.

What every ranking shows

For every player, the engine produces three numbers. They answer different questions, and the rankings page surfaces all three so you don't have to pick one.

dynasty_ppg

The single ranking number

A points-per-game scaled readout of the engine's lifetime-value sum (LTV) for that player. The engine sorts on LTV; dynasty_ppg is the per-game view of the same number. Current production, position-specific age curve, archetype, and the forecast horizon all flow in.

tier

Natural breaks in production

Players get grouped into tiers by detecting where the dynasty_ppg distribution actually breaks. Tier 1 is the elite cluster. Tier 6+ is replacement-level. Tier boundaries get recomputed for every league because they depend on the scoring system.

confidence band

How much to trust the number

Each ranking carries a HIGH, MEDIUM, or LOW confidence flag based on sample size, year-over-year consistency, and age-curve position. A rookie's ranking has a wider band than a five-year veteran's, even at the same dynasty_ppg. The band gets shown on the player card.

What goes into the math

Everything in the engine traces back to one of these four buckets. Nothing else gets in.

01. Production signals

What happened on the field

Per-season fantasy points computed at your league's scoring. Snap counts, target share, route participation, carries and air yards, red-zone usage, rank within position. All drawn from public nflverse play-by-play data going back to 1999.

02. Age and archetype

Where the player sits on the curve

Position-specific age curves (RBs decline fastest, WRs plateau longest, QBs and TEs peak late) modified by archetype. A 230-lb dual-phase RB like Saquon Barkley ages slower than a pure power back. A possession WR ages differently than a deep-threat WR. The curves and thresholds got built from real NFL production data, not guessed at.

03. League scoring

Your settings, your tiers

The engine reads your league's exact rules from Sleeper and reruns the math against them. PPR value, TE premium, big-play bonuses, SuperFlex, custom reception values. Your tier breakpoints depend on your scoring, so they get computed fresh for every league.

04. Continuous recalibration

Every off-season, the engine learns

After each NFL season, age curves, archetype thresholds, and signal weights re-fit against what actually happened. Every parameter change gets logged with the reason it shipped on the model card.

The pipeline, in five stages

The hero diagram above shows what goes in and what comes out. Here's what happens in between, box by box.

Inputs age + position 3-yr stats league scoring Recency weight → weighted_ppg Archetype classification → curve table LTV sum horizon by age discount 8%/yr dynasty_ppg + tier + confidence + injury · snap opp · YPRR · scheme · SuperFlex premium The five stages, visualized Each box gets its own card below.
Same five boxes the engine runs for every player. Stage cards below walk through what each one does.
1
Compute fantasy points at your scoring
For every player-season since 1999, the raw NFL stat line (carries, targets, yards, TDs, receptions) gets multiplied by your league's exact per-stat values. Half-PPR, full PPR, TE premium, big-play bonuses, custom reception values all apply. The result is a per-season points total that's directly comparable across the player's career.
2
Recency-weight the most recent seasons
Recent seasons get the heaviest weight, with the schedule tuned per position. RBs and WRs lean hard on the most recent year because year-to-year carryover is high. QBs use a flatter multi-year average because QB production autocorrelates strongly across seasons. TEs land in between. The result is weighted_ppg, the engine's best estimate of where the player is right now. Older seasons inform the projection without dominating it.
3
Classify archetype and look up the age curve
Each player gets classified by archetype (dual-phase RB, alpha WR, possession WR, etc.) based on size, athletic-test scores, target share, and route data. The engine keeps separate curve tables for each archetype. The right one gets picked based on the classification.
4
Sum LTV across the seven-season horizon
The engine looks out a forecast horizon of up to seven seasons, clipped earlier for aging players where production reliably drops off (more on this in the recalibration section below). For each season in the horizon, weighted_ppg gets multiplied by the age-curve factor for that age and a discount of 0.92i (future seasons are worth less because of uncertainty and time value). Sum them and you get LTV. Normalize to PPG scale and you get dynasty_ppg.
5
Layer adjustments, then form tiers
After the LTV sum, the engine layers small adjustments. Injury and availability discount. Snap opportunity boost or fade. YPRR efficiency. Scheme fingerprint of the player's team. SuperFlex QB scarcity premium if your league uses SuperFlex. Each adjustment is usually 2 to 5 percent. The final dynasty_ppg runs through tier formation and you get the ranked list.

Why age curves matter

Different positions peak at different ages. RBs around 23 (the body breaks down fastest), WRs around 26, TEs around 25 followed by a long plateau into the late 20s, QBs around 29-30 (the latest peak). Calibrated from real NFL production, not guessed.

RB · peak 23 WR · peak 26 TE · peak 25 QB · peak 29–30

RBs peak around 23 — the body breaks down faster. WRs around 26. TEs around 25, followed by a long plateau into the late twenties. QBs the latest, around 29–30. Every curve is calibrated from real NFL production — not guessed.

Each position ages on its own clock. RBs decline fastest because the position takes the most contact. By age 30 the average RB has lost about a third of his peak production. WRs survive longer because route running and chemistry compound with experience, so a 32-year-old elite WR can still be a starter. QBs peak latest because the position is cognitive, not athletic, and reading defenses takes years. TEs peak early but stay productive a long time: blocking, route running, and red-zone craft take years to develop, so a TE's peak window stretches from the mid-20s into the late 20s before the body starts to lose to younger receivers.

The curves got built from median per-game production at each (position, age) bin across NFL seasons going back to 1999, the full window the engine maintains data for. Median instead of mean so a single outlier like a 38-year-old Tom Brady doesn't drag the QB curve into “QBs peak at 40.” For age bins with small sample sizes, the engine applies a position-specific floor because the few RBs who reach age 30 in the league are the survivors and would otherwise look too good.

Archetypes

Not all RBs are alike. A 230-lb dual-phase back ages differently than a pure receiving back. Each player gets classified into an archetype and the engine applies the archetype-specific age curve.

Running back archetypes

ArchetypeCriteriaHow they age
Dual-phase back Weight ≥ 215 lbs AND elite combine speed score Slowest decline. Size plus speed sustains production deep into the late 20s. McCaffrey, Saquon, Bijan, Gibbs.
Power back Weight ≥ 220 lbs without elite speed Steepest decline. Volume-dependent, takes the most contact per carry. Derrick Henry-type usage ages aggressively.
Receiving back Target share ≥ 13% of team targets Most sustainable. The passing-game role survives the loss of athletic peak. Ekeler, Kamara archetype.
Standard Default if none of the above Average decline curve. The middle of the bell.

Wide receiver archetypes

ArchetypeCriteriaHow they age
Speed threat Speed Score ≥ 108, OR aDOT ≥ 14 plus YAC per reception ≥ 6.0 Speed-dependent production. Burst erodes the fastest of any WR skill, so this archetype has the steepest post-peak decline.
Route runner Catch rate ≥ 68%, OR target share ≥ 22% with catch rate ≥ 60% Technique and precision. Route running ages best of all WR skills. QB trust and separation survive the loss of athletic peak.
Slot receiver aDOT < 8 AND weight < 210 lbs Short-area possession role. Space-creation and release technique age similarly to route-running. Stable year-over-year floor.
Contested catch Weight ≥ 210 lbs (and doesn't qualify above) Size-based advantage at the catch point. Holds value longer than speed threats because the body wins one-on-ones even after the legs go.
Standard Default if none of the above Average WR decline curve. The middle of the bell.

Two RBs with identical age and production can still get meaningfully different dynasty_ppg outputs if one is dual-phase and the other is a pure power back. The archetype tells the engine which curve to use. The deep math behind the speed-score formula (weight times 200, divided by 40-yard-dash time to the fourth) goes back to Bill Barnwell's 2008 Football Outsiders work; the burst-score and dominator-rating concepts come from PlayerProfiler conventions.

Rookies and cold-start cases

Rookies are the hardest call in any dynasty model. No NFL production exists yet. The engine handles this by looking at how past rookies with similar profiles actually turned out, then adjusting for the combine numbers and college production. Nothing fitted, everything grounded in real outcomes.

projected_peak_ppg = bucket_baseline + combine_delta + college_delta

The bucket baseline is the median peak production of past rookies who landed in the same (position, draft-pick-bucket) cell. Six pick buckets aligned to NFL draft rounds: top-15, late round 1, round 2, round 3, rounds 4 and 5, and round 6 through UDFA. The combine delta adjusts up or down based on z-scored speed score and burst score against the bucket average. The college delta does the same with college production signals (dominator rating and yards-per-target for receivers, yards-per-team-play and yards-per-carry for RBs).

If a measurable is missing, its delta is zero and the confidence band widens. Two example profiles, both rookies entering next September:

Example. Early-round rookie WR

Top-15 pick, strong combine, strong college

Bucket: top-15 WR. The baseline pulls from past top-15 WRs (a cohort that includes Justin Jefferson, Ja'Marr Chase, CeeDee Lamb). The median peak sits high.

Stack a positive combine delta (above-average speed plus burst) and a positive college delta (dominator rating north of 35 percent, strong yards per target) on top. The engine returns a confident projection in a narrow band.

Takeaway: the engine isn't predicting “Justin Jefferson again.” It's saying this profile has historically produced in this range, and there's enough signal to trust the projection out of the gate.
Example. Day 3 rookie WR with elite athletic profile

Late pick, top-decile combine, modest college

Bucket: rounds 4 and 5 WR. The baseline is low because most Day 3 WRs don't break out. The cohort has more misses than hits.

The combine delta is positive and meaningful (top-decile speed plus burst pushes the projection up by 2 to 3 ppg). The college delta is roughly zero. Net: the projection lands above the bucket median, but the confidence band stays wide.

Takeaway: the engine flags him as a higher-than-baseline upside swing, but won't promote him to live rankings without NFL games. The wide band is the signal.

Continuous recalibration

The engine grades itself every year. Walk-forward backtest: for each held-out year (currently 2022, 2023, 2024), the engine reruns with training data only from earlier seasons, then gets compared to what actually happened. The 2022 prediction sees no 2022 data. The 2024 prediction sees no 2024 data. Honest accuracy, no leakage.

Position MAE (PPG) Correlation Bias
QB3.960.455+0.89
RB3.070.645+0.78
WR2.530.753+1.65
TE2.060.723+0.51

Three-year out-of-sample average (2022, 2023, 2024 held-out backtests). MAE is mean absolute error in fantasy points per game (lower is better). Correlation is the relationship between projected and actual ranking (closer to 1.0 is better). Bias is the average over/under (positive means the engine projected high). WR MAE at 2.53 lands comfortably below the industry-competitive sub-4.0 PPG benchmark. See the live accuracy page for the per-year breakdown plus volume-weighted variants.

Every off-season, three sets of parameters re-fit against the new data. Age curves get recomputed at each (position, age) bin. Signal weights get re-fit through a LASSO residual ensemble. Archetype thresholds get checked for separation strength. If a boundary no longer carves a real performance gap, it gets revised. Every change ends up on the model card with the reason it shipped and the accuracy review that validated it. Recalibrations are proposals, not auto-applied.

One example of how recalibration shows up in the rankings

The engine clips the LTV horizon for aging veterans because production drops fast past certain age thresholds. A 35-year-old TE doesn't get credit for seven future seasons; he gets credit for two or three. That's why Travis Kelce, Matthew Stafford, and Davante Adams rank lower here than on consensus boards that treat every season in the horizon as equally likely. The cutoffs came out of the historical decline curves, not chosen by feel.

Built by one operator

I'm Ryan. I built SignalTuned because I got tired of arguing with consensus rankings. Every season I'd run the math on my own and end up with different rankings than FantasyPros or KeepTradeCut, and every season I'd win trades by trusting the math over the consensus. After enough years of that pattern, building a tool that just does the math seemed obvious.

The whole thing started as a spreadsheet for my dynasty league. It became a private tool for me and a handful of friends after a few seasons of consistent A/B wins against consensus. Now anyone can use it.

If you find a bug, want a feature, or have a hypothesis you want tested, email me at [email protected]. There's no support queue. Every email comes to me personally.

Transparency commitments

From here

Accuracy →
Per-position MAE, bias, hit-rates, and held-out validation results across every backtest year.
Model Card →
Every engine version. Every change. The accuracy review that validated each release.
The Lab →
Research notes. Hypothesis tests as they happen, including the ones the engine rejected.