Methodology
How the BAX Performance score, sample-size reliability, and STX pricing are actually computed — the real formulas, not a summary.
Overview
BAX Performance & STX price rulesEvery number on Baxeball — the BAX Performance score, a player's STX price, the Win Tracker gap — is computed directly from public MLB statistics through a fixed set of rules below. Nothing on this page is adjusted by hand, and nothing is influenced by how much a player is bought or sold. This page documents the actual formulas the site runs, not a marketing summary of them.
1. The BAX Performance score
Every hitter and pitcher gets a single 0–100 BAX Performance score. It isn't a prediction of future performance — it's a percentile-based summary of real production this season, rebuilt from scratch after every settlement so it always reflects the current season-to-date stat line. A player is ranked against every other qualified player in the same pool (all hitters, or all pitchers), not against a fixed historical scale, so the same raw stats can score slightly differently as the league-wide distribution shifts over the season.
Hitters
Component weights
Discipline sub-weights
Each of the three inputs is first converted to a percentile rank (0–100) within the current hitter pool, then blended by the weights above. wOBA uses the standard linear-weights formula:
Pitchers
Quality composite — 82% of raw score
Workload — 18% of raw score
Workload is ranked within role — SP vs. RP vs. CL separately — rather than against the whole pitching pool. A full reliever season and a full starter season are legitimately different batters-faced totals, so comparing them on one shared scale would leave relievers permanently unable to score well here regardless of usage.
FIP (fielding-independent pitching) isolates what a pitcher directly controls — strikeouts, walks, home runs — and removes results that depend on the defense behind them:
Role (SP / RP / CL) is detected automatically from season usage, not self-reported: a pitcher is SP with 5+ starts and a 50%+ start share, CL with 5+ saves and a 20%+ save share of appearances, otherwise RP. Players who both hit and pitch at genuine two-way volume (50+ PA and 10+ IP) get a single blended score, weighted by how reliable each side of their game is — this keeps a position player's mop-up relief appearance from being scored as a pitcher.
2. Sample-size reliability
A raw percentile score can be misleading early in a stretch — three hot games can look like an elite season. Rather than one blanket "percent of a full season" knob applied to a player's whole line, each input axis is pulled toward the league-average midpoint (50) independently, on the sample size at which that specific stat is actually known to stabilize. The Discipline axis and the pitcher Quality composite are built from these already-shrunk sub-scores, not shrunk again afterward — so the final score reflects how much each individual stat is trusted, not one uniform confidence level for the whole stat line.
The reference points above come from Russell Carleton's stabilization-point research (Baseball Prospectus), as tabulated in FanGraphs' Sabermetrics Library. wOBA and WHIP aren't single event rates in that research — they're linear-weight composites of several rates each — so both borrow the stabilization point of the closest studied stat instead of an invented number: wOBA uses OBP's point (460 PA), WHIP uses opponent AVG's point (630 TBF), the slower of WHIP's two components (opponent AVG at 630 vs. walk rate at 170).
Quality (FIP) keeps its own role-based curve instead of the TBF scale above, since FIP reliability tracks both innings and appearance frequency differently by role rather than one shared threshold:
Workload (batters-faced volume) isn't shrunk at all — it's a direct percentile of accumulated playing time, not an estimate of true talent, so there's no noise to regress out.
A player at reliability 1.0 on a given axis (a fully stabilized sample for that stat) shows their raw percentile on that axis untouched. A player at reliability 0.2 on an axis — a recent call-up, for example — has 80% of that axis's gap from 50 shrunk away, so an early hot or cold stretch on any single stat can't single-handedly move a player's score.
Hitters — luck adjustment on the Production axis
Actual wOBA rewards whatever happened to a batted ball, not how well it was actually hit — a 105mph line drive hit straight at a fielder scores the same as a routine ground ball, and a weakly hit flare that lands in a gap scores the same as a well-struck double. That noise is the same signal the PA-based reliability curve above is already trying to dampen, just from a different angle: reliability shrinks the size of the move, this shrinks which direction it moves in. The Production axis (used for ranking only, not the wOBA stat shown elsewhere on the site) blends actual wOBA with season xwOBA — an expected-value estimate built from exit velocity and launch angle instead of what actually happened to the ball — using the same PA-based reliability curve as the anchor point, in place of the league-average midpoint:
Walks, hit-by-pitches, and strikeouts carry no batted-ball luck (there was no contact), so xwOBA uses the same fixed wOBA weights as those events do in the real formula — only balls actually put in play are re-priced by contact quality. Season xwOBA is computed from Baseball Savant Statcast data and refreshed once per day alongside the rest of the settlement pipeline; if that data isn't available for a player on a given day (a recent call-up, or a fetch failure), production_input falls back to plain wOBA with no adjustment — the same behavior as before this was added.
3. From score to price
STX prices are repriced once per day, after that day's games are all final — never during a game, and never in response to how many users are buying or selling. This is deliberate: with virtual currency, letting demand move price would let users pump-and-dump a name by trading it among themselves. The only input to price is the day-over-day change in a player's BAX Performance score.
4. Win Tracker: Actual vs. Expected win%
The Win Tracker answers a different question than the score/price system — not "how good has a team been," but "how good should this team be, based on its underlying scoring rates, regressed toward the mean?" Three lines are shown per team:
- Actual win% — season wins ÷ season games played, no adjustment.
- Expected win% (official) — a regression-smoothed Pythagorean estimate built only from runs scored/allowed per game.
- BAX Expected win% (beta) — an experimental version that also factors in team and active-roster wOBA/xwOBA. Not promoted to official status — see below.
Official model
Runs per game are pulled toward the league mean using a regression fit on the 2018–2019 and 2021–2024 seasons (2020's shortened season is excluded as a distorted sample), then converted to a win percentage with a fitted Pythagorean exponent:
Validated with leave-one-season-out cross-validation across the training seasons, then checked once against the fully held-out 2025 season (never used in fitting): mean absolute error of 0.098 and RMSE of 0.122, holding up almost identically out-of-sample.
Beta model
An experimental version blends in team season wOBA/xwOBA and a recency-weighted active-roster wOBA/xwOBA. In the same 2025 holdout test it did not outperform the official model (RMSE 0.1228 vs. 0.1216), so it stays labeled Beta rather than replacing the official Expected line.
5. Rookie status
The rookie flag checks a player's actual MLB rookie eligibility rule — status is voided once a player passes 130 career at-bats or 50 career innings pitched — rather than a simplified season-only approximation. It does not yet enforce the separate 45-day active-roster clause in the official rule, since that requires day-by-day roster history that isn't available from a single stats query; the at-bat/innings thresholds cover the large majority of real cases correctly on their own.
6. Data sources & update cadence
| Source | Used for |
|---|---|
| MLB Stats API (unofficial, statsapi.mlb.com) | Season stats, standings, live box scores, career stats for rookie eligibility |
| MLB.com & MLB Trade Rumors RSS | News headlines (headline + link only, no article text) |
| Open-Meteo | Ballpark weather conditions |
Standings, live scores, and market status refresh every 30 seconds while games are in progress. BAX Performance scores and STX prices only settle once per day, after every game on the slate has gone final — this keeps a player's price from swinging mid-game on unfinished stats.
7. Known limitations
- Descriptive, not predictive (score/price). The BAX Performance score and STX price summarize production that already happened. Only the Win Tracker gap above has an actual backtest behind it.
- Relative, not absolute. Percentiles are computed against the current player pool each run, so a 70 today isn't guaranteed to mean exactly the same thing as a 70 a month ago if the league-wide distribution has shifted.
- BAX Expected win% is still Beta. It hasn't beaten the official Simple Expected model on held-out data, so it's shown as a secondary, experimental line, not the primary Expected win%.
- Rookie flag gap. The 45-day active-roster clause of MLB's rookie rule isn't enforced (see above) — a small number of edge cases may be mislabeled.
- Unofficial data source. MLB's Stats API has no formal terms of service for outside developers and could change or restrict access without notice.
- xwOBA blend is hitter-only and unvalidated. The Production axis's luck adjustment (see Reliability above) only covers hitters, and its specific blend weighting hasn't been backtested against Baxeball's own history yet — it leans on Statcast's published expected-value model, not a result we've verified ourselves.