I recently got a new GPS running watch, a Garmin Fēnix 5. As well as tracking runs, cycling and swimming, it does “activity tracking” – number of steps taken in a day, sleep, and so on. The step goals are set to move automatically and I wondered how it worked. With a quick number crunch, the algorithm revealed itself. Read on if you are interested how it works.

The watch started out with a step target of 7500 steps in one day. I missed this by 2801 and the target got reduced by 560 to 6940 for the next day. That day I managed 12480, i.e. 5540 over the target. So the target went up by 560 to 7500. With me so far? Good. So next I went over the target and it went up again (but this time by 590 steps). I missed that target by a lot and the target was reduced by 530 steps. This told me that I’d need to collect a bit more data to figure out how the goal is set. Here are the first few days to help you see the problem.

Actual steps | Goal | Deficit/Surplus | Adjustment for Tomorrow |

4699 | 7500 | -2801 | -560 |

12480 | 6940 | 5540 | 560 |

10417 | 7500 | 2917 | 590 |

2726 | 8090 | -5364 | -530 |

6451 | 7560 | -1109 | -220 |

8843 | 7340 | 1503 | 150 |

8984 | 7490 | 1494 | 300 |

9216 | 7790 | 1426 | 290 |

The data is available for download as a csv via the Garmin Connect website. After waiting to accumulate some more data, I plotted out the adjustment vs step deficit/surplus. The pattern was pretty clear.

There are two slopes here that pass through the origin. It doesn’t matter what the target was, the adjustment applied is scaled according to how close to the target I was, i.e. the step deficit or surplus. There was either a small (0.1) or large (0.2) scaling used to adjust the step target for the next day, but how did the watch decide which scale to use?

The answer was to look back at the previous day’s activity as well as the current day.

So if today you exceeded the target and you also exceeded the target yesterday then you get a small scale increase. Likewise if you fell short today *and* yesterday, you get a small scale decrease. However, if you’ve exceeded today but fell short yesterday, your target goes up by the big scaling. Falling short after exceeding yesterday is rewarded with a big scale decrease. The actual size of the decrease depends on the deficit or surplus on that day. The above plot is coloured according to the four possibilities described here.

I guess there is a logic to this. The goal could quickly get unreachable if it increased by 20% on a run of two days exceeding the target, and conversely, too easy if the decreases went down rapidly with consecutive inactivity. It’s only when there’s been a swing in activity that the goal should get moved by the large scaling. Otherwise, 10% in the direction of attainment is fine.

I have no idea if this is the algorithm used across all of Garmin’s watches or if other watch manufacturer’s use different target-setting algorithms.

—

The post title comes from “Measured Steps” by Edsel from their Techniques of Speed Hypnosis album.

Interesting – Just bought a 635 – I will check this out with my data – when I have enough.

I checked this with my data from the garmin instinct. Your analysis checks out for my data as well. However, the correction is limited to 2000 steps (at least for the correction in upward direction). I have not yet checked this limit of the correction for the downward adjustment. To check this also in downward direction it would require me to do negative number of steps. (or I first need to achieve a very large stepgoal).

However, you describe the adjustment wrongly. The adjustment is small (scaled by 0.1) if it is the first in a sequence of consequetive decreasing-or-increasing corrections, and it is large (scaled by 0.2) if it it second/third/etc of consequetive decreasing of increasing corrections.

Anyways, many thanks for finding out how this works. I was very annoyed by not understanding how garmin adjusts the stepgoal. Now I understand the calculation, I am much more at ease with it…

The systems seems not well adapted for golfers approach S40.

A round of golf is a about 12000 steps

Playing once or twice a week sets completely erratic goals for the next day

Thanks for the great article! I have done similar charts and a similar analysis with my step data from 2019. The findings are somewhat different and somewhat similar. 😉 My article is available here: https://robertruns.com/2019/09/20/understanding-garmins-auto-step-goal-algorithm/

That’s great Robert, thanks for the comment.

It appears to adjust by 20% of the difference if the difference is in the same direction as yesterday and by 10% if the direction changed. That makes sense to me. You want it to be adjusting quickly while you are repeatedly over our under performing and gradually when you are staying around the same each day.

The changes are rounded up to multiple of 10, so if you go over by 51 steps every day it adjusts the target up by 20 each day. Today I got the goal exactly and to my surprise it still increases the target by 10 steps. I’ve gone exactly 50 steps over before (without changing direction) and also saw the target increase by 10.

You have missed one more “feature” of the algorithm. Whenever your daily goal exceeds 15000 steps, next day target increase is limited by 50 steps. So, if your today’s goal is 16000 and you’ve actually completed 30000 steps, your goal for tomorrow will be set to 16050.

Thanks Alex. I didn’t know that!