Source code for test_suite.benchmarks.criteria

import numpy as np
import logging
logger = logging.getLogger('traveltimes')


[docs]def mean_absolute_percentage_error(y_true, y_pred): _mape = np.mean(np.abs((y_true - y_pred) / y_true)) * 100 logger.debug("[Cost function] MAPE: %s.", _mape) return _mape
[docs]def root_mean_squared_logarithmic_error(y_true, y_pred): _pow = np.power(np.log(y_pred + 1) - np.log(y_true + 1), 2) return np.sqrt(np.mean(_pow))
[docs]def mean_absolute_error(y_true, y_pred): _abs = np.abs(y_true - y_pred) return np.mean(_abs)
[docs]def root_mean_squared_error(y_true, y_pred): _abs = np.power(y_true - y_pred, 2) return np.sqrt(np.mean(_abs))
################################################################### ###################################################################
[docs]def camea_custom_error(y_true, y_pred): diff = y_true - y_pred # insensivity band score = np.array(list(map(_insensivity, diff, y_true))) return np.mean(score)
def _insensivity(val, y_true): abs_val = abs(val) rel_val = abs_val/y_true*100 if abs_val < 60: return 0 elif rel_val < 5: return _penalize(val, 1.5, 1) elif rel_val < 10: return _penalize(val, 2, 1.25) elif rel_val < 20: return _penalize(val, 2.5, 1.25) else: return _penalize(val, 3, 1.5) def _penalize(val, positive_penalty, negative_penalty): if val > 0: return val**positive_penalty return abs(val)**negative_penalty ################################################################### ###################################################################
[docs]def camea_custom_error_v2(y_true, y_pred): tt_free = np.percentile(y_true, 10) tt_free = [tt_free] * len(y_true) out = list(map(_camea_err, y_pred, y_true, tt_free)) res = sum(map(lambda x: x if x >= 0.1 else 0, out)) # res = sum(out) return res
def _camea_err(tt_calculated, tt_real, tt_free): p = 0.5 * (tt_calculated - tt_real) if tt_real < tt_calculated else (tt_real - tt_calculated) p2_maxmin = min(298, max(120, 0.15 * max(1, abs(tt_free - tt_real)))) p3_maxmin = min(600, max(300, 0.5 * max(1, abs(tt_free - tt_real)))) q = p < p2_maxmin r1 = 0.1 * p / p2_maxmin p3_q = p < p3_maxmin p3_r1 = 1 - 0.9 * (p - p3_maxmin) / (p2_maxmin - p3_maxmin) r2 = p3_r1 if p3_q else 1 r = r1 if q else r2 return r