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 36^{th} 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

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

Thanks Vivek.

I use Google docs for managing the portfolio.

I measure the returns using XIRR function and I wrote about this here

https://janav.wordpress.com/2013/12/07/measuring-portfolio-performance/

Regards,

Jana