← Back to KevScores
Methodology

How the Kev Score Works

The formula behind every ranking on this site — explained in plain English.

The Problem We’re Solving

Every fantasy baseball platform gives you two numbers for a player: a preseason value (what they were projected to be worth before opening day) and year-to-date stats (what they’ve actually done so far). Neither answers the question that matters when you’re staring down a trade offer or a waiver pickup:

“What is this player actually worth right now?”

Preseason values are useful but stale — they don’t know that the top-10 pitcher you drafted has a 5.80 ERA in April. Year-to-date stats are useful but noisy — a hot first week can put a fringe player above an elite one, even though everyone knows it won’t last.

The Kev Score blends both: it anchors to what we expected a player to be, then moves that number based on what they’re actually doing.

The Core Formula

At a high level, every player’s Kev Score is a weighted blend of two numbers:

Kev Score = (ESPN Baseline) × weight1 + (Rank Score) × weight2

Let’s break down each piece.

1. The ESPN Baseline

We start with ESPN’s preseason dollar value — the auction-draft price for each player in a standard 10-team rotisserie league with a $260 salary cap. Shohei Ohtani opens the season at $101. An unranked reliever opens at $0.

This is our “floor” for how good a player is. Elite talent doesn’t become bad overnight, and scrubs don’t become stars without doing something to earn it. The baseline protects the ranking from overreacting to small samples.

2. The Rank Score

Every morning, we pull the latest MLB stats for every player and compute a per-game fantasy-points total using ESPN’s standard scoring:

Batters: 1B, 2B, 3B, HR, R, RBI, BB, SB, –SO
Pitchers: IP×3, K, W×5, SV×5, –ER×2, –H, –BB, –L×5

Players are then ranked against their peers (batters vs. batters, pitchers vs. pitchers). The top per-game scorer becomes a 100; the bottom is near 0. This is the Rank Score — a pure, noise-heavy reflection of who’s actually producing right now.

3. The Weighted Blend

Here’s where it gets interesting. In Week 1, we weight heavily toward the ESPN Baseline — the season hasn’t had time to reveal anything. By late September, we weight much more toward the Rank Score — six months of games is plenty of evidence to update our priors.

The shift happens gradually, week by week. A hot start in April nudges a player up a little. A hot start that continues into June moves them a lot. A cold September for an aging veteran finally cracks the preseason assumption that they’re still elite.

In short: early season, we trust the experts. Late season, we trust the data. And every week in between, the weighting slides just a bit.

A Real Example

Player: Jacob deGrom

ESPN Baseline: $32 (top-30 pitcher coming into 2026)

Week 4 Rank Score: ~65 (pitching like a top-15 guy through 5 starts)

Week 4 Weighting: ~77% baseline, 23% rank

Kev Score ≈ (32 × 0.77) + (65 × 0.23) = 39.5

Early in the season, even with great results, deGrom’s score doesn’t shoot to the top — the baseline still dominates. But if he keeps pitching like a top-15 arm through July, the weighting continues to shift, and his Kev Score keeps climbing.

This is the whole point. A single great week shouldn’t make a player “worth” more than Shohei Ohtani. Six months of great weeks probably should.

Eligibility Thresholds

To avoid ranking players based on tiny samples, we require a minimum workload before a player enters the rankings:

  • Batters: 25 plate appearances minimum
  • Pitchers: 5 innings pitched minimum

Players below these thresholds still appear in the database (with their baseline score) but aren’t eligible for the Rank Score calculation until they’ve played enough.

Sample-Size Smoothing

Even after meeting the eligibility threshold, players with small samples get their per-game stats pulled toward the league average. The fewer games we have, the harder we pull. The more we have, the less we pull. This is what stops a hot first week from launching a fringe player to the top of the rankings.

The math is straightforward. Each player’s per-game fantasy points becomes a weighted blend:

Adjusted FP/G = (n × actual) + (k × league average) ÷ (n + k)

Where n is how much the player has played and k is how stubborn the smoothing is. The values for k vary by role — not because the math changes, but because each role accumulates playing time at a different rate, and reliever rate stats are unusually noisy:

  • Batters: k = 100 plate appearances — about 25 games, or 1 month of regular play
  • Starting pitchers: k = 30 IP — about 6 starts, or 1 month
  • Relief pitchers: k = 20 IP — about 20 outings, or ~6 weeks

For batters and starters, the 50/50 trust point lines up with roughly one calendar month of play. Relievers are a deliberate exception: 1 IP per appearance means individual outings swing rate stats hard, and a hot 6-IP rookie with one save would otherwise rank within shouting distance of an established closer. Doubling the smoothing strength for RPs is the main lever keeping that from happening.

We use plate appearances rather than games for batters because PA captures the quality of playing time. A pinch-hitter with one trip to the plate logs a full game in the box score but has barely any sample at all. Counting PAs treats him fairly — as a 1-PA sample, not a full game.

What this looks like in practice:

  • A batter with 30 PA at 15 FP/G (red-hot first week) gets pulled down toward roughly 7.5 FP/G — visible on the rankings, but no longer outranking proven players.
  • A batter with 200 PA at 8 FP/G (steady producer through ~6 weeks) is weighted around 67% toward his own rate, 33% toward the league prior — he barely moves.
  • A batter with 600 PA at 7 FP/G (full-season vet) is essentially unaffected.
  • A reliever with 5 IP and one dominant outing gets heavily smoothed — closer to 67% prior than to their actual rate — until they’ve built up at least a couple weeks of work.

The smoothing is symmetric. A cold start gets pulled up toward average just as a hot start gets pulled down. We’re not punishing slumps any more than we’re rewarding flukes — we’re acknowledging that with limited data, our best guess is closer to “average MLB player” than whatever the small sample suggests.

Importantly, the FP/G we display on player cards stays raw — that’s the actual stat. The smoothed value is only used internally for ranking. So a player’s displayed FP/G times their games will always equal their total FP, even though their Kev Score reflects the smoother view.

Reliever Adjustments

Relievers get two extra adjustments on top of the standard smoothing — both are about getting closer fantasy value right.

1. Reliever-Only League Prior

The smoothing formula above pulls each player toward a “league average” rate. For batters and starters, that’s simple: average all eligible batters together, all eligible starters together. But pitchers as a single bucket are dominated by starters — an SP throws 5+ innings per start, an RP throws 1. The average pitcher’s FP/G is mostly a starter number.

If we shrunk relievers toward that joint average, we’d be pulling them up toward a starter-weighted line. So we don’t. Each reliever is shrunk toward the average among relievers only. The right reference for a reliever is “the typical reliever,” not “the typical pitcher across all roles.” This sounds small but quietly fixes a lot — without it, mediocre RPs were getting a free boost from sharing a prior with starters.

2. Saves Bonus

Saves are worth 5 fantasy points each in ESPN scoring, the same as a win. So saves are already baked into a closer’s FP/G. But that doesn’t fully capture how much more valuable a closer is than an equally-rated holder or setup man. In a real fantasy league, saves are scarce — only ~30 pitchers get them regularly — while elite-rate non-closers are everywhere.

To match that reality, every reliever’s smoothed rate gets a multiplicative bump based on saves per game:

Adjusted RP rate = smoothed FP/G × (1 + 1.5 × SV/G)

What this looks like in practice:

  • An active closer at 0.5 SV/G (a save every other appearance) gets a 75% rate bump.
  • A setup man at 0.1 SV/G (occasional save) gets a 15% bump.
  • A middle reliever or holder at 0 SV/G gets nothing.

The bonus is multiplicative, not additive, on purpose. A 1-IP rookie who happens to notch a save shouldn’t leapfrog established closers — the smoothing already pulled his rate down toward the prior, so the multiplier scales that pulled-down value, not his raw spike. Closer-quality stuff plus a closer-quality role is what gets you to the top of the RP rankings.

Like everything else, this only affects the ranking input. The displayed FP/G on the site is always the actual ESPN-scoring number.

Two Scoring Modes

The Trade Calculator offers two ways to evaluate a trade:

Kev Score Mode

Sums the raw Kev Scores on each side. This is the straightforward “total value” view — good for roughly-equal deals.

Weighted Mode

Penalizes deals where one side is dumping quantity for quality. In most leagues, rostering 5 fringe players is not equivalent to rostering 1 elite player, because you can’t start them all at once. The weighted mode accounts for the drop-off in value from your best roster spot to your worst, making “5-for-1” trade offers look less appealing than raw totals might suggest.

The weighted mode also adjusts for league size. An elite player is much more scarce — and therefore more valuable — in an 8-team league than a 12-team league, where waiver-wire replacements are easier to find.

The Risers and Fallers

Every score is saved daily for up to 8 days. We compare today’s score to the score from 7 days ago to produce a rolling 7-day change. This change is what powers the Risers and Fallers tab.

Why 7 days? A single game is too noisy. A full month smooths away trends worth paying attention to. One week hits a sweet spot — it covers a typical rotation cycle for pitchers and a healthy sample for hitters, while still being short enough to surface real hot and cold streaks.

Buy Low & Sell High

Risers and Fallers tell you who’s already moved. Buy Low and Sell High tell you who’s about to move — based on the gap between expected and actual stats from Baseball Savant.

The intuition: Savant’s expected stats answer the question “given the quality of contact and the pitches thrown, what should the outcome have been?” If a batter is hitting .240 but his xBA is .310, that’s a 70-point gap that’s mostly luck — bad BABIP, weak defensive positioning, bad sequencing. Regression theory says his AVG climbs over time. Conversely, a batter hitting .320 with a .250 xBA is overperforming his contact quality and is due to crash.

The Signal

Each player gets a directional signal based on the size of the gap:

  • Batters: we compare xBA to actual AVG. xBA > AVG means unlucky — a Buy Low candidate. xBA < AVG means lucky — a Sell High candidate.
  • Pitchers: we compare xERA to actual ERA. ERA > xERA means unlucky — a Buy Low. ERA < xERA means lucky — a Sell High. (The direction looks reversed compared to batters because for pitchers, lower stats = better.)

The lists are ranked by the size of the gap, so the most extreme candidates appear at the top. Pitcher gaps are scaled down to compare apples-to-apples with batter gaps — ERA differentials are numerically much larger than xBA differentials, and without the scaling, every pitcher would crowd out the top of both lists on raw unit size alone.

Tiered Display

To make the signal actionable at a glance, players are tagged by gap size:

  • Strong Buy / Strong Sell: batter gap of 50+ points (xBA differs from AVG by .050 or more), or pitcher gap of 1.00+ ERA. These are dramatic mismatches.
  • Buy / Sell: batter gap of 25+ points, or pitcher gap of 0.50+ ERA. Real, actionable signal.
  • (no badge): smaller gaps that fall within normal noise.

Eligibility

Only players in the top 300 by Kev Rank get a Buy Low / Sell High signal. The reasoning is practical: the signal is meant to inform trades, not waiver pickups, and a luck gap on the 450th-ranked player isn’t actionable trade information. Restricting the pool also keeps signal noise down — expected stats on tiny samples can produce huge gaps that don’t mean much.

One thing worth being clear about: this is not a prediction that any specific player will rebound. It’s a flag that the underlying stats and the surface stats disagree, and historically that disagreement narrows over time. The reasons could be skill changes, defensive alignment, ballpark factors, or pure luck — we don’t try to disentangle them. Use it as a starting point for further research, not a guarantee.

What the Kev Score Isn’t

A few things worth being upfront about:

  • It’s not a projection. The Kev Score is a snapshot of current value based on current performance. It doesn’t predict who will be good in August.
  • It’s not a rate stat. A player who’s been on the IL for a month will see their score drift down toward their baseline — our per-game calculation means a few great starts don’t fully compensate for missed time, but a zero-game week doesn’t crater them either.
  • It’s not infallible. Standard ESPN scoring is a simplification. H2H categories, OBP leagues, and dynasty formats all value players differently. Use the Kev Score as a starting point, not a final verdict.

Questions?

If you want more detail on any piece of this, or you’ve spotted something that doesn’t add up, send an email — I read everything.

Email: kspinelli24@gmail.com

Or head back and try it out: KevScores Trade Calculator & Rankings →