Horizon Groups
Horizon groups define which hours share a single trained model. Rather than training one model per hour (fragmenting data) or one model for all hours (losing specialization), EPF groups hours with similar predictability characteristics.
Day-Ahead Groups
Used by the D+1 Day-Ahead product, generated at ~10:00 UTC:
| Group | Hours Ahead | Target Period | Hours |
|---|---|---|---|
| DA1 | 14–25 | D+1 00:00–11:00 | 12 |
| DA2 | 26–37 | D+1 12:00–23:00 | 12 |
The split at noon reflects the distinct price dynamics of morning (rising demand, renewable ramp-up) versus afternoon/evening (peak demand, solar decline).
Strategic Groups
Used by the D+2–D+7 Strategic product, generated at ~15:00 UTC:
| Group | Hours Ahead | Target Period | Hours |
|---|---|---|---|
| S1 | 33–56 | D+2 full day | 24 |
| S2 | 57–80 | D+3 full day | 24 |
| S3 | 81–104 | D+4 full day | 24 |
| S4 | 105–128 | D+5 full day | 24 |
| S5 | 129–176 | D+6 and D+7 | 48 |
S1 through S4 each cover a single day. S5 combines the final two days into one group because predictability at this distance is similar and merging increases the training data available to the model.
15-Minute Resolution Groups
For 15-minute forecasting, the same structure applies but with quarter-hour slots:
15-Min Day-Ahead
| Group | Quarters Ahead | Target Period | Slots |
|---|---|---|---|
| DA1 | 56–103 | D+1 00:00–11:45 | 48 |
| DA2 | 104–151 | D+1 12:00–23:45 | 48 |
15-Min Strategic
| Group | Quarters Ahead | Target Period | Slots |
|---|---|---|---|
| S1 | 132–227 | D+2 full day | 96 |
| S2 | 228–323 | D+3 full day | 96 |
| S3 | 324–419 | D+4 full day | 96 |
| S4 | 420–515 | D+5 full day | 96 |
| S5 | 516–707 | D+6 and D+7 | 192 |
How Groups Interact with Models
Each horizon group trains independently. For the full system:
- Day-ahead: 2 groups × 3 model types = 6 models
- Strategic: 5 groups × 3 model types = 15 models
- Total: 21 models per resolution
At inference, the hours_ahead (or quarters_ahead) feature is included in the feature vector, allowing the model to differentiate between individual hours within the same group. This means the DA1 model can produce different predictions for hour 14 vs. hour 25, even though they share the same trained model.
Model Artifact Naming
Models are saved as joblib files with a consistent naming convention:
direct_model_{model_type}_{suffix}_{version}.joblibExamples:
direct_model_histgb_dayahead_2026-02-12.joblibdirect_model_xgboost_strategic_2026-02-12.joblibdirect_model_lightgbm_15min_pure_dayahead_2026-02-12.joblib
Legacy Groups
For backward compatibility, the original 8-group hourly system (H1–H8) and 7-group daily 15-min system (D1–D7) are still supported. These are used when run_mode is not specified:
| Group | Hours | Description |
|---|---|---|
| H1 | 1–6 | Very short term |
| H2 | 7–12 | Same day remaining |
| H3 | 13–24 | Next day |
| H4 | 25–48 | Day 2 |
| H5 | 49–72 | Day 3 |
| H6 | 73–96 | Day 4 |
| H7 | 97–120 | Day 5 |
| H8 | 121–168 | Days 6–7 |
The two-product system (DA/S groups) supersedes these for production use.