平均绝对标度误差#

mean_absolute_scaled_error(y_true, y_pred, sp=1, horizon_weight=None, multioutput='uniform_average', **kwargs)[源]#

平均绝对标度误差 (MASE)。

MASE 输出是非负浮点数。最优值为 0.0。

与其他标度性能指标类似,这种无标度误差指标可用于比较单个序列上的预测方法,也可用于比较不同序列之间的预测精度。

该指标非常适合间歇性需求序列,因为它不会产生无穷大或未定义的值,除非训练数据是平坦的时间序列。在这种情况下,函数会返回一个大值而不是无穷大。

适用于具有同质季节周期的多输出(多变量)时间序列数据。

参数:
y_truepd.Series, pd.DataFrame 或 np.array,形状为 (fh,) 或 (fh, n_outputs),其中 fh 是预测期

真实(正确)目标值。

y_predpd.Series, pd.DataFrame 或 np.array,形状为 (fh,) 或 (fh, n_outputs),其中 fh 是预测期

预测值。

y_trainpd.Series, pd.DataFrame 或 np.array,形状为 (n_timepoints,) 或 (n_timepoints, n_outputs),默认值为 None

观察到的训练值。

spint

训练数据的季节周期性。

horizon_weightarray-like,形状为 (fh,),默认值为 None

预测期权重。

multioutput{‘raw_values’, ‘uniform_average’} 或 array-like,形状为 (n_outputs,),默认值为 ‘uniform_average’

定义如何为多变量(多输出)数据聚合指标。如果是 array-like,则其值用作权重来平均误差。如果是 ‘raw_values’,则在多输出输入的情况下返回完整的误差集。如果是 ‘uniform_average’,则所有输出的误差将以 uniform 权重进行平均。

返回值:
lossfloat 或 ndarray of floats

MASE 损失。如果 multioutput 是 ‘raw_values’,则为每个输出单独返回 MASE。如果 multioutput 是 ‘uniform_average’ 或 ndarray 权重,则返回所有输出误差的加权平均 MASE。

参考文献

Hyndman, R. J and Koehler, A. B. (2006). “Another look at measures of forecast accuracy”, International Journal of Forecasting, Volume 22, Issue 4.

Hyndman, R. J. (2006). “Another look at forecast accuracy metrics for intermittent demand”, Foresight, Issue 4.

Makridakis, S., Spiliotis, E. and Assimakopoulos, V. (2020) “The M4 Competition: 100,000 time series and 61 forecasting methods”, International Journal of Forecasting, Volume 3.

示例

>>> import numpy as np
>>> from sktime.performance_metrics.forecasting import mean_absolute_scaled_error
>>> y_train = np.array([5, 0.5, 4, 6, 3, 5, 2])
>>> y_true = np.array([3, -0.5, 2, 7, 2])
>>> y_pred = np.array([2.5, 0.0, 2, 8, 1.25])
>>> mean_absolute_scaled_error(y_true, y_pred, y_train=y_train)
0.18333333333333335
>>> y_train = np.array([[0.5, 1], [-1, 1], [7, -6]])
>>> y_true = np.array([[0.5, 1], [-1, 1], [7, -6]])
>>> y_pred = np.array([[0, 2], [-1, 2], [8, -5]])
>>> mean_absolute_scaled_error(y_true, y_pred, y_train=y_train)
0.18181818181818182
>>> mean_absolute_scaled_error(y_true, y_pred, y_train=y_train,     multioutput='raw_values')
array([0.10526316, 0.28571429])
>>> mean_absolute_scaled_error(y_true, y_pred, y_train=y_train,     multioutput=[0.3, 0.7])
0.21935483870967742