15-Minute Features
Overview
The 15-minute resolution approaches (pure15 and hybrid15) require features adapted to quarter-hourly time steps. This page documents the modifications to the standard hourly feature set that enable sub-hourly forecasting.
Quarter-of-Day Encoding
The standard 24-period hour cycle is replaced by a 96-period quarter-of-day cycle:
quarter_of_day = hour × 4 + minute ÷ 15
Examples: 00:00 → quarter 0 06:30 → quarter 26 12:45 → quarter 51 23:45 → quarter 95Encoded as sin/cos:
target_quarter_sin = sin(2π × quarter / 96)target_quarter_cos = cos(2π × quarter / 96)This 96-period cycle captures intra-hour patterns that the 24-period hourly cycle misses, such as solar generation ramping within an hour or demand fluctuations at quarter-hourly resolution.
Rescaled Lag Features
All lag features are rescaled from hourly steps to 15-minute steps:
| Feature | Hourly (steps) | 15-Minute (steps) | Real Time |
|---|---|---|---|
| 1-hour lag | shift(1) | shift(4) | 1 hour |
| 2-hour lag | shift(2) | shift(8) | 2 hours |
| 3-hour lag | shift(3) | shift(12) | 3 hours |
| 24-hour lag | shift(24) | shift(96) | 24 hours |
| 48-hour lag | shift(48) | shift(192) | 48 hours |
| 168-hour lag | shift(168) | shift(672) | 7 days |
Additional Sub-Hourly Lags
The 15-minute approaches add lags not available in the hourly model:
| Feature | Steps | Real Time | Purpose |
|---|---|---|---|
price_lag_15m | shift(1) | 15 minutes | Very short-term momentum |
price_lag_30m | shift(2) | 30 minutes | Intra-hour trend |
price_lag_45m | shift(3) | 45 minutes | Within-hour context |
Rescaled Rolling Statistics
Rolling windows are similarly rescaled:
| Feature | Hourly Window | 15-Minute Window | Real Time |
|---|---|---|---|
| Rolling mean 24h | 24 steps | 96 steps | 24 hours |
| Rolling mean 7d | 168 steps | 672 steps | 7 days |
| Rolling std 24h | 24 steps | 96 steps | 24 hours |
| Rolling std 7d | 168 steps | 672 steps | 7 days |
Demand Ramp Features
15-minute resolution enables demand ramp features that are impossible at hourly resolution:
demand_ramp_15m = demand - demand_lag_15m (15-minute change)demand_ramp_1h = demand - demand_lag_1h (1-hour change)Rapid demand increases within an hour signal potential price spikes from fast-ramping generators. These short-term ramp signals are particularly valuable during:
- Morning demand ramp-up (07:00–09:00)
- Evening solar dropout (17:00–19:00)
- Industrial shift changes
Approach-Specific Differences
Expanded Approach
The expanded approach does not use 15-minute features — it uses standard hourly features and replicates outputs. Quarter-of-day encoding and sub-hourly lags are not needed because the model operates at hourly resolution.
Pure15 Approach
Uses only native 15-minute features:
- All lags from the
ree_15mintable - Quarter-of-day encoding
- Sub-hourly demand ramps
- No hourly-only indicators (interconnections excluded)
Hybrid15 Approach
Uses both:
- Native 15-minute features (lags, demand ramps, quarter encoding)
- Hourly features expanded to 15-minute resolution (interconnections, weather, commodities repeated 4× per hour)
Training Data Volume
15-minute resolution creates 4× more data points per day:
| Resolution | Points per day | 7-day horizon | 1-year training |
|---|---|---|---|
| Hourly | 24 | 168 | ~8,760 |
| 15-minute | 96 | 672 | ~35,040 |
To manage this, the training pipeline uses origin step optimization — sampling origins every 4th 15-minute step (i.e., at hourly intervals) to reduce training set size by 75% while maintaining coverage.
Minimum History Requirement
15-minute models require a warmup period of 672 steps (7 days × 96 steps/day) before the 7-day lag features are available. The first 672 rows of 15-minute data are dropped from every training set.