Skip to content

Commit 48ab6d9

Browse files
committed
add_example
1 parent 593b703 commit 48ab6d9

File tree

2 files changed

+1674
-28
lines changed

2 files changed

+1674
-28
lines changed

hierarchicalforecast/core.py

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,8 @@ def _compute_coherence_residual(
3636
Returns:
3737
Coherence residual array with same shape as y.
3838
"""
39-
if y.ndim == 1:
40-
y_bottom = y[idx_bottom]
41-
y_implied = S @ y_bottom
42-
else:
43-
y_bottom = y[idx_bottom, :]
44-
y_implied = S @ y_bottom
39+
y_bottom = y[idx_bottom]
40+
y_implied = S @ y_bottom
4541
return y - y_implied
4642

4743

@@ -65,33 +61,27 @@ def _compute_diagnostics_for_level(
6561
Dictionary of metric names to values.
6662
"""
6763
# Extract level data
68-
y_before_level = y_before[level_indices, :].flatten()
69-
y_after_level = y_after[level_indices, :].flatten()
70-
residual_before_level = residual_before[level_indices, :].flatten()
71-
residual_after_level = residual_after[level_indices, :].flatten()
64+
y_before_level = y_before[level_indices].flatten()
65+
y_after_level = y_after[level_indices].flatten()
66+
residual_before_level = residual_before[level_indices].flatten()
67+
residual_after_level = residual_after[level_indices].flatten()
7268

7369
# Adjustments
7470
adjustment = y_after_level - y_before_level
7571

7672
metrics = {
77-
"coherence_residual_mae_before": float(np.mean(np.abs(residual_before_level))),
78-
"coherence_residual_rmse_before": float(
79-
np.sqrt(np.mean(residual_before_level**2))
80-
),
81-
"coherence_residual_mae_after": float(np.mean(np.abs(residual_after_level))),
82-
"coherence_residual_rmse_after": float(
83-
np.sqrt(np.mean(residual_after_level**2))
84-
),
85-
"adjustment_mae": float(np.mean(np.abs(adjustment))),
86-
"adjustment_rmse": float(np.sqrt(np.mean(adjustment**2))),
87-
"adjustment_max": float(np.max(np.abs(adjustment))),
88-
"adjustment_mean": float(np.mean(adjustment)),
89-
"negative_count_before": int(np.sum(y_before_level < 0)),
90-
"negative_count_after": int(np.sum(y_after_level < 0)),
91-
"negative_introduced": int(
92-
np.sum((y_before_level >= 0) & (y_after_level < 0))
93-
),
94-
"negative_removed": int(np.sum((y_before_level < 0) & (y_after_level >= 0))),
73+
"coherence_residual_mae_before": np.mean(np.abs(residual_before_level), dtype=np.float64),
74+
"coherence_residual_rmse_before": np.sqrt(np.mean(residual_before_level**2), dtype=np.float64),
75+
"coherence_residual_mae_after": np.mean(np.abs(residual_after_level), dtype=np.float64),
76+
"coherence_residual_rmse_after": np.sqrt(np.mean(residual_after_level**2), dtype=np.float64),
77+
"adjustment_mae": np.mean(np.abs(adjustment), dtype=np.float64),
78+
"adjustment_rmse": np.sqrt(np.mean(adjustment**2), dtype=np.float64),
79+
"adjustment_max": np.max(np.abs(adjustment, dtype=np.float64)),
80+
"adjustment_mean": np.mean(adjustment, dtype=np.float64),
81+
"negative_count_before": np.sum(y_before_level < 0, dtype=np.int64),
82+
"negative_count_after": np.sum(y_after_level < 0, dtype=np.int64),
83+
"negative_introduced": np.sum((y_before_level >= 0) & (y_after_level < 0), dtype=np.int64),
84+
"negative_removed": np.sum((y_before_level < 0) & (y_after_level >= 0), dtype=np.int64),
9585
}
9686
return metrics
9787

0 commit comments

Comments
 (0)