Ratings Methodology

League constants, run-value weights, and engine diagnostics for the current season selection. Use the watchlists below to jump straight into a team's ratings tab and inspect its per-game adjusted detail. The shipped JSON endpoints are documented in the API guide.

Runs / PA
0.1523

League run environment per plate appearance.

Runs / Out
0.2430

Core environment scaler used to move MLB priors toward league conditions.

Box Coverage
88%

Share of team-game rows with box-score detail feeding the constants layer.

Engine Version
v3_additive_iterative_10

Current schedule-adjustment model powering team ratings.

Non-Converged Teams
28

Teams that finished the iterative engine above the convergence threshold.

Low Rated Coverage
3

Teams with less than 80% of scored games resolved into the adjusted engine.

High Final Delta
23

Teams whose last iteration still moved by more than 0.05 runs per game.

League Run Values

BB
0.454
Run value of an unintentional walk.
HBP
0.454
Run value of a hit-by-pitch.
1B
0.667
Run value of a single in the current run environment.
2B
1.093
Run value of a double.
3B
1.519
Run value of a triple.
HR
1.988
Run value of a home run.
SB
0.284
Run value of a stolen base.
CS
-0.568
Run penalty of a caught stealing.

wOBA Weights

wBB
0.980
League-scaled wOBA coefficient for walks.
wHBP
1.025
League-scaled wOBA coefficient for HBP.
w1B
1.261
League-scaled wOBA coefficient for singles.
w2B
1.805
League-scaled wOBA coefficient for doubles.
w3B
2.295
League-scaled wOBA coefficient for triples.
wHR
2.983
League-scaled wOBA coefficient for home runs.
lg wOBA
0.497
League-average wOBA for the selected season.
wOBA Scale
0.792
Scale factor used to convert wOBA differences into runs.

Player Offense Layer

Primary Sort
Off/G
Player rankings now lead with offensive runs above average per game from `player_offense_adjusted`.
Off Runs
wRAA
First-pass `off_runs` is implemented as wRAA using season-native wOBA weights and wOBA scale.
wRC+
Support metric
Still shown for familiarity, but now calculated from season-native constants rather than fixed stock weights.
BB%
NIBB / PA
Player walk rate now uses non-intentional walks when IBB data is present, which better reflects earned plate-discipline value.
XBH Splits
100%
When player-level 2B/3B splits are missing, unsplit non-HR XBH are allocated using the observed season 2B/3B mix, and the mart now flags exact versus estimated split rows.
Qualifier
50 PA
The mart keeps every player row and exposes a `qualified` flag. Product views can filter or annotate from that flag.
Fallback
Legacy safe
If `player_offense_adjusted` is unavailable, product surfaces fall back to `hitting_advanced` and keep the page online.

Player Pitching Layer

Primary Sort
Pitch/G
Pitcher rankings now lead with runs saved per 9 innings versus the season league-average RA9.
Pitch Runs
RA9-based
First-pass `pitch_runs_saved` is based on RA9 relative to the season league average and scaled by workload.
FIP-
Support metric
FIP is retained, with `FIP-` indexed to league average so lower is better and 100 is average. FIP now uses non-intentional walks when IBB data is present.
K-BB%
NIBB-aware
Walk-based rates and K-BB% now use non-intentional walks where IBB detail exists, improving comparability for richer sources.
BABIP-A
Support metric
BABIP-against is now surfaced as a contact-management support metric using hits in play and outs in play.
LOB%
Support metric
LOB% is now exposed as a sequencing / strand-rate context metric, not a standalone rating.
GO/FO
Detail signal
GO/FO is surfaced where GO and FO fields are available, helping richer NCAA/NWAC rows show batted-ball shape.
Qualifier
10 IP
The mart keeps every pitcher row and exposes qualification separately instead of filtering in SQL.
Fallback
Legacy safe
If `player_pitching_adjusted` is unavailable, product surfaces fall back to `pitching_advanced`.

Player Baserunning Layer

Primary Sort
BsR/G
Baserunning now has its own player-facing layer instead of living only as an offense side field.
wSB
Relative running value
Uses season-native SB/CS run values, but now scores players relative to the league-average running value expected from their on-base opportunities.
wGDP
GO proxy context
GDP value now uses a ground-ball opportunity proxy when GO data exists, making richer NCAA/NWAC rows more informative than lower-detail sources.
BsR
wSB + wGDP
First-pass standalone baserunning score combines running value and GDP burden.
Opp Proxy
1B + NIBB + HBP
Running opportunity proxy is built from singles, non-intentional walks, and hit-by-pitches instead of using PA directly.
Qualifier
50 PA
Shares the current hitter qualifier so baserunning views can stay aligned with player opportunity.
Fallback
Layered safe
If `player_baserunning_adjusted` is unavailable, product surfaces fall back to baserunning fields derived from player offense or legacy hitting views.

Adjustment Engine

Teams Rated
28
Number of teams present in the adjusted engine output.
Converged Teams
0
Teams whose final-step delta finished below the convergence threshold.
Avg Iterations
10.0
Mean number of additive adjustment passes recorded in the final mart.
Worst Delta
0.107100
Largest final-step change among all teams in the selected season.
Avg Rated Coverage
91%
Average share of games with an opponent that resolved into the adjusted engine.
Avg SOS
-0.743
Average opponent adjusted run margin across the league.

Raw Audit Summary

Avg Def Signal
0.000
Average direct game-level raw defense signal across all rated teams in the selected season.
Avg |Def Resid|
1.339
Average absolute cleanup needed after the direct defense signal is stacked back into raw run margin.
Worst |Def Resid|
4.456
Largest absolute raw defense cleanup among team seasons in the selected season.
Residual > Signal
28
Teams where the raw defense cleanup magnitude exceeds the direct defense signal magnitude.
Avg BsR Player
-0.002
Average player-layer baserunning contribution per game before blending with game signals.
Avg BsR Game
0.272
Average GDP-aware game-level baserunning contribution per game in the raw layer.
Avg BsR Sig %
0%
Average share of scored team games with direct GDP context available for the raw baserunning signal.
Avg Def Sig %
0%
Average share of scored team games with direct defensive signal support from fielding counts or opponent GDP context.
Avg Opp GDP %
0%
Average share of scored team games where opponent GDP context was available to enrich the defense signal.

Validation Summary

AdjRM Corr
0.919
Correlation between adjusted run margin and team win percentage for the selected season.
RawRM Corr
0.954
Correlation between raw run margin and team win percentage, shown as a baseline against the adjusted engine.
Adj Gain
-0.034
Difference between adjusted and raw run-margin correlation with win percentage.
Adj Corr 80%+ Cov
0.923
Adjusted run-margin correlation with win percentage for teams with at least 80% rated-game coverage.
Avg Win Error
3.19
Average absolute difference between expected wins from the adjusted engine and actual wins.
Worst Win Error
11.30
Largest absolute expected-wins miss among teams in the selected season.
Avg |Luck|
3.19
Average absolute luck term from the adjusted engine. Lower suggests the expected-win layer is matching observed records more closely.
|Luck| >= 2
16
Teams whose expected wins differ from actual wins by at least two games.
|Win Err| >= 3
11
Teams whose expected-win miss is at least three games.

Validation Breakdown

80%+ Cov |Err|
3.44
Average absolute expected-win miss for teams with at least 80% rated-game coverage.
<80% Cov |Err|
1.10
Average absolute expected-win miss for teams with weaker adjusted-game connectivity.
Converged |Err|
Average absolute expected-win miss for teams whose final iteration converged.
Non-Conv |Err|
3.19
Average absolute expected-win miss for teams that still had meaningful movement left at the final iteration.
High-Conf |Err|
Average absolute expected-win miss for converged teams with at least 80% rated-game coverage.
Low-Conf |Err|
3.19
Average absolute expected-win miss for teams with weak coverage or a non-converged result.
Low Coverage Teams
3
Teams below the 80% rated-game coverage line in the validation layer.
Non-Converged Teams
28
Teams whose validation rows still carry a non-converged engine result.

Method Notes

Raw Layer
team_ratings_raw
Builds run-differential components from weighted player-adjusted offense and pitching, blends raw baserunning with GDP-aware game signals, and anchors raw defense to a direct game-level proxy before the final reconciliation cleanup.
Raw Coverage Signals
3 shares
Team surfaces now expose offense split-detail coverage, pitching contact-detail coverage, and baserunning GDP-context coverage so richer NCAA/NWAC-backed rows are visible in product.
Raw Audit Fields
Def/BsR split
Team views now show direct raw defense signal, defense residual cleanup, and player-versus-game baserunning contributions so the raw decomposition is inspectable.
Adjusted Layer
team_ratings_adjusted
Applies additive opponent adjustment iteratively across all four components, with offense/pitching and baserunning/defense paired against complementary opponent strengths.
Game Detail
ratings_game_detail
Centers game-level offense, pitching, defense, and baserunning proxies back to each team’s raw season values, with GDP-over-expected and error-context now feeding the defense/baserunning side of the engine.
Player Layers
3 marts
Player-facing product views now read `player_offense_adjusted`, `player_pitching_adjusted`, and `player_baserunning_adjusted` first.
XBH Split Rate
100%
Share of non-HR extra-base hits with observed 2B/3B split detail in this season.
Home Margin
0.653
Observed average home-field run margin from scored games.
Environment Scale
1.420
Run-environment multiplier relative to the MLB baseline used in v1 constants.

Convergence Watchlist

Teams with the largest remaining final-step movement. Open any row to inspect the ratings tab for game-level detail.

TeamAdjRMRated %IterDeltaConv
Walla Walla
NWAC
-4.51100%100.1071N
Blue Mountain
NWAC
-4.21100%100.1057N
Yakima Valley
NWAC
-0.1698%100.1056N
Centralia
NWAC
-1.76100%100.1044N
Skagit Valley
NWAC
-3.25100%100.1031N
Tacoma
NWAC
-0.7897%100.1024N
Olympic
NWAC
-2.72100%100.1003N
Spokane
NWAC
1.5196%100.0990N

Coverage Watchlist

Teams with the thinnest adjusted-game coverage. These ratings may still be directionally useful, but they are less fully connected.

TeamAdjRMRated %IterDeltaConv
Douglas
NWAC
-4.9962%100.0674N
Clackamas
NWAC
-1.4174%100.0370N
Mt Hood
NWAC
0.4577%100.0369N
Linn-Benton
NWAC
2.1782%100.0445N
Treasure Valley
NWAC
-2.1884%100.0845N
Lane
NWAC
3.2484%100.0495N
Lower Columbia
NWAC
2.3286%100.0853N
Grays Harbor
NWAC
-7.9988%100.0912N

Raw Audit Watchlist

Teams whose raw defense needed the largest cleanup after the direct game-level signal was applied.

TeamRawDefDef SigDef ResidRawBsRBsR P/GDef Sig %
Grays Harbor
NWAC
-4.460.00-4.46-0.11-0.11 / -0.120%
Walla Walla
NWAC
-3.210.00-3.210.020.02 / 0.020%
Big Bend
NWAC
-2.920.00-2.920.07-0.02 / 0.230%
Douglas
NWAC
-2.840.00-2.840.090.06 / 0.160%
Spokane
NWAC
2.520.002.520.230.07 / 0.540%
Everett
NWAC
1.850.001.850.370.22 / 0.660%
Lower Columbia
NWAC
1.800.001.80-0.14-0.29 / 0.150%
Skagit Valley
NWAC
-1.650.00-1.650.01-0.04 / 0.110%

Validation Watchlist

Teams with the largest gap between expected wins from the adjusted engine and actual wins.

TeamW-LAdjRMExp WLuck|Err|Rated %Risk
Blue Mountain
NWAC
18-29-4.216.711.311.3100%
high
95%+ / drifting
Olympic
NWAC
19-29-2.728.410.610.6100%
high
95%+ / drifting
Treasure Valley
NWAC
23-27-2.1816.07.07.084%
high
80-95% / drifting
Chemeketa
NWAC
11-35-1.4317.6-6.66.691%
high
80-95% / drifting
Centralia
NWAC
21-27-1.7615.65.45.4100%
high
95%+ / drifting
Yakima Valley
NWAC
30-21-0.1624.95.15.198%
high
95%+ / drifting
Lane
NWAC
39-183.2443.8-4.84.884%
high
80-95% / close
Big Bend
NWAC
16-30-4.1311.34.74.791%
high
80-95% / drifting

How To Read The Flags

Converged = N means the iterative engine still had a meaningful rating move left at the final pass. That does not make the rating unusable, but it is a good cue to inspect opponent connectivity and game-by-game detail.

Rated coverage tracks how many scored games had an opponent that resolved into the adjusted engine. Lower coverage usually means more schedule isolation or incomplete connectedness.

Matchup detail lines summarize how much richer raw offense split detail, pitching contact detail, and baserunning GDP-context support each team brings into the pregame cards.

Matchup audit lines now also split raw defense into direct signal versus cleanup and raw baserunning into player versus game-signal contributions, so matchup cards expose the same raw audit language as team pages.

Validation summary compares how well `AdjRM` and `RawRM` track win percentage, while the validation breakdown splits expected-win miss size by engine confidence so weak coverage or non-convergence is easier to spot season-wide.

Adjusted defense and baserunning now come from centered game-level proxies that include GDP-over-expected context alongside the earlier SB/CS and error signals, so those components can participate in opponent adjustment instead of remaining static season carry-through fields.

Team pages now support a direct tab=ratings link target, so the watchlists on this page can jump directly to the per-game adjusted detail behind a team's `AdjRM`.