Author: Jack Hughes – Computer Science Major at Georgia Tech and Normal CornBelters Baseball Analytics Intern

Intro

Coming into the summer, I had no idea what the run scoring environment looks like in the Prospect League. I know anecdotally that D1 NCAA games are more high scoring than MLB games but I’m unsure how that would translate to the PL where there’s players from all levels of college baseball.

What I found: the Prospect League is a meaningfully higher-scoring environment than MLB and a similarly-scoring environment to D1, but the way it gets there is different from either, and that difference is informative about where the developmental gap lives.

Data Exploration

The PL uses PrestoSports to score games and within that I was able to find XML box scores for every league game from 2022 on. Those box scores held play-by-play data, with an example seen in the screenshot below. It holds everything we need for this including at-bat outcome, outs, runs at the end of the inning and runners on base. 

There are some things worth mentioning with regards to quality of data. The first thing I wanted to make sure was that there was no data being double counted. When you download the batch of box scores from the league page it can include two identical box scores from the same game, one from each team’s perspective. Each game has a unique game_id which makes it easy to filter out the duplicates. I also didn’t want to include any instances where the half inning didn’t end with three outs. This would happen in a situation like a walk-off or a rain cancellation. This is because more runs could potentially have been scored, so it makes the most sense to just toss out those half innings. There are some more intricacies involved but they aren’t worth mentioning here so I’ll link the code if anyone is interested in seeing more of the logic behind this.

One play from a single XML box score. Each <play> element captures everything we need: outs at the start of the play, runners on base (second="T. Specht" attribute on the <play> tag), the batter’s action (KS = strikeout swinging), and whether anyone was out or scored.

Results

After iterating through 153,983 plate appearances across 1,983 games from 2022-2025 we are left with this run expectancy matrix:

Prospect League 2022-2025

Runners On0 Outs1 Out2 Out
0.7590.3840.139
1–1.2400.7020.286
2-1.4950.8750.388
–31.6981.1370.434
12-1.9131.1940.540
1-32.1631.3830.633
-232.3791.6060.710
1232.9461.9550.955

My immediate thinking after this was: Ok cool…but how does this compare to the levels of baseball I know. Luckily there’s an answer to that. Using the 2021-2024 run expectancy matrix from this Fangraphs article we can take the difference between the PL and MLB.

Prospect League 2022-2025 – MLB 2021-2024

Runners On0 Outs1 Out2 Out
0.2590.1140.039
1–0.3400.1620.056
-2-0.3550.1650.053
–30.3280.1570.054
12-0.4030.2540.080
1-30.3430.1930.123
-230.3390.1960.140
1230.5660.3250.135

MLB has had three rule changes during the comparison window: the universal DH (2022), the shift ban (2023), and the pitch clock (2023). All of these push MLB’s run environment upward, which means the +0.26 gap between the PL and MLB likely understates what we’d see comparing the PL to pre-2022 MLB. It’s still an insightful comparison though. The first thing we see is that the initial state of an inning, 0 outs with no runners on has a .259 expected run difference. Another interesting trend is that as the inning gets closer to finishing in terms of outs, the gap in run expectancy between the two leagues shrinks. With fewer plays left before the inning ends, there’s simply less room for the environment difference to translate into runs.

The next comparison I want to look at is PL vs. NCAA D1. I want to mention that the NCAA dataset is 8000 games from the 2023 season compared to the Prospect League ~2000 games over 4 seasons.

Prospect League 2022-2025 – NCAA D1 2023

Runners On0 Outs1 Out2 Out
0.029-0.006-0.011
1–-0.0100.0020.016
-2--0.035-0.0050.080
–3-0.052-0.0030.014
12-0.0430.0940.060
1-30.0330.1030.113
-230.0490.1260.110
1230.4060.3450.225


This one is the most interesting comparison we have because D1 is the closest level to the PL with reliable data. With the bases empty or just one runner on, the two leagues are nearly identical, with most cells within ±0.05 runs of zero and none exceeding ±0.08. From scratch, the PL and D1 create offense at essentially the same rate. But as baserunners stack up, the gap opens fast. Compare what happens with bases loaded: +0.41 with no outs, +0.35 with one out, and +0.23 with two. Runners on second and third are similar, +0.05, then +0.13 and +0.11 as outs accumulate. The PL doesn’t generate more initial offense than D1 but instead it converts inherited baserunners into runs at a meaningfully higher rate.

The pattern is consistent with a gap in command and defensive consistency rather than baseline hitting or pitching, since bases-loaded situations are where walks, wild pitches, and errors all convert directly into runs. Whether that’s actually the mechanism is a separate question this matrix can’t answer on its own.

I was also curious to look and see how Cornbelters games compared to the PL as a whole over this time period but there really isn’t anything notable when you compare the two, meaning Cornbelters games tend to play like the average PL game.

Prospect League 2022-2025 – Cornbelters Games 2022-2025

Runners On0 Outs1 Out2 Out
-0.0220.0030.012
1–0.0090.0350.011
2--0.206-0.087-0.022
–30.005-0.070-0.042
12-0.052-0.0020.018
1-3-0.151-0.1310.096
-23-0.031-0.0080.152
123-0.0290.0930.049

Conclusion

Coming in, I had no sense of the PL’s run environment beyond anecdote. Now I have a 24-state matrix grounded in 153,983 PAs, plus comparisons to two reference leagues. The PL sits roughly +0.26 runs per inning above MLB and runs roughly even with D1 from scratch, but converts inherited baserunners into runs at meaningfully higher rates. That foundation opens up the rest of the season’s work: evaluating individual decisions like stolen base attempts and pinch hit choices, computing RE24 for hitters and pitchers, and building toward a win probability model. Plenty of directions from here.

Sources

http://www.boydsworld.com/data/ert.html
https://blogs.fangraphs.com/the-run-expectancy-matrix-reloaded-for-the-2020s/

Repo for project: https://github.com/jackhughes5/prospect-league-run-expectancy

1 Comment

  1. Denard Span on May 28, 2026 at 8:01 am

    Very interesting stuff, thanks for sharing

Leave a Comment