Tomorrow's Ontario power prices, with honest uncertainty
GridCast is a machine-learning forecasting system. Every morning at 9:00 Toronto time, before the day-ahead market's 10:00 bid deadline, it predicts the next day's 24 hourly Ontario electricity prices as a full probability distribution, then scores itself against the actual prices.
Private preview: sample data, not publishedForecast for –
Day-ahead Ontario Zonal Price, $/MWh. Issued – Toronto time · verifiable record
Average of hourly medians
–
per MWh
Most expensive hour (median)
–
Cheapest hour (median)
–
- Median forecast
- 50% range
- 90% range
- 98% range
View as table
Track record
Published forecasts scored against actual day-ahead prices. Last 30 days unless fewer exist.
Forecasts published
–
CRPS (lower is better)
–
Average error of the median
–
Hours inside the 90% range
–
target: 90%
- Actual price
- Median forecast
- 90% range
How it works
- Collect the data. A Python pipeline (httpx, lxml) on an Azure Linux server snapshots the grid operator's public market reports every hour and keeps every version, because most disappear after 30–90 days. Over 13,000 raw files so far, parsed into 12 validated tables (pandas, Pandera, Apache Parquet) and analysed with DuckDB SQL.
- Engineer features. Lagged prices, demand, generation by fuel, imports and exports, holidays, and weather forecasts for eight Ontario cities. Every input carries the time it became public, so the model only sees what was known at 9:00; property-based tests (pytest, Hypothesis) check this on every code change.
- Predict. A LightGBM gradient-boosted quantile regression model predicts 21 quantiles for every hour, with hyperparameters tuned by Optuna on validation data only. Conformalized quantile regression (CQR) then calibrates the ranges, so a 90% range holds about 90% of actual prices.
- Publish and score. Each forecast is committed to a public, append-only Git log before 10:00. Once the actual prices are out, it's scored with CRPS, mean absolute error and interval coverage, good days and bad.
In a rolling-origin backtest on held-out validation months, LightGBM beat LASSO regression (scikit-learn), SARIMAX (statsmodels) and naive baselines. The comparison and statistical tests are on the Research page, and the full toolkit is on Data & methods.