← Back to list

Moneyball is a book. It is also a movie. What it has not been, until now, is an LTV:CAC analysis.

Part 5 of a series where I work through marketing science techniques using sports data.

Marcus Thuillier · 2026-05-30 16:19 · 0 claps · 7.0 min read
#baseball #marketing-science #ltv #customer-acquisition
Open on Medium ↗
Wiki topics: ECO · Economy · General GRW · Growth & Analytics 🔬 · Science · General 🎬 · Film & Television ⚾ · Baseball 🏆 · Sports · General

Moneyball is a book. It is also a movie. What it has not been, until now, is an LTV:CAC analysis.

Part 5 of a series where I work through marketing science techniques using sports data.

Switching sports this time. The previous four models used NBA data. This one uses Major League Baseball, and there is a specific reason for that.

LTV:CAC requires three things: a way to measure lifetime value, a way to measure acquisition cost, and salary data. Baseball has all three in clean, public form going back to the mid-1980s. The NBA does not. Basketball player value metrics are noisier. The Lahman database, which is the standard reference for baseball analytics, has salary records for every player since 1985. And Wins Above Replacement, or WAR, is the closest thing any sport has to a universally accepted single-number measure of a player’s value.

So baseball it is.

What I built

The question is simple: which players and teams produced more value than they cost, and by how much?

LTV is career WAR. WAR measures how many wins a player added compared to a league-average replacement. One win is worth roughly 8 million dollars on the open market in 2023, based on what teams pay free agents. So a player with 20 career WAR produced around 160 million dollars of on-field value over their career.

CAC is career salary. Total dollars paid across every season.

LTV:CAC is the ratio. Above 1.0 means you got more value than you paid for. Below 1.0 means the opposite.

Data comes from Baseball Reference WAR tables via pybaseball, covering all players who debuted between 1990 and 2015. That window gives most players enough time to complete or near-complete their careers by 2023. Salary data is embedded in the same Baseball Reference tables, with missing early-career seasons filled using the official MLB league minimum for that year. Pre-arb players, the ones most likely to have missing salary records, are almost always paid exactly the minimum anyway.

Players needed at least 300 career plate appearances or 100 innings pitched to be included. Final sample: 3,033 players.

The methodology note you should read before anything else

I compared teams across decades. That requires normalizing for the fact that a win cost 0.77 million dollars in 1990 and 7.4 million in 2023.

I did not pull those numbers from an external source. I derived them from the data itself. For each season I calculated: total league salary paid divided by total league WAR produced. That gives an implied market rate for what one win was worth in that specific year, based on what teams actually paid.

This is a blended rate, not a free agent rate. Pre-arb players being paid below market pulls the number down. That limitation is real. But because I apply the same methodology consistently across every year, the cross-decade comparison is still valid. A team in 1990 with a ratio of 1.5 got 50 percent more value than the market was paying for that season, by the same definition as a team in 2015 with a ratio of 1.5.

When you see team efficiency numbers in this post, they are normalized to that year’s implied rate, not a flat 8 million per WAR applied backward through time. The flat method would make every 1990s team look artificially efficient because salaries were low while I was valuing their WAR at modern dollars. That is not a real comparison.

91 percent of players produced more than they cost

The median player across 3,033 careers produced 3.5 times their salary in WAR value. 91 percent had a ratio above 1.0.

That is not because baseball players are underpaid in absolute terms. It is because the system is designed to underpay them early. MLB’s Collective Bargaining Agreement locks players into near-minimum salaries for their first three years regardless of performance. Arbitration in years four through six allows more pay but still below open market rates. Free agency does not kick in until year seven.

The result: the median player pays back their contract by career year two. All the surplus value extraction happens in the pre-arb window. By the time a player hits free agency, teams are paying something close to fair market value and the ratio compresses.

This maps directly onto how subscription businesses work. Early users, especially organic ones, are cheap to serve and high in value. The LTV:CAC ratio is best in those first years. The longer the relationship extends and the more it costs to maintain, the more the ratio normalizes. The pre-arb window is baseball’s version of the low-CAC early cohort.

The worst individual LTV:CAC ratios are exactly what you would expect. Ryan Howard: 14.5 career WAR, 180 million dollars in salary, 0.64x ratio. Chris Davis: 11.5 WAR, 143 million, 0.64x. Patrick Corbin: 14.2 WAR, 157 million, 0.72x. Every famous bad contract in baseball history is in the bottom ten.

Pick slots 1 through 20 are equally efficient

I pulled round one draft data for the 1990 through 2015 drafts and calculated LTV:CAC by pick range, using the signing bonus as CAC and career WAR times the market rate as LTV.

Picks 1 through 5: median LTV:CAC of 27x on the signing bonus.

Picks 6 through 10: 27x.

Picks 11 through 15: 26x.

Picks 16 through 20: 24x.

Those four groups are statistically indistinguishable. The signing bonus drops with pick slot, but so does the expected WAR, and they fall at roughly the same rate. You are not getting a discount by drafting at 15 instead of 5. You are just paying less for proportionally less expected production.

After pick 20 the ratio collapses to 7x. The WAR falls off sharply while the bonus does not drop at the same rate.

The most efficient individual draft pick in the dataset: Mike Trout. Pick 25 overall, 2009 draft, by the Angels. 89.7 career WAR. The Angels signed him for roughly 1.5 million dollars. They then paid him market rate once they could, which is a separate conversation.

Oakland is confirmed. Tampa Bay is the modern version.

After normalization, the Oakland A’s rank second all-time in payroll efficiency at 1.58x from 1990 through 2023. During the Moneyball era specifically, 2000 through 2004, they rank first at 2.25x.

The number one all-time slot goes to the Tampa Bay Rays at 2.29x. The Rays have run the small-market efficiency playbook consistently for fifteen years, without a book or a movie about it.

Montreal is technically third at 1.52x. That number has an asterisk. The Expos produced elite WAR on poverty wages because they could not afford to keep anyone. Pedro Martinez, Vladimir Guerrero, Larry Walker all left before their prime earning years. The ratio looks great. The organization was not great. It is the baseball equivalent of having a spectacular LTV:CAC because your customer success team quit and you stopped sending renewal emails.

The New York Yankees rank near the bottom of the normalized rankings at 0.80x over 33 seasons. They averaged 231 million dollars per year in payroll and consistently got less than market value for it. The Los Angeles Dodgers, Chicago Cubs, and New York Mets cluster just above them. The pattern holds: the biggest spenders are the least efficient spenders.

This does not mean big payrolls do not work. The Yankees and Dodgers win championships. They can buy wins. They just pay a premium for each one. Whether that premium is worth it depends on what you are optimizing for.

The LA Angels are the cautionary tale. Last all-time at 0.89x over 18 seasons. They drafted Mike Trout at pick 25, one of the most efficient acquisitions in baseball history, and surrounded him with Albert Pujols, Josh Hamilton, and Anthony Rendon. Trout’s efficiency could not offset what was happening around him.

The market has not gotten more efficient

The obvious hypothesis: as analytics spread and front offices got smarter, the gap between overpriced and underpriced players should have narrowed. Thirty years of Moneyball logic should show up as a tightening distribution.

It does not.

I measured the spread between the most and least efficient teams in each season, using the normalized ratio. The interquartile range from 1990 to 2023 shows no meaningful trend. The slope is plus 0.003 per year. Flat.

At the player level the result is the same. The share of players producing more than twice their market-rate value has barely moved from 1990 to 2023.

The reason is that this is not a market failure. Teams and agents and players all know pre-arb salaries are below market. It is just the rules. The CBA structurally suppresses early-career pay regardless of how much information is available or how sophisticated the analytics are. Until the MLBPA negotiates pre-arb reform, the pattern holds. The gap does not close because no one in power has an incentive to close it.

Moneyball was about finding undervalued players before the rest of the market caught on. The data says that playbook still works, and the spread between teams that run it and teams that do not has not narrowed in 33 years.

Oakland moved to Sacramento. Tampa Bay is still doing it.

The code is on GitHub if you want to run this on your own dataset or adapt the framework.

https://github.com/marcusthuillier/Marketing_Science/tree/main/model_05_ltv_cac


메타데이터
post_id
652de69cb03e
slug
moneyball-is-a-book-it-is-also-a-movie-what-it-has-not-been-until-now-is-an-ltv-cac-analysis-652de69cb03e
url
https://medium.com/@marcus.thuillier/moneyball-is-a-book-it-is-also-a-movie-what-it-has-not-been-until-now-is-an-ltv-cac-analysis-652de69cb03e
canonical_url
https://medium.com/@marcus.thuillier/moneyball-is-a-book-it-is-also-a-movie-what-it-has-not-been-until-now-is-an-ltv-cac-analysis-652de69cb03e
author_url
https://medium.com/@marcus.thuillier
status
ok
fetched_at
2026-06-09 15:37:30