It is interesting to see what assumptions the market is making with regards to Tesco’s earnings/dividends.
Let’s take the Gordon Growth Model as our base. It states that P = D/(k-G)
where P is the share price, D is the expected dividend one year out, k is the required rate of return for equity investors, and G is the perpetual growth rate.
We can re-arrange this to give
G = k – D/P
k is a hurdle rate using the CAPM model. The numbers may be a little stale, but I’m not keen on working everything out from first principles. So I have taken the risk free rate rf=2.95%, and the equity risk premium erp= 4.96%. The beta for Tesco is 0.71 – I have taken an average from 3 sites. Therefore
k = rf + beta * erp = 2.95 + 0.71 * 4.96 = 6.47%
I use D = 14.73p, P = 247p. Hence
G = 0.0647 – 14.73/247 = 0.0647 – 0.0600 = 0.47%
In other words, the market is inferring a perpetual growth rate for Tesco at a miniscule 0.47%.
The question then is: do you believe that rate is too low? Too high?
We can actually model a few assumptions.
If we expect Tesco to grow at about a market-implied average rate, then we would set G=0.0295, which is the risk-free rate. It’s a fairly reasonable assumption, in which you obtain a fair price of
P = 14.73/(0.0647 – 0.0295) = 418p
Clearly, Tesco would be considered heavily undervalued on this basis.
What if you assumed no-growth? Then
P = 14.73/0.0647 = 228p.
Actually less than the current share price.
What if you’re a real pessimist, and assume that Tesco slowly grinds its way down, and loses 1% in dividend per annum? You would set G=-0.01 to obtain
P = 14.73/(0.0647 + 0.01) = 197p
Finally, let’s consider a range of scenarios, where we assume that the growth rate is somewhere between -1% and +2.95%, with an even distribution. Then we would expect an expected fair value of around 280p; with an implied upside of about 14%.
The 280p was obtained by hacking a Fortran program:
program tesco real :: g,p, n, pt n = 0 g = -0.01 pt = 0 100 continue n = n + 1 p = 14.73/(0.0647-g) pt = pt + p g = g + 0.0001 print *, g, p if(g.le.0.0295) goto 100 print *, pt/n end program