NumPy: метод финансового irr возвращает 'nan'. Зачем?
Когда я рассчитываю внутреннюю норму прибыли (IRR), используя метод NumPy irr
, Я получил nan
как возвращение.
In [45]: numpy.irr([-10, 2, 2, 2, 2])
Out[45]: nan
Разве результаты не должны быть хотя бы отрицательными? Допустим, -8%? Когда я попытался лучше понять реализацию, я посмотрел на основную ветку репозитория NumPy, но реализация не имела для меня никакого смысла.
Комментарии и приведенная литература не помогают понять, при каких условиях nan
выпущен. Когда я вычисляю IRR с другой программой, я получаю -8%.
Почему NumPy возвращается nan
для массива выше?
2 ответа
Если вы посмотрите на реализацию этой функции, она только ищет решения для IRR в пределах (0, 1]. Это потому, что уравнение может иметь несколько решений, и поэтому остается только правильное. Здесь это скорее (IMO) плохой выбор реализации, потому что IRR, безусловно, может выходить за пределы этого диапазона и все еще быть полностью действительным. В вашем случае я бы предложил написать собственную функцию (в соответствии с существующей), которая будет делать то, что вам нужно.
Просто небольшая поправка к предыдущему ответу. Реализация не ограничивает IRR до (0,1), она ограничивает 1/(1+IRR) до (0,1]. Это ограничивает IRR до [0,+Inf). Это все еще неполная реализация, потому что она возвращает NaN для денежных потоков, у которых IRR меньше 0 (т. е. инвестор потерял деньги). Правильный диапазон для IRR - (-1,+Inf). Однако коррекция не является тривиальной, поскольку NPV(ставка) может иметь более один ноль, но он будет иметь не более одного пересечения нуля, где скорость больше нуля. Таким образом, ограничение диапазона до [0,+inf) по мере реализации функции означает, что вы потерпите неудачу на отрицательных IRR, но также никогда не будете иметь дело с несколькими корни возвращаются.
В качестве примечания: если вам интересно поведение NPV(скорость), он приближается к + Inf или -Inf, когда скорость приближается к -1. Знак бесконечности, к которому он приближается, совпадает со знаком конечного денежного потока. С другой стороны, когда ставка приближается к +Inf, NPV асимптотически приближается к значению начального денежного потока в серии (обычно это отрицательный денежный поток). При ставке = ноль значение NPV является суммой денежных потоков.