中位数绝对比例误差#
- median_absolute_scaled_error(y_true, y_pred, sp=1, horizon_weight=None, multioutput='uniform_average', **kwargs)[source]#
中位数绝对比例误差 (MdASE)。
MdASE 输出为非负浮点数。最优值为 0.0。
采用测试误差和训练绝对误差的中位数而不是平均值,使得该指标对异常误差更加鲁棒,因为中位数在存在异常值时通常是更鲁棒的中心趋势度量。
与 MASE 及其他比例性能指标一样,这个无标度指标可用于比较单个序列上或不同序列之间的预测方法。
与 MASE 类似,该指标非常适合间歇性需求序列,因为它不会产生无穷大或未定义的值,除非训练数据是扁平的时间序列。在这种情况下,函数会返回一个较大的值而不是无穷大。
适用于具有同质季节周期性的多输出(多元)时间序列数据。
- 参数:
- y_true pd.Series、pd.DataFrame 或 np.array,形状为 (fh,) 或 (fh, n_outputs),其中 fh 为预测范围
真实值(正确)目标值。
- y_pred pd.Series、pd.DataFrame 或 np.array,形状为 (fh,) 或 (fh, n_outputs),其中 fh 为预测范围
预测值。
- y_train pd.Series、pd.DataFrame 或 np.array,形状为 (n_timepoints,) 或 (n_timepoints, n_outputs),默认值为 None
观测到的训练值。
- sp int
训练数据的季节周期性。
- horizon_weight 类似数组,形状为 (fh,),默认值为 None
预测范围权重。
- multioutput {‘raw_values’, ‘uniform_average’} 或类似数组,形状为 (n_outputs,),默认值为 ‘uniform_average’
定义如何聚合多元(多输出)数据的指标。如果是类似数组,则其中的值用作平均误差的权重。如果是 ‘raw_values’,则在多输出输入的情况下返回完整的误差集。如果是 ‘uniform_average’,则所有输出的误差以均匀权重进行平均。
- 返回:
- loss float 或 ndarray of floats
MdASE 损失。如果 multioutput 为 ‘raw_values’,则为每个输出分别返回 MdASE。如果 multioutput 为 ‘uniform_average’ 或权重的 ndarray,则返回所有输出误差的加权平均 MdASE。
参考文献
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 median_absolute_scaled_error >>> y_train = np.array([5, 0.5, 4, 6, 3, 5, 2]) >>> y_true = [3, -0.5, 2, 7] >>> y_pred = [2.5, 0.0, 2, 8] >>> median_absolute_scaled_error(y_true, y_pred, y_train=y_train) 0.16666666666666666 >>> 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]]) >>> median_absolute_scaled_error(y_true, y_pred, y_train=y_train) 0.18181818181818182 >>> median_absolute_scaled_error(y_true, y_pred, y_train=y_train, multioutput='raw_values') array([0.10526316, 0.28571429]) >>> median_absolute_scaled_error( y_true, y_pred, y_train=y_train, multioutput=[0.3, 0.7]) 0.21935483870967742