More TVMâ€“calculating the IRR

My insurance company allows me to pay for our car insurance by monthly premiums instead of the usual premium once every 6 months. For this option, they just divide the total six-monthly premium by six to give the monthly premium, and then charge a $5 “processing fee” per month on top. I decided to take a look at how much this actually cost me. (For background on the Time Value of Money – TVM – see parts 1 and 2.) Let’s say, for sake of argument, that our total car insurance premium every six months comes to$600. By taking advantage of this monthly payment plan I would pay $(600 / 6) +$5 every month, or \$105. In effect, I am getting a loan for the total amount from my insurance company at the start of the six month period and paying it back in six equal payments. The cash flow diagram looks like this:

From last time, we worked out the NPV (Net Present Value) formula for a loan to be this:

$a = P . r^N . \frac { (1 – r) } { (1 - r^N) }$

where P is the principal of the loan, a is the payment per period, N is the number of periods, and $$r=(1+i)$$, where i is the interest rate.

From this, and using the values from our car insurance problem, we get:

$r^6 \frac {(1-r)}{(1-r^6)}=105/600$

and we have to solve for r. Yeah, right.

Unfortunately, as was finally proved in the 1820s by Niels Henrik Abel based on work by Paolo Ruffini, there is no general analytic solution to the factorization of polynomials of degree five or more (which this is, essentially). Hence to solve this expression we have to resort to a numerical process, taking special care not to hit the discontinuity at $$r=1$$.

The easiest way (that I used way back when) was the mid-point method. Write the equation like this:

$y=r^6 \frac {(1-r)}{(1-r^6)}-0.175$

and find a value for r that produces a y value less than zero, and one that produces a y value greater than zero. I tried $$r=1.01$$ which gave a value for y of –0.00245, and $$r=1.10$$, which gave a value for y of 0.0546. From this (and assuming that the equation is continuous between these two values of r, yadda, yadda), we can assume that the value of r that makes y zero lies between 1.01 and 1.1. Call these two endpoints, $$r_{low}$$ and $$r_{high}$$. Take the midpoint of these two values and plug it into the equation. If the resulting value for y is positive, replace $$r_{high}$$ with this new guess, if negative, replace $$r_{low}$$ with it. After a few iterations, you’ll find a value for y that is sufficiently close to zero for you to decide that this is the answer you want (say within 0.00001 of zero). Congratulations, you’ve just calculated r and therefore i.

(Aside for mathematicians: I agree that the Newton-Raphson method will converge faster, but to be honest, this mid-point method on modern processors is just as fast. Although it’s possible to rearrange the polynomial in this particular case so that you can easily differentiate it for the Newton-Raphson method, in the general case where cash flows may not all be equal or occur at regular times, the mid-point method is best.)

Using this method (I programmed it into one of my HP programmable calculators) I got a value for r of 1.014. This means that i is 1.4% per month, or 16.8% per annum. Urk. In essence, if I find a loan with an interest rate of less than 16.8%, say, a credit card, it would be advantageous to use it instead of this option from the insurance company. Or, if I had some savings at some miserable rate of 0.5%, it would be worthwhile to dip into them, pay the total premium, and then pay the “loan” back monthly.

What I’ve just calculated here, by the way, is known as the Internal Rate of Return, or IRR. It’s the effective interest rate for a series of cash flows, with internal meaning that no attention is paid to any external factors, like, say, inflation.

Now playing:
Duran Duran - Come undone
(from Duran Duran [The Wedding Album])

No Responses

Feel free to add a comment...

Leave a response

Note: some MarkDown is allowed, but HTML is not. Expand to show what's available.

•  Emphasize with italics: surround word with underscores _emphasis_
•  Emphasize strongly: surround word with double-asterisks **strong**
•  Link: surround text with square brackets, url with parentheses [text](url)
•  Inline code: surround text with backticks IEnumerable
•  Unordered list: start each line with an asterisk, space * an item
•  Ordered list: start each line with a digit, period, space 1. an item
•  Insert code block: start each line with four spaces
•  Insert blockquote: start each line with right-angle-bracket, space > Now is the time...