Cumulative and Geometric returns

If you had invested $1 with Warren Buffett in 1965, it would have grown to $2078 in 2000. Given below are the returns extracted from his letter to the shareholders.

berkshire2000letter

How did he arrive at the average annual gain of 23.6% and an overall gain of 207,821%.

Let us start with the calculations for overall gain. Imagine that you invested $1 in the year 1965. How much money will you have by the end 1965?

Let r = 23.8% is the total return for the year 1965 [refer to the image]
Let P = $1 is the initial amount invested at the start of 1965

Amount at the end of 1965 = P + P * r
                          = P * (1 + r)
                          = $1 * (1 + 0.238)
                          = $1.238

At the end of 1965 you will have $1.238. How much money will you have in 1966?

Let r = 20.3% is the total return for the year 1966 [refer to the image]
Let P = $1.238 is the amount at the start of 1966

Amount at the end of 1966 = P + P * r
                          = P * (1 + r)
                          = $1.238 * (1 + 0.203)
                          = $1.489

At the end of 1966 you will have $1.489. Now what is your overall gain?

Remember you initially invested $1. Hence for calculating the overall gain you need to subtract $1 from this amount.

Overall Gain % = (Amount at the end of 1966 - Initial amount) * 100
               = ($1.489 - $1) * 100
               = (0.489) * 100
               = 48.9%

The overall gain is 48.9%. This overall gain is called as the cumulative returns. Buffett did this calculation for 36 years and arrived at the overall gain of 207,821%. It would take a long time if I had to do this manually for 36 years. Hence I wrote a program in python  to verify this. The output I got was 207820.93% and it matches Buffet’s calculations.

returnPerYear = [23.8, 20.3, 11.0, 19.0, 16.2, 12.0,
                 16.4, 21.7, 4.7, 5.5, 21.9 ,59.3,
                 31.9, 24.0, 35.7, 19.3, 31.4, 40.0,
                 32.3, 13.6, 48.2, 26.1, 19.5, 20.1,
                 44.4, 7.4, 39.6, 20.3, 14.3, 13.9,
                 43.1, 31.8, 34.1, 48.3, 0.5, 6.5]

cumulativeReturn = 1.0
for r in returnPerYear:
    cumulativeReturn += cumulativeReturn * (r / 100.0)

cumulativeReturn = cumulativeReturn - 1;

print cumulativeReturn * 100

How did he arrive at the average annual gain of 23.6%?

Since it had the word average I thought he calculated the average of all his returns. When I did that I got 24.39% which is different from his calculation of 23.6%. The python program to calculate the average.

returnPerYear = [23.8, 20.3, 11.0, 19.0, 16.2, 12.0,
                 16.4, 21.7, 4.7, 5.5, 21.9 ,59.3,
                 31.9, 24.0, 35.7, 19.3, 31.4, 40.0,
                 32.3, 13.6, 48.2, 26.1, 19.5, 20.1,
                 44.4, 7.4, 39.6, 20.3, 14.3, 13.9,
                 43.1, 31.8, 34.1, 48.3, 0.5, 6.5]

totalReturns = 0.
for r in returnPerYear:
    totalReturns += r

print totalReturns / len(returnPerYear)

Clearly he did not take an average. What is the problem using average? Imagine that you invested $100. On the first year you got 50% returns. On the second year you lost 50%.

Start = $100
End of Year1 = $100(1 + 0.5) = $150
End of Year2 = $150(1 - 0.5) =  $75

Average Return = (0.5 - 0.5) / 2
               = 0%

The average return for this example is 0%. This means that you did not lose any money which is not true. You lost $25 as you only have $75 instead of $100. Hence average does not work very well.

We already know how to find out cumulative return. Let us use that to derive a formula for average annual gain.

Let P be the initial amount of $1
Let r1 be the return for the 1st year
Let r2 be the return for the 2nd year

Cumulative Return = (P * (1 + r1) * (1 + r2)) - P
Cumulative Return = (1 * (1 + r1) * (1 + r2)) - 1; since P = 1
Cumulative Return + 1 = (1 * (1 + r1) * (1 + r2))

Our goal is to find out a single return for the entire period.
Let us call this as r and we will replace r1 and r2 with it.

Cumulative Return + 1 = (1 * (1 + r) * (1 + r))
Cumulative Return + 1 = ((1 + r)2)

Taking square root on both the sides we get

1 + r = (Cumulative Return + 1)1/2
r = (Cumulative Return + 1)1/2 - 1

r is called as the geometric mean return. The derivation I did was for 2 years. For finding the annual return for 36 years we need to take the 36th root. I verified this with the python code given below. The average return comes to 23.64 which matches Buffet’s calculation.

returnPerYear = [23.8, 20.3, 11.0, 19.0, 16.2, 12.0,
                 16.4, 21.7, 4.7, 5.5, 21.9 ,59.3,
                 31.9, 24.0, 35.7, 19.3, 31.4, 40.0,
                 32.3, 13.6, 48.2, 26.1, 19.5, 20.1,
                 44.4, 7.4, 39.6, 20.3, 14.3, 13.9,
                 43.1, 31.8, 34.1, 48.3, 0.5, 6.5]

cumulativeReturn = 1.0
for r in returnPerYear:
    cumulativeReturn += cumulativeReturn * (r / 100.0)

cumulativeReturn = cumulativeReturn - 1;
print (pow(cumulativeReturn + 1, 1.0 / len(returnPerYear)) - 1) * 100

2 thoughts on “Cumulative and Geometric returns

  1. Dear Jana,
    Thanks for sharing methodology for evaluation of portfolio performance as Great Warren Buffett is doing from past 50 years. In the recent past I started searching for this method but not able to get it completely but now my search journey ends here. Hope if you can share any spreadsheet or program to get it done for own portfolio.

    Thanks Once again.
    Vivek

Comments are closed.