Present Value Tutorial
Introduction
The Present Value (PV) is often used in finance to convert future amounts into present-day equivalents, because $1000 today is not equivalent to $1000 in the future, due to inflation and the possibility of earning an investment return on the $1000 during those years.
In this tutorial, we will show how to simulate the present value of a stock. We first do this by forecasting the future earnings that could be paid out as dividends to the shareholders, and then we also forecast the future share-prices. You can view the full simulation reports here and here, and clone the simulations to run them yourself with different input values.
We use the company Foot Locker as an example. We do not have any special insights into this company, so we merely use historical data to estimate the probability distributions for the future earnings and share-prices. We will not update this tutorial with new data in the future.
When comparing the present value to a price in order to assess the future return on an investment, we personally prefer using the Internal Rate of Return (IRR) instead, because we don't have to choose a discount rate and the results are easier to interpret. We only use present values when we need to know the actual value in present-day equivalents.
Discount Rate
There are several academic theories and methods for choosing the discount rate used to calculate the present value. A popular method is the Weighted Average Cost of Capital (WACC) and you are welcome to use that method in your simulations here, but it has been rejected as "bonkers" by some of the world's most successful investors like Warren Buffett and Charlie Munger.
It is easier to think of the discount rate as the rate of return for an alternative investment, that has similar risks to the asset we are valuing. For example, if we are valuing a stock then we can use the expected future return of a stock-market index such as the S&P 500 and add some percentage-points as a risk-premium.
We of course do not know the future returns on the stock-market index, so we use the historical returns instead. This is typically done by taking the average one-year returns for the stock-market index. This is simple and gives neat results, but it is mathematically incorrect because of the non-linearity in the present value formula and the so-called Jensen's Inequality.
When simulating the present value, we can instead use the full probability distribution of historical returns as the discount rate. The plot below shows these distributions for inflation, government bonds, and the 5-7 year average annualized returns on the S&P 500.
It is very important you match the discount rate and future amounts with regard to inflation, as explained in the docs. If the future amounts are nominal then the discount rate must also be nominal, and vice versa for real / inflation-adjusted values.
Simulate Earnings
The future earnings are simulated from the company's historical Net Profit Margin and recent sales. We assume zero real earnings growth to make a conservative valuation, that is, we assume the earnings merely grow the same as the inflation, which means that we should use the real discount-rate in the present value simulations.
The model outputs several plots with the simulation results for the Present Value (PV), Net Present Value (NPV), and NPV Ratio which shows the percentage gain/loss. We only show the NPV Ratio in the plots below. Note that it is very important you never compare the NPV Ratio to IRR values which measure the investment return very differently, so this would be like using metric and imperial rulers to compare different investments.
We first use the historical 5-7 year average real returns on the S&P 500 plus a 5% risk-premium. The plot shows a histogram with the NPV Ratio on the x-axis, where higher vertical bars means there were more simulation results for those values. This plot has been clipped on the x-axis, otherwise the outliers would extend to thousands of percent. The plot shows that most of the simulated present values of the company's stock fall between -100% to +200% of the current share-price.
The plot below shows the same simulation, but the discount-rate is now set to the average value of 9.05% instead. This avoids the extreme outliers, which occur when the discount-rate is close to the terminal growth-rate, as it sometimes is when using the historical returns on the S&P 500. Also note that the distributions in these two plots have very different shapes, and their averages are not even equal, which is due to Jensen's Inequality mentioned above.
You can view the full report and clone the simulation to run it yourself with different input values.
Simulate Share-Prices
In addition to the future earnings, we now also simulate the company's future share-prices by splitting the price into two components: A valuation metric such as P/E or P/S ratio, and the earnings or sales. We simulate these independently of each other and multiply the values together to get the share-price. We personally prefer using historical P/S ratios because they are usually much more stable than P/E ratios, which are also ill-defined when the earnings are negative or zero.
Below is a so-called violin-plot which shows the distributions vertically with simulation results for each future year (these sometimes resemble violins). This plot shows the NPV Ratio for each of the 10 future years, that is, if we buy shares at the current price and sell the shares in one of the future 10 years. These distributions are much more constrained than the simulations above, because this model does not use Terminal Values, which can give extreme results when the discount-rate is close to the terminal growth-rate.
The second plot below varies the current share-price on the x-axis. The shade of blue indicates how many simulated NPV Ratios are in a region of the plot, so that darker blues indicate more simulated values. It shows that if the current share-price is lower, then the NPV Ratios are higher, and vice versa.
You can view the full report and clone the simulation to run it yourself with different input values.