BC AIRCAST
PM2.5 · 24 H AHEAD
← ForecastModel & methodseval loop · live scoring
MODEL & METHODS

More information on our Model.

A PyTorch LSTM reads the last 48 hours of sensor and weather data and predicts PM2.5 one full day ahead, for three BC monitoring stations.

2.790 MAE
held-out future test, µg/m³ — best of all four models (RMSE 4.138, also best)
17.6%
RMSE vs the naive same-hour-yesterday forecast
3.2%
RMSE vs a tuned XGBoost trained on the same windows
live rolling 7-day MAE across stations
Four models, same exam
All scored on the same held-out future test period. Lower is better.
Climatology
typical value for this hour of day
5.294 RMSE 4.094 MAE
Seasonal persistence
same as this hour yesterday
5.019 RMSE 2.879 MAE
XGBoost (tuned)
gradient-boosted trees on the flattened window
4.276 RMSE 2.847 MAE
LSTM — ours
48 h × 13 features → 64 hidden units
4.138 RMSE 2.790 MAE
17.6% RMSE vs naive3.2% RMSE vs tuned XGBoostbest MAE and best RMSE

How to read this: persistence has decent MAE but the worst RMSE of the serious models — copying yesterday is catastrophicallywrong exactly when conditions change, which is when a forecast matters. The LSTM's RMSE margin comes from handling those volatile hours, not from shaving decimals on calm days.

Live, in production
Rolling 7-day MAE from the eval loop — no split, no lab conditions.
Prince George
Plaza 400 · sensor 4098
LSTM
naive
Vancouver
Clark Drive · sensor 9146190
LSTM
naive
Kelowna
KLO Road · sensor 1325038
LSTM
naive
The methodology check
The naive baseline's live MAE can be compared directly with its offline test value (2.88) — the closer they track, the stronger the evidence that the offline evaluation reflects production reality rather than fooling itself.
MAE — mean absolute error
Take every forecast, measure how far off it was, average. “Our forecasts are off by 2.8 µg/m³ on average.” The most interpretable metric — same unit as PM2.5 itself. For scale: a clean day is ~2–10, “unhealthy for sensitive groups” starts at 35.4, severe wildfire smoke exceeds 150.
RMSE — root mean squared error
Squares errors before averaging, so being wrong by 10 counts 100× more than being wrong by 1. The gap between RMSE and MAE reveals spikes — and for wildfire smoke, the spike days are exactly the days that matter for health. That's why both are reported.
PyTorchSnowflakedbtWeights & BiasesPostgresOpenAQOpen-Meteo
← Back to the live forecast