24 lines
729 B
Python
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
|