How to increase the value of a multiplier the larger it gets

data analysisexponential functionstatistics

I'm creating an app that turns fitness data into "scores". An example will better describe the problem I'm having…

Let's say you do 5 sets of Squats as an example. Below are your sets (weight and reps)

1. 20 kg x 20 reps
2. 30 kg x 15 reps
3. 35 kg x 12 reps
4. 40 kg x 10 reps
5. 45 kg x  8 reps

I create a "score" for each set by multiplying the weight x reps. In this case

1. 20 kg x 20 reps = 400
2. 30 kg x 15 reps = 450
3. 35 kg x 12 reps = 420
4. 40 kg x 10 reps = 400
5. 45 kg x  8 reps = 360

I want the weight to have more of a "value" the larger it gets. Preferably, in this example, I'd want the score of the 5th set to be greater than the score of the 4th set.
The best solution I've found so far is to square the weight value like so

$weight^2*reps$

1. 20 kg x 20 reps = 8000
2. 30 kg x 15 reps = 13500
3. 35 kg x 12 reps = 14700
4. 40 kg x 10 reps = 16000
5. 45 kg x  8 reps = 16200

The actual numeric values are arbitrary because I use them to create a percentage score so it doesn't matter that it's in the thousands. It's mostly the difference in between the values that I'm interested in.

However this causes too great an increase as the weight value gets higher. The difference between set 1 and set 5 is too drastic.

Is there another way I can cause an exponential increase with a flatter curve?

Should I instead be using the initial weight value as a base value or something along those lines?

Apologies for the long question, my math knowledge is limited and I've been mulling this over for a while but still can't seem to word the problem correctly.

Best Answer

So the idea of using a base weight sounds good, but I don't think you should use the smallest value. Instead, pick a value in the middle, (lets call it $W_0$), with the idea that you get penalized on lower lifts and rewarded on higher lifts. Also pick an exponent, $p$, say between 0.8 and 2.0. Higher values of $p$ make the penalty/reward more extreme, and there are no mathematical reasons why $p$ needs to stay in that range; it just seems to give reasonable values. Then compute

$$Score = Wt * Reps *(Wt/W_0)^p$$

I whipped up a spreadsheet to play around with the values of $W_0$ and $p$, and here are a few runs:

Base wt 35  
Exponent    0.9 
        
Wt  Reps    Score
20  20  242
30  15  392
35  12  420
40  10  451
45  8   451
Base wt 35  
Exponent    1   
        
Wt  Reps    Score
20  20  229
30  15  386
35  12  420
40  10  457
45  8   463
Base wt 35  
Exponent    1.1 
        
Wt  Reps Score
20  20  216
30  15  380
35  12  420
40  10  463
45  8   475
Base wt 35  
Exponent    1.2 
        
Wt  Reps    Score
20  20  204
30  15  374
35  12  420
40  10  470
45  8   487

(I wish there was a way I could pass the spreadsheet to you so you could play around with it.)

This does have the problem of picking the Base Weight. If the app is just for you then you could just pick them by hand for each exercise, but that's unworkable if there will be many different users. So you probably want your app to be able to compute a reasonable $W_0$ value from the data. As a first stab I'd try using the midpoint:

$$W_0 = \frac{\min W_i + \max W_i}{2}$$

My guess is that this would be too sensitive to stray outliers, so a more "robust" value would be the weighted average (the pun is totally co-incidencidental):

$$W_0 = \frac{\sum W_i * Reps_i}{\sum Reps_i}$$

Related Question