A large log, a short series
After aggregating OTTO session events, I had 672 consecutive hourly observations: about four weeks. The task uses 168 hours of history to predict 24 hourly cart and order counts.
Product identifiers are deliberately excluded. This is aggregate hourly activity forecasting, rather than SKU-level demand prediction.
How I chose the model
I compared eight approaches across three chronological development folds. Neural models used five fixed seeds. Preprocessing was fitted on training data, and target windows respected split boundaries. The final 96 hours remained separate from model selection.
The selection criterion was mean CV WAPE across carts and orders. It selected the 168-hour seasonal baseline at 13.93%.
| Method | WAPE |
|---|---|
| Seasonal naive 168h | 13.93% |
| Seasonal blend 24h+168h | 13.99% |
| Extra Trees | 14.35% |
| GRU | 15.42% |
| Ridge | 16.79% |
| Transformer | 17.67% |
| Seasonal naive 24h | 19.17% |
| Persistence | 70.27% |
Results on the final 96 hours
The selected baseline reached 9.80% carts WAPE and 11.34% orders WAPE on the final holdout.
| Target | Weekly seasonal WAPE |
|---|---|
| Carts | 9.80% |
| Orders | 11.34% |
The baseline was not best on every target. Ridge had a lower carts WAPE of 8.90%, but a higher orders WAPE of 12.18%. I retained the winner selected by the predefined development rule instead of changing it after seeing the final test.
How the Transformer performed
The Transformer reached 17.67% mean CV WAPE. I kept the implementation, repeated-seed comparisons, and ablations in the repository so the result can be checked.
The ablation study uses a lighter evaluation protocol, so its results are interpreted within that study. The lesson is specific to this experiment; it does not show that seasonal rules always beat Transformers.
Limits of four weeks of data
Four weeks do not establish monthly, holiday or promotion behavior. The dataset also lacks price, inventory and marketing context. Prediction intervals are empirical uncertainty estimates, rather than guaranteed future coverage.
The repository records configuration, split boundaries and generated results. AI-assisted debugging, review and language editing are disclosed there.
Source & evidence
Code, experiment results, and implementation notes.