All Projects
Time Series
Hourly Energy Consumption Forecasting
10-model benchmark on 145,366 PJM hourly records (2002–2018). LightGBM best: MAE=210.8 MW, RMSE=285.4 MW, MAPE=0.66%. Prophet fails (MAPE=10.25%). BiLSTM MAPE=2.17%. 26 lag/rolling/cyclical features.
210.8 MW
LightGBM MAE
0.66%
LightGBM MAPE
10.25%
Prophet MAPE
2.17%
BiLSTM MAPE
Dataset
PJME: 145,366 hourly records (2002–2018)
Approach
26 lag/rolling/cyclical features → 10-model benchmark from naive baselines to BiLSTM
Tech Stack
PythonLightGBMXGBoostTensorFlow/BiLSTMProphetstatsmodels
Keywords
LightGBMXGBoostBiLSTMProphetLag FeaturesEnergy Forecasting
Visualizations4 Charts
Deep Dive
10-model time series benchmark for PJM hourly energy demand.
Dataset
- ▸PJME: 145,366 hourly records, 2002-01-01 to 2018-08-03
- ▸Range: 14,544–62,009 MW. Train: 85% / Test: last ~1 year (8,760 rows)
Feature Engineering (26 features)
| Category | Features |
|---|---|
| Lag | lag_1h, lag_24h, lag_168h (1 week) |
| Rolling stats | mean_24h, std_24h, mean_168h, std_168h |
| Cyclical | sin/cos(hour), sin/cos(DOW), sin/cos(month) |
| Calendar | is_weekend, is_holiday |
All 10 Models
| Model | MAE (MW) | RMSE (MW) | MAPE |
|---|---|---|---|
| Naive (last value) | 5,205 | 5,908 | 16.5% |
| Seasonal Naive (1W) | 3,588 | 4,856 | 11.2% |
| Moving Average | 2,874 | 3,643 | 9.2% |
| Linear Regression | 380 | 519 | 1.2% |
| Random Forest | 348 | 465 | 1.1% |
| Prophet | 3,248 | 4,231 | 10.3% |
| BiLSTM | 699 | 917 | 2.2% |
| XGBoost | 222 | 300 | 0.70% |
| LightGBM | 211 | 285 | 0.66% |
Key Insights
- ▸Tree models with lag features MAPE < 1% vs Prophet's 10%+
- ▸Prophet cannot leverage the strong lag-24h autocorrelation
- ▸BiLSTM underperforms XGBoost despite more parameters — engineered lags encode temporal structure better than learned recurrence
- ▸Top LightGBM features: lag_1h, hour_cos, hour (immediate past + time-of-day)