Pregunta

When I calculate the Internal Rate of Return (irr) using the numpy method irr, I receive nan as return.

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

Shouldn't the results be at least negative? Let's say -8%? When I tried to understand the implementation better, I looked at the master branch of the NumPy repository, but the implementation did not make any sense to me.

The comments and the given literature do not help to understand under which condition nan is issued. When I calculate the irr with another program, I get -8% returned.

Why is NumPy returning nan for the array above?

¿Fue útil?

Solución 2

Si miras en el implementación de esta función, solo busca soluciones para TIR dentro (0, 1]. Esto se debe a que la ecuación puede tener varias soluciones y, por lo tanto, solo queda una válida. Aquí es una opción de implementación más bien (OMI), porque IRR IRR Ciertamente puede estar fuera de este rango y seguir siendo perfectamente válido. En su caso, sugeriría escribir su propia función (en la línea del existente), lo que hará lo que necesita.

Otros consejos

Solo una pequeña corrección a la respuesta anterior. La implementación no limita la TIR a (0,1], limita 1/(1+IRR) a (0,1]. Eso limita la IRR a [0,+Inf). Todavía es una implementación incompleta porque devuelve Nan para flujos de efectivo que tienen una TIR inferior a 0 (es decir, el inversor perdió dinero). El rango correcto para IRR es (-1,+inf). Sin embargo, la corrección no es trivial, porque el VPN (tasa) puede tener más que uno cero, pero no tendrá más de un cruce cero donde la velocidad es mayor que cero. Por lo tanto, limitar el rango a [0,+inf), ya que la función se implementa significa que falla en la TIR negativa, pero que nunca tiene que lidiar con múltiples Las raíces son devueltas.

Como nota al margen, si tiene curiosidad sobre el comportamiento del VPN (tasa), se acerca a +inf o -inf como enfoques de velocidad -1. El signo del infinito que se acerca es el mismo que el signo del flujo de efectivo final. En el otro extremo, a medida que se acerca la tasa +INF, el VPV se acerca asintóticamente el valor del flujo de efectivo inicial en la serie (generalmente un flujo de efectivo negativo). A tasa = cero, el valor del VPN es la suma de los flujos de efectivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top