abhinavvathadi's picture
Initial commit for DealSight Intelligence
76562dd
Raw
History Blame Contribute Delete
1.2 kB
"""Generic evaluation harness for any pricing predictor.
Pass in a callable that maps a prompt string to a price and call
`evaluate(items)` to get back mean absolute error, RMSLE, and a hit rate
(prediction within $40 or 20% of the true price).
"""
from __future__ import annotations
import math
from collections.abc import Callable
class Tester:
def __init__(self, predictor: Callable[[str], float]) -> None:
self.predictor = predictor
def evaluate(self, items) -> dict[str, float]:
errors = []
squared_log_errors = []
hits = 0
for item in items:
prediction = max(0.0, float(self.predictor(item.test_prompt)))
actual = max(0.0, float(item.price))
error = abs(prediction - actual)
errors.append(error)
squared_log_errors.append((math.log1p(prediction) - math.log1p(actual)) ** 2)
if error < 40 or (actual and error / actual < 0.2):
hits += 1
count = len(errors) or 1
return {
"mean_absolute_error": sum(errors) / count,
"rmsle": math.sqrt(sum(squared_log_errors) / count),
"hit_rate": hits / count,
}