Coverage for uqmodels/evaluation/evaluation.py: 24%
55 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-05 14:29 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-05 14:29 +0000
1import numpy as np
3import uqmodels.evaluation.base_metrics as metrics
4from uqmodels.utils import compute_born
6# Evaluation anaylsis :
9def var_explain(y, pred, var_A, var_E, set_):
10 for n in list(set(set_)):
11 flag_set = set_ == n
12 if set_.sum() == 0:
13 print(n, "%data", 0)
14 return [0, 0, 0, 0, 0, 0]
15 w = flag_set.mean()
16 y_ = y[flag_set]
17 y_b = np.mean(y[flag_set])
18 y_h = pred[flag_set]
19 va = var_A[flag_set]
20 ve = var_E[flag_set]
21 r = y_ - y_h
22 y_ - y_b
23 vloc_unexplain = w * y_.var()
24 if y_.var() < 10e-5:
25 vloc_unexplain = 10e-5
26 vloc_explain = w * np.power(y_b - y.mean(), 2).mean()
28 vtot = np.power(y - y.mean(), 2).mean()
29 array = np.array(
30 [
31 np.power(y_h - y_b, 2).mean() + (2 * r * (y_h - y_b)).mean(),
32 np.power(r, 2).mean(),
33 va.mean(),
34 ve.mean(),
35 ]
36 )
38 array_bis = np.array(
39 [
40 (vloc_unexplain + vloc_explain) / w,
41 vloc_explain / w,
42 np.power(y_h - y_b, 2).mean() + (2 * r * (y_h - y_b)).mean(),
43 np.power(r, 2).mean(),
44 va.mean(),
45 ve.mean(),
46 ]
47 )
48 print(
49 n,
50 "%data",
51 np.round(w * 100, 1),
52 "Explain_ctx :",
53 np.round(array * w / (vloc_unexplain), 3),
54 "Explain_glob :",
55 np.round(array_bis * w / vtot, 3),
56 )
57 return ()
60def evaluate(y, output, list_metrics, list_sets=None, context=None, verbose=False):
61 list_perf = []
62 if list_sets is None:
63 list_sets = [np.ones(len(y)) == 1]
64 for metrics_ in list_metrics:
65 list_perf.append(metrics_.compute(y, output, list_sets, context))
66 if verbose:
67 print(metrics_.name, list_perf[-1])
69 return list_perf
72def compute_perf(Y_, pred, sigma, test):
73 # Compare mutli-performance for MSE et UQ coverage compare to naive baseline
74 perf_baseline = []
75 perf_baseline1 = []
76 perf_modele = []
77 pref_cov = []
78 pref_sharp = []
79 for i in range(pred.shape[1]):
80 std_min = Y_[test, i].std() + 0.000001
81 env_bot, env_top = compute_born(pred, sigma, 0.1)
83 perf_baseline.append(
84 metrics.mean_absolute_error(Y_[test, i], np.roll(Y_[test, i], 1)) / std_min
85 )
86 mean_MA = (
87 np.roll(Y_[test, i], -1)
88 + np.roll(Y_[test, i], -2)
89 + np.roll(Y_[test, i], -3)
90 + np.roll(Y_[test, i], -4)
91 ) / 4
93 perf_baseline1.append(
94 metrics.mean_absolute_error(Y_[test, i], mean_MA) / std_min
95 )
96 perf_modele.append(
97 metrics.mean_absolute_error(Y_[test, i], pred[test, i]) / std_min
98 )
99 pref_cov.append(
100 np.round(
101 metrics.average_coverage(
102 Y_[test, i], env_bot[test, i], env_top[test, i]
103 ),
104 2,
105 )
106 )
107 pref_sharp.append(
108 np.round(
109 metrics.sharpness(env_bot[test, i], env_top[test, i])
110 / Y_[test, i].std(),
111 2,
112 )
113 )
115 print("temoin0_mae_r", np.round(np.array(perf_baseline), 2).tolist())
116 print("temoin1_mae_r", np.round(np.array(perf_baseline1), 2).tolist())
117 print("mae_r", np.round(np.array(perf_modele), 2).tolist())
118 print("cover", pref_cov)
119 print("sharp", pref_sharp)