两个 MAPE 公式返回不同的输出

问题描述 投票:0回答:0

我在 Python 中创建了两个不同的 MAPE 公式:

error1 = abs((df['y_hat'] - df2['y_predicted']) / df['y_hat'])
mape1 = np.mean(error1)
mape_percentage1 = mape1 * 100
print("MAPE: {:.2f}%".format(mape_percentage1))

error2 = abs((df1.sum() - df2.sum()) / df1.sum())
mape2 = np.mean(error2)
mape_percentage2 = mape2 * 100
print("MAPE: {:.2f}%".format(mape_percentage2))

(是的,我知道 np.mean(error2) 对第二个公式没有任何作用,但为了相似起见我添加了它。)

作为参考,这是我正在尝试评估的模型的简化版本:

import pandas as pd
import numpy as np
from statsmodels.tsa.holtwinters import ExponentialSmoothing
df = pd.read_csv('data.csv', index_col=0, parse_dates=True)
data = df[:-7]
actuals = df[-7:]
model = ExponentialSmoothing(data['Sales'], trend='add', seasonality='add', seasonal_periods=7).fit()
fcast=model.forecast(steps=7)

我使用的是第二个公式,因为我不能使用第一个,因为 fcast 是作为一个系列返回的,所以当我尝试使用第一个时,我得到的是 NaN。然后当我意识到我可以使用 .to_frame() 将 fcast 系列转换为数据帧时,我再次尝试了第一个公式,结果得到了一个截然不同的 MAPE(第二个公式的 MAPE 是 .32,而第一个是15.12).

此外,我使用的数据有一个日期时间索引,然后有 1 列历史数据,并且预测以相同的方式返回。

理论上,公式不一样吗?

第一个公式是对每一行进行计算然后取平均值,而第二个公式是一次对整个数据帧进行计算。

例如,如果我有一个数据框,其中的实际值列为:

|索引(日期) |实际情况 |

| ---------- | ------|

| 2020-1-1 | 100 |

| 2020-1-2 | 100 |

| 2020-1-3 | 100 |

和预测值为的数据框:

|索引(日期) |实际情况 |

| ---------- | ------|

| 2020-1-1 | 98 |

| 2020-1-2 | 77 |

| 2020-1-3 | 86 |

然后使用这些公式计算MAPE:

公式一:

100 - 98 = 2

100 - 77 = 23

100 - 86 = 14

2/100 = .02

23/100 = .23

14/100 = .14

.02+.23+.14 = .4

.4/3 = .13

公式2:

100 + 100 + 100 = 300

98 + 77 + 86 = 261

300 - 261 = 39

39/300 = .13

它最终是相同的值。

另外,如果问题的格式很奇怪,我深表歉意。我根据他们的指南正确格式化了它,但出于某种原因,stackoverflow 不允许我发布它,尝试了一个多小时,这是他们接受的格式。

python statistics forecasting
© www.soinside.com 2019 - 2024. All rights reserved.