When I first learned that a sacrifice fly does not really help your WAR, and can actually hurt it in certain cases, it struck me as odd.
The batter gets the run home. That feels important. Of course, he also makes an out, and that matters too. Depending on the situation, the team’s expected runs for the rest of the inning can drop even after the run scores. I get that to some degree.
Still, the whole thing did not pass the smell test. So, against the advice of my therapist, I felt like it was my duty to spend an inordinate amount of time trying to get to the bottom of it.
The question is simple on the surface: a run scores, an out is made, which one matters more?
The answer depends on what kind of value we are trying to measure. Run Expectancy asks what the play did to the inning. Win Probability asks what the play did to the game. WAR tries to turn player value into one context-neutral number. The sacrifice fly sits right in the middle of those three ideas.
So I looked at the sacrifice fly three ways. First, through Run Expectancy, which explains why WAR can punish the out. Then through Win Probability, which explains why the run can matter more than the out in certain spots. Finally, through actual players, to see whether the hitters who get the runner home also show up as sacrifice-fly overperformers.
Getting it down to one number is the whole challenge of sports analytics.
Every sport has some version of this problem, but baseball is probably the easiest major sport to start with. The sample size is huge, the events are more isolated, and the game is less fluid than basketball, football, hockey, or soccer. That does not make it easy, but it does make baseball a great stepping stone for trying to measure value in other sports.
That is where WAR comes in. Different WAR models handle the details differently, but the basic goal is the same: take what a player does and translate it into runs, then wins. That is useful, but it also means every play has to be converted into run value.
For a sacrifice fly, that gets messy. The run scores, which matters. The batter also makes an out, which matters too. So the question is not just whether the runner scored. The question is how much the entire plate appearance changed the team’s expected runs.
That is where Run Expectancy takes over.
Run Expectancy is the big driver here. It asks a simple question: based on the situation, how many runs is the offense expected to score in the rest of the inning?
That is what ties this back to the WAR framework. The play is not only judged by whether the runner scored. It is judged by the run that scored, the out that was made, and the expected runs left after the play.
The basic idea is simple: RE Change = Runs Scored + New RE - Old RE. A sacrifice fly does not automatically become worth one full run just because one run scored. The remaining base-out situation still matters.
| Run Expectancy: Average Result vs Sac Fly Result | |||
| Average result is the starting expected runs. Sac fly result is one run scored plus expected runs remaining. | |||
| 0 Outs | |||
|---|---|---|---|
| 1 Out | |||
| Overall Average | |||
| Sac fly model assumes a runner on second advances to third 17% of the time. |
The table shows the basic tradeoff: the sacrifice fly is not judged against zero, it is judged against the expected value of the starting situation. The chart below uses the same Delta column to show where the sac fly helps the inning math and where the out gives too much value back.
The weighted average row is the key takeaway. Across all runner-on-third, fewer-than-two-out states, the average starting situation was worth +1.447 expected runs. The modeled sacrifice fly produced +1.396 total runs when counting the run scored plus the expected runs remaining. That leaves the sacrifice fly at -0.051 runs versus the average result.
| What That Means in WAR Terms | ||
| Using the actual weighted-average Run Expectancy result from this section. | ||
| Runs per WAR varies by season and run environment. Ten runs per WAR is used here as a simple scale estimate. |
That WAR number is tiny, which is part of the point. One sacrifice fly is not changing a player’s season by itself. The issue is not the size of one play. The issue is what the framework is choosing to reward or punish when this same type of opportunity shows up over and over.
So yes, I understand the math. A sacrifice fly with nobody out can be a net negative in Run Expectancy because the offense traded an out for one run and gave up the chance at a bigger inning. Fine.
That answers the inning-value question. It does not fully answer the game-value question.
And that is where this gets interesting. If a hitter always gets the runner from third home when the opportunity allows it, are we really sure we want to say the average hitter is more valuable just because the inning math likes the remaining upside better?
To make that question cleaner, I need two fake players.
The first is Zachary Fly. Zac is average in every way, except for one thing: give him a runner on third with fewer than two outs, and he always gets the run home with a sacrifice fly.
The second is Average Joe. Joe is also average in every way, including these runner-on-third chances. He is not bad. He is not special. He is just the normal baseline.
So now the question becomes easier to see: if everything else is equal, would I rather have Zachary Fly or Average Joe?
Zachary Fly started as a hypothetical player for this exact comparison. I wanted one clean question: what happens if a hitter is completely average everywhere else, but he always gets the runner home from third with fewer than two outs?
Across from him is Average Joe. Joe is not a straw man. He is not bad. He is simply the average version of the same hitter in the same situations.
Zac is not chasing the perfect inning. Zac is here to get the run home. Give him a runner on third and fewer than two outs, and he gives you the sacrifice fly. Every time.
So the comparison is not superstar versus scrub. It is Zachary Fly versus Average Joe, with everything else held equal.
These chances are not common, but they are not random either. In this dataset, runner-on-third, fewer-than-two-out chances make up about 5.1% of all plate appearances. For a 600 PA season, that comes out to about 30.6 chances.
Official sacrifice flies are only one piece of that group, roughly 12.9% of these opportunities. The official scoring label is not really the point here. The point is what happens when one hitter keeps trading the out for the run, over and over again.
| Season Comparison: Zac vs Average Hitter | |||||||
| Expected runs over a 600 PA season using the observed mix of runner-on-third opportunities | |||||||
| Estimated WAR uses 10 runs = 1 WAR as a simple rule of thumb. Actual run-to-win conversion changes by run environment. |
Over a 600 PA season, the average hitter’s starting situations would be worth about 44.269 expected runs. Zac’s modeled sacrifice fly outcomes would be worth about 42.721 expected runs. That leaves Zac at -1.548 runs compared with the average hitter, or about -0.155 WAR using the 10 runs per WAR shortcut.
Put another way, if the average version of this player is a clean 2.00 WAR player, Zac would come out around 2.00 - 0.155 = 1.845 WAR. That is the uncomfortable part. Zac is getting the runner home every time, but because he is doing it through an out that scores a run, the Run Expectancy framework can still price him below average over a full season.
On paper, that makes the sacrifice fly look very conditional. It helps in some spots, especially with one out, but it is not automatically better than the average expected value of the situation. The run matters. The out can give back enough future value to make the play look worse than it feels.
This is where the sacrifice fly stops being a math problem and starts becoming a value problem.
Run Expectancy is not wrong. It is doing exactly what it is supposed to do. It asks a clean question: given the base-out state, how many runs should this team expect to score before the inning ends?
That is a useful question. It is also not the only question. Baseball is not played in neutral innings. Sometimes the inning ceiling matters. Sometimes the only thing that matters is whether the run got home.
That is why the sacrifice fly is such a good test case. With a runner on third and fewer than two outs, a sacrifice fly can look ordinary, or even slightly negative, through Run Expectancy. The batter gets the run home, but he also makes an out and lowers the rest-of-inning upside.
That makes sense from an inning-value perspective. A team with nobody out may still have a big inning in front of it. Trading that upside for one guaranteed run can look like a step backward. The run scores, but the ceiling drops.
Win Expectancy looks at the play differently. Down one in the ninth, a sacrifice fly that ties the game is not just one run. It is survival. In a tie game late, a sacrifice fly that takes the lead is not just one run. It changes the entire shape of the game.
| Run Expectancy vs Win Expectancy | ||
| The sacrifice fly can look different depending on whether we are measuring the inning or the game. | ||
This is why I do not think the sacrifice fly question is really about whether Run Expectancy is broken. It is not. The better question is whether Run Expectancy alone captures the type of value we actually care about.
For most plays, the RE approach makes sense. Over a full season, stripping out context helps keep player value cleaner and more stable. A double should not become a different skill just because it happened in April instead of September.
The sacrifice fly is different because the whole purpose of the play is context. Nobody praises a sacrifice fly because it maximizes the inning. They praise it because the runner scored. The batter accepted the out, changed the scoreboard, and in some spots changed the game.
So that is the split I want to keep in mind from here. Run Expectancy tells us what the play did to the inning. Win Expectancy tells us what the play did to the game. The sacrifice fly sits right between those two ideas.
Section 7 set up the split. Run Expectancy tells us what the play did to the inning. Win Expectancy tells us what the play did to the game.
That distinction matters for Zac. Through Run Expectancy, his guaranteed sacrifice fly can look worse than average because the out lowers the rest-of-inning ceiling. Through Win Probability, the same play can look very different. If the run ties the game, takes the lead, or protects a late lead, the scoreboard may care more than the inning ceiling.
So now I want to give Zac his cleanest argument. Forget the full-season total for a minute. First, where does the sacrifice fly actually help win probability compared with the average result in the same situation?
This heat map compares the average hitter result in each cell with the modeled sacrifice fly result. Positive numbers mean Zac’s sac fly is better for win probability than the average result in that spot. Negative numbers mean the average result is better.
| Where Zac Looks Best and Worst by WPA | ||||||
| Positive WPA edge means the modeled sac fly beats the average result in that game state. | ||||||
| Best Zac Spots | ||||||
|---|---|---|---|---|---|---|
| Worst Zac Spots | ||||||
| WPA is shown in percentage points. Sac fly source shows whether the estimate came from the exact cell or a broader fallback group. |
This is the best argument for Zac. There are real game states where the sacrifice fly is not just acceptable. It is valuable. A sac fly that ties the game late, takes the lead, or protects a narrow margin can beat the average hitter result in a way Run Expectancy does not fully capture.
The warning is that a heat map gives every cell the same amount of space. A ninth-inning tie game and a random early-inning spot look equal on the page, even though they do not happen equally often. So the next step is to stop looking at where Zac can help and ask what it all adds up to over a season.
Section 8 gave Zac his best case. There are real game states where the sacrifice fly looks much better through Win Probability than it does through Run Expectancy.
The problem is that a heat map gives every cell the same amount of space. A ninth-inning tie game and a random early-inning spot look equal on the page, even though they do not happen equally often.
So this section does the accounting. It takes the WPA edge from each cell and weights it by how often that cell actually appears across about 30.6 runner-on-third, fewer-than-two-out chances in a 600 PA season.
| Season-Weighted WPA Summary | |||||||
| Where Zac’s season value comes from after weighting each spot by frequency | |||||||
| Overall | |||||||
|---|---|---|---|---|---|---|---|
| By Situation | |||||||
| By Inning Block | |||||||
| By Score Block | |||||||
| Zac Gap = Zac WPA minus average hitter WPA, weighted by situation frequency. Win Eq. = Zac Gap / 100. This is a win-probability translation, not literal WAR. |
After weighting the WPA map by frequency, Zac’s season total comes out to +23.36 WPA points. Since WPA is measured in percentage points here, that translates to about +0.234 wins of win-probability value.
This is not literal WAR. WAR is a broader, mostly context-neutral framework that compares a player to replacement level. This number is narrower. It only tells us what Zac’s sacrifice-fly approach adds or subtracts through Win Probability in these runner-on-third spots.
At this point, the article has two answers to the same basic question. Run Expectancy gives one answer. Win Probability gives another.
That does not mean one is right and the other is wrong. They are measuring different things. Run Expectancy is asking what the play did to the inning. Win Probability is asking what the play did to the game.
The point of this section is not to turn WPA into WAR. WPA is not WAR. It is too context-heavy for that. The point is simply to put both answers on a rough win scale so we can compare the size and direction of the argument.
| Two Answers to the Same Zac Question | |||||||
| Run Expectancy measures the inning. Win Probability measures the game. | |||||||
| Rough win scale: RE estimate = run gap / 10. WPA estimate = WPA point gap / 100. This is a comparison scale, not official WAR. |
The Run Expectancy answer estimates Zac at -0.155 on the rough win scale. The Win Probability answer estimates Zac at +0.234 on that same rough scale.
Those are not contradictory results. They are answers to different questions. RE is judging the expected value of the inning. WPA is judging the chance of winning the game.
That is the tension in one table. Zac can look worse through Run Expectancy because the out lowers the inning ceiling. He can look more defensible through Win Probability because some runs matter more to the game than they do to the inning.
Before moving from Zachary Fly and Average Joe to real hitters, it is worth cleaning up the language.
The rest of the article uses a few related but different metrics. They all live around the same play, but they do not answer the same question.
| Player Metric Cheat Sheet | |||
| Same opportunity, different value questions | |||
| All /100 metrics are scaled per 100 true sacrifice-fly opportunities: runner on third with fewer than two outs. |
The key is not to treat these as interchangeable. A hitter can be strong at getting the runner home without piling up official sacrifice flies. He can also collect official sacrifice-fly credit without proving that the broader runner-home skill is as strong.
That is why the player section has to be careful. The goal is not to crown the king of sacrifice flies. The goal is to see whether there is any real separation between hitters once we compare the runner-home result, the scoring label, and the game-value layer.
Zachary Fly is useful because he gives us a clean thought experiment. Real baseball is messier. Players do not get the same opportunities, they do not face the same pitchers, and they do not always need the same type of contact.
So the next question is simple: do actual hitters separate on sacrifice flies over expected, or is this just noise dressed up as a leaderboard?
This section looks at real hitters and compares their clean official sacrifice flies to their expected sacrifice flies. The main rate is SF OE / 100, which means sacrifice flies over expected per 100 runner-on-third opportunities.
This table shows the top and bottom hitters by SF OE / 100 from 2015–2026, with a minimum of 100 runner-on-third opportunities. I am keeping the table narrow on purpose. The goal is the spread, not every supporting calculation.
| Actual Player Results: Sac Flies Over Expected | ||||||||
| Clean sacrifice flies compared with expected sacrifice flies | ||||||||
| Top 15: Most SF OE / 100 | ||||||||
|---|---|---|---|---|---|---|---|---|
| Bottom 15: Fewest SF OE / 100 | ||||||||
| Sorted by SF OE / 100, then total SF OE, then opportunities. ROE / 100 shows runner-from-third scoring over expected per 100 opportunities. |
The top hitter by sacrifice flies over expected per 100 opportunities was Mountcastle, Ryan, at +11.3 SF OE / 100. Across the full sample, he finished at +16.7 total SF OE.
The lowest hitter by sacrifice flies over expected per 100 opportunities was Gallo, Joey, at -10.6 SF OE / 100. Across the full sample, he finished at -18.6 total SF OE.
This is where the article shifts from the model to the players. The leaderboard shows separation, which matters. It tells us there are hitters who finished well above and well below expectation in these spots.
The player leaderboard showed separation. That matters, but it is not enough. A leaderboard can show who finished above expectation without proving that the result is repeatable.
So this section tests the next question: if a hitter beats expectation in one sample, does that tell us anything about what he does in another sample?
I split the data into odd and even seasons from 2015 through 2024. That keeps the test balanced and avoids giving one side a partial 2026 season. Then I compare odd-season performance to even-season performance.
The table below uses a simple regression: even-season performance as a function of odd-season performance. A positive slope means the odd-season result carried forward. The p-value and R-squared tell us whether that pattern looks meaningful or mostly noisy.
| Signal or Noise: Odd/Even Sac Fly Skill Test | ||||||||
| Even-season result regressed on odd-season result, minimum 10 opportunities per split | ||||||||
| Positive WPA Edge | ||||||||
|---|---|---|---|---|---|---|---|---|
| Negative WPA Edge | ||||||||
| Situational Edge | ||||||||
| SF OE / 100 is clean sacrifice flies over expected. ROE / 100 is runner scored from third over expected. Situational Edge = Positive WPA Edge result minus Negative WPA Edge result. |
The main official-sac-fly test is the Situational Edge: SF OE / 100 row. Its slope was -0.026, with a p-value of 0.6419 and an R² of 0.001.
The broader runner-scored backup test is the Situational Edge: ROE / 100 row. Its slope was 0.135, with a p-value of 0.0166 and an R² of 0.015.
This is the section that keeps the article honest. If the situational-edge rows show a positive and meaningful relationship, then the sacrifice-fly argument has some repeatable signal behind it. If they are flat, then the leaderboard is probably mostly noise.
The player-level question changed once WPA entered the article. The old question was whether official sacrifice-fly credit repeated across time. That is not the cleanest test anymore.
The better question is whether the broader runner-home signal connects to actual win-probability value. In other words, do hitters who get the runner from third home above expectation also keep producing sacrifice flies that skew positive in WPA?
This chart measures movement instead of just direction. The x-axis is how much a player’s RSOE / 100 changed from Sample A to Sample B. The y-axis is how much his Net WPA SF% changed.
The chart uses the main cutoff of 30 true SF opportunities and 15 official sacrifice flies in each sample. A movement of 25% in Net WPA SF% is treated as a noise warning. A movement of 35% is treated as a major noise warning.
| Stability Summary | |
| How much did RSOE / 100 and Net WPA SF% move between samples? | |
| Net WPA SF% movement is measured in percentage points. Example: +20% to -10% is a 30 percentage-point move. |
| Signal Class Summary | |||||||||||
| Sound signal vs noise warning groups | |||||||||||
| Signal class is based on movement, not just whether the player was positive or negative in one sample. |
| Biggest Net WPA SF% Movers | ||||||||||||
| These are the players driving the noise warning | ||||||||||||
| This table is intentionally skeptical. Large movement does not prove a player is bad. It means the player-level WPA signal is unstable across samples. |
This is a better consistency test than the old SFOE version because it uses the article’s actual question. RSOE / 100 measures getting the runner home. Net WPA SF% measures whether the player’s official sacrifice flies skewed toward positive or negative win-probability value.
The key is movement. A small move is fine. A player going from +18% Net WPA SF% to +10% is still basically the same profile. A player going from +30% to -10% moved 40 percentage points, and that is a real noise warning.
That is a major caution flag. At least half of the qualified player sample landed in a noise-warning bucket. The Net WPA SF% sample-to-sample correlation is basically flat.
This is the player-level version of the WPA question. The league-level chart can tell us what percentage of all sacrifice flies are positive or negative WPA plays. This asks something more useful: which hitters are producing those positive-WPA sacrifice flies?
The x-axis is RSOE / 100, which measures how often a hitter gets the runner from third home above expectation. The y-axis is Positive WPA SF %, which measures the share of that hitter’s official sacrifice flies that increased his team’s win probability.
This scatterplot is the direct test. Each point is one hitter. To qualify, a player needed at least 100 true SF opportunities and at least 10 official sacrifice flies from 2015–2026.
The x-axis shows how often the hitter got the runner from third home above expectation. The y-axis shows the net batting-team WPA points he created through official sacrifice flies, scaled per 100 true sacrifice-fly opportunities.
The color shows the direction of the player’s official sacrifice flies. Green means his sac flies skewed positive-WPA. Red means they skewed negative-WPA. Bubble size is official sacrifice flies.
The top RSOE group created clearly more Net SF WPA / 100 than the bottom RSOE group. The top-minus-bottom gap in Net SF WPA / 100 was 3.28. The top-minus-bottom gap in Net WPA SF% was 2.6%.
| Does RSOE Separate Sac Fly Win Value? | ||||||||||
| Qualified hitters grouped by RSOE / 100 | ||||||||||
| Net SF WPA / 100 is batting-team WPA points from official sacrifice flies per 100 true SF opportunities. Net WPA SF % is WPA+ SF % minus WPA- SF %. |
| Section 14 Answer Key | |
| Does runner-home overperformance connect to sac fly win value? | |
| Net WPA SF% = Positive WPA SF% minus Negative WPA SF%. Net SF WPA / 100 uses actual WPA points. |
| Player Examples | |||||||||
| Who drives the relationship, and who complicates it? | |||||||||
| Best RSOE / 100 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Highest Net SF WPA / 100 | |||||||||
| Lowest Net SF WPA / 100 | |||||||||
| Good RSOE, lower SF WPA | |||||||||
| The final group highlights players with positive RSOE / 100 but below-average Net SF WPA / 100. |
The scatterplot is not asking whether every good runner-home player is clutch. It is asking whether the player-level runner-home signal lines up with actual win-probability value from official sacrifice flies.
This version is better than using Positive WPA SF% alone because it uses the size of the WPA movement, not just the direction. A tiny positive sac fly and a huge positive sac fly should not count the same.
The top RSOE group created clearly more Net SF WPA / 100 than the bottom RSOE group. The correlation between RSOE / 100 and Net SF WPA / 100 was 0.127, with an R² of 0.016.
At this point, the article has looked at the sacrifice fly from a few different angles. Each one answers a slightly different question.
That is important because the whole debate is not really about one scoring rule. It is about what kind of value we are trying to measure.
| The Evidence Stack | |||
| Each layer answers a different version of the sacrifice-fly question | |||
| This table summarizes the argument before the final WAR interpretation. It does not add a new model. |
So the final question is not whether the sacrifice fly is always good or always bad. It is whether a WAR framework built mostly around average run value can fully capture a play whose value often depends on the exact game state.
This is where the sacrifice fly becomes more than a scoring-rule complaint.
The point is not that every sacrifice fly should automatically help a hitter’s WAR. That would be too simple. Some sacrifice flies are routine. Some come in low-value spots. Some are just ordinary outs where the runner happened to score.
The better point is that Run Expectancy only answers one question: how did this play change the average number of runs expected in the inning?
That is a useful question. It is also not the only question.
Zachary Fly and Average Joe make the tension easier to see. Average Joe represents the normal baseline. He might do more than hit a sacrifice fly. He might single, walk, homer, strike out, or fail completely. Zac is simpler. With a runner on third and fewer than two outs, he banks the run with a sacrifice fly.
Through a strict Run Expectancy lens, Average Joe can look better because he preserves the upside of a bigger inning. Through a Win Probability lens, Zac can look better because in some game states the run matters more than the remaining upside.
That is the whole issue. WAR has good reasons to avoid becoming a pure context stat. The problem is that stripping away context completely can also strip away the reason a play mattered.
| How Each Framework Sees the Sacrifice Fly | |||
| The same play can look different depending on the value lens | |||
| The sacrifice fly is useful as a case study because it separates average run value, game value, player signal, and official scoring credit. |
The sacrifice fly does not prove WAR is broken. That would be too strong. WAR is trying to measure player value in a neutral way, and that is the whole reason it is useful.
The issue is the tradeoff. A context-neutral model is cleaner, more stable, and easier to defend. At the same time, it can miss plays where the entire value is tied to the situation.
Run Expectancy is not wrong. It is doing what it is built to do. It measures average run value. The problem is that average run value is not always the same thing as helping your team win that game, in that inning, with that runner on third.
That is why the Zachary Fly versus Average Joe comparison works. Zac is not automatically better. Joe is not automatically better. The answer depends on the question being asked.
If the question is average inning value, Joe can have the stronger case. If the question is banking a specific run in a specific game state, Zac can have the stronger case. WAR mostly lives closer to the first question. Baseball games are often decided by the second.
That is also why RSOE, SFOE, and WPA matter. RSOE asks whether the runner scored more often than expected. SFOE asks whether the player got official sacrifice-fly credit more often than expected. WPA asks whether those events helped win the game. Those three things overlap, but they are not identical.
The sacrifice fly is interesting because it lives in that gap. It is a small play, but it exposes a big measurement problem.
After all of this, I do not think the answer is that sacrifice flies are secretly some massive hidden WAR flaw.
They are not. One sacrifice fly is tiny. Even a full season of these chances usually moves the needle by fractions of a win.
That is exactly why I like the play as a case study. The sacrifice fly is small enough to understand, common enough to measure, and weird enough to show where different value systems disagree.
Run Expectancy sees the cost of the out. Win Probability sees the value of the run in context. RSOE sees whether the runner actually came home. SFOE sees whether the hitter got the official sacrifice-fly label. WAR has to decide how much of that context it wants to keep.
That is not an easy decision. A fully context-neutral stat can miss the importance of the moment. A fully context-driven stat can give a player too much credit for the situation around him.
The sacrifice fly sits right between those two problems.
| Final Answers | ||
| The sacrifice fly is small, but the measurement question is not | ||
| This is a summary of the article’s argument, not a proposed replacement WAR formula. |
A run scores. An out is made. Which matters more?
The answer is not one or the other. The answer depends on the question.
If the question is average run value, the out matters a lot. If the question is game value, the run can matter more. If the question is player skill, we need to be careful and separate real signal from noisy scoring labels.
That is the whole lesson. The sacrifice fly is not a big play. It is a small play that forces the bigger question into the open.
That gap is where the sacrifice fly lives.