median pace for a whole marathon field, 5 km at a time

Boston Marathon 2014 · 31,655 finishers · plus 2015 to 2024 and a live split tool

The field slows hardest between 25 and 35 km

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.

+13%

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%.

15%

median late slowdown per runner: their own 35 to 40 km pace against their own 10 to 20 km pace.

27%

of finishers slowed by more than 25% on that comparison, slightly more than one runner in four.

5:01 to 6:05

median pace per km in the first segment and in the slowest one, 35 to 40 km.

At a glance

Question
Where does a marathon field slow down, and can the splits so far predict the finish?
Data
Boston 2014: 31,655 finishers with every 5 km split. Model: 176,059 finishers from 2014 to 2017 and 2021 to 2023
Method
Median pace per segment against the 5 to 10 km pace; one linear model per mat, with split conformal ranges
Check
2024 held out (25,377 finishers). Mean miss from halfway: 7.9 min, against 18.1 for even pace and 9.9 for the 2014 curve
Result
Median pace +12.9% at 25 to 30 km and +19.4% at 30 to 35 km; 27% of runners slowed by more than 25%
Limitation
Boston only, with the Newton hills on the corner, and no weather. At 35 km the 80% range held 74% of 2024 runners

Start · the question

Runners name different miles

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

Eight segments, one corner

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.

Boston 2014 · median pace by segment
SegmentMedian pacemin/kmvs 5–10 kmChange
0–5 km5:015.014−0.6%
5–10 km5:035.0440.0%
10–20 km5:105.166+2.4%
20–25 km5:215.350+6.1%
25–30 km5:425.694+12.9%
30–35 km6:016.024+19.4%
35–40 km6:056.086+20.7%
40 km–finish6:006.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

Flat, then a corner, sharper at the back

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.

The strip is the course, 0 to 42.2 km, each timed segment shaded by how much slower it was than the 5 to 10 km pace and labeled with the median pace. The chart below plots the same numbers; the gray lines are the other groups. Data from tables/web_pacing.json, written by export_web.py with the same filters as analyze.py.

Runner by runner

A quarter of the field loses a quarter of its pace

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.

One count per runner, in 1-point bins. Rust bars are the runners more than 25% slower; values beyond −10% and 80% are piled into the end bars.

October 2026 upgrade · eight years

2014 was the hardest fade in the set

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.

Each panel is one year's median pace by segment against its own 5 to 10 km pace, on a scale from −5% to +25%. The dashed gray line repeats 2014 for comparison. Data from 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

How runners at your time ran Boston

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.

Split card 
h:mm:ss or h:mm
MatBoston shapePaceEven paceVs even

October 2026 upgrade · live split tool

Enter your splits as you reach each mat

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

One linear model per mat, tested on a year it never saw

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.

MatEven pace2014 curveModelTreesWall 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.

Share of 2024 finishers whose time fell inside the 80% (blue) and 95% (rust) ranges predicted at each mat. Dashed lines are the targets.

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.

2024 runners grouped by their predicted wall risk, in tenths; each square is a group, sized by how many runners it holds, placed at its average prediction and the share that actually slowed by more than 25%. Groups under 50 runners are left out.

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

Four shapes, and a field that drifts between them

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.

TypePace against own average2014 to 20232024

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

What this doesn't show

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 damage shows after 25 km and starts earlier

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

Where the numbers come from

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.

Data
Official 2014 Boston Marathon results, via the public llimllib/bostonmarathon mirror
Sample
31,655 finishers with every split present and strictly increasing
Splits
Cumulative times at 5, 10, 20, 25, 30, 35, 40 km and finish; segment pace is time divided by distance
Late slowdown
35 to 40 km pace against the same runner's 10 to 20 km pace
More years
2013 and 2014 from llimllib; 2015 to 2017 from the Kaggle mirror in Marc-Bouche/boston-marathon-analysis; 2021 to 2024 from williamsorg4/BostonMarathonTimeModel. Row counts per year in tables/years.csv
Model
Linear model on pace-ratio features at each mat; split conformal intervals from leave-one-year-out errors; logistic wall risk; k-means pacing types. Trained 2014 to 2023, tested on 2024
Built with
Python, pandas, NumPy, matplotlib, scikit-learn for fitting only; the charts and the tool here are plain SVG, HTML and JavaScript
Companion study
The Negative-Split Myth, the same field split into two halves

Median pace: 5:03 at 10 km, 6:01 by 35 km