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 we are measuring. Run Expectancy shows what the play did to the inning. Win Probability shows what it did to the game. WAR tries to turn value into one context-neutral number, and the sacrifice fly sits right between those ideas.
```
The whole goal of WAR is getting everything down to one number.
Really, that is the goal of sports analytics in general. Players and teams create value in different ways, and one number makes them easier to compare. It gives us a common language for asking who helped more, even when they helped in completely different ways.
WAR is useful because of that, but baseball makes it difficult. Singles, walks, strikeouts, doubles, steals, double plays, home runs, sacrifice flies, and everything else all have to be translated into runs, then into wins.
Most plays are easy enough to understand. A home run is good. A strikeout is bad. A double is better than a single. The exact value can be debated, but the direction is clear.
Sacrifice flies are different because the good and bad happen at the same time. A run scores, but an out is made. The offense gets something real, but it also gives away one of its remaining outs.
WAR cannot just give the hitter full credit for the run. It has to ask the harder question: after accounting for both the run and the out, did the offense actually improve its expected run total?
This is where Run Expectancy comes into play.
Run Expectancy does not care whether a play feels productive. It asks a colder question: after the play happened, how much did the offense’s expected run total change?
That is why the sacrifice fly gets interesting. The run scores, which is good. The batter also makes an out, which is bad. Run Expectancy forces both parts of the trade into the same equation.
The basic idea is simple: RE Change = Runs Scored + New Run
Expectancy - Old Run Expectancy. For the average opportunity, I
am using the observed delta_run_exp from the play-level
data. For the clean sacrifice fly result, I use observed
delta_run_exp when it exists. When it does not, I use a
base/out Run Expectancy model for the clean sacrifice fly outcome.
| Run Expectancy: Average Result vs Clean Sac Fly | ||||||
| Average result uses observed RE change. Clean sacrifice fly uses observed RE change when available, otherwise a base/out RE fallback. | ||||||
| 0 Outs | ||||||
|---|---|---|---|---|---|---|
| 1 Out | ||||||
| Overall Average | ||||||
| Clean SF means official sacrifice fly, runner from third scored, and no sacrifice-fly double play or other double-play weirdness. | ||||||
| Avg RE Change is the average observed delta_run_exp for all outcomes in the same base/out state. | ||||||
| Clean SF RE Change source: Modeled RE fallback: 8 row(s). Modeled fallback assumes a runner on second advances to third 17% of the time. |
The table is the cleanest version of the tradeoff. A clean sacrifice fly is productive, but it still has to beat the average value of the same opportunity. That is why the out matters.
The overall row is the punchline. Across these true sacrifice-fly opportunities, the average plate appearance changed run expectancy by . A successful clean sacrifice fly changed run expectancy by . The gap was runs.
This is the part that makes WAR’s treatment more understandable. A sacrifice fly is not getting graded against an empty baseline. It is getting graded against what the offense could have expected from that same situation.
That answers the inning-value question. It does not fully answer the game-value question. To get there, we need to think about what happens when one hitter is almost guaranteed to get the runner home.
This is where the case gets curious.
Imagine a hitter named Zachary Fly. Every time he comes up with a runner on third and fewer than two outs, he does exactly what the name suggests. He hits a successful clean sacrifice fly. The runner scores. The batter is out. No weird double-play stuff. No scoring loopholes. Just the pure version of the play.
Now compare him with Average Joe. Average Joe does not always hit a sacrifice fly. He gets the average result from the same mix of runner-on-third opportunities. Sometimes that means a hit. Sometimes a walk. Sometimes a strikeout. Sometimes a groundout. Sometimes the runner scores, and sometimes he does not.
| Zachary Fly vs Average Joe: Run Expectancy View | ||||||
| Scaled to 30 true runner-on-third, fewer-than-two-out opportunities. | ||||||
| 0 Outs | ||||||
|---|---|---|---|---|---|---|
| 1 Out | ||||||
| Modeled Season Total | ||||||
| Average Joe uses the average observed RE change from the same base/out opportunity mix. | ||||||
| Zachary Fly uses the clean sacrifice-fly RE value from Section 5 in those same base/out states. | ||||||
| WAR edge uses 10 runs = 1 WAR as a simple rule of thumb. |
The table scales the Section 5 result to a modeled season of 30.0 true sacrifice-fly opportunities. The key column is Season Run Edge, which is Zachary Fly’s RE value minus Average Joe’s RE value after accounting for how often each base/out state appears.
Over 30.0 true sacrifice-fly opportunities, Average Joe comes out around +0.800 run-expectancy runs. Zachary Fly comes out around -1.517. That leaves Zac at -2.318 runs compared with the average hitter, or roughly -0.232 WAR using the 10-runs-per-win shortcut.
That is the uncomfortable part. Zac gets the runner home every time, and Run Expectancy still may not crown him. That is not because the run is ignored. It is because the average alternative is not doing nothing. The average alternative includes hits, walks, extra-base damage, and all the ways an inning can keep building.
So the Run Expectancy answer is clear enough: the sacrifice fly is useful, but it is not automatically better than the average opportunity. The run matters. The out can still give back enough future value to make the play look worse than it feels.
At this point, Run Expectancy has made its case.
The sacrifice fly is not a free run. The run scores, but the out still changes the rest of the inning. If the average hitter in that same spot can sometimes keep the line moving with a hit, a walk, or extra-base damage, then Zachary Fly’s guaranteed out is not automatically the best run-value outcome.
I get that. I really do.
But this is where the question starts to shift. Baseball is not played inside a spreadsheet of average innings. It is played with a score, an inning, a leverage spot, and a game that can swing on one run.
That is the part Run Expectancy is not trying to answer. Run Expectancy asks what the play did to the expected run total for the inning. Win Expectancy asks what the play did to the team’s chance of winning the game.
That distinction matters for Zachary Fly. A sacrifice fly in the second inning of a five-run game is one thing. A sacrifice fly in the ninth inning of a tie game is something else entirely. The box score calls them both sacrifice flies. Run Expectancy may treat them similarly. The game does not.
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.0 runner-on-third, fewer-than-two-out chances in a 30 true SF opportunities 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.58 WPA points. Since WPA is measured in percentage points here, that translates to about +0.236 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.232 on the rough win scale. The Win Probability answer estimates Zac at +0.236 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.003, with a p-value of 0.9522 and an R² of 0.000.
The broader runner-scored backup test is the Situational Edge: ROE / 100 row. Its slope was 0.123, with a p-value of 0.0310 and an R² of 0.012.
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.
This is the cleaner player-level test. Instead of asking whether official sacrifice-fly credit repeats, I use the first sample to sort hitters by runner-home overperformance, then check whether those hitters created more sacrifice-fly win value in the second sample.
That gets much closer to the actual article question. If a hitter is good at getting the runner from third home, does that show up later in the form of real win-probability value from sacrifice flies?
This scatterplot is the out-of-sample test. Each point is one hitter. To qualify, a player needed 20+ true SF opportunities in each sample and 10+ total official sacrifice flies.
The x-axis is Sample A RSOE / 100. That is the earlier runner-home signal. The y-axis is Sample B Net SF WPA / 100. That is the later win-probability value created through official sacrifice flies.
The color shows Sample B Net WPA SF%. Green means the player’s Sample B sacrifice flies skewed positive-WPA. Red means they skewed negative-WPA. Bubble size is Sample B official sacrifice flies.
The top Sample A RSOE group created clearly more Sample B Net SF WPA / 100 than the bottom group. The top-minus-bottom gap in future Net SF WPA / 100 was 3.42. The top-minus-bottom gap in future Net WPA SF% was 0.1%.
| Does Early RSOE Separate Future Sac Fly Win Value? | |||||||||||
| Players grouped by Sample A RSOE / 100, then evaluated by Sample B results | |||||||||||
| Buckets are based only on Sample A RSOE / 100. Sample B columns are out-of-sample results. |
| Section 13 Answer Key | |
| Did earlier runner-home value predict future sac-fly WPA value? | |
| This is an out-of-sample test: Sample A identifies the runner-home signal, Sample B evaluates the later sac-fly WPA result. |
| Player Examples | ||||||||||
| Who supports the signal, and who complicates it? | ||||||||||
| Best Sample A RSOE / 100 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Highest Sample B Net SF WPA / 100 | ||||||||||
| Good early RSOE, weak future SF WPA | ||||||||||
| Weak early RSOE, strong future SF WPA | ||||||||||
| The middle groups are the most important caution groups because they show where early RSOE and future SF WPA value disagree. |
This is a better test than simply checking whether SFOE repeats. SFOE is the scoring label. This section uses the earlier runner-home signal and asks whether it predicts future sacrifice-fly win value.
If the trend slopes upward, the players who were better at getting the runner home in Sample A also created more sac-fly WPA value in Sample B. If the trend is flat, then runner-home value may still matter, but the WPA timing piece is probably too noisy at the player level.
That is basically a flat out-of-sample signal. The top Sample A RSOE group created clearly more Sample B Net SF WPA / 100 than the bottom group.
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.98. The top-minus-bottom gap in Net WPA SF% was 3.0%.
| 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.147, with an R² of 0.022.
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.