in kats/utils/backtesters.py [0:0]
def calc_error(self) -> Optional[float]:
"""
Calculates all errors in `self.error_methods` and stores them in the
errors dict.
Returns:
The error value. None if the error value does not exist.
"""
logging.info("Calculating Errors")
if len(self.results) <= 0:
logging.error("Empty forecast")
raise ValueError("No results from forecast")
# Storing total length of predictions for weighting fold errors
total_fold_length = sum(result[1].size for result in self.results)
for result in self.results:
if len(result) != 4:
logging.error("Invalid result: {0}".format(result))
raise ValueError("Invalid result")
training_inputs, truth, _, predictions = result
# Storing raw errors
self.raw_errors.append(truth - predictions)
if training_inputs.size <= 0:
logging.error("No training data provided ")
raise ValueError("Not enough training data")
if predictions.size <= 0:
logging.error("No predictions provided")
raise ValueError("Not enough predictions")
if truth.size <= 0:
logging.error("No ground truth data provided")
raise ValueError("Not enough ground truth data")
if predictions.size != truth.size:
logging.error("Unequal amount of labels and predictions")
raise ValueError("Incorrect dimensionality of predictions & labels")
diffs = np.abs(truth - predictions)
for error_type in self.error_methods:
# Weighting the errors by the relative fold length if
# predictions are of different sizes
self.errors[error_type] = (
self.errors[error_type]
+ (
self.error_funcs[error_type](
training_inputs, predictions, truth, diffs
)
)
* float(len(truth))
/ total_fold_length
)