Whiffs go up as the sun goes down in Seattle.
If there is an issue with the batter’s eye at T-Mobile Park, whether it be glare or shadows or something else, light is likely a catalyst. Hitting is a visual experience, and light changes our perception of objects (especially those moving 100 mph).
So if the stadium affects batter vision, we should see a change in performance with the type and amount of light being cast.
Now, we can’t measure light in the stadium directly. But we can measure the thing that affects light the most—the position of the sun. When the sun is high in the sky, the stadium will look one way. When the sun is close to the horizon, it will look another. When the sun is fully set and replaced by LEDs, it will look another still.
And because the sun changes positions predictably within games (as it sets) and between games (as the Earth moves relative to the sun), the sun makes for a convenient variable to test performance against.
Or at least, that’s the premise.
The spoilers
I tested whether the probability of a whiff changes with the position of the sun.
I found whiffs go up about 10% in night games after sunset. This finding was most prominent during civil twilight. The results are consistent in direction and magnitude while holding constant several variables that influence whiffs.
I did not find a similar trend or any trend in day games that would suggest an issue with the model. I did, however, find a higher baseline whiff rate during day games. It’s possible there are multiple positions of the sun that influence whiffs.
I cannot say whether the batter’s eye itself is responsible for these results. I do not know whether this helps or hurts the Mariners. I have no recommendations. This is not discourse.
I can say there appears to be a general inconsistency in how batters pickup the ball at T-Mobile Park throughout the day.
The data
I chose whiffs as the main metric to test. An issue with vision would presumably affect timing, and whiffs seem like a logical function of timing—swing late, miss ball. Whiffs are also more reliable than strikeouts (confounded by umpires) and chase rate (confounded by approach).
I used the baseballr package to scrape data from Baseball Savant. I pulled every pitch at T-Mobile Park from 2021 through 2023. I found time stamps for each pitch from the mlb_pbp function (baseballr), and then found the sun’s altitude and azimuth for each pitch using the suncalc package. I added additional weather data for each game using the mlb_game_info function (baseballr).
I filtered the data to only include swings and coded whiffs as a binary variable. I removed March and October, doubleheaders, everything after the eighth inning, and a (smallish) handful of pitches with NA values. I also limited the data to only include night games (for now).
This gives us a sample of 19,558 swings and 5,163 whiffs, which is consistent with the whiff rate published on Baseball Savant (after filtering out the above).
Here is whiff rate plotted against altitude:
This graph shows average whiff rate holds steady around 25% while the sun is still visible. As the sun sets past the horizon, however, whiff rate jumps and holds a few points above the pre-sunset average.
Let’s run some tests.
The first model
First, I want to know whether sunset itself is significant.
I defined sunset as a binary variable for whether sun was above or below 0 degrees. I used random effects to account for the baseline whiff rates of individual batters and pitchers. I also included several fixed effects to hold constant other things that might influence whiffs:
Pitch level: Pitch type, speed, spin, and location
Game level: Count, times through the order, and whether the Mariners are batting or pitching
Player level: Batter and pitcher handedness, and the pitcher “position” (SP/RP)
Environment level: Month, year, and other types of weather
The model looks like this:
model_glmm <- glmer(whiff ~ sun_is_up +
release_speed + release_spin_rate +
zone + pitch_type +
strikes + mariners + times_faced +
stand + p_throws + sp_or_rp +
game_year + month + other_weather +
(1 | batter) + (1 | pitcher),
family = binomial,
data = swings)
Here is the coefficient for the sun:
This shows the odds of a whiff are about 9% lower when the sun is up versus when the sun is set (holding all else constant). The result is statistically significant at the p < .10 level. The average predicted whiff rate before sunset is 25.1%; the average predicted whiff rate after sunset is about 27.8%.
Note: The fixed effects bring up a modest issue with multicollinearity—specifically between pitch type and velocity (fastballs go fast). I did run each test specifically for in-zone fastballs and found similar or even stronger results (-.277 log-odds and p = .0108 for this model). Substack limits length, and I can’t share my decisions/results for each covariate in depth. My overall goal here is clarity and general interpretability, which is why I’m publishing the slightly flawed model.
Now, sunset isn’t binary. There are six generally recognized stages of sunset: daylight, civil daylight, civil twilight, nautical twilight, astronomical twilight, and night.
I replaced the binary sun_is_up variable with a variable containing those six stages. I set the reference category to “daylight,” so you can think of the next coefficients as the change in whiff rate relative to daylight:
Whiff rate jumps about 17% when the sun reaches civil twilight (the moments just after the sun crosses the horizon). This result is statistically significant at p < .05. The other sunset stages show directionally similar results but don’t reach the same threshold of significance.
Note: Again, to my note above, in-zone fastballs show an even stronger and more significant relationship at civil twilight (.373 lod-odds and p = .0095).
Here are the average predicted whiff rates by sunset stage:
The other model
The horizon (0 degrees) appears to be an important threshold. But maybe the relationship isn’t so simple. Instead of neat categories, perhaps there are a few specific positions of the sun that matter.
For a broader view, I used a different type of model that’s useful for studying non-linear relationships. I used a tensor term to capture the interaction between altitude and azimuth (i.e., the direct position of the sun). I continued to use the same random and fixed effects.
Here is the model:
model_gam <- gam(whiff ~ te(altitude, azimuth) +
release_speed + release_spin_rate +
zone + pitch_type +
strikes + mariners +
stand + p_throws + times_faced + sp_or_rp
game_year + month + other_weather +
s(batter, bs = "re") + s(pitcher, bs = "re"),
family = binomial,
data = swings)
Here is the result for the sun position term:
This isn’t easy to interpret, but it shows that the term used for the sun position is statistically significant—i.e., the position of the sun shows some influence over whiff rate.
Looking at this graphically, we again see that sunset itself appears to be the most important threshold:
The conflict
The biggest concern here is that I’m not properly controlling for the natural increase in whiff rate that happens as games progress. It’s possible these results simply tell us what we already know—relievers come in late and get more whiffs.
We do, however, have a natural point of comparison: day games. If we believe that sunset itself is the important threshold, then day games should present roughly the same whiff rate as night games before sunset.
But instead, we don’t see that:
That’s concerning.
But let’s investigate using the second model. If something that influences whiff rate is hiding behind game progress, we should see a similar spike at about the same location in day games.
Instead, we see a mostly flat line. Further, the term used to capture the position of the sun is not statistically significant. This suggests the observed change in whiff rate during night games is not necessarily an inherent model flaw.
Still, what do we make of the average whiff rate discrepancy?
Rather than plotting whiffs against the sun, let’s look at whiffs by elapsed time for day and night games. Here is the average whiff rate for every 20 minutes of elapsed time:
Day games start with an average whiff rate of about 27%. Whiff rate moves about one point in either direction over the course of the game, but it mostly hovers around that 27% mark. Night games, on the other hand, start two full points lower than day games and hold remarkably steady for the first hour or so. Right around the 100-minute mark, however, whiff rate begins to climb. At the 160-minute mark, whiff rate has cleared five full points.
What else is at the 100 minute mark? The average time where the sun crosses the horizon during night games.
Let’s run one final test with both day and night games (with a new fixed effect to control for those baseline whiff rates).
First, the result for the sunset:
And now the result for the sunset stages:
The end
To summarize briefly:
Whiff rate goes up at least 10% after sunset;
This increase is most prominent during civil twilight;
Day games show a higher baseline whiff rate than night games; and
The model appears to work fine.
The premise of this post was not that there would be a specific effect but that there might be an effect at all. That said, the results here show a specific effect at an intuitive location, which only adds to my confidence. I’m comfortable at this point saying the sun has some influence on the probability of a whiff at T-Mobile Park.
What does that imply?
A change in performance with a change in light suggests the stadium creates an inconsistent visual field for batters. While the strongest result here is at sunset, it’s possible batters struggle to pickup the ball at all times of day, and sunset just happens to be the most extreme.
I don’t think this is too controversial—we know something is off about T-Mobile Park.
Not only does Seattle have the lowest park factor in MLB over the last three seasons, it has the highest park factor for strikeouts as well. In fact, it’s ranked in the top five for strikeout factor 13 times since its inaugural season.
I’m not quite ready to conclude this is the direct and only cause of the extra strikeouts. I’d first want to know whether the sun influences approach or umpires. It’s also necessary to look at other venues.1
Still, a bit napkin math suggests these findings are about the right shape and size to explain most or even all of the strikeout factor.
While I believe the statistical case here is fairly strong on its own, we do have some player testimony to back this up. Teoscar Hernández shared in Spring Training that he struggled to see the ball in Seattle, which possibly contributed to a 74 tOPS+ at home. The idea gained enough traction that The Seattle Times spoke with him over the All-Star Break.
Hernandez said he never felt like he was lined up in a straight line with the pitcher’s mound at T-Mobile Park.
“It was a little crooked,” he said. “I didn’t feel really straight with the pitcher, for some reason. I moved everywhere in the batter’s box and tried to fix it, but I couldn’t figure it out.”
Presuming the field dimensions are accurate (the Mariners supposedly checked this), then what he described is an optical illusion—something about the stadium made him feel crooked in the box.2
Notably, Teo’s whiff rate jumped about six points after sunset, which is among the largest observed discrepancies I found.
As I said at the top, I cannot diagnose the part of the stadium creating this effect, whether it be the batter’s eye or something else. One promising theory is that, as MLB’s northernmost city, Seattle has the longest and (perhaps) most “severe” twilight. If the stadium looks different every time a batter comes to the plate, that inconsistency could be driving more whiffs.
At the very least, this analysis is another heaping pile of signal. This is a real issue that’s worth looking into.
I’ll leave it there for now. There’s a lot to consider and more to come, but I figure it’s best to put out the basics and gather any feedback before next steps.
####
PART 2 — T-Mobile Park, factored (Oct. 21, 2024)
I did check a few other stadiums. There’s at least one west coast stadium with an eerily similar effect. Tropicana Field, crucially, showed nothing.
Trevor May said he’s heard from several players with similar concerns.