Python Pandas: написать функцию для быстрого расчета MAPE - PullRequest
1 голос
/ 25 апреля 2020

Я подготовил кадр данных, который выглядит следующим образом:

+------------+--------+-----------+
| Date       | Actual | Predicted |
+------------+--------+-----------+
| 2020-01-01 | XX     | XX        |
+------------+--------+-----------+
| 2020-01-02 | XX     | XX        |
+------------+--------+-----------+
| 2020-01-03 | XX     | XX        |
+------------+--------+-----------+
| 2020-01-04 | XX     | XX        |
+------------+--------+-----------+
| 2020-01-05 | XX     | XX        |
+------------+--------+-----------+
| 2020-01-06 | XX     | XX        |
+------------+--------+-----------+
| ...        | ...    | ...       |
+------------+--------+-----------+

MAPE = [Σ (| Actual - Predicted | / Actual)] / * 100 / N
(формула также доступна здесь: https://ibf.org/knowledge/glossary/mape-mean-absolute-percentage-error-174)

N будет количество строк.

Сейчас я делаю очень ручной труд, добавив дополнительный столбец, который вычисляет | Actual - Predicted |, еще один столбец, который вычисляет (| Actual - Predicted | / Actual), и затем суммирую вверх по этому столбцу, умножьте на 100, а затем разделите на количество строк.

Мне интересно, есть ли для меня более элегантный способ сделать это, написав функцию, которая поможет мне автоматизировать этот процесс вычисления MAPE .

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

Большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 25 апреля 2020

Это действительно, как вы бы это сделали. Однако вы можете объединить свои операции:

df['MAPE'] = ((df.Actual-df.Predicted).abs()
                 .div(df.Actual)
                 .cumsum()
                 /np.arange(1,len(df)+1)
             )

Тестовые данные и вывод:

   Actual  Predicted      MAPE
0      10          5  0.500000
1      11          6  0.477273
2      12          7  0.457071
3      13          8  0.438957
4      14          9  0.422594
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...