Boston Marathon 2014 · 31,655 finishers · plus 2015 to 2024 and a live split tool
Boston has a timing mat every 5 km, so the location of "the wall" can be measured. Across 31,655 finishers, median pace holds nearly flat to 20 km, drifts through 25 km, then climbs steeply into 30 km and stays high to the finish. A model fitted on seven other Boston years and tested on the held-out 2024 race predicts the finish from halfway with a mean miss of 7.9 minutes, against 18.1 for even pace.
median pace at 25 to 30 km against the settled 5 to 10 km pace. One segment earlier it was +6%, one segment later +19%.
median late slowdown per runner: their own 35 to 40 km pace against their own 10 to 20 km pace.
of finishers slowed by more than 25% on that comparison, slightly more than one runner in four.
median pace per km in the first segment and in the slowest one, 35 to 40 km.
Start · the question
Ask marathoners where the wall is and you hear mile 18, mile 20 or mile 22. One runner's handful of races is too few to show a shape. One field of 31,655 is plenty.
Every Boston finisher leaves a cumulative time at 5, 10, 20, 25, 30, 35 and 40 km and at the finish. Each segment's time divided by its length is that runner's pace through it, and the median across the field, segment by segment, is the average shape of the race.
The results sheet
These are the field's median paces as analyze.py writes them to
tables/segment_pace.csv. The change column compares each
segment with the 5 to 10 km pace, by which point the start-line crowding
has cleared.
| Segment | Median pace | min/km | vs 5–10 km | Change |
|---|---|---|---|---|
| 0–5 km | 5:01 | 5.014 | −0.6% | |
| 5–10 km | 5:03 | 5.044 | 0.0% | |
| 10–20 km | 5:10 | 5.166 | +2.4% | |
| 20–25 km | 5:21 | 5.350 | +6.1% | |
| 25–30 km | 5:42 | 5.694 | +12.9% | |
| 30–35 km | 6:01 | 6.024 | +19.4% | |
| 35–40 km | 6:05 | 6.086 | +20.7% | |
| 40 km–finish | 6:00 | 6.000 | +19.0% |
The two highlighted rows hold most of the climb: 13.4 of the 20.7 points between the 5 to 10 km pace and the slowest segment.
The curve
Drawn along the course, the field's numbers make a corner. The first 20 km add only 2.4%. If fatigue built up evenly from the gun the line would slope from the start, and it doesn't: something changes after 25 km.
Pick a finish-time group to see the same corner at different strengths, each measured against the group's own 5 to 10 km pace. Runners under 3:00 end about 8 to 9% slower than their early pace. Runners over 4:30 are 33 to 35% slower between 30 and 40 km, then ease to 25% over the last 2.2 km.
Hover the chart, or focus it and use the arrow keys, to read a segment.
tables/web_pacing.json, written by
export_web.py with the same filters as analyze.py.Runner by runner
Compare each runner with themselves, 35 to 40 km pace against 10 to 20 km pace, and the median slowdown is 15%. The distribution has a long right tail: 27% of finishers were more than 25% slower late in the race, and 504 of them were 80% slower or worse.
Hover the chart, or focus it and use the arrow keys, to read a bar.
October 2026 upgrade · eight years
Everything above is one race. To see whether 2014 was typical, the same segment medians were run on every Boston year with public 5 km splits: 2014 to 2017 and 2021 to 2024, about 200,000 finishers in all. The 2013 race is drawn in gray and left out of every comparison: it was stopped at about 4:09 on the race clock, so its finishers are the faster part of the field. 2018 and 2019 are missing because the public files for those years carry no splits.
The corner is in the same place every year: pace is close to flat to 20 km and the biggest step is between 25 and 35 km, over the Newton hills. What changes is its height. In 2014 the median runner's 35 to 40 km pace was 15.1% slower than their 10 to 20 km pace, and 27.4% of finishers slowed by more than 25%. In the other seven years those two numbers ran from 5.7% and 7.5% (2023) to 13.2% and 22.7% (2024). The 2014 numbers on this page are kept as they were; this section adds the other years beside them.
tables/years_decay.json, written by
multiyear.py with the same split filter as analyze.py (wheelchair and handcycle entrants removed by
division, so the 2014 panel has 31,634 runners rather than 31,655).Your race
Enter a finish time between 2:15 and 6:00. The page takes the Boston 2014 finishers within the same 15 minutes, uses their median pace in each segment, and scales that shape so it adds up to exactly your time. Next to it is the same time run at even pace. It describes what those runners did on that course; it is not a pacing plan.
| Mat | Boston shape | Pace | Even pace | Vs even |
|---|
October 2026 upgrade · live split tool
The card above describes 2014. This one predicts. Type the race clock at each mat you have passed and it gives a finish time with 80% and 95% ranges, the chance that your 35 to 40 km pace ends up more than 25% slower than your 10 to 20 km pace (the wall as this page defines it), and the pacing type your splits look like so far. Each new split adds a column to the chart, so you can watch the range close in. Gender and age are optional; for a typical runner they move the predicted finish by about two minutes before 30 km and under one minute after.
It runs in the browser on model/pace_model.json; nothing
you type leaves the page. The same file drives pace_model.py
in the repo. It was fitted on Boston only, so on a flatter course it
will predict too much fade.
How the model was built
At each mat the model predicts how much slower than even pace the rest of the race will be. Its inputs are the average pace so far, the last 5 km against that average, the first 5 km against that average, those terms against each other, and optionally gender and age. The training years are 2014 to 2017 and 2021 to 2023 (176,059 finishers). 2024, the latest year with splits, was held out: nothing about it was used to fit or choose anything.
I compared four ways to predict, by leaving out one training year at a time: even pace from the latest split, the 2014 field's median curve scaled to your time (the rule behind the split card above), this linear model, and gradient-boosted trees. The trees were 0.6 to 4% better than the linear model. I kept the linear model because it is a few hundred coefficients that the browser and Python evaluate identically; the trees would have been a large export for a small gain. The table shows all of them on 2024, the trees included for the record.
| Mat | Even pace | 2014 curve | Model | Trees | Wall Brier: model / base rate |
|---|---|---|---|---|---|
Mean absolute error in minutes on the 2024 race (25,377 finishers; 25,376 scored at each checkpoint); lower is better. The Brier score
compares the wall-risk probability with what happened (0 is perfect); the base rate always predicts the training share, 17%.
From tables/model_eval.json, written by train_model.py.
From 10 km on the model beats both baselines. At the half its typical miss is 7.9 minutes, against 18.1 for even pace and 9.9 for the 2014 curve. At 5 km it does not: the 2014 curve was slightly closer on 2024 (15.0 against 15.4 minutes), probably because 2024, like 2014, had a big fade (see the panels above).
The ranges are split conformal intervals. For each mat and each fifth of the field by pace so far, the model's errors on the left-out years set the width, so year-to-year swings in weather are already in them. The chart shows how often 2024 finish times fell inside.
Interval coverage on 2024
Hover the chart, or focus it and use the arrow keys, to read a mat.
Coverage is close to target early and slips late: by 35 km the 80% range held 74% of runners and the 95% range 92%. 2024 faded harder than most training years, so the late ranges were a little too narrow for it. At the early mats the misses sit with the slowest finishers; by 35 km they are spread across the field.
Wall risk against what happened
Hover the chart, or focus it and use the arrow keys, to read a group.
Wall risk is weak early and useful late. At 5 and 10 km it barely beats the base rate (Brier 0.172 against 0.179), and for most runners it runs low, because 22.7% of 2024 runners hit the wall against 17% in the training years. The few given a very high risk at the half hit it less often than predicted. By 30 km the score is 0.117, and at 35 km 0.091.
Pacing types
Each training runner's eight segment paces were divided by their own average pace and grouped with k-means. Three to six groups all came back the same from different random starts, but the groups are slices of a continuum: the silhouette score for four is 0.28, low. I kept four because each has a shape a runner would recognize, and named them by that shape.
| Type | Pace against own average | 2014 to 2023 | 2024 |
|---|---|---|---|
From model/pace_model.json and tables/model_eval.json.
The shapes hold from year to year (clustering one year alone puts the same runners in the same type 72 to 92% of the time), but the mix does not: Even was 29% of the 2014 field and 65% of 2023. In the tool, the type is the nearest shape to the segments you have run, scaled by your predicted finish. Read early it is a guess. On 2024 it matched the runner's full-race type 40% of the time at 10 km, no better than always answering Steady fade, then 53% at the half, 70% at 30 km and 81% at 35 km.
Limitations
Split data locates the slowdown and can't separate the causes. Glycogen depletion, muscle damage, heat and a too-fast start all produce a late fade.
Boston's course is part of the result. The Newton hills run from about 16 to 21 miles, or 26 to 34 km, which is where the corner is, and the net-downhill opening makes early pace look quicker than it would on a flat course. A flat course would probably show a softer corner, but this study has no flat-course data to test that.
The main results above are one edition of one race, and the multi-year panels show it was an unusually hard one. The model adds eight years but is still Boston only, and it knows nothing about the weather: a hot year shifts everyone at once, which is why its 2024 ranges ran narrow late in the race. The 2015 to 2024 files come from public mirrors of the official results, not from the B.A.A. directly. The companion study on negative splits now has the per-year counts too.
For a runner
The groups that stay closest to flat late are the ones whose early pace left them something in reserve. The data shows an association and says nothing about mechanism. For a runner the reading is still the familiar one: the first 25 km are where you choose how the last 17 go.
Finish · how it was built
fetch_data.py downloads the results and analyze.py
writes the figures and both tables. export_web.py reads the same
data through analyze.load() and writes the group and 15-minute
band paces and the late-slowdown histogram that this page draws. Raw data
is git-ignored; the outputs are committed. For the October 2026 upgrade,
fetch_multiyear.py and build_dataset.py assemble
the eight years, multiyear.py writes the per-year curves, and
train_model.py fits the model, exports it and scores it on 2024.
tables/years.csv