7

当我使用 numpy 方法计算内部收益率 (irr) 时irr,我收到nan了回报。

In [45]: numpy.irr([-10, 2, 2, 2, 2])
Out[45]: nan

结果不应该至少是负面的吗?比方说-8%?当我试图更好地理解实现时,我查看了 NumPy 存储库的 master 分支,但实现对我来说没有任何意义。

评论和给定的文献无助于理解在什么条件下nan发布。当我用另一个程序计算 irr 时,我得到了 -8% 的回报。

为什么 NumPy 返回nan上面的数组?

4

2 回答 2

6

如果你查看这个函数的实现,它只会在 (0, 1] 内寻找 IRR 的解。这是因为方程可以有多个解,所以只剩下一个有效的解。这里是一个相当 (IMO)糟糕的实现选择,因为 IRR 当然可以超出这个范围并且仍然完全有效。

于 2013-11-06T23:33:38.067 回答
6

只是对上一个答案的一个小修正。该实现不将 IRR 限制为 (0,1],它将 1/(1+IRR) 限制为 (0,1]。这将 IRR 限制为 [0,+Inf)。它仍然是一个不完整的实现,因为它返回 NaN对于 IRR 小于 0 的现金流(即投资者亏损)。IRR 的正确范围是 (-1,+Inf)。然而,修正并非微不足道,因为 NPV(rate) 可以超过一个零,但在比率大于零的情况下不会超过一个零交叉。因此,在实现该函数时将范围限制为 [0,+inf) 意味着您在负 IRR 上失败,但也不必处理多个根被归还。

作为旁注,如果您对 NPV(rate) 的行为感到好奇,它会在 rate 接近 -1 时接近 +Inf 或 -Inf。它接近的无穷大的符号与最终现金流的符号相同。另一方面,当利率接近 +Inf 时,NPV 逐渐接近系列中初始现金流的值(通常为负现金流)。在 rate = 0 时,NPV 的值是现金流的总和。

于 2014-01-16T00:24:29.573 回答