Discounted Cash Flow Analysis¶

BUSI 721: Data-Driven Finance I¶

Kerry Back, Rice University¶

Cash Flows¶

  • Cash inflow = positive cash flow
  • Cash outflow = negative cash flow
  • Cash inflows to a project can be redistributed elsewhere in a company or paid to shareholders or bondholders.
  • Cash outflows must be financed by running down cash balances, using cash generated elsewhere in the company, or issuing new equity or debt.

Timing¶

  • Years are periods between dates.
    • Date 0 is project inception (or first couple of months)
    • Date 1 is end of first year
    • etc.
  • Put first year's cash flows at date 1, second year's at date 2, etc.
  • Most assets and liabilities should be down to zero at project's end.
    • Collect receivables, pay payables, draw down inventory,
    • Might sell, or dispose of PP&E.
    • If it stays in the company and has value, take a credit for it in cash flows (terminal value).

Net Present Value¶

  • Suppose a project's cash flows are $-100, -20, 50, 50, 50, 80$ at years 0, 1, 2, 3, 4, 5.
  • Consider making investments yourself of $100$ and then $20$. Would you be able to withdraw $50, 50, 50$, and $80$?
  • We can answer this on a PV basis - compare PVs of deposits and withdrawals.
In [4]:
import numpy as np

r = 0.08
pv_investments = np.sum(
    np.array([100, 20]) * (1+r)**np.arange(0, -2, -1)
)
pv_withdrawals = np.sum(
    np.array([50, 50, 50, 80]) * (1+r)**np.arange(-2, -6, -1)
)
print(f"PV of investments is ${pv_investments:.2f}")
print(f"PV of withdrawals is ${pv_withdrawals:.2f}")
PV of investments is $118.52
PV of withdrawals is $173.76

Above Market Projects¶

  • The answer is no: we couldn't withdraw (50, 50, 50, 80) with investments of (100, 20).
  • If the company can do this, then it has an "above market" project.
  • It will benefit investors because it generates positive cash flows with lower investments than investors can do on their own.
  • This assumes we're using the right discount rate (interest rate). More on this later.

Positive NPV Projects¶

  • To quickly calculate whether it is an above market project, we can put all of the cash flows together in a sequence (negative for outflows) and compute the PV of the sequence.
  • Positive PV means withdrawals are high relative to investments $\rightarrow$ good project.
  • This is called the Net Present Value (NPV). It is the PV of the cash inflows net of the PV of the cash outflows.
In [3]:
cash_flows = np.array(
    [-100, -20, 50, 50, 50, 80]
)

NPV = np.sum(
    cash_flows * (1+r)**np.arange(0, -6, -1)
)
print(f"The NPV is ${NPV:.2f}")
The NPV is $55.24

Alternate Calculation¶

  • We can use the npv function from numpy-financial.
  • It assumes the first cash flow is at date 0.
  • Warning: The Excel NPV function works differently. It assumes the first cash flow is one period away.
  • In Excel, use -100 + NPV(0.08, (-20, 50, 50, 50, 80))
  • See npv.xlsx
In [5]:
import numpy_financial as npf

NPV = npf.npv(0.08, cash_flows)
print(f"The NPV is ${NPV:.2f}")
The NPV is $55.24

Internal Rate of Return¶

  • Call a project standard if cash flows are negative early and positive late.
  • Consider any standard project.
    • NPV > 0 means later positive cash flows have greater PV than negative early cash flows.
    • If we raise the discount rate, the NPV will fall.
    • The discount rate at which NPV=0 is called the Internal Rate of Return (IRR)
    • NPV > 0 if and only if IRR > discount rate.
  • Calculate with
    • npf.irr((-100, -20, 50, 50, 50, 80))
    • or, in Excel, IRR(-100, -20, 50, 50, 50, 80)