From the Statball Lab
When a Team Stops Being Itself
I taught a model everything a well-read baseball fan knows, then asked what it still couldn’t explain. It came back holding a crime from the winter of 1919.
By Jude Wilson
The model doesn’t know who Babe Ruth is. That’s the point.
It knows other things. It knows what scoring looked like in every season since 1901, so the roaring 1920s can’t fool it and the dead-ball years can’t either. It knows April is cold and July is not. It knows day games from night games, home from road. And after some work I’ll describe in a minute, it knows something most anomaly detectors never learn: the long-run character of every franchise, every ballpark, and every opponent in 124 years of box scores. What it has never seen is a name, a trade, or a newspaper.
So here’s the game. Teach it all of that, subtract all of that, and look at what’s left. If a stretch of history still sticks out after everything a fan would use to explain it is gone, something happened there. Something that isn’t the era, isn’t the park, isn’t the schedule, and isn’t “well, that team is always like that.”
First it had to stop telling me about Denver
My first version skipped the identity step. It modeled the era and the calendar, mined the residuals, and proudly reported its top three discoveries: the Rockies score a lot at home, games at Coors Field are high-scoring, and, through a second park code, Coors Field again. Congratulations to the model for discovering altitude.
That failure is worth a sentence of respect, because it’s the same failure most anomaly detection dies of: the detector is only as interesting as what its baseline absorbs. Leave a well-known fact out of the baseline and the miner will hand it back to you as a finding, forever. So the fix went in — team, park, and opponent effects, backfitted out of the residual until the famous stuff went quiet. Then I ran it again, over roughly 3,800 slices of history per target, with false-discovery control and a million-shuffle permutation test standing between any candidate and the light of day.
Four things walked out alive.
The hole in Boston
The largest unexplained deviation in 124 years of baseball is not a hot streak or a juiced ballpark. It’s a hole. From 1920 through 1929, the Red Sox scored 1.11 runs per game less than their own identity predicts — and sit with that for a second, because the baseline already includes the 1920s scoring boom, Fenway Park, and the fact that across the full century Boston is a good franchise. Knowing all of it, the model still can’t make the 1920s Red Sox make sense. The trench bottoms out near −1.3 in 1922.
Now the fun part. The engine ran the same search for a surplus, and the largest one it trusts belongs to the 1930s Yankees: +0.86 runs per game above a baseline that already knows they’re the Yankees. Two franchises, ninety minutes apart, one spending a decade below its own character and the other above it, and the hinge between the two curves sits in December 1919 — the month Harry Frazee sold Babe Ruth to New York to cover his debts, then kept selling: Hoyt, Pennock, Dugan, Scott, most of a championship roster, to the same buyer, over five years.
The model knew none of that. No names, no transactions. It drew the Ruth sale anyway, from arithmetic:
Runs per game beyond an era-, park-, opponent- and franchise-adjusted baseline, smoothed over three years. Hover to read; click to pin.
Brooklyn, or what a decision looks like
The Boston story is a sale. The Brooklyn story is a policy, and I think it’s the better one.
For half a century the Dodgers were a statistically ordinary offense. Ordinary is the identity the model learned for them. Then, starting around 1950 and lasting until the franchise left for Los Angeles, Brooklyn scored +0.85 runs per game above its own self. The players behind that number are Robinson, Campanella, Newcombe, Snider, Hodges — and three of those five were in Brooklyn because the Dodgers integrated years before most of the league could bring itself to. A front-office decision from 1947, still legible in a residual series as a clean, decade-long break from everything the franchise had ever been. Their only Brooklyn championship, 1955, sits right on the crest.
The Phillies, with the excuse removed
One more, from the other side of the ball. Opponents of the 1920s Phillies scored 0.75 extra runs per game beyond every known factor. The reflex answer is Baker Bowl, their absurd little ballpark with a right field so short it needed a 60-foot wall — but the park is already in the baseline. This number is what remains after the excuse: a pitching staff that was terrible even adjusted for its terrible home, on a franchise too broke to fix it. It peaks in 1930, the year Philadelphia allowed 1,199 runs. No team since has come within a hundred of that. And when they finally abandoned the park in mid-1938, the residual fell off a cliff.
Look at what the survivors have in common. A sale. A hiring policy. A budget. Once you subtract the era, the weather, the ballpark, and the franchise’s own character, the anomalies that remain aren’t weather or geography or luck. They’re decisions. That’s what this whole exercise measures, in the end: management, visible from a hundred years away.
One more thing, and it’s the reason I believe any of this. A separate part of the engine measures how much each franchise changes from one season to the next, with no knowledge of transactions. Out of 2,606 season-to-season transitions, the single biggest jump it found was the Philadelphia Athletics, 1914 to 1915 — the winter Connie Mack tore his champions apart and sold the pieces, the most famous fire sale in the sport’s history. The engine recovered it blind. When your residuals can find the fire sale on their own, you can start to trust them about things nobody wrote down.
This was never really about baseball
The reason I keep feeding box scores to models is that this problem shape is everywhere and baseball is the only place with a 124-year control group. Fraud detection wants to know when an account stops resembling its own history, not whether it resembles other accounts. Canary analysis wants to know if a service degraded relative to its own rhythms, not the fleet’s. Every one of those systems dies the same two deaths: a baseline too weak, so the alerts repeat what everyone knows, or mining without a multiple-comparisons tax, so the alerts are noise with confidence. And the strongest validation any of them can have is the one above — recover an event you already know happened, blind, before you trust the machine about anything new.
Caveats, honestly
The identity effects are estimated over the whole century, which means the weird decades are inside the averages they’re measured against. That shrinks every effect toward zero, and I’ll take it — biased against discovery is the right direction to be wrong. Decades are crude bins; a change-point method would date the breaks more sharply. And the permutation tests treat games as exchangeable when scores actually cluster within seasons, so the honest numbers to lean on are the confidence intervals, not the p-values. The methods described here are the research division's; the production models stay in the shop.
Method: gradient-boosted era/context model, backfitted team/park/opponent fixed effects, BH-FDR<1%, 1M-shuffle permutation p<0.001, bootstrap 95% CIs. Data: Retrosheet game logs, 1901–2025.