sprint-econtai/archive/loss.py
Félix Dorn 43076bcbb1 old
2025-07-15 00:41:05 +02:00

24 lines
729 B
Python

def calc_loss(df):
"""
Geometric-mean log error between prediction bands and golden bands.
Assumes all columns are strictly positive.
Parameters
----------
df : pandas.DataFrame
Must contain the columns:
- 'pred_lower', 'pred_upper'
- 'golden_lower', 'golden_upper'
Returns
-------
float
Scalar loss value (the smaller, the better).
"""
# Element-wise absolute log-ratios
loss_lower = np.abs(np.log(df["pred_lower"] / df["golden_lower"]))
loss_upper = np.abs(np.log(df["pred_upper"] / df["golden_upper"]))
# Average the two means, then exponentiate
loss = np.exp(0.5 * (loss_lower.mean() + loss_upper.mean()))
return loss