Global tree forecasters collapse at the hierarchical aggregate: a five-panel failure characterization
Organizations: Field Nation LLC, Minneapolis, MN, USA
Abstract
Global forecasting models pool many series and learn one shared function. Gradient-boosted trees are their most common form. We measure a failure of this design that has not, to our knowledge, been documented. Train a global tree on the individual series of a hierarchy, then ask it for the hierarchical aggregate. The aggregate sits far outside the model's training range, and the forecast collapses. The model under-predicts the total by 30-50x in our production deployment, and by up to 496x in a public M5 reconstruction. The mechanism is known: beyond its training range, a tree predicts a constant. It surfaces at the aggregate because the total dwarfs every training series. The cure is not new. Per-series scaling, the preprocessing step that Montero-Manso and Hyndman (2021) recommend, prevents the collapse. So do a weighted aggregate-level training row and seasonal differencing. Our contribution is the characterization. The collapse reproduces on five panels: a production business-to-business marketplace, a synthetic hierarchy, M5, Australian Tourism, and a public business-buyer panel. It holds on three tree libraries, is invariant across training seeds, and is statistically significant. Its onset is immediate and tracks a simple support bound: a scale gap of only 1.15x already costs a third of the total. No standard configuration change prevents it: pooling every hierarchy level into training fails at scale, and the one knob that fits linear models in the leaves softens it without curing it. Rolling the forecasts forward recursively separates the cures: the aggregate-row cure re-collapses, per-series scaling degrades but stays low, and only seasonal differencing keeps its one-step accuracy unchanged. We close with a three-step procedure for diagnosing and preventing the failure in deployed systems.
Figures & tables
| Panel | Loss | Gap | Implied floor | Measured MAPE |
|---|---|---|---|---|
| Synthetic | MAE | |||
| Synthetic | RMSE | |||
| Australian Tourism | MAE | |||
| Australian Tourism | RMSE | |||
| M5 | MAE | |||
| M5 | RMSE |
| Configuration | One-step aggregate MAPE |
|---|---|
| Baseline: absolute lags, MAE, per-buyer only | 94.7% |
| (a) target/lags | 94.5% |
| (b) RMSE loss on log scale | 95.4% |
| (c) cohort-weighted aggregate row | 17.5% |
| (d) recursive guardrail (full fix) | 17.5% |
| Configuration | Synthetic | Production | Role |
|---|---|---|---|
| Full fix (reference) | 17.5% | 15.1% | — |
| (c) cohort-weighted aggregate row | 95.4% | 97.8% | load-bearing |
| (b) RMSE loss (use MAE) | 202% | 99.6% | load-bearing |
| cohort weight only (row kept) | 31.1% | 79.6% | decisive at extreme gap |
| (a) transform | 15.7% | 18.6% | refinement |
| (d) recursive guardrail | 17.5% | 15.1% | dormant guardrail |
| Dataset | Baseline | Per-series | Cohort row | Seasonal diff. |
|---|---|---|---|---|
| One-step aggregate MAPE | ||||
| Synthetic | ||||
| Production | ||||
| M5 | ||||
| Tourism | ||||
| Recursive aggregate MAPE | ||||
| Configuration / library | Baseline | Four-component fix |
|---|---|---|
| LightGBM (ablation) | 99.8% | 14.1% |
| XGBoost | 99.9% | 6.3% |
| CatBoost | 99.8% | 16.8% |
| Configuration / library | MAPE | MASE |
|---|---|---|
| Baseline (LightGBM, no fix) | 96.2% | 16.4 |
| Full fix — LightGBM | 14.0% | 2.30 |
| Full fix — XGBoost | 5.2% | 0.90 |
| Full fix — CatBoost | 11.0% | 1.84 |
| Panel | Domain | Scale gap | Baseline | Full fix |
|---|---|---|---|---|
| Synthetic | hierarchical sim. | |||
| Production | B2B field service | – | ||
| M5 | retail (Walmart) | |||
| Australian Tourism | visitor nights | |||
| UCI Online Retail II | B2B wholesale |
| Rolling | Diebold–Mariano | Wilcoxon | Mean MAPE | ||
|---|---|---|---|---|---|
| Dataset | origins | one-step | recursive | base fix | |
| Production | 12 | ||||
| Tourism | 24 | ||||
| M5 | 10 | ||||
| Model | Mean sd | Range | Reading |
|---|---|---|---|
| CatBoost (no cohort wt.) | 89.1–92.9 | collapses every seed | |
| XGBoost (cohort-wt.) | 11.1–18.3 | stable, never collapses | |
| LightGBM (cohort-wt.) | 15.7–49.8 | forecasts agg. every seed |
| Probe / intervention | Outcome |
|---|---|
| Training-window length ( – mo) | Not a cure: the baseline collapses at every length. |
| Entity id hyperparameter sweep richer features | Still collapsed ( – ): a training-support property, not a capacity one. |
| Direct (non-recursive) horizons; largest-decile segmentation | Remove recursive drift but still need a scale cure. |
| Pooling all hierarchy levels into training | Cures a small hierarchy (Tourism ) but fails at M5 scale ( ): the in-support rows are washed out. |
| Tweedie loss; self-contained post-hoc multiplier | Neither cures: the residual re-collapse is a slope, not a level, problem. |
| Linear-leaf trees ( linear_tree ), incl. a linear_lambda sweep | Partial, inconsistent mitigation at every regularization: under MAE; – one-step under RMSE, seed-fragile. |