How the bear model works

A 57-mile canal, one anonymous runner's watch data, and a model that tries to answer the only question that matters at mile 40: walk, or keep going?

Ice Bear running in a race vest

The Glasgow to Edinburgh Ultra runs 57 miles from the Riverside Museum in Glasgow to Saughton in Edinburgh, along the Kelvin, the Forth & Clyde Canal and the Union Canal. It's flat, which sounds like a mercy and is in fact the cruellest thing about it. There is nowhere to hide, and nothing to walk up as an excuse.

Our runner, played by Ice Bear for reasons of privacy and general cuteness, wanted to know two things: roughly how long it'll take, and which pacing strategy gives the best chance of not spending the second half of the day shuffling past narrowboats. So the bear's years of watch data went into a model. Heart rate, pace, walking and stopping, from every long run and ultra on record.

The short version: the model forecasts about 13:40, likely 13:00–14:30, for its preferred strategy. The strategy matters more than the exact number, and the strategy is not "go out hard and hang on".

The model is personal. It's fitted to one runner, so the numbers won't transfer to you. The method will, and so will most of the lessons.

What it found

Run/walk: how much walking, not how long each walk

Like most ultra runners, the bear already walks about 17% of the first half without meaning to: eating, bridges, general faff. A 5:1 run/walk just schedules that walking, and scheduled walking replaces some of the forced walking later. Below 17% there's nothing to gain, because the walking happens anyway. Above it, the bear is adding walking it wouldn't otherwise do. To the model, 5:1, 10:2 and 20:4 are identical, because it only sees the share. In real life, 20:4 lets heart rate drift in the long running bouts and the legs stiffen in the long walks. Pick 5:1 or 10:2.

Median finish by strategy (2,000 simulated races each)

Heart-rate capContinuous5:15:1, HR offset on
128–133 all day14:09–14:1614:02–14:0914:02–14:07
133–13814:04–14:1113:56–14:0413:48–13:54
145–150, hard early14:08–14:0914:03–14:0513:50–13:51
Staged 128→138, released after Linlithgow13:58–14:0613:49–13:5713:45–13:52
Staged 133→141, released after Linlithgow (the plan)——13:37–13:45

Ranges are the two versions of the fade model (see below). "HR offset" is explained in part 5: the runner's heart rate currently reads about 6 beats high for the same effort, compared with the races the fade model learned from.

The walking problem

Every ultra over about 45 km in the bear's history ends the same way: a stop-start shuffle, roughly a minute of running and a minute and a half of walking, repeated dozens of times. Crucially, it isn't the heart or lungs. Late-race running pace is perfectly respectable when it happens, and walking heart rate drops well below race effort. The legs simply refuse to hold a running bout for more than a minute or two, even after very gentle starts.

So the limit is leg durability: muscle damage from hours of impact on hard surfaces. The model can't build durability, but it can price the choices that protect it.

Holding 5:1 to the finish is a stretch goal, with roughly a one-in-four chance on current form. Shuffling at 9:30–10:00/km instead of walking at about 11:00/km is far more achievable, and still worth about 10 minutes.

The plan the model likes

A staged heart-rate cap with 5:1 run/walk from the gun, released after Linlithgow. Clock times are the model's point estimates, assuming a 06:00 start.

Aid stationHR capRunning paceClockTime of day
5.3Lambhill131–133~6:451:0207:02
10.8Barleybank133–135~6:552:1208:12
17.0Woodend136–138~7:053:3109:31
25.4Falkirk Wheel138–140~7:205:2211:22
30.0Polmont140–141~7:356:2812:28
36.5Linlithgow140–141~7:558:0714:07
49.7Rathoreleased, 143–146~8:2011:3117:31
57.0Finishby feel~8:4013:2819:28
  1. Run 5, walk 1, from the gun. Eat in the walk minute.
  2. The cap is for the running minutes, and it rises on purpose, because heart rate drifts.
  3. Guard rail: nothing faster than 6:50/km for the first three hours, however good it feels.
  4. Linlithgow decision: on time and feeling fine, release the cap. Behind or creaking, keep it and switch to 4:1.
  5. After Linlithgow: keep the 5:1 timer, shuffle instead of walking, and run to the next bridge.
  6. Aid stations in three to four minutes. Standing still is the cheapest time to save on the course.

The model, properly

The model simulates the race 100 m at a time. At each step it decides how much time goes to running, planned walking, forced walking and shuffling, and how fast each happens. Everything except a few clearly labelled assumptions is fitted to the runner's own watch history. The race replay runs the same model in your browser; it's checked against the original Python to within a few seconds at every checkpoint.

1. Running pace from heart rate and time on feet

Fitted on about 12,500 running samples from recent runs of 20 km or more (R² 0.40):

pace (min/km) = 11.421 − 0.0360 × HR + 0.210 × hours elapsed

Each beat is worth about 2 s/km, and each hour on the feet costs about 13 s/km at the same heart rate. That second term is the cardiac-drift problem in a single number.

2. Walking: habit, pace and heart rate

QuantityValueUse
Unplanned walking in the first 45% of flat ultras17%The floor before any planned run/walk
Walking pace10:46/kmSpeed while walking
Heart-rate drop while walking12 bpmWalk breaks lower average early heart rate

3. The fade: late-race walking

Between 40% and 60% of the distance, walking ramps up to a late share that depends on how hard the first 45% was. There are only a handful of flat ultras to learn from, so the data can't choose between a straight line and a threshold. The model runs both and reports the range:

straight line: late walking = 0.142 + 0.0037 × early HR − 0.0024 × climb per km (residual SD 9.5 points)
threshold: late walking ≈ 54% below an early HR of ~138, ≈ 70% above it

Planned walk breaks replace some of the forced walking: half, by assumption, varied between a quarter and three-quarters. There's no structured run/walk race in the history yet, so this one can't be measured.

4. Leg damage from a hard start

The first version was too optimistic about hard starts and too pessimistic about easy ones, and its errors lined up neatly with early heart rate. That's a polite way of saying it was missing something. A damage term fixes it: late-race running slows by 0.95% for every beat of early heart rate above 130, with no effect below.

late running pace × (1 + 0.0095 × max(0, early HR − 130)), phased in over 40–60% of the distance

5. Heart-rate offset

Heart rate isn't a fixed measure of effort. Heat, sleep, caffeine and plenty else can shift it. For this runner, the current readings sit about 6 beats higher at a given pace than in the races the fade and damage terms learned from. The pace curve is fitted on recent data, so it already includes the shift. The strain terms judge effort on heart rate minus the offset. That one correction moves the best caps up by about five beats. The slider on the race page lets you change it.

6. Strategy settings

SettingWhat it doesPlan value
Heart-rate cap per sectionRunning heart rate for each section; sets running pace through part 1133 rising to 141, released after Linlithgow
Run/walkPlanned walking share5:1 (17%)
Aid station stopMinutes added per checkpoint4
Guard railFastest allowed running pace early on6:50/km for 3 h
Shuffle ruleThe share of forced walking turned into a slow jog9:45/km

7. Simulation and Monte Carlo

Each 100 m takes 100 m ÷ (running share × running speed + walking share × walking speed + shuffle share × shuffle speed). The speeds change with the cap, the clock and the leg damage. The Monte Carlo then reruns the whole race 2,000 times, varying:

Uncertain inputDistribution
Late walking share± 9.5 points (normal)
Readiness on the dayPace 0–4% slower (uniform)
Day-to-day pace± 2.5% (normal)
Aid station stops4 ± 1 min each
Planned walking replacing forced walking25–75% (uniform)
Leg-damage coefficient50–150% of the fitted value
Heart-rate offset5.8 ± 1.6 bpm
Shuffle-rule adherenceBeta(2, 2.5), mean 44%

Worked example: one 100 m step at 70 km (about hour ten)

StepCalculationResult
Early intensityMean cap over the first 45% (136.5) − walking dilution (17% × 12) − HR offset (5.8)128.6 bpm
Forced late walkingStraight line 0.142 + 0.0037 × 128.6 − 0.0024 × 2.5, minus half the planned 17% (threshold version: 54% − 8%)53% (45%)
Leg damage128.6 is below 130none
Running pace11.421 − 0.0360 × 145 + 0.210 × 108:18/km
Normal fade47% running at 8:18 + 53% walking at 10:469:27/km
Shuffle rule kept47% running + 17% planned walking + 36% shuffling at 9:459:08/km
Hold 5:183% running + 17% planned walking8:38/km

That 49 s/km gap, over the 33 km from Linlithgow, is the 35 minutes in the walking section.

How far to trust it

Each past ultra was replayed by a version of the model refitted without it, with the pace curve fitted only on the months before. On flat races, the average error was 2.5%. That's flattering: the damage term was tuned on those same races, so the honest out-of-sample error is probably 3–4%, or about half an hour either way. On mountain races it comes out 10–17% too fast, because the pace curve knows nothing about hills. The canal is flat, so we'll allow it.

Two independent models were built blind as a cross-check. One used Riegel-style scaling and fitness markers; the other used five-minute segments, heart-rate drift, a breakdown threshold and day-to-day heart-rate wobble. Their central forecasts landed about an hour apart, with this model in between. All three agreed that a hard start is fragile, some run/walk beats none, and a fixed low cap all day is too strict.

Course: 57 miles, 231 m of climbing, 16-hour cut-off (organiser).