Applied machine learning / South Florida
Predicting tomorrow’s air.
Measuring what works.
Living in South Florida gave this project a practical focus: can historical air-quality observations and weather improve next-day PM2.5 predictions at Broward County monitors?
This is a retrospective research project. It explores 2025 predictions using revised pollutant observations and historical weather, not forecasts issued in real time.
The work behind the model
I built the project around reproducibility: source files are cached with hashes, station dates stay on their actual calendar, and model inputs are separated from the following day’s target. The pipeline audits 390 Florida DEP monthly reports and selects method-checked EPA observations for the modeling labels.
Instrument corrections mattered. The EPA data includes different measurement methods, so I selected corrected or network-aligned PM2.5 records and required sufficient hourly coverage. I kept missing observations visible instead of filling target gaps.
From records to predictions
- Collect and audit DEP reports; select EPA daily PM2.5 using method and completeness rules.
- Align observations with ERA5 weather using a fixed UTC−5 day.
- Build features through day t: recent pollution, calendar lags, rolling history, seasonality and weather.
- Train through 2023, select using 2024, then refit through 2024 and evaluate 2025.
- Compare with persistence, which predicts tomorrow equals today, on identical eligible dates.
All preprocessing is fitted within the training period. The newly opened Pompano station is reported separately because it has no earlier training history.
What the evaluation showed
Gradient boosting won the 2024 validation comparison. Across five established stations in 2025, it reduced mean absolute error by about 2.3% versus persistence. The simpler pollution-only ridge model performed better in that test year, so adding weather did not produce a consistent advantage.
| Candidate | Average absolute error |
|---|---|
| Persistence | 1.466 |
| Pollution-only ridge | 1.410 |
| Ridge with weather | 1.431 |
| Gradient boosting (validation-selected) | 1.433 |
Where it falls short
All three regression candidates beat persistence in four earlier annual comparisons, but the results vary by station and season. Persistence still wins at Coconut Creek and Vista View in 2025.
Peak pollution is the larger challenge. On 113 station-days above the training-period 90th-percentile concentration cutoff, boosting underpredicted by 3.95 µg/m³ on average. That cutoff is a relative research grouping, not a health category. The demo keeps observed values and the baseline visible so an overall score does not hide these misses.
ERA5 weather arrives with delay and can be revised. Combined with corrected pollutant histories, this means the experiment cannot establish real-time forecasting performance. Any further model choices informed by these results need a new untouched evaluation period.
Making the results usable
The saved model reproduces all 1,910 original test predictions. A command-line replay displays an eligible station/date prediction, its observed outcome and persistence comparison. The browser explorer presents the same results with station and month selectors, daily values and visible calendar gaps.
Offline tests cover parsing, method selection, calendar alignment, missing values, training boundaries and exported demo data. The repository includes a Windows/Linux GitHub Actions workflow, an architecture diagram and a model card.
Sources and attribution
Public observations come from US EPA AirData, with Florida DEP monthly reports used for the coverage audit. Historical weather comes from Open-Meteo and Copernicus ECMWF ERA5 under CC BY 4.0. The project transforms those inputs into aligned training examples and historical predictions.