Skip to content
// morris-labs
baseballstatcaststatistics

The xBA blind spot

Expected batting average is decided at the moment of contact, so it never learns where the ball went or how far it carried. T-Mobile Park lives in that gap — and the marine layer everyone blames for it turns out to be a null result.

12 min read

Expected batting average is the number that tells you whether a hitter has been unlucky. Statcast measures how fast a ball leaves the bat and at what angle, looks up every historical batted ball struck about that way, and reports the share of them that fell in. If a hitter’s xBA is forty points above his average, the story writes itself: he is hitting the ball fine, the fielders keep catching it, regression is coming.

It is a genuinely good statistic. But both of its inputs are measured at the instant of contact, and two things that decide whether a ball is a hit happen strictly afterward — which direction it went, and how far it carried. xBA has no term for either. It cannot, by construction.

I wanted to know how much that costs. So I pulled every batted ball from 2021 through 2026 — 699,693 of them, all thirty parks — and went looking for the outcomes hiding inside a single expected number.

One number, the entire width of the field

Start with the narrowest slice I can make: balls hit between 95 and 100 mph, at a launch angle between 20 and 25 degrees. Hard, in the air, not quite a home run swing. There are 9,025 of them. By the only two things xBA measures, they are the same batted ball, and it assigns them all essentially the same value — .302, which holds to within four points across every direction on the field.

Here is what actually happened to them, plotted against the direction they were hit.

.000.250.500.7501.000-45°-30°-15°15°30°45°left-field linecentreright-field line
9,025 balls hit 95–100 mph at 20–25°, 2021–2026, in twenty 5° bins — the thinnest holds 104. Expected batting average is flat across the field because spray angle is not one of its inputs. Shaded area is the difference.
the numbers
DirectionActualExpectedBalls
-50° to -45°.990.295104
-45° to -40°.803.297305
-40° to -35°.467.301358
-35° to -30°.292.300411
-30° to -25°.304.301487
-25° to -20°.325.302490
-20° to -15°.488.303508
-15° to -10°.410.311517
-10° to -5°.084.305559
-5° to 0°.028.301540
0° to 5°.021.300569
5° to 10°.097.305568
10° to 15°.317.302555
15° to 20°.445.305548
20° to 25°.299.301522
25° to 30°.219.301525
30° to 35°.224.300500
35° to 40°.388.298464
40° to 45°.735.296355
45° to 50°.971.305140

The dashed line is xBA. It is flat because it has to be — direction is not an input, so every point on this chart is the same prediction. The solid line is reality, and it runs from .021 to .990.

That is the whole thing, really. A ball struck at 97 mph and 22 degrees toward straightaway centre is very nearly an automatic out. The identical ball pulled down the line is very nearly an automatic double. Statcast scores both as a .302 batted ball, and it is not wrong to — that is the average outcome across the field. It is simply an average taken across a distribution that spans nearly the entire range the statistic can express.

The shape is worth reading closely. Those troughs are not noise; they are fielders. The deep one in the middle is the centre fielder, and the two shallower dips on either side at roughly 25 to 35 degrees are the corner outfielders standing where they have learned to stand. The peaks between them are the gaps, and the peaks at the edges are balls that curve into fair territory a few feet past the bag. You are looking at a defensive alignment, drawn by outcomes.

None of this is a flaw in xBA. It is a boundary. But it means that when a park persistently underperforms its expected average, the gap is not automatically bad luck waiting to correct — it can be geometry, repeated eighty-one times a year.

The park that lives in the gap

Every ballpark in baseball sits within about a point of its expected average. One does not.

T-Mobile Park runs .014 below the league on balls in play — 5.8 standard errors, the largest gap in the game, and negative in every one of the six seasons. Counted rather than rated, that is 311 hits that xBA expected and Seattle did not produce, about 52 a year.

The obvious objection is that this is the Mariners, not the ballpark. It is a fair objection and it is wrong. Charge every batted ball against that same batter’s record in every other park he played in, and the gap does not shrink — it widens slightly, to .015. Whatever is happening is happening to everyone who walks in, which is what a ballpark is.

The second objection is better: xBA cannot see the defence either, and the Mariners have had a good one. That is true, and it is why the next measurement matters more than this one.

The measurement defence cannot touch

Positioning changes whether a ball is caught. It does not change how far a ball flies. So: take every ball hit in the air, compare its actual distance against the league’s median distance for its exact exit-velocity and launch-angle cell, and average what is left over by park. Contact quality is divided out. No fielder appears anywhere in it.

Coors Field+16.1Chase Field+7.5Sutter Health Park (Sacramento)+5.2Kauffman Stadium+4.2Tropicana Field+4.0Globe Life Field+3.2Truist Park+2.8American Family Field+1.7Oriole Park at Camden Yards+0.3Angel Stadium0.0Target Field-0.1PNC Park-0.4Busch Stadium-0.6Great American Ball Park-0.8loanDepot park-0.8Nationals Park-1.1Citizens Bank Park-1.2Rogers Centre-1.3Oakland Coliseum-1.6Daikin Park-1.9Dodger Stadium-2.0Progressive Field-2.2Rate Field-2.5Citi Field-2.7Comerica Park-2.8Oracle Park-3.1Petco Park-3.1Fenway Park-3.4T-Mobile Park-3.5Wrigley Field-3.6Yankee Stadium-3.7George M. Steinbrenner Field (Tampa)-6.5-15 ft-10 ft-5 ft0 ft+5 ft+10 ft+15 ft
Distance travelled against the league's median for the same exit velocity and launch angle, 2021–2026. Coors Field is the control: a mile of elevation has to come out on top or the measurement is broken.
the numbers
BallparkCarry vs leagueAir balls
Coors Field+16.1 ft25,098
Chase Field+7.5 ft24,539
Sutter Health Park (Sacramento)+5.2 ft7,479
Kauffman Stadium+4.2 ft24,381
Tropicana Field+4.0 ft18,479
Globe Life Field+3.2 ft23,336
Truist Park+2.8 ft22,902
American Family Field+1.7 ft22,239
Oriole Park at Camden Yards+0.3 ft23,850
Angel Stadium0.0 ft22,786
Target Field-0.1 ft23,432
PNC Park-0.4 ft23,602
Busch Stadium-0.6 ft24,512
Great American Ball Park-0.8 ft22,682
loanDepot park-0.8 ft23,531
Nationals Park-1.1 ft24,443
Citizens Bank Park-1.2 ft23,235
Rogers Centre-1.3 ft23,764
Oakland Coliseum-1.6 ft16,291
Daikin Park-1.9 ft22,995
Dodger Stadium-2.0 ft22,623
Progressive Field-2.2 ft23,095
Rate Field-2.5 ft23,136
Citi Field-2.7 ft22,429
Comerica Park-2.8 ft23,213
Oracle Park-3.1 ft23,310
Petco Park-3.1 ft22,980
Fenway Park-3.4 ft23,955
T-Mobile Park-3.5 ft22,139
Wrigley Field-3.6 ft23,036
Yankee Stadium-3.7 ft22,169
George M. Steinbrenner Field (Tampa)-6.5 ft4,032

Coors Field comes out at +16.1 feet. That is not the finding — that is the instrument reading a known quantity correctly. Chase Field, hot and dry, sits at +7.5. If the method works anywhere it works there.

T-Mobile Park is at −3.5 feet. A ball leaves the bat in Seattle exactly as well struck as it would be anywhere else and lands three and a half feet shorter, and three and a half feet is about the difference between the warning track and the seats, or between a diving catch and a ball that lands in front of it.

The part I got wrong

Here is where the popular explanation comes in, and where I had to back out of something I had already written down.

Everyone knows why Seattle plays this way: the marine layer. Cool damp air off the Sound, thicker than the air anywhere else, and fly balls die in it. I wrote that sentence myself, confidently, before I checked it.

The study that gets cited for it is Kagan and Mitchell’s marine-layer analysis in the 2017 Hardball Times Annual. They regressed batted-ball distance on marine-layer conditions within each West Coast park, controlling for exit speed, launch angle, spray angle and pitch speed. Their results:

Park Effect Standard error p
San Diego −6.1 ft ±3.0 0.04
Oakland −5.6 ft ±3.2 0.07
Seattle −1.2 ft ±2.3 0.53

Seattle’s own coefficient is indistinguishable from zero. The famous six feet belongs to San Diego and Oakland. The number has been lifted and applied to Seattle so often — including by the Seattle Times — that it has become common knowledge about a ballpark the study specifically failed to find it in.

The physics is why. Cold air is denser and shortens a fly ball. Humid air is less dense than dry air, at the same temperature, and lengthens it. In Seattle the two roughly cancel, which is precisely what a null coefficient looks like.

And Statcast’s own carry decomposition agrees. It splits each park’s distance effect into temperature, elevation, roof, and an “environment” residual — the term where humidity and wind live. For T-Mobile in 2024:

Component Feet
Temperature −4.2
Elevation (sea level) −2.3
Roof +0.6
Environment +0.6
Total −5.3

The residual where the marine layer would have to show up is positive and negligible. What is left is cold air and sea level. Within Seattle’s own schedule, games near 57°F lose about 9.5 feet of carry and games near 73°F lose about one — same park, same water, same fog. It is the thermometer.

The roof, while we are dismissing things, does nothing either: the park suppressed offence by 9% with it closed and 9% with it open. And foul territory, the other stock answer, is 24,300 square feet — tenth of twenty-nine, thoroughly ordinary.

It does not eat home runs

Now the part that surprised me most, and the part I nearly got backwards a second time.

If a park shortens fly balls by three and a half feet, you would expect home runs to take the damage. They do not. Home runs at T-Mobile run 5% above league average. The park is small — average fence 367 feet, average wall height 7.6 feet against a league mean of 9.6 — and the 2013 fence move-in offsets the dead air almost exactly for balls that were leaving anyway.

The damage lands on everything else. But how you count it changes the story completely:

Outcome vs league Hits
Singles −5.5% −259
Doubles −10.3% −146
Triples −49.0% −60
Home runs +5.2% +53

Read the percentages and triples scream: down by half, easily the most dramatic number on the page. Read the hits and triples are the smallest effect in the table — about ten a season — because triples are barely half a percent of all contact to begin with. The unremarkable −5.5% on singles quietly costs four times as many hits as the spectacular −49% on triples.

I built this chart with percentages first and had to redraw it, because as drawn it pointed the reader directly at the least important row. Any percentage taken against a rare event will do this. It is worth being suspicious of every one you see.

So the honest one-line description is not “T-Mobile Park kills home runs.” It is that balls hit in the air arrive three feet short of where they should, into a park whose fences are close enough that the home runs still clear — and the ones that would have landed in front of an outfielder somewhere else get caught here instead. It suppresses batting average, not power.

How much of this the sample actually supports

Before the last section, the part that is easy to skip and should not be.

Batting average is a coin flip repeated, so the precision of any of these numbers falls as one over the square root of the count. That has three consequences here, and one of them undercuts a chart I drew above.

Measurement n Estimate 95% ÷ margin
Strikeout park factor 33,442 PA 1.123 ± .031 36×
Carry vs league 5,705 −3.46 ft ± 0.52 6.7×
Park BA − xBA 22,139 −.0140 ± .0047 3.0×
Triples vs league 62 −49% ± 13pp 3.8×
One season 2,952 −.015 ± .013 1.1×

Only thirteen of the thirty-two parks clear their own error bar. A park sees about 23,000 balls in play across six seasons, and that resolves an effect of roughly .006 of batting average and nothing smaller. Every park in the middle of the ranking I showed is not neutral — it is unmeasured. Seattle is comfortably outside that band, and so are Coors and Fenway at the other end, but a park sitting at −.003 is a park about which I know nothing.

No single Seattle season is strong evidence. Four of the six clear significance individually; the interval on one season is ±.013 against an effect of about .015. What actually carries the argument is that all six seasons share a sign, which under a fair coin is p = 0.031. The run is the evidence, not any bar in it.

The triples number is the shakiest thing I quoted. Sixty-two triples over six seasons puts the true effect somewhere between −36% and −62%. The direction is certain; the magnitude is not, which is one more reason to have been reading the hit counts rather than the percentages.

The strikeout factor, meanwhile, is the most certain result in the whole project by a wide margin — it is measured over plate appearances rather than batted balls, so it has the largest sample of anything here. Which is a convenient segue.

What is actually left

The largest single thing about this ballpark is not in any of the above.

Its strikeout park factor is 1.123 — twelve percent more strikeouts than the same hitters and the same pitchers produce everywhere else, measured by following both groups in and out of the building. That is first in baseball, and Statcast’s single-season version has had it first in 2023, 2024 and 2025, peaking at 122.

The best published work on it points somewhere I did not expect: the sun. Ryan Blake’s modelling of 2021–23 pitch data finds whiff rate at 25.1% before sunset and 27.0% after, and removing that one effect drops the park’s strikeout factor from 109 to about 101 — neutral. His decomposition puts roughly half the park’s entire wOBA effect on sun and lighting.

The detail that makes it credible is the symmetry. Mariners hitters whiff about 25% at home and 20% on the road. Mariners pitchers whiff about 25% at home and 20% on the road. Both sides get worse in the same building by the same amount, which is not what a pitching staff looks like — it is what a visibility problem looks like. The batter’s eye was rebuilt in black light-absorbing honeycomb in July 2003 and its angle has never been changed, but nobody has demonstrated that it is the cause, and the strikeout spike arrived two decades after the rebuild.

So the ballpark is roughly: cold air taking three feet off every fly ball, a defence standing where the gradient says to stand, and a twilight visibility effect nobody has fully explained doing more damage than either. The marine layer, which is the answer everyone gives, is the one thing that measurably is not happening.


The interactive version is in the lab — the xBA blind spot, where you can pick any exit-velocity and launch-angle cell and watch its spray gradient, and run the whole thing against any of the thirty parks rather than just this one.

The data comes from Baseball Savant via plyball, my own scraper. The repository holds the pull, the analysis, and the intervals; the raw parquet is left out, but the aggregates are committed, so the application rebuilds from a clone without re-pulling seven hundred thousand batted balls.

Application → · Code on GitHub →

← Back to all posts