【问题标题】:Evaluation of Forecasting performance Metric on original or transformed Dependent Variable评估原始或转换后因变量的预测性能指标
【发布时间】:2018-12-06 01:36:12
【问题描述】:
我正在构建一个机器学习模型来预测 scikit-learn 中的未来价格。因变量价格不是正态分布的,因此,我将使用np.log(price) 仅对因变量price 执行对数转换。在此之后,我会将完整的数据集拆分为训练集和测试集。因此y_train 和y_test 现在都是对数转换后的价格。在机器学习模型拟合之后,我必须计算拟合模型的预测性能指标,例如 MAPE 误差。
- 在使用
np.exp() 为model.predict 方法和y_test 设置计算MAPE 之前,是否应将数据(price) 转换回其原始比例?
- 或者我们应该首先将数据拆分为训练和测试,仅对训练集
y_train 应用对数变换,然后对model.prediction 集应用逆变换。因此,y_test set (original) 和np.exp(model.predict()) 将用于计算 MAPE
- 或者 MAPE 或 MAE 指标的值与响应变量
y 的缩放无关,并且 MAPE 可以使用因变量价格的转换对数值来报告?
【问题讨论】:
标签:
python
logging
machine-learning
transformation
metrics
【解决方案1】:
我想说,在您的情况下,有必要缩减到真实价格。这不是一个绝对的陈述,但实际上取决于您的问题的设置:如果您的真实价格为“1”,那么它的日志将为“0”,并且,无论您预测该单点,您都会得到未定义/无限的 MAPE。所以我会说是的,至少在做之前把它缩小到 exp。
我也不明白“1”和“2”之间的区别:它们看起来和我一样,在“1”中,你只是记录测试集的价格,然后再次获取 exp ,在“2”中,您只是避免执行这两个操作...
至于“3”,不,它们绝对不是独立于所有转换 - 特别是不是日志。 MAPE 仅独立于通过一个常数因子重新缩放数据,MAE 通过将其移动一个常数加数。
在这一点上,请注意,没有任何衡量标准可以给出完美的事实,并且仅应用它们可能会得到非常糟糕的结果。例如,使用 MAPE,如果你有一个价格为 1 美分的东西,你估计它是 1 美元,你会给它同样的(巨大的)错误,就好像它的价格是 1000 美元,你估计它是 100k .另一方面,由于您在训练中记录日志,这与您用于训练模型的规则基本相同,因此它可能不是灾难性的。请注意,如果您的真实价格非常接近 0,或者更糟的是 0。
(在这种情况下,MAE 可能更糟,因为它基本上会将所有权重放在数据库中少数非常昂贵的项目上,但我不能从这里肯定地说)