2016-06-28 7 views
0

Использование pandas/numpy, иногда я получаю сообщение об ошибке с плавающей точкой при попытке вычислить стандартное отклонение:FloatingPointError при вычислении стандартного отклонения?

FloatingPointError: invalid value encountered in less

Мой код выглядит примерно так:

def historical_volatility(p): 
    return p.pct_change().ewm(span=35, min_periods=35).std() 

Это только DataFrames поплавков собирается в.

Я понимаю, что по техническим причинам, связанным с тем, как стандартное отклонение вычисляется вычислительно, ситуации с особенно низким отклонением приведут к плавающей точке ошибка.

Как я могу сделать это более надежным?

P.S. Допустимо устанавливать «минимальное значение» для низкой волатильности; результат 0 был бы плохим, поскольку я впоследствии делясь на эти числа.

+0

Вы можете предоставить образец, который воспроизводит эту ошибку? – piRSquared

+0

Я не знаю pandas/numpy, но вы можете использовать десятичное вместо float? Он медленнее, но может быть более точным как компромисс –

ответ

0

Вычисление стандартного отклонения, вероятно, предполагает выполнение квадратного корня дисперсии. Последнее может быть отрицательным только в случае потери точности. Если это так, вам, вероятно, все равно, если ваша дисперсия имеет порядок 1е-16 или ноль. Если вы это сделаете, вам, скорее всего, придется использовать расширенную точность (не просто) или переключиться на десятичную арифметику.

Смежные вопросы