Files
LogPatternExtractor/Tester/RegressionMetricsCalculator.py
2026-05-02 18:33:38 +03:00

50 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import math
from typing import List
class RegressionMetricsCalculator:
def __init__(self):
self.errors: List[float] =[]
def add_sample(self, score: float):
"""
score: число от 0.0 до 1.0 (результат evaluate_template_similarity)
Идеал - это 1.0. Ошибка - это то, насколько мы отклонились от 1.0.
"""
# Защита от кривых значений (если вдруг score вылезет за пределы)
score = max(0.0, min(1.0, score))
error = 1.0 - score
self.errors.append(error)
def calculate(self) -> dict:
n = len(self.errors)
if n == 0:
return {}
# 1. MAE (Mean Absolute Error) - Средняя абсолютная ошибка
mae = sum(abs(e) for e in self.errors) / n
# 2. MSE (Mean Squared Error) - Среднеквадратичная ошибка
mse = sum(e**2 for e in self.errors) / n
# 3. RMSE (Root Mean Squared Error) - Корень из MSE
rmse = math.sqrt(mse)
# 4. MAPE (Mean Absolute Percentage Error) - в процентах
# Так как наше "истинное" значение всегда 1.0, деление на 1.0 ничего не меняет,
# мы просто умножаем на 100 для получения процентов.
mape = (sum(abs(e) / 1.0 for e in self.errors) / n) * 100
# 5. MAD (Mean Absolute Deviation)
# В статистике часто означает среднее отклонение от СРЕДНЕЙ ошибки
# (чтобы показать разброс ошибок вокруг их собственного среднего).
mean_error = sum(self.errors) / n
mad = sum(abs(e - mean_error) for e in self.errors) / n
return {
"MAE": round(mae, 4),
"MAPE (%)": round(mape, 2),
"MAD": round(mad, 4),
"MSE": round(mse, 6),
"RMSE": round(rmse, 4)
}