Inspiration

Singapore measures heat stress at 30 stations every 15 minutes, and anyone can read it. But those readings are not linked to where vulnerable seniors live. On a dangerously hot day, an outreach coordinator still cannot answer the one question that matters: who do we check on first?

The numbers made it hard to ignore. 88,400 seniors aged 65+ live alone, more than double the 41,200 of 2015. Only 32.6% of households in 1- and 2-room HDB flats have air-conditioning, against 81.9% nationally. And 2025 saw 29 days of high heat stress, with WBGT peaking at a record 35.0°C on 31 October.

What it does

HeatGuard turns NEA's live heat-stress data into a daily "who to check on" list for Silver Generation Office coordinators and Active Ageing Centre befrienders.

Each subzone gets a Heat Risk Score built from three things: forecast heat, vulnerable seniors, and distance to a cooling space.

The output is The Morning Brief, one dashboard page:

  • A map with a Low, Moderate or High tier for every subzone, today and tomorrow, using NEA's own heat-stress bands (High is a WBGT of 33°C or more).
  • The Top 10 subzones to check on, why each one ranks, and its nearest cooling space.
  • A Genie space for plain-English questions.

How we will build it

Everything runs on Databricks and is sized for Free Edition.

  1. Ingestion. A scheduled Lakeflow Job calls the NEA real-time APIs on data.gov.sg and lands raw JSON in a Unity Catalog volume. Auto Loader picks up new files.
  2. Transform. One Lakeflow pipeline builds Bronze, Silver and Gold Delta tables, with data-quality expectations for sensor gaps and out-of-range readings. Gold holds one row per subzone per day.
  3. Model. A next-day WBGT forecast per station, tracked in MLflow against a "same as yesterday" baseline. If it does not beat the baseline, we ship the baseline and say so.
  4. Output. An AI/BI Dashboard and Genie space on top of Gold.

Data: NEA WBGT, air temperature, humidity, rainfall and 24-hour forecast; SingStat residents by subzone, age and type of dwelling; community clubs, residents' committees, eldercare services and URA subzone boundaries.

Challenges we ran into

  • No outcome labels. Open data has no record of who fell ill from heat, so a trained "risk model" would be fiction. We made the score a transparent index and put the machine learning in the forecast, where tomorrow's observed WBGT is a real label.
  • No air-con data by neighbourhood. We use flat type as the signal, weighting seniors in 1- and 2-room flats.
  • Outdoor sensors, indoor risk. Stations sit outdoors and only approximate conditions inside a flat. We state this limit openly.
  • Uneven history. WBGT history starts on 11 February 2025 and the station network has grown, so the backtest window is short.

How we will know it works

We will backtest on data since February 2025: how much of seniors' next-day heat exposure falls inside our Top 10, compared with a Top 10 picked by senior headcount alone. If HeatGuard cannot beat the headcount ranking, it has not earned its place.

Accomplishments that we're proud of

  • Every number in our pitch is traced to a primary source (SingStat, MSS, NPTD, MSE, a peer-reviewed study), and we corrected a claim in the brief itself rather than repeat it.
  • We checked the live NEA WBGT feed before designing around it: 30 stations, every 15 minutes, no login.
  • The idea has a test it can fail. Our Top 10 must beat a ranking by senior headcount, and our forecast must beat "same as yesterday".
  • The whole architecture fits Databricks Free Edition: one job, one pipeline, one SQL warehouse.
  • We narrowed a broad "heat map" brief to one user and one decision: which neighbourhoods get today's welfare checks first.

What we learned

  • Check the brief against the source. 2025 is often called Singapore's hottest year, but MSS ranks it joint 8th warmest. Its heat-stress record is the accurate and more specific claim, so we used that.
  • The most obvious dataset is not always usable. The HDB elderly population table stops at 2018 and is by town, so we lead with SingStat's annual subzone table instead.
  • Be honest about where ML belongs. With no health outcome labels in open data, the risk score is a transparent index and the model is the forecast.
  • A ranked list changes a decision. A map on its own does not.

What's next for HeatGuard by Swaggers

  • Week 1: live ingestion, Bronze to Gold pipeline, history backfill, Heat Risk Score and dashboard v1.
  • Week 2: forecast against baseline, tiers, Top 10, backtest, Genie space and demo video.
  • Stretch: a Databricks App for a what-if on placing new cooling spaces.
  • Beyond the sprint: a pilot with an Active Ageing Centre, measuring welfare checks completed on High heat-stress days.

Built With

  • auto-loader
  • data-lake
  • data.gov.sg
  • databricks
  • databricks-sql
  • genie
  • mlflow
  • pyspark
  • python
  • singstat
  • sql
  • unity-catalog
Share this project:

Updates

Submission history