赞
踩
在时间序列预测中,评价指标的多样性为模型性能的评估带来多角度的参考意义。该篇推文列举了当前已知的27种确定性预测评估指标及其Python的实现,其中Python的评估指标函数实现基于numpy库(调用方法:import numpy as np)。
- def _error(actual: np.ndarray, predicted: np.ndarray):
- """ Simple error """
- return actual - predicted
- def _percentage_error(actual: np.ndarray, predicted: np.ndarray):
- """ Percentage error """
- return (actual - predicted) / actual
- def mse(actual: np.ndarray, predicted: np.ndarray):
- """ Mean Squared Error """
- return np.mean(np.square(_error(actual, predicted)))
- def rmse(actual: np.ndarray, predicted: np.ndarray):
- """ Root Mean Squared Error """
- return np.sqrt(mse(actual, predicted))
- def nrmse(actual: np.ndarray, predicted: np.ndarray):
- """ Normalized Root Mean Squared Error """
- return rmse(actual, predicted) / (actual.max() - actual.min())
- def me(actual: np.ndarray, predicted: np.ndarray):
- """ Mean Error """
- return np.mean(_error(actual, predicted))
- def mae(actual: np.ndarray, predicted: np.ndarray):
- """ Mean Absolute Error """
- return np.mean(np.abs(_error(actual, predicted)))
- def mdae(actual: np.ndarray, predicted: np.ndarray):
- """ Median Absolute Error """
- return np.median(np.abs(_error(actual, predicted)))
- def mpe(actual: np.ndarray, predicted: np.ndarray):
- """ Mean Percentage Error """
- return np.mean(_percentage_error(actual, predicted))
- def mape(actual: np.ndarray, predicted: np.ndarray):
- """
- Mean Absolute Percentage Error
- Properties:
- + Easy to interpret
- + Scale independent
- - Biased, not symmetric
- - Undefined when actual[t] == 0
- Note: result is NOT multiplied by 100
- """
- return np.mean(np.abs(_percentage_error(actual, predicted)))
- def mdape(actual: np.ndarray, predicted: np.ndarray):
- """
- Median Absolute Percentage Error
- Note: result is NOT multiplied by 100
- """
- return np.median(np.abs(_percentage_error(actual, predicted)))
- def smape(actual: np.ndarray, predicted: np.ndarray):
- """
- Symmetric Mean Absolute Percentage Error
- Note: result is NOT multiplied by 100
- """
- return np.mean(2.0 * np.abs(actual - predicted) / ((np.abs(actual) + np.abs(predicted)) + EPSILON))
- def smdape(actual: np.ndarray, predicted: np.ndarray):
- """
- Symmetric Median Absolute Percentage Error
- Note: result is NOT multiplied by 100
- """
- return np.median(2.0 * np.abs(actual - predicted) / (np.abs(actual) + np.abs(predicted)))
- def maape(actual: np.ndarray, predicted: np.ndarray):
- """
- Mean Arctangent Absolute Percentage Error
- Note: result is NOT multiplied by 100
- """
- return np.mean(np.arctan(np.abs((actual - predicted) / actual))
- def mase(actual: np.ndarray, predicted: np.ndarray, seasonality: int = 1):
- """
- Mean Absolute Scaled Error
- Baseline (benchmark) is computed with naive forecasting (shifted by @seasonality)
- """
- return mae(actual, predicted) / mae(actual[seasonality:], _naive_forecasting(actual, seasonality))
- def std_ae(actual: np.ndarray, predicted: np.ndarray):
- """ Normalized Absolute Error """
- __mae = mae(actual, predicted)
- return np.sqrt(np.sum(np.square(_error(actual, predicted) - __mae))/(len(actual) - 1))
- def std_ape(actual: np.ndarray, predicted: np.ndarray):
- """ Normalized Absolute Percentage Error """
- __mape = mape(actual, predicted)
- return np.sqrt(np.sum(np.square(_percentage_error(actual, predicted) - __mape))/(len(actual) - 1))
- def rmspe(actual: np.ndarray, predicted: np.ndarray):
- """
- Root Mean Squared Percentage Error
- Note: result is NOT multiplied by 100
- """
- return np.sqrt(np.mean(np.square(_percentage_error(actual, predicted))))
- def rmdspe(actual: np.ndarray, predicted: np.ndarray):
- """
- Root Median Squared Percentage Error
- Note: result is NOT multiplied by 100
- """
- return np.sqrt(np.median(np.square(_percentage_error(actual, predicted))))
- def rmsse(actual: np.ndarray, predicted: np.ndarray, seasonality: int = 1):
- """ Root Mean Squared Scaled Error """
- q = np.abs(_error(actual, predicted)) / mae(actual[seasonality:], _naive_forecasting(actual, seasonality))
- return np.sqrt(np.mean(np.square(q)))
- def inrse(actual: np.ndarray, predicted: np.ndarray):
- """ Integral Normalized Root Squared Error """
- return np.sqrt(np.sum(np.square(_error(actual, predicted))) / np.sum(np.square(actual - np.mean(actual))))
- def rrse(actual: np.ndarray, predicted: np.ndarray):
- """ Root Relative Squared Error """
- return np.sqrt(np.sum(np.square(actual - predicted)) / np.sum(np.square(actual - np.mean(actual))))
- def mre(actual: np.ndarray, predicted: np.ndarray, benchmark: np.ndarray = None):
- """ Mean Relative Error """
- return np.mean(_relative_error(actual, predicted, benchmark))
- def rae(actual: np.ndarray, predicted: np.ndarray):
- """ Relative Absolute Error (aka Approximation Error) """
- return np.sum(np.abs(actual - predicted)) / (np.sum(np.abs(actual - np.mean(actual))) + EPSILON)
- def mrae(actual: np.ndarray, predicted: np.ndarray, benchmark: np.ndarray = None):
- """ Mean Relative Absolute Error """
- return np.mean(np.abs(_relative_error(actual, predicted, benchmark)))
- def mdrae(actual: np.ndarray, predicted: np.ndarray, benchmark: np.ndarray = None):
- """ Median Relative Absolute Error """
- return np.median(np.abs(_relative_error(actual, predicted, benchmark)))
- def mda(actual: np.ndarray, predicted: np.ndarray):
- """ Mean Directional Accuracy """
- return np.mean((np.sign(actual[1:] - actual[:-1]) == np.sign(predicted[1:] - predicted[:-1])).astype(int))
以上就是本次分享的所有内容,如果你觉得文章还不错,欢迎关注公众号:Python编程学习圈,每日干货分享,发送“J”还可领取大量学习资料,内容覆盖Python电子书、教程、数据库编程、Django,爬虫,云计算等等。或是前往编程学习网,了解更多编程技术知识。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。