MAPE производит inf как вывод - PullRequest
0 голосов
/ 15 марта 2020

Я использую MAPE metri c для моей модели линейной регрессии. Вывод: inf.

Код выглядит следующим образом:

import numpy as nm

def MAPE(a, b):
    mape = nm.mean(nm.abs((a - b) / a)) * 100
    return mape

MAPE(data.iloc[:, 1], pre)

pre - это переменная, хранящая прогнозируемое значение.

Может кто-нибудь подсказать, что глюк в этом?

1 Ответ

0 голосов
/ 15 марта 2020

Как правильно написал @filbranden в своем комментарии - когда любое из ваших реальных значений равно нулю, ваш код возвращает inf из-за нулевого деления. Взгляните на мой простой тест с различными реальными и прогнозируемыми значениями для вычисления MAPE. Вот pandas.DataFrame с именем data:

data = pd.DataFrame(
    {
        'real_1': [100, 100, 100, 100, 100],
        'real_2': [100, 100, 100, 100, pd.np.nan],
        'real_3': [100, 100, 100, 100, 0],
        'pred_1': [110, 130, 120, 105, 100],
        'pred_2': [110, 130, 120, pd.np.nan, 100],
        'pred_3': [110, 130, 120, 105, pd.np.nan],
    }
)
print(data)
   real_1  real_2  real_3  pred_1  pred_2  pred_3
0     100   100.0     100     110   110.0   110.0
1     100   100.0     100     130   130.0   130.0
2     100   100.0     100     120   120.0   120.0
3     100   100.0     100     105     NaN   105.0
4     100     NaN       0     100   100.0     NaN

Я использовал вашу MAPE(a, b) функцию для вычисления MAPE.

for real_val_col in ['real_1', 'real_2', 'real_3']:
    for pred_val_col in ['pred_1', 'pred_2', 'pred_3']:
        real_val = data[real_val_col]
        pred_val = data[pred_val_col]
        print(f'- MAPE for {real_val_col} and {pred_val_col}: {MAPE(real_val, pred_val):.2f} %')

А вот и результат теста. Вы можете видеть, что MAPE равен inf во всех случаях, когда программе приходилось делить не пропущенное значение на ноль.

- MAPE for real_1 and pred_1: 13.00 %
- MAPE for real_1 and pred_2: 15.00 %
- MAPE for real_1 and pred_3: 16.25 %
- MAPE for real_2 and pred_1: 16.25 %
- MAPE for real_2 and pred_2: 20.00 %
- MAPE for real_2 and pred_3: 16.25 %
- MAPE for real_3 and pred_1: inf %
- MAPE for real_3 and pred_2: inf %
- MAPE for real_3 and pred_3: 16.25 %
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...