Baseball and Carbon Accounting, Part 1
Note: I started this piece over two weeks ago and found it to be a rich subject for contemplation. I find myself continually adding to it rather than concluding it. In an effort to cut myself off and move forward, I’ve opted to break it up. The following serves as part 1 of n on the subject.
All models are wrong, but some are useful.
For a variety of reasons, I’ve done less data exploration than abstract thinking lately, and this piece will follow that trend. These many thoughts, as I unwind them, may set the table for more data-driven posts in the future.
Specifically, I’ve been thinking about how carbon emissions are measured, estimated, and modeled.
Despite attempts to obfuscate, measuring atmospheric carbon levels is already well established. Measuring emissions, and by extension emission reductions, is much more challenging.
There are various measurement frameworks, including the GreenHouse Gas Protocol, Science-Based Targets, and Net Zero. Their general purpose is to measure emissions of certain atmospheric pollutants that are driving the planet’s temperature upward relative to “pre-industrial levels”. This where we start to get into Scope 1, 2, and 3, net zero, offsets, and additionality, and not far behind that comes accusations of greenwashing from the most stringent accountants (such as David Roberts and Joe Romm).
I’m not going to try to explain all of that today. No accounting model is a perfect reflection of reality, in climate or any other industry. But for better or worse, they do inform important decisions and actions, so we might as well do the best we can!
I’m not a carbon accounting expert, and I’m not going to pretend to be one either. I will draw on my own data and analytics background, in sports and specifically baseball. I find there are similar challenges in baseball analytics and carbon accounting, and I hope the analogy to the former will help me better understand and appreciate the latter.
Baseball Accounting
Baseball’s currency is runs. To win, we need to score more runs than we allow.
Let’s imagine our team’s defense attempts to limit runs like we (attempt to) limit carbon emissions. We’ve let our pitching staff fall apart over time, and now we’re bleeding runs more than ever before. Fortunately, we are developing some good young arms in the system, several of which have already made successful big league debuts and figure to be in the starting rotation for the long term.
On the other side, our team’s offense is our planet’s oceans, forests, and other mechanisms for absorbing carbon from the atmosphere. We’ve got to keep our lineup healthy and productive, or our run production will suffer. There are some free agent sluggers on the market, but their asking prices are way outside our budget right now, and we don’t expect our appetite for spending on these options to increase dramatically in the near future. We’ll need them eventually so we’ll be checking in with their representatives, but realistically we have to hope the market cools off before we’re desperate for them.
To “win”, we need our team’s offense to exceed what our defense allows (carbon removal > emissions). For now, our biggest opportunity for improvement is on the run prevention/emissions reduction side.
From Aggregate Accounting to Individual Accounting
As with worldwide carbon accounting, baseball team performance is relatively easy to explain. We know how a team’s runs scored and runs allowed will translate to their win/loss record with high accuracy. Yes, there are one off deviations from the pattern, but the long term relationship is indisputable.
Apportioning credit for those runs on an individual basis is much tougher. As of early August, Atlanta’s Austin Riley had scored 78 runs to Sean Murphy’s 48; does that make him a 60% better hitter? Of course not: neither Riley nor Murphy deserve sole credit for their runs. Apart from solo home runs, the offense scores its runs as a team. In fact, Murphy drove in Riley many of those times. So we have to find other ways to measure the incremental contributions to run scoring.
Likewise, carbon emissions are challenging to attribute to the responsible individuals. A large data center may not emit much carbon on site, but it likely consumes many Gigawatt-hours of electricity that were generated elsewhere with significant carbon emissions. Furthermore, the cloud customers running software on the data center also bear some responsibility for the emissions. But how much?
In carbon accounting, we don’t actually try to split up the credit—instead, we penalize everyone for it, double or triple counting (or more) in the process. We penalize the electricity generation plant with Scope 1 emissions and the data center with Scope 2 emissions, and Scope 3 emissions go not only to the cloud computing customer but also to the end consumer of the app. The same emissions fall on three or more entities’ carbon “balance sheets”.
This is like baseball’s awarding of Runs to the player who got on base and eventually scored, sacrifices or “productive outs” to the player(s) who moved them over, and RBIs to the player who drove them in. We’re double or triple counting, and perhaps not very fairly. Regardless of whether the first player reached on an error, advanced on a sacrifice bunt, and the third tripled him in; or the first player doubled and then scored on two subsequent outs; traditional baseball’s accounting is the same.
This double or triple counting led to a similar valuation of each contribution to run scoring. Conventional thinking dictated that you needed a fast leadoff hitter (to score runs), a good situational hitter behind him to advance the runner, and then RBI guys to drive them in. In this way, traditional accounting methods shaped roster and lineup construction for over a century before someone stopped to ask, “What’s really most important to creating runs?”
Improving Individual Accounting
In an attempt to address this problem, Bill James formulated the Runs Created stat, which attempts to more fairly credit each player’s contributions to the team’s runs scored. A player who makes zero contributions has 0 Runs Created, while some of the best in the league might have 100 Runs Created. Simple enough on the surface, right?
What about on the other side, preventing runs (or carbon emissions)? Our first instinct is to simply count runs against the people who allowed them, meaning every run allowed or carbon emission is a negative. In fact, there’s no way to get positive credit; at best, you can hope to get to zero. How demoralizing! (And, if counting your carbon emissions is only going to make you look bad, you’re in fact incentivized NOT to keep score at all and avoid the PR entirely.)
This accounting system isn’t especially useful, for a few reasons.
For one, we haven’t accounted for opportunities. A reliever who throws one inning might allow the same number of runs as the starter who pitched the previous eight, but those are far from equivalent performances.
This is like comparing emissions of one individual person and one giant company (e.g Google). If the two have the same emissions, the implications for one are quite different from those of the other.
Even if we account for opportunities by using a rate statistic, we will fall short. Let’s say the reliever and the starter each allow zero runs. They will have equivalent ERAs: 0.00. That still doesn’t adequately capture the additional value contributed by the starter for sustaining the performance over a larger sample.
We needed a way to credit pitchers for preventing runs, not just penalize them for allowing runs. Have we overlooked this element of carbon accounting?
To be continued…
When I return to the subject, I expect to extend the analogy by comparing baselines, splitting credit, adjusting for context, and accounting standards. I may also wander into offsets and additionality before some concluding reflections.
For further reading, I would recommend this MCJ article by Julia Sekula. Special thanks also to McGee Young of WattCarbon (Substack, LinkedIn) who has generously engaged with my questions despite having a startup to run.