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

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
```