EDDYMENS

Published 4 weeks ago

Putting Stock Market Returns Into Perspective: Geometric Mean And More

Table of contents

It is very common to hear about how the US stock market, particularly the S&P 500 index [↗], has returned an average of 10% annually. What is even crazier is that some people base their early retirement plans on this number.

Like most statistical values, this figure is accurate depending on how you interpret it. Yes, the average annual return of the S&P 500 is around 10%, but in reality, the market doesn’t consistently return 10% every single year. This fact changes everything when it comes to financial planning.

A look at varying growth

Instead of explaining too much upfront, let's look at a simple simulation of returns.

Sim 1 (Smooth Returns)

In this example (our control), we have a portfolio starting with $200,000, which grows by 10% every year for five years.

Year Return Balance
1 10.0% 220,000.0
2 10.0% 242,000.0
3 10.0% 266,200.0
4 10.0% 292,820.0
5 10.0% 322,102.0
Average Arithmetic Return: 10.0%

Sim 2 (Uneven Returns)

In our second simulation, we will use the same starting portfolio balance of $200,000. However, this time, the returns will vary each year. Despite these fluctuations, the average return will still be 10% over the entire period.

Year Return Balance
1 28.93% 257,860.0
2 30.83% 337,358.24
3 26.33% 426,184.66
4 -38.38% 262,614.99
5 2.3% 268,655.13
Average Arithmetic Return: 10.0%

In Conclusion...

Our portfolio with a consistent 10% return each year ends up with a balance of $322,102.0, while the second portfolio, which started with the same amount, finishes the fifth year with a lower balance of $268,655.13.

Both have the same arithmetic average return, yet this simple simulation shows how misleading that number can be when actually using returns in your calculations.

This difference is due to sequence risk [↗], the order in which returns occur can significantly impact the final portfolio value, lower or negative returns reduces the base on which future gains compound.

The gap gets even bigger if you factor in withdrawals, and even run out of money in some cases

Sim Code Used

01: portfolio_balance = 200_000 02: # annual_returns = [10.0, 10.0, 10.0, 10.0, 10.0] # even growth 03: annual_returns = [28.93, 30.83, 26.33, -38.38, 2.3] # uneven growth 04: for year, growth in enumerate(annual_returns): 05: portfolio_balance += round((growth/100)*portfolio_balance, 2) 06: print(f"Year: {year+1}, Return: {growth}%, Balance: {format(portfolio_balance, ',')}") 07: 08: avg_return = sum(annual_returns) / len(annual_returns) 09: print(f"Average Arithmetic Return: {round(avg_return, 2)}")

Arithmetic Average vs. Geometric Average

Now, let us look at why the arithmetic average [↗] isn't as useful as the geometric average [↗].

The arithmetic average simply adds up all the returns and divides by the number of years:

01: avg_ret = (ret_1 + ret_2 + ... + ret_n) / n

In plain English: "If I earned different amounts each year and wanted to estimate what I made per year, I would take the total and split it evenly across the years."

The geometric mean, on the other hand, accounts for the compounding effect:

01: geo_ret = ((1 + ret_1) * (1 + ret_2) * ... * (1 + ret_n))^(1/n) - 1

In plain English: "My money grew at different rates each year, but what steady growth rate would have given me the same final balance?"

Here's my Python function to compute the geometric mean. If it breaks, let me know. :)

01: import math 02: 03: def geometric_mean(returns_list): 04: percentage_values = [(1 + num/100) for num in returns_list] 05: list_size = len(returns_list) 06: list_product = math.prod(percentage_values) 07: geo_mean = (list_product**(1/list_size)) 08: return (geo_mean - 1) * 100

Wrapping Up

Next time you Google the returns of a stock or ETF [↗] you want to invest in, do not forget to look for the geometric mean and use that for your projected returns, unless you know exactly what you're doing. In that case, why did you read this all the way to the end? :).

Oh, one last thing… I should also mention that while understanding and using the geometric mean brings you closer to a more accurate projection, it does not account for the effects of sequence of returns risk. Incorporating a Monte Carlo [↗] simulation alongside historical data can further improve accuracy.

Here is another article you might like 😊 How To Get A List Of Your Stock Options Using IBKR API