Posted on July 10, 2012 @ 05:00:00 AM by Paul Meagher
Lately I've been researching formal methods that might be used to decide whether to invest in a project or not. Three commonly used metrics are:
 Payback Period
 Net Present Value (NPV)
 Internal Rate of Return (IRR)
To compute these values, you need to specify a cashflow sequence where the first element in the cashflow sequence is a negative number denoting the investment amount. The next elements in the cashflow sequence are the net income amounts for year 1, year 2, up to year N. An example of a cashflow sequence would be:
year 0 1 2 3
cashflow 10,000 6,000 6,000 6,000
A cashflow sequence like this would be sufficient to compute the payback period for an investment, which is simply the number of years it would take to earn back your initial investment. In this case, the payback period would be 1.67 years which is one useful investment metric to know when evaluating an investment opportunity.
The nice thing about payback period metric is that it is simple number to understand. One problem, however, with this metric is that it does not take into account the time value of money, or the idea that money in your pocket today is worth more than the same amount in your pocket a year from now (because money in your pocket today could be earning interest and be worth more a year from now). The Net Present Value calculation includes a discount rate factor that takes the time value of money into account.
The Net Present Value calculation involves computing the present values of a cashflow sequence given a discount rate. If you have a discount rate of, say, 5%, then the $6000 you estimate that you might earn a year from now, would be equivalent to a present value of $5714.4 (plus a year earning interest at 5%). You compute the present value of each projected cashflow, sum them up, and subtract it from your initial investment. If this "net present value" is greater than 0 than you should consider proceeding with the investment. If the net is less than 0, don't invest. NPV gives you simple rule for making a an investment decision, and the size of the NPV allows you to more accurately gauge how good the investment is because it takes into account the time value of money via a discount rate that you specify.
While technically the rate you enter into the NPV formula is a "discount rate", you can also construe the rate as the percent profit you would want to make in order for the project to be worth your while. As you increase the percent profit you would like to make, the NPV value returned will be smaller and smaller. You can keep increasing the profit percentage until you get an NPV of 0. The profit percentage that gets you an NPV of 0 is called the Internal Rate of Return (IRR) and is another useful number for deciding whether you should invest in a project or not. Obviously, the higher the IRR the better the investment. It is also a useful metric for comparing investment opportunities in an applestoapples manner.
Enough theory. How to do we actually compute these investment metrics?
Rather than trot out a bunch of formulas, I will instead trot out a bunch of PHP code that computes these investment metrics:
<?php
/** * A set of functions for quick financial analysis of an investment * opportunity and a series of projected cashflows. * * For further details and pros/cons of each function please refer * to the respective wikipedia page: * * payback_period * http://en.wikipedia.org/wiki/Payback_period * * net present value * http://en.wikipedia.org/wiki/Net_present_value * * internal rate of return * http://en.wikipedia.org/wiki/Internal_rate_of_return */
/** * The total present value of a time series of cash flows. */ function npv($rate, $cashflows) { $total = 0.0; foreach ($cashflows AS $i=>$cashflow) $total += $cashflow / pow(1 + $rate, $i); return sprintf("%01.2f", $total); }
/** * The IRR or Internal Rate of Return is the annualized effective * compounded return rate which can be earned on the invested * capital, i.e., the yield on the investment. */ function irr($cashflows, $iterations=100) { $rate = 1.0; $investment = $cashflows[0]; for ($i=1; $i <= ($iterations+1); $i++) $rate *= (1  npv($rate, $cashflows) / $investment); return sprintf("%01.2f", $rate * 100); }
/** * The payback period refers to the length of time required * for an investment to have its initial cost recovered. */ function payback($cashflows) { $investment = array_shift($cashflows); if ($investment < 0) $investment = 1 * $investment; return sprintf("%01.2f", payback_of_investment($investment, $cashflows)); }
function payback_of_investment($investment, $cashflows) { $total = 0.0; $years = 0.0; $cumulative = array(); if ( (count($cashflows)==0) OR (array_sum($cashflows) < $investment) ) die("insufficient cashflows"); foreach($cashflows AS $cashflow) { $total += $cashflow; if ($total < $investment) $years += 1; $cumulative[] = $total; } $A = $years; $B = $investment  $cumulative[$years1]; $C = $cumulative[$years]  $cumulative[$years1]; return $A + ($B/$C); }
?>
This code is a port of some python code found here.
To test drive these functions we can create a test script:
<?php
// Include our investment analysis functions include "investment_analysis.php";
// Rate used to discount future cashflows to their present values (also // can think of this as the desired profit percentage). $rate = 0.05;
// The cashflow value at index 0 is the investment amount (always a negative value) // The cashflow value at index 1 to N can be positive (net inflows) or // negative (net outflows). $cashflows = array(10000, 6000, 6000, 6000);
// Now feed these parameters into the three investment functions we discussed $payback = payback($cashflows); $npv = npv($rate, $cashflows); $irr = irr($cashflows);
// Output the results echo "Payback is $payback years<br />"; echo "NPV is $ $npv<br />"; echo "IRR is $irr%<br />";
?>
The output of this script looks like this:
Payback is 1.67 years
NPV is $ 6339.49
IRR is 36.31%
Each of these numbers gives us a different perspective on a potential investment and together provides a useful set of formal metrics for analyzing the worthiness of an investment opportunity.
