DK / Luck

skill & luck.

BaseRuns
Standings decomposition

Who's good, and who's getting away with it?

Loading the season…
Fetching standings and team batting and pitching lines…
Most robbed

Biggest beneficiary

Share that is coin flips

The three-step fall.

A record is three translations deep. Events become runs, runs become wins, and each step can lie. Pick any team to see where its season actually went — the table further down is clickable too.

Earned, or handed to them.

Wins above or below the underlying events

Total luck for all 30 teams, split into its two causes. Sequencing is whether hits and walks clustered into runs. Timing is whether those runs showed up in games that were still winnable. The two are exactly additive.

The full ledger.

Click any row

How much of this is a coin flip?

Spread in the standings comes from two places: teams genuinely differing in quality, and games being games. Because the two are independent, their variances simply add — Var(observed) = Var(talent) + Var(luck) — and the luck half is known exactly from the binomial, 0.25 / games. Everything left over is talent.

How this is computed.

Four steps
  1. 1Events to expected runs. BaseRuns runs a team's actual singles, doubles, triples, homers, walks and steals through A × B/(B+C) + D, which asks how many runs those events should have produced in a neutral order. It is run on both the batting and pitching lines, so every team gets an expected runs scored and allowed.
  2. 2Expected runs to an expected record. Both the BaseRuns totals and the real run totals go through Pythagenpat, k = ((RS+RA)/G)^0.287. That yields two shadow records: one the events deserved, one the runs deserved.
  3. 3Subtract. The gap between the two shadow records is sequencing. The gap between the run-based record and the real one is timing. They sum exactly to total luck, so nothing is double counted or lost.
  4. 4Calibrate, don't fudge. League-wide BaseRuns lands within a few tenths of a percent of actual runs on its own; it is then scaled to match league totals exactly, so only the differences between teams carry any weight.
Source · MLB StatsAPI Method · BaseRuns, Pythagenpat No key, no backend, all client-side