Slide to any point in a hitter's season. The solid line is what he has actually banked; the fan is where the model thinks his season xwOBA lands from here, at every upcoming plate-appearance milestone. Move the slider forward and the whole fan tightens.
| Milestone | Chance | If he gets there | 50% range | 80% range | 90% range | Actual |
|---|
The milestone rows and the season-end row answer different questions, and they will not agree. "If he reaches 600 PA" conditions on an outcome that selects hitters who were going well, so it reads higher than "where will he finish" — by about 5 points of xwOBA on average, 14 at the 90th percentile, 26 at the widest. That gap is information, not an inconsistency: averaging the two together would destroy it. Read the chance column beside the milestone number and it explains itself — "a 23% shot at 600; if he gets there, .352 — but his projected finish is .347."
The milestone ranges are calibrated. Fitted on other seasons and scored out of sample, the 50/80/90% ranges land within 0.6 points of their nominal coverage. That is measured on completed seasons; an in-progress one cannot be scored yet, so on a live board it is a claim carried over from four other years, not one verified here. The same goes for the gap sizes quoted above.
The season-end range is not, and is not claimed to be. It is deliberately left untouched by the correction above — recentring it was measured to make accuracy worse in four of five runway bands — so it still covers about 4 points short of nominal at every runway. The two are reported separately rather than averaged into one passing headline.
The chance column is blank on an in-progress season. Estimating it live needs a training population that does not yet exist: the one available excludes the hitters whose seasons are ending, which are exactly the informative cases, so a live number would read too high near the boundary. Deferred rather than approximated.
Every band on this page is model output. Each hitter, standpoint and milestone is a row
of results/talent3/milestone_table.parquet for a completed season, or
live_table.parquet for one still running — the same rung a hierarchical
model, swept over a standpoint × target grid. Nothing was refitted for the live season:
the league environment is measured from its own data, while the variance components are
pooled over the completed seasons, which a partial season cannot support. The slider
stops are the standpoints that hitter
was actually run at, and the fan is drawn only through the milestones that were actually
forecast. The band edges are the model's own quantiles, so they are asymmetric:
the centre line is not the midpoint of any band, and in about 40% of forecasts the two
halves of the 50% band differ by a full point of xwOBA or more. Which way it leans
depends on the hitter.
All 2,112 qualifying player-seasons from the four completed years are here, plus every qualifying hitter in the season still running — no hand-picking and no strata. Pick a year above, then search by name. The list is ordered by plate appearances, so the default view is the busiest seasons.
The survival bias was real, and it is corrected here. A hitter only appears at 600 PA if he stayed healthy and kept his job, which is itself evidence he was hitting — so an uncorrected projection ran 5 points of xwOBA low on average, and up to 18 points low projecting to 600 PA from a standpoint of 100 PA or fewer. The milestone rows on this page apply a per-(standpoint, target) correction fitted out of fold; what is left is under 0.03 of a standard deviation in every runway band. The season-end row is deliberately left uncorrected — see the two notes above, which say what each row does and does not claim.