-
Geographical Analysis 6
-
Lecture1.1
-
Lecture1.2
-
Lecture1.3
-
Lecture1.4
-
Lecture1.5
-
Lecture1.6
-
-
Cap Table 3
-
Lecture2.1
-
Lecture2.2
-
Lecture2.3
-
-
Simulation 6
-
Lecture3.1
-
Lecture3.2
-
Lecture3.3
-
Lecture3.4
-
Lecture3.5
-
Lecture3.6
-
-
Search Index 8
-
Lecture4.1
-
Lecture4.2
-
Lecture4.3
-
Lecture4.4
-
Lecture4.5
-
Lecture4.6
-
Lecture4.7
-
Lecture4.8
-
-
Fund Distributions 5
-
Lecture5.1
-
Lecture5.2
-
Lecture5.3
-
Lecture5.4
-
Lecture5.5
-
Limited Partners Profit Part 1
Profit for Limited Partners¶
The profit for the limited partners will be equal to the distributions less the initial investment, management fees, and any carry.
$P = D – I – M – C $
where
$P = \text{Profit}$
$D = \text{Distributions}$
$I = \text{Initial Investment}$
$M = \text{Management Fee}$
$C = \text{Carry}$
P1 = 350-F1 - 500
P2 = 500-F2 - 500
P3 = 800-F1 - 500
print(P1)
print(P2)
print(P3)
-190.0
-40.0
260.0
IRR for Limited Partners¶
The IRR, or interal rate of return, is the return for which the present value of all cash flows equals 0. What this essentially tells you is, given the timing of cash flows, what rate of return is implied. Thus, it is the value for r that solves this equation:
$ 0 = \sum_{t=0}^{T} \frac{CF_{t}}{(1+IRR)^t}$
where
$ t = \text{Year} $
$ T = \text{Total Number of Years} $
$CF_{t} = \text{Cash flow at time t} $
This equation is derived from the fact that the NPV (net present value) is the found through the equation below, but IRR is the rate that makes it so the net present value is 0:
$ NPV = \sum_{t=0}^{T} \frac{CF_{t}}{(1+r)^t}$
Let's begin with a simple example. The cashflows in year 0 through 4, where negative cashflow means you as the investor pay, and a positive means you receive money, are: -\$100, -\\$100, \$100, \\$100, \$100. First, visualize the net present value given different discount rates.
The difference between IRR and ROI¶
ROI is simply the total earnings divided by the investment which was made an measures overall how profitable a certain investment was. The difference between this and IRR is that IRR calculates a rate that takes into account both timing of cash flows and also annualizes the rate. IRR is used to capture the idea that having cashflows earlier on has a benefit in that you are able to deploy that capital for other purposes, in the case of venture capital firms it can mean that you are able to pay distributions to limited partners who then can invest in another fund earlier leading to a higher ROI as compared to getting the cashflows later.
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams["figure.figsize"] = 9.6, 7.2
x = np.arange(0,.26,.01)
NPV = []
for r in x:
value = 0
value += -100
value += -100 / (1+r)
value += 100 / (1+r)**2
value += 100 / (1+r)**3
value += 100 / (1+r)**4
NPV.append(value)
plt.plot(x,NPV)
plt.axhline(0, color='grey', linestyle='--')
plt.xlabel("r")
plt.ylabel("NPV")
plt.title("NPV vs. r")
plt.show()
Let's formalize this into a function given yearly cash flows.
#Define the discount rate
r = .05
#Create cashflows
cash_flows = np.array([-100, -100, 100, 100, 100])
print(cash_flows)
#Represent the years
t = np.array(range(len(cash_flows)))
print()
print(t)
#Find the discount factors
df = (1 + r) ** t
print()
print(df)
[-100 -100 100 100 100]
[0 1 2 3 4]
[1. 1.05 1.1025 1.157625 1.21550625]
#With these we can discount the cashflows then sum
print(cash_flows / df)
print()
print((cash_flows / df).sum())
[-100. -95.23809524 90.70294785 86.38375985 82.27024748]
64.11885994004552
#Create a function
def find_NPV(cash_flows, t, r):
df = (1 + r) ** t
return (cash_flows / df).sum()
t = np.array(range(len(cash_flows)))
print(find_NPV(cash_flows, t, .05))
64.11885994004552
If we wanted to find the point where NPV is equal to 0, we could find the distance to 0 squared, which would provide us the minimum value when NPV is equal to 0. Mathematically, we are finding the value of:
$ (NPV-0)^2 $
which is the same as:
$ NPV^2 $
def sq_distance(r, t, cash_flows):
NPV = find_NPV(cash_flows, t, r)
return NPV ** 2
x = np.arange(0,.26,.01)
NPV_dist = []
for r in x:
NPV_dist.append(sq_distance(r, t, cash_flows))
plt.plot(x,NPV_dist)
plt.axhline(0, color='grey', linestyle='--')
plt.xlabel("r")
plt.ylabel("NPV^2")
plt.title("NPV^2 vs. r")
plt.show()
If we minimize this function, we will get back the IRR which is the rate r that makes the NPV 0! For more information on the minimize function: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
from scipy.optimize import minimize
IRR = minimize(sq_distance, .05, args=(t, cash_flows), method="Nelder-Mead")['x'][0]
print(IRR)
print()
print(find_NPV(cash_flows, t, IRR))
0.17871093750000047
0.005048637399866607